基于430单片机的频率计设计

合集下载

430实现频率的检测

430实现频率的检测

1 引言由于频率信号具有抗干扰性强、易于传输、测量准确度较高等优点,因此许多非频率量的传感信号都转换为频率量来进行测量和处理。

因此频率测量方法愈来愈引起关注和研究。

频率测量是测量和控制系统领域的最基本测量之一。

当今用的最多的测量信号频率的仪器是频率计,由于频率计在测量过程中需要一个时基信号作为测量信号频率的时基。

时基信号一般是由本机振荡电路发生的,尽管现在多用石英晶体振荡器,但是仍然不能保证时基信号的精度,因此频率计的测量精度也就成了问题。

传统的频率测量方法有两种[1]:一种是测频法,在一定时间间隔T内测出待测信号重复变化次数N,频率即为;另一种方法是测周法,在被测信号的一个周期内测出标准高频信号f的个数N,则被测频率。

本文介绍了一种测宽法[2],借助光电耦合原理,将交流信号转变成周期脉冲信号,通过捕获脉冲信号的下降沿,由定时器计数,通过二次计数的差值便能得到脉冲信号的周期,进而可以计算出所测交流信号的频率。

2 硬件电路设计硬件电路完成的任务是:(1)模拟电路部分的设计,其功能是进行信号的转化。

交流信号通过整流桥、光电耦合器等模拟器件便能得到周期脉冲信号。

(2)数字电路部分的设计,其功能是进行信号的检测。

MSP430单片机内部的16位定时器A具有脉冲捕获功能,能将脉冲信号的占空比检测出来。

图1为它的基本结构图。

图1 系统的基本结构2.1 模拟电路部分的设计图2为模拟部分原理。

下面主要阐述该电路的工作原理:图2模拟部分原理图考虑到交流信号中可能含有一定的直流信号,而直流信号会引起交流波形的上移或下移,这可能会导致原有交流信号没有零点,这就谈不上过零检测、周期脉冲了,因此要根据交流信号的实际情况,在交流信号的出口处用设个适当的电容,起到隔直的作用。

R1和R2是限流电阻,保护后面的稳压管、二极管、光电耦合器在额定功耗范围内。

由于这里的交流信号源选取的是220V市电正弦信号,所以R1和R2的阻值要比较大而且功率要比较大,该系统使用的是、1W的电阻。

基于MSP430G2553的数字频率计设计

基于MSP430G2553的数字频率计设计

基于MSP430G2553的数字频率计设计这是经过改进后的程序源码,较上次的设计相比,测频范围提高到3MHz,是因为将上次采用的IO口中断计数,改为两人TIMERB计数,通过TIMERA定时,TIMERB捕获计数,最终实现测频。

相关经验总结1、测频有两种方法:侧频法和测周法;本次设计是采用的timerA定时1S,P1.0口作为被测信号输入口,上升沿捕捉,每来一个上升沿进入IO中断,在中断服务函数里变量i 计数一次,当定时1S到时,读取变量i的值,则为被测频率;然后将数据传送到LCD和PC机显示;G2553有两个定时模块timerA和timerB,要特别注意它的寄存器的区别格式,默认的是TIMER A的。

中断向量也有两个,有优先级之分,timer0_A0 (应用于CCR0 优先级最高)timer0_A1(用于CCR1,CCR2和其他寄存器)。

2、串口通信有UART的异步通信与SPI的同步通信,也有两个通信模块,接收中断和发送中断,对应口位P1.1和P1.2。

3、MAX232在焊接时,外围的电容可以在0.1UF到10UF,没有影响,9阵的串口接线时也需要特别注意(见单片机书上179页)4、在最后的串口通信中会出现串口调试窗口中不仅显示需要的频率还会有其他的数据,这就需要传进BUFF(8位)中的数据长度不能有其他的,因此比如传一个字符串型的DA TA 进入BUFF,用到stringlen(),包含头文件sring.h。

5、重点是波特率的配置,特别是当分频系数为小数时:/***msp430g2553_LCD1602_Frequency_Detect*****grade:2010*date:2012.7.16*函数功能:测频率*管脚:P1.0作为外部频率的入口*LCD显示:P1.3 P1.5 --> RS EN P2.0--> RW P2.4->2.7 数据端口*/#include <msp430g2553.h>#include "lcd1602_4.h"unsigned long data;int i,j,h,m=0,n=0;char a[15]=" ";char *pa=a;double Freq=0; //频率测量结果存放变量double TA_OverflowCnt=0;//TA溢出次数存放变量void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT//端口设置P1SEL |=BIT0; //允许其第二功能,作为TACLK输入,即待测输入<<----设为1外围模块接口P2SEL=0x00; //设置P2为通用I/OP1DIR &=~BIT0; //P1.0(TACLK)作为输入引脚P2DIR |= 0xf1; // Set P2 to output direction 1111 0001P1DIR |= 0x28; //0111 1000 p1.3 1.5 作为LCD使能复位控制端0010 1000//initial_lcd(); //LCD初始化initLCD();TA1CCR0=65535; //A1定时1sTA1CTL = TASSEL_2 + ID_3 + TACLR + MC_1 + TAIE; // TA1信号作为基准时钟选择SMCLK作为时钟选ACLK会不会稳定点?TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2; //外部信号作为A0时钟,捕获模式TACCTL0 = CCIE; //打开A0中断捕获(该句和下一句为中断必要语句)TA1CCTL0 = CCIE; //打开A1中断捕获_EINT(); //打开全局中断for (;;){_enable_interrupts();data=(int)data;a[0]=data/100000+0x30;a[1]=data/10000%10+0x30;a[2]=data/1000%10+0x30;a[3]=data/100%10+0x30;a[4]=data/10%10+0x30;a[5]=data%10+0x30;a[6]='H';a[7]='z';a[8]='\0';for(h=5000;h>0;h--){//LCD_Disp(0,0,"f=");onLcd(0,0,"f=");//delay(100);//LCD_Disp(1,0,pa);onLcd(1,0,pa);}_disable_interrupts();}}// TA interrupt service routine计数器A0溢出中断#pragma vector=TIMER0_A0_VECTOR__interrupt void Timer_R0(void){_disable_interrupts();TA_OverflowCnt++; //TA每次溢出,溢出次数变量+1TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2;//连续计数模式,选择外部时钟_enable_interrupts();}//定时器A1中断#pragma vector=TIMER1_A0_VECTOR__interrupt void Timer_R1(void){_disable_interrupts();data = (TA_OverflowCnt*65535 + TAR)*2.30012328;//读取上次TA计数值及溢出次数,计算频率TA_OverflowCnt=0; //将溢出次数置零TA1CTL = TASSEL_2 + ID_3 + TACLR + MC_1 + TAIE; //选择子系统时钟SMCLK 四分频增计数模式TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2; //选用外部时钟连续计数模式_enable_interrupts();}。

基于单片机的频率计的设计数字频率计

基于单片机的频率计的设计数字频率计

基于单片机的频率计的设计1绪论1.1研究背景及主要研究意义频率是电子技术领域永恒的话题,电子技术领域离不开频率,一旦离开频率,电子技术的发展是不可想象的,为了得到性能更好的电子系统,科研人员在不断的研究频率,CPU 就是用频率的高低来评价性能的好坏,可见,频率在电子系统中的重要性。

频率计乂称为频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器,其最基本的工作原理为:当被测信号在特定的时间段T内的周期个数N时,则被测信号的频率£=1\!/「电子计数器是一种基础测量仪器,到目前为止已有三十多年的发展历史。

早期, 设计师们追求的目标主要是扩展测量范围,再加上提高测量精度、稳定度等,这些也是人们衡量电子计算机的技术水平,决定电子技术器价格高低的主要依据。

目前这些技术日臻完善,成熟。

应用现代技术可以轻松地将电子计数器的频率扩展到微波频段。

1.2数字频率计的发展现状随着科学技术的发展,用户对电子计数器也提出了新的要求。

对于低档产品要求使用操作方便,量程(足够)宽,可靠性高,价格低。

而对中高档产品,则要求有较高的分辨率,高精度,高稳定度,高测量速率;除通常通用计数器所具有的功能外,还要有数据处理功能,统计分析功能等等,或者包含电压测量等其他功能。

这些要求有的已经实现或者部分实现,但要真正地实现这些目标,对于生产厂家来说,还有许多工作要做,而不是表面看来似乎发展到头了。

由于微电子技术和计算机技术的发展,频率计都在不断地进步着,灵敏度不断提高,频率范围不断扩大,功能不断增加。

在测试通讯、微波器件或产品时,通常都市较复杂的信号,如含有复杂频率成分、调制的含有未知频率分量的、频率固定的变化的、纯净的或叠加有干扰的等等。

为了能正确的测量不同类型的信号,必须了解待测信号特性和各种频率测量仪器的性能。

微波技术器一般使用类型频谱分析仪的分频或混频电路,另外还包含多个时间基准、合成器、中频放大器等。

虽然所有的微波计数器都是用来完成技术任务的, 但各自厂家都有各自的一套复杂计数器的设计、使得不同型号的技术其性能和价格会有所差别,比如说一些计数器可以测量脉冲参数,并提供类似与频率分析仪的屏幕显示,对这些功能具有不同功能不同规格的众多仪器,我们应该视测试需要正确的选择以达到最经济和最佳的应用效果。

103636_基于MSP430G2553的频率计设计

103636_基于MSP430G2553的频率计设计

数字式频率计一、设计概述在电子技术中,频率是最基本的参数之一,数字频率计具有精度高、使用方便、测量迅速、以及便于实现测量过程自动化等优点,是近代电子技术领域的重要工具之一,在许多领域得到广泛应用。

本系统以超低功耗MSP430G2553单片机为核心处理芯片来测量信号的频率,通过定时器A 采用计数法完成信号频率测量,并将被测频率值通过LCD12864液晶串行显示。

频率可测量范围在1Hz 到999MHz 之间。

如需要,范围可继续扩宽,频率计的误差在1%以内。

二、原理图基于MSP430G2553的频率计设计原理图如图1所示,通过串口方式液晶显示,只需配置单片机三个口线便可以实现对频率的测量。

其中待测频率信号从P1.0口输入,然后可以直接在液晶屏上显示。

三、引脚说明(一)MSP430G2553引脚功能说明由原理图可以看出,430单片机的最小系统用到1脚电源、16脚复位端、20脚接地端、配置P1.0口为待测信号输入端,P1.4为串行数据输出口,P1.5为串行时钟输出口,如表1所示。

图1 基于MSP430G2553频率计设计原理图表1 MSP430G2553引脚功能说明引脚序号引脚名称功能说明备注1 VCC 电源正2 P1.0 频率信号输入端6 P1.4 串行数据输出端7 P1.6 串行时钟输出端16 RST 复位脚20 GND 电源地(二)LCD12864引脚功能说明LCD12864液晶显示屏用到1、2脚,电源接口线,19、20脚背光电源接口线,15脚并行/串行接口选择,5脚串行数据口,6脚串行的同步时钟。

LCD12864引脚功能如表2所示。

表2 LCD12864接口说明引脚序号引脚名称功能说明备注1 VSS 模块的电源地2 VDD 模块的电源正端4 RS(CS) 并行指令/数据选择信号;串行片选信号5 R/W(SID) 并行读写选择信号;串行的数据口6 E(CLK) 并行使能信号;串行的同步时钟15 PSB PSB并/串行接口选择:H-并行,L-串行19 LED_A 背光源正极20 LED_K 背光源负极(0V)四、软件设计流程图系统软件设计包括初始化模块、中断模块和信号频率显示模块。

基于MSP430F5438A单片机测量频率的程序实例

基于MSP430F5438A单片机测量频率的程序实例

基于MSP430F5438A单片机测量频率的程序实例基于MSP430F5438A单片机测量频率的程序实例/*****************************************************程序描述:利用Timer_A捕获脉冲宽度利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量程序用到了定时器A的CCI1A端口(MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,start,end,两个个变量来计算脉冲宽度*****************************************************/#include"msp430x14x.h"#include"lcd12864.h"uint start,end;uint width;//==用于存放脉宽==uint period;//==用于存放周期==uint frequency;//==用于存放频率==uint fy[7];//==用于存放频率显示数据==uint pd[7];//==用于存放周期显示数据==uint wh[6];//==用于存放脉宽显示数据==const unsigned char zhouqi[]={"周期为:(us) "};const unsigned char us[]={"us "};const unsigned char pinlv[]={"频率为:(Hz) "};const unsigned char hz[]={"HZ "};void process(void);//==函数声明==void delay();//==延时函数==void InitSys(); //==初始化时钟==/****************************************************主函数****************************************************/int main(void){WDTCTL = WDTPW + WDTHOLD;//==关狗==InitSys();//==初始化时钟,SMCLK,MCLK均为8M==P1DIR&=~BIT2;P1SEL = BIT2;//==设置P1.2端口为功能模块使用,即:做捕获源==TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC1;//==定时器A时钟信号选择SMCLK,8分频,同时设置定时器A计数模式为连续增计模式==CCTL1 =CM_1+SCS+CAP+CCIE;//==输入上升沿捕获,CCI0A为捕获信号源==_EINT();//==开全局中断允许==Ini_Lcd();//==初始化液晶==Clear_GDRAM();//==清屏==Disp_HZ(0x80,zhouqi,8);Disp_HZ(0x88,pinlv,8);while(1){process();Write_Cmd(0x90);//==写地址==Write_Data(0x30+pd[6]);Write_Data(0x30+pd[5]);Write_Data(0x30+pd[4]);Write_Data(0x30+pd[3]);Write_Data(0x30+pd[2]);Write_Data(0x30+pd[1]);Write_Data(0x30+pd[0]);Write_Cmd(0x98);//==写地址==Write_Data(0x30+fy[6]);Write_Data(0x30+fy[5]);Write_Data(0x30+fy[4]);Write_Data(0x30+fy[3]);Write_Data(0x30+fy[2]);Write_Data(0x30+fy[1]);Write_Data(0x30+fy[0]);delay();}}/*****************************************************初始化时钟*****************************************************/ void InitSys(){unsigned int i;//--- 使用XT2振荡器---BCSCTL1&=~XT2OFF;//==打开XT2振荡器==do{IFG1 &=~OFIFG;//==清除振荡器失效标志==for(i = 0xFF; i > 0; i--);//==延时,等待XT2起振==}while((IFG1 & OFIFG)!= 0);//==判断XT2是否起振== BCSCTL2 =SELM_2+SELS;//==选择MCLK、SMCLK为XT2,8M== }/*****************************************************延时函数*****************************************************/void delay(){unsigned int i;unsigned int j=10;for(i=10;i>0;i--){while(j--);}}/***************************************************数据处理***************************************************/void process(void){while(end<start);< bdsfid="155" p=""></start);<>//while(endstart width = end-start;//==实际脉冲宽度的计算==period = 2* width;frequency=1000000/period;pd[6]=period/1000000;pd[5]=(period-1000000*pd[6])/100000;pd[4]=(period-1000000*pd[6]-100000*pd[5])/10000;pd[3]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4])/100 0;pd[2]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-1000*pd[3])/100;pd[1]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-100 0*pd[3]-100*pd[2])/10;pd[0]=period%10;fy[6]=frequency/1000000;fy[5]=(frequency-1000000*fy[6])/100000;fy[4]=(frequency-1000000*fy[6]-100000*fy[5])/10000;fy[3]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4])/10 00;fy[2]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-100 0*fy[3])/100;fy[1]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-100 0*fy[3]-100*fy[2])/10;fy[0]=frequency%10;}/***************************************************中断处理函数***************************************************/#pragma vector=TIMERA1_VECTOR //==定时器A中断处理==__interrupt void timer_a(void){switch(TAIV)//==向量查询=={case 2://==捕获中断==if(CCTL1&CM0)//==捕获到上升沿=={CCTL1=(CCTL1&(~CM0))|CM1;//==更变设置为下降沿触发== start=TAR;//==记录初始时间==}else if(CCTL1&CM1)//==捕获到下降沿=={CCTL1=(CCTL1&(~CM1))|CM0;//==更变设置为上升沿触发== end=TAR;//==用start,end,overflow计算脉冲宽度==}break;default: break; } }。

基于MSP430F149的频率计的设计

基于MSP430F149的频率计的设计

基于MSP430F149的频率计的设计/***本例程是利用定时器A的捕获功能,从P1.2引脚捕获被测量信号的上升沿,从而计算出其频率值,并显示在1602液晶屏上。

测量的频率范围为1Hz~100kHz,若频率在1KHz 以下,以Hz为单位显示整数部分,若频率大于1KHz,显示2位小数***/#include "msp430x14x.h"#include "LCD1602.c"unsigned int old_cap=0;//捕获的旧值unsigned long int period=0;//信号周期unsigned char TA_ov_num=0;//定时器计数溢出次数/*****系统时钟配置****/void init_MCLK(){ uchar i;WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗BCSCTL1&=~ XT2OFF; //msp430f149 选择XT2频率,一般为8MHz do//do这个循环不能删除,否则下载到硬件电路上没法实现测温功能{IFG1 &= ~OFIFG; //清除晶振失败标志for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振}while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?BCSCTL2 |= (SELM_2 + DIVM_0 + SELS+DIVS_0); // SMCK=MCLK=8MHz}/*********//****捕获方式设置****/void cap_init(){P1SEL|=BIT2; // 设置P1.2为第二功能引脚TA1P1DIR&=~BIT2; // 设置P1.2为输入引脚TACTL = TASSEL_2 + MC_2+ID_3+TAIE; //计数时钟为1MHz,计数方式为连续计数CCTL1 |= CAP+CM_1 + SCS + CCIS_0+ CCIE;// 上升沿捕获,同步,CCI0A(P1.2信号源),捕获功能,中断允许TACCR1=0;}/****频率计算及显示****/void display_freq(){uchar lcdbuf[8];unsigned long temp;temp=period;if(temp>1000)//表示频率小于1KHz{temp=1000000/temp;//定时器的计数时钟为1MHz,且以Hz为单位只显示整数部分lcdbuf[0]=temp/100+0x30;lcdbuf[1]=(temp%100)/10+0x30;lcdbuf[2]=temp%10+0x30;lcdbuf[3]='H';lcdbuf[4]='z';lcdbuf[5]=' ';lcdbuf[6]=' ';lcdbuf[7]=' ';if(lcdbuf[0]==0x30){if(lcdbuf[1]==0x30)LCD_Write_String(5,2,&lcdbuf[2]);elseLCD_Write_String(5,2,&lcdbuf[1]);}elseLCD_Write_String(5,2,&lcdbuf[0]);}else//表示频率大于1KHz{temp=10000/temp;//定时器的计数时钟为1MHz,以KHz为单位显示,且显示2位小数//1000/period再扩大10倍以显示小数lcdbuf[0]=temp/1000+0x30;lcdbuf[1]=(temp%1000)/100+0x30;lcdbuf[2]=(temp%1000)%100/10+0x30;lcdbuf[3]='.';lcdbuf[4]=(temp%1000)%10+0x30;;lcdbuf[5]='K';lcdbuf[6]='H';lcdbuf[7]='z';if(lcdbuf[0]==0x30){if(lcdbuf[1]==0x30){LCD_Write_String(5,2,&lcdbuf[2]);LCD_Write_String(11,2," ");}else{LCD_Write_String(5,2,&lcdbuf[1]);LCD_Write_String(12,2," ");}}elseLCD_Write_String(5,2,&lcdbuf[0]);}}/****主程序*******/void main(void){volatile unsigned int i;init_MCLK();//初始化系统时钟for (i=0; i<20000; i++); // 延时等待晶振稳定cap_init();//捕获初始化_EINT(); // 开总中断LCD_Init();//液晶初始化LCD_Write_String(0,1,"freq:");//从第一行第0列开始显示while(1){display_freq();//脉宽计算及显示}}#pragma vector=TIMERA1_VECTOR//捕获中断子程序__interrupt void TimerA1(void){switch(TAIV){case 2://比较/捕获模块1中断period=TA_ov_num*65536+TACCR1-old_cap;old_cap=TACCR1;TA_ov_num=0;break;case 4:break;//比较/捕获模块2中断未用case 10:TA_ov_num++;break;}}。

430单片机课程设计报告

430单片机课程设计报告

430单片机课程设计报告(步进电机驱动和键盘输入程序)学号:班级:姓名:此处放学校Logo一、设计思想在步进电机驱动方面,利用课程设计实验板上2003驱动接口电路,通过编程完成步进电机驱动功能。

系统初始化后,通过定时器B产生脉冲通过MC1413对步进电机进行驱动,同时满足初始设定值是步进电机的转速为每转5秒钟,正转2圈之后再反转2圈,循环进行。

并加入键盘模块,可以修改步进电机的运行参数。

在键盘输入程序方面,我设定了三个模式,一个模式用来输入单个字符,一个模式用来输入字符串,一个模式用来修改步进电机的运行参数(左右转圈数、周期)。

二、参数计算1、步进电机驱动实验使用型号为XY39ST20的四相步进电机,采用四相八拍控制方式工作。

步进电机的转角和转动方向取决于各相中通电脉冲的个数和顺序。

控制相序如表。

当按A-AB-B-BC-C-CD-D-DA顺序通电时步进电机正转,反之按相反顺序通电时步进电机反转。

XY39ST20步进电机正转时控制顺序及数学模型步序 1 2 3 4 5 6 7 8控制位P7.7 1 1 1 0 0 0 0 0P7.6 0 0 1 1 1 0 0 0P7.5 0 0 0 0 1 1 1 0P7.4 1 0 0 0 0 0 1 1控制模型0x90 0x80 0xc0 0x40 0x60 0x20 0x30 0x10由于MSP430每一种器件中都含有低速晶体振荡器(LFXT1),默认工作在低频模式32768Hz,捕获/比较寄存器CCR0经常用来用作周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况,计数器TAR可以增计数到CCR0的值,当计数器与CCR0的值相等(定时器值大于CCR0的值时),定时器值复位并从0重新开始计数。

所以初始化TACCR0=32768,计数一次的时间便是32768/32768=1s,初始化TBCCR0 =328,计数一次时间约为4s,程序由步进电机为四相八拍,所以每步为0.9°,一圈为360°,故转一圈需走360/0.9=400次的正转数组,用时4s。

基于单片机的频率计的设计

基于单片机的频率计的设计

基于单片机的频率计的设计一、频率计的基本原理频率是指单位时间内信号周期性变化的次数。

频率计的基本原理就是在一定的时间间隔内对输入信号的脉冲个数进行计数,从而得到信号的频率。

常用的测量方法有直接测频法和间接测频法。

直接测频法是在给定的闸门时间内测量输入信号的脉冲个数,计算公式为:频率=脉冲个数/闸门时间。

这种方法适用于测量高频信号,但测量精度会受到闸门时间和计数误差的影响。

间接测频法是先测量信号的周期,然后通过倒数计算出频率。

其适用于测量低频信号,但测量速度较慢。

在实际设计中,通常会根据测量信号的频率范围选择合适的测量方法,或者结合两种方法来提高测量精度和范围。

二、系统硬件设计1、单片机选型在基于单片机的频率计设计中,单片机是核心控制部件。

常用的单片机有 51 系列、STM32 系列等。

选择单片机时需要考虑其性能、资源、价格等因素。

例如,对于测量精度和速度要求不高的应用,可以选择51 单片机;而对于复杂的系统,可能需要选择性能更强的 STM32 单片机。

2、信号输入电路为了将输入信号接入单片机,需要设计合适的信号输入电路。

一般需要对输入信号进行放大、整形等处理,使其成为标准的脉冲信号。

常见的整形电路可以使用施密特触发器来实现。

3、显示电路频率计的测量结果需要通过显示电路进行显示。

常用的显示器件有液晶显示屏(LCD)和数码管。

LCD 显示效果好,但驱动较为复杂;数码管显示简单直观,驱动相对容易。

4、时钟电路单片机需要一个稳定的时钟信号来保证其正常工作。

时钟电路可以采用外部晶振或内部振荡器,根据系统的精度和稳定性要求进行选择。

5、复位电路为了确保单片机在系统启动时能够正常初始化,需要设计复位电路。

复位电路可以采用上电复位和手动复位两种方式。

三、系统软件设计1、主程序流程系统启动后,首先进行初始化操作,包括设置单片机的工作模式、初始化显示、设置定时器等。

然后进入测量循环,等待输入信号,在给定的闸门时间内进行计数,并计算频率,最后将结果显示出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于430单片机的频率计设计测控技术与仪器专业课程设计报告班级:040852 姓名:姬树明学号:04085144 起始时间:2012-02-27 --- 2012-03-11课程设计题目:基于51单片机频率计的设计(0—10MHz)一、对题目的认识和理解1 引言本设计综合考虑了频率测量精度和测量反应时间的要求。

例如当要求频率测量结果为3位有效数字,这时如果待测信号的频率为1 Hz,则计数闸门宽度必须大于1 000 s。

为了兼顾频率测量精度和测量反应时间的要求,把测量工作分为两种方法:(1)当待测信号的频率>100 Hz时,定时/计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸门宽度>1 s时,即可满足频率测量结果为3位有效数字;(2)当待测信号的频率<100 Hz时,定时/计数器构成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度等于待测信号的周期。

这时用方波作计数闸门,当待测信号的频率=100 Hz,使用12 MHz时钟时的最小计数值为10 000,完全满足测量精度的要求。

二、本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号周期/频率的测量。

单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。

在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz 时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。

在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。

外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12 MHz时钟时,最大计数速率为500 kHz)。

定时/计数器的工作由运行控制位TR控制,当TR置1,定时/计数器开始计数;当TR清0,停止计数。

三、2频率计的量程自动切换使用定时方法实现频率测量时,外部的待测信号通过频率计的预处理电路变成宽度等于待测信号周期的方波,该方波同样加至定时/计数器的输入脚。

工作高电平是否加至定时/计数器的输入脚;当判定高电平加至定时/计数器的输入脚,运行控制位TR置1,启动定时/计数器对单片机的机器周期的计数,同时检测方波高电平是否结束;当判定高电平结束时TR清0,停止计数,然后从计数寄存器读出测量数据。

这时读出的数据反映的是待测信号的周期,通过数据处理把周期值变换成频率值,由显示电路显示测量结果。

四、使用计数方法实现频率测量时,外部的待测信号为单片机定时/计数器的计数源,利用软件延时程序实现计数闸门。

频率计的工作过程为:定时/计数器的计数寄存器清0,运行控制位TR置1,启动定时/计数器工作;运行软件延时程序,同时定时/计数器对外部的待测信号进行计数,延时结束时TR清0,停止计数。

从计数寄存器读出测量数据,测量数据在完成数据处理后,由显示电路显示测量结果。

测量结果的显示格式采用科学计数法,即有效数字乘以10为底的幂。

这里设计的频率计用5位数码管显示测量结果:前3位为测量结果的有效数字;第4位为指数的符号;第5位为指数的值。

采用这种显示格式既保证了测量结果的显示精度,又保证了测量结果的显示范围(0.100 Hz~9.99 M Hz)。

频率计测量量程自动转换的过程由频率计测量量程的高端开始。

由于只显示3位有效数字,测量量程的高端计数闸门不需要太宽,例如在进入计数器的信号频率范围在10.0~99.9 kHz,计数闸门宽度为10 ms 即可。

频率计开始工作时使用计数方法实现频率测量,并使计数闸门宽度为最窄,完成测量后判断测量结果是否具有3位有效数字,如果成立,将结果送去显示,完成测量工作;否则将计数闸门宽度扩大10倍,继续进行测量判断,直到计数闸门宽度达到1s,这时对应的进入单片机的待测信号频率范围为100~999 Hz。

如果测量结果仍不具有3位有效数字,频率计则使用定时方法实现频率测量。

定时方法测量的是待测信号的周期,这种方法只设一种量程,测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将结果送去显示。

无论采用何种方式,只要完成一次测量,频率计自动开始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程的自动转换。

二、方案论证与比较2.1、脉冲数定时测频法(M法):此法是记录在确定时间 Tc内待测信号的脉冲个数 Mx ,则待测频率为: Fx= Mx/ Tc 显然,时间 Tc 为准确值,测量的精度主要取决于计数 Mx 的误差。

其特点在于:测量方法简单;测量精度与待测信号频率和门控时间有关 ,当待测信号频率较低时 ,误差较大。

2.2、脉冲周期测频法(T 法):此法是在待测信号的一个周期Tx内,记录标准频率信号变化次数Mo。

这种方法测出的频率是:Fx = Mo/ Tx此法的特点是低频检测时精度高,但当高频检测时误差较大。

2.3、脉冲数倍频测频法(AM 法):此法是为克服M 法在低频测量时精度不高的缺陷发展起来的。

通过A 倍频,把待测信号频率放大A倍,以提高测量精度。

其待测频率为:Fx= Mx/ ATo 其特点是待测信号脉冲间隔减小,间隔误差降低;精度比M 法高 A倍,但控制电路较复杂。

2.4、脉冲数分频测频法(AT法) :此法是为了提高T法高频测量时的精度形成的。

由于T法测量时要求待测信号的周期不能太短,所以可通过A分频使待测信号的周期扩大A倍,所测频率为: Fx = AMo/ Tx其特点是高频测量精度比 T法高A倍;但控制电路也较复杂。

2.5、脉冲平均周期测频法(M/ T法) :此法是在闸门时间Tc内,同时用两个计数器分别记录待测信号的脉冲数Mx和标准信号的脉冲数Mo。

若标准信号的频率为Fo ,则待测信号频率为: Fx = FoMx/ MoM/ T法在测高频时精度较高;但在测低频时精度较低。

2.6、多周期同步测频法:是由闸门时间Tc与同步门控时间Td 共同控制计数器计数的一种测量方法,待测信号频率与M/ T 法相同。

此法的优点是,闸门时间与被测信号同步,消除了对被测信号计数产生的±1 个字误差,测量精度大大提高,且测量精度与待测信号的频率无关,达到了在整个测量频段等精度测量。

设计方案确定:电路整体框图如图所示,被测信号经过放大电路,整形电路从而将其转换成同频率的脉动信号,送入计数器计数,闸门的一个输入信号是秒脉冲发出的标准脉冲信号,秒脉冲信号源含有个高稳定的石英振荡器和一个多级分频器共同决定,其时间是相当精确的,计数器显示电路采用液晶显示。

三,信号预处理电路信号预处理电路如图所示,他由4级电路构成。

第1级为零偏置放大器,当输入信号为零或者为负电压时,三极管截止,输出高电平;当输入信号为正电压时,三极管导通,输出电压随着输入电压的上升而下降。

零偏置放大器可把正负交替波形变换成单向脉冲,这使得频率计既可以测量脉冲信号的频率,也可以测量正弦波信号的频率。

放大器的放大能力实现了对小信号的测量,本电路可以测量幅度≥0.5 V的正弦波或脉冲波待测信号。

三极管应采用开关三极管以保证放大器具有良好的高频响应。

第2级采用带施密特触发器的反相器7414,他用于把放大器生成的单向脉冲变换成与TTL/CMOS电平相兼容的方波。

第3级采用十进制同步计数器74160,第2级输出的方波加到74160的CLK,当从74160的TC输出可实现10分频(多个74160的级连可以进一步扩展测频范围)。

第4级同样采用十进制同步计数器74160,第3级输出的方波加到他的CLK,当从他的Q0输出既可实现2分频,且其输出为对称方波,方波宽度等于待测信号的周期,从而为测量信号周期提供基础。

3.3、钳为电路因为输入到单片机的电压必须为0—5V之间,所以使用限幅。

之后再输入到51单片机中。

四、监控软件设计与说明如图所示,通过一个按键启动测量,先用直接测频率法测量待测信号的频率,如果大于等于1Mhz,则为实测频率并显示,如果小于1Mhz,那么改用测周期法测量周期,并转换为频率,最后显示,一次测量完毕后自动返回开始下一次测量。

系统软件设计:频率计开始工作或者完成一次频率测量,系统软件都进行测量初始化。

测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时/计数器的工作方式。

定时/计数器的工作首先被设置为计数器方式,即用来测量信号频率。

首先定时/计数器的计数寄存器清0,运行控制位TR置1,启动对待测信号的计数。

计数闸门由软件延时程序实现,从计数闸门的最小值(即测量频率的高量程)开始测量,计数闸门结束时TR清0,停止计数。

计数寄存器中的数值经过数制转换程序从十六进制数转换为十进制数。

判断该数的最高位,若该位不为0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0,将计数闸门的宽度扩大10倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。

当上述测量判断过程直到计数闸门宽度达到1 s(对应的频率测量范围为100~999 Hz)时测量结果仍不具有3位有效数字,频率计则使用定时方法测量待测信号的周期。

定时/计数器的工作被设置为定时器方式,定时/计数器的计数寄存器清0,在判断待测信号的上跳沿到来后,运行控制位TR置为1,以单片机工作周期为单位进行计数,直至信号的下跳沿到来,运行控制位TR清0,停止计数。

16位定时/计数器的最高计数值为65 535,当待测信号的频率较低时,定时/计数器将发生溢出。

产生溢出时,程序进入定时器中断服务程序,对溢出次数进行计数。

待测信号的周期由3个字节组成:定时/计数器溢出次数、定时/计数器的高8位和低8位。

信号的频率f与信号的周期T之间的关系为:f =1/T完成信号的周期测量后,需要做一次倒数运算才能获得信号的频率。

为提高运算精度,采用浮点数算术运算。

浮点数由3个字节组成:第1字节最高位为数符,其余7位为阶码;第2字节为尾数的高字节;第3字节为尾数的低字节。

待测信号周期的3个字节定点数通过截取高16位、设置数符和计算阶码转换为上述格式的浮点数。

然后浮点数算术运算对其进行处理,获得用浮点数格式表达的信号频率值。

再通过浮点数到BCD码转换模块把用浮点数格式表达的信号频率值变换成本频率计的显示格式,送到显示模块显示待测信号的频率值。

完成显示后,频率计都开始下一次信号的频率测量。

系统软件设计采用模块化设计方法。

整个系统由初始化模块、显示模块和信号频率频率测量模块等各种功能模块组成。

上电后,进入系统初始化模块,系统软件开始运行。

在执行过程中,根据运行流程分别调用各个功能模块完成频率测量、量程自动切换、周期测量和测量结果显示。

相关文档
最新文档