1、智能 频 率测试 仪 设 计专业:应用电子技术班级:09应电2班学号:2009061595姓名:崔建宇指导老师:董卫军11前言本次设计是以STC12C5A3252单片机为控制核心的频率及相位测试仪。本次设计可完成对信号频率的频率测量和相位差测量。要求测量频率的范围为20Hz到20KHz,相位的范围为0到360。可通过按键实现测频或测相,用LED数码管直接显示读数,显示清晰直观。误差小,稳定性高。设计要求:功能要求可以测量被测信号的频率。使用多周期同步测量原理,实现全频段等精度测量。输入采用交流耦合方式。使用220V/50Hz交流电源,设置电源开关、电源指示灯和电源保护功能。主要技术指标测量频率
2、范围:1Hz1MHz测量误差:0.01%(全频段)额定输入信号电压:500mV最大输入信号电压:100V输入阻抗:1M显示方式:6位LED数码管显示被测信号的频率。2总体方案设计2.1方案比较2.1.1 方案一方案一的结构框图如下图2.1所示。整形电路STC12C5A3252整形电路移相电路待测信号2待测信号1输入信号键盘控制切换LED显示图2.1 方案一方框图2.1.2方案二方案二的结构框图如下图2.2所示。整形电路整形电路FPGAAT89C51LED显示AB待测信号1待测信号2图2.2 方案二方框图2.2方案论证本设计要完成信号频率的测量和相位差的测量。设计中有两路输入信号,也是被测量信号
3、,它们是两个频率相同的正弦信号,频率范围为20Hz到20KHz,幅度为1到5V(可以扩展到(0.3到5V),但两者幅度不一定相等。 令正弦信号为,式中:称为幅值(最大值),且=,称为有效值;称为相位,称为初相位,称为角频率。、称为正弦量的三要素。方案一和方案二的比较见表2.1。表2.1方案一和方案二的比较 方案项目方案一方案二芯片部分 741741整形部分LM324LM339信号转换部分74HC08FPGA适配板单片机部分STC12C5A3252AT89C51显示部分LEDLED 只有两个同频率的(正弦)信号才有相位差的概念。不妨令两个同频率的正弦信号为 则相位差,由此可看出,相位差在数值上等
4、于初相位之差,是一个角度。不妨令,式中是相位差对应的时间差,且令为周期信号,则有比例关系:360=:,可以推导得到=360 此式说明,相位差与 一一对应,可以通过测量时间差及周期信号的测量,也就是时间的测量,而时间的测量则要用到电子计数器。信号频率的测量可以采用直接测频率的方法和周期测频率的方法。一般信号频率较高时,采用直接测频率法,而信号频率较低时,采用测周期的方法。用直接测频率的方法获得信号频率即是让定时器/计数器T1对外部事件计数,而让定时器/计数器T1定时1s,只有在这1s内T1启动对外部事件(即信号I)计数,则T1的计数值就是待测信号的频率。用测周期的方法获得信号频率即是对I进行2分
5、频后的波形中,高电平的宽度正好对应I的周期,我们将此高电平信号作为单片机内部定时器的硬件启动/停止信号,便可测得周期T,由公式,得频率。方案一工作原理:两路待测信号经整形后变成了矩形波信号1和2,1和2是同频率,不同相位的矩形波。(1)频率的测量:STC对信号频率的测量可以采用直接测量法和测周期法。一般信号频率较高时采用直接测量法,而信号频率较低时用测周期法。本设计我组采用测周期法。由图2.1.2可知,将输入信号送入单片机再对高电平进行扫描,记录在1s内高电平出现的次数N,则N就是测得的频率。信号图2.3输入信号图(2)相位差的测量我组用一个与门将两输入的待测信号比较后叠加,而输出的波形中,正
6、脉冲宽度就是要测量的待测1和待测2相位差所对应的时间差t,跟据公式可得相位值。如图2.4所示。信号1信号2与门输 出图2.4相位比较图方案一工作原理:让FPGA实现数据的采集,即待测信号的频率f、两路输入信号的相位差所对应的时间差t分别转换为二进制数据,供STC单片机读取使用。STC从FPGA获取数据并经过CPU计算、转换等有关处理后,得到信号的频率和相位差并送LED数码管显示。待测信号1、待测信号2经整形电路处理后,变为矩形波,不妨令其为A、B,可以认为A、B为两个同频率的有相位差的矩形波。FPGA通过对整形后的信号A、B的处理,要获得二进制数形式表示的信号频率以及相位差对应的时间差。(1)
7、频率的测量。对频率的测量采用测周期的方法,即在信号周期T时间内,对时标信号进行计数。设时标信号的频率为f,时标信号周期为T,对信号A二分频都得信号高平宽度就是信号周期T,此高电平宽度作为闸门的控制信号,控制计数器在T时间内对f进行计数,则有N/F=T,被测信号的频率为:f=1/T=f/N上式中N计数器的计数值,当f一定时,它的大小表示信号频率的大小。(2)相位差对应的时间差T的测量。对相位差的测量跟频率测量的方法类似,不过闸门控制信号为AB的高电平宽度,则有:N/f=T(3)f的确定及其FPGA的二进制数据位数的确定。因为相位差测量的绝对误差 ,而FPGA在测量T时有一个字的误差,对待测信号频
8、率f=20kHz而言,下式成立:=:50us则有 0.278us即FPGA采集相位差对应时间差T时,至少要能分辨出0.287us的时间间隔比较方案一和方案二可以看出:(1)方案一比方案二更加可靠;(2)使用到的元器件也都是我们所常用到的一些元件,如:74HC138译码器,74HC573锁存器,按键等;(3)从操作和可行性上说方案一思路清晰;(4)虽然方案一略显复杂一些,但由于本次设计是第一次将单片机运用于实际的电路设计中,且尚未学过EDA,用FPGA设计有一定困难。2.3方案选择综上所述,并且考虑系统的方案可行性和成本等各种因素,本设计采用方案一作为最终的方案。3单元模块设计3.1各单元模块功
9、能介绍及电路设计3.1.1 移相整形电路模块图3.1 移相整形电路模块电路图这一模块,由741和运算放大器LM324组成。输入正弦波通过741发生移相,使得相位滞后原初始信号,原来的正弦信号和发生移相后的信号分别经过LM324放大整形成矩形波形式,再将整形后的信号引入单片机的计数引脚,原正弦波接至T0,移相信号接至T1和INT1。原正弦波通过计算T0在1S内计数信号发生负跳变的次数,得到其频率。T的确定,由单片机产生高频率的时钟信号,,对输入信号进行扫描,即与输入信号进行逻辑与运算。 输入信号为低电平时,没有时钟脉冲输出;为高电平时输出时钟信号,对其进行记数,假设为N,就可以计算出脉宽,为 N
10、*T1,即T=N*T1。将参考信号整形为方波信号,并以此信号为基准,延时产生另一个同频的方波信号,再通过波形变换电路将方波信号还原成正弦波信号。以延时的长短来决定两信号间的相位值。这种处理方式的实质是将延时的时间映射为信号间的相位值。相位的测量则是通过将原正弦信号和移相后的信号分别经过整形后相与,由 GATE门和INT1控制T1,通过定时对外部信号高电平进行计时,从而测得相与后的高电平持续时间。再通过之前测得频率的倒数除以2得到它们时间差t,由:360=:,算出即为相位滞后角3.1.2显示模块这一部分由2个8位数据锁存器74HC573、ULN2803以及8位LED数码显示管组成,ULN2803
11、在电路中能起到大电流输出和高压输出作用,专门用来驱动继电器的芯片。当LE2为高电平,即时,LED位锁存器工作,当时序由高电平变为低电平时即发生负跳变时,将位选信号锁存,再经过ULN2803进行位选。当LE1为高电平,即时,数据通过P0口,当时序由高电平变为低电平时即发生负跳变时,经74HC573锁存,LED段锁存器工作,再经过延时,就能够将我们所要显示的频率或相位按照我们的要求显示出了。锁存器74HC573电路见图3.2(a)。(a)显示模块电路见图3.2(b)。(b)图3.2 显示模块电路图3.1.3片选模块片选模块电路见图3.3。图3.3片选模块电路图这一模块由3-8线译码器74HC138
12、和四2输入或非门74HC02组成。通过74HC138译码器,将A,B,C3路信号译码,,所得信号CS3,CS4与信号相或非来控制锁存器的工作情况,,。3.1.4电源输入模块电源模块电路见图3.4。图3.4 电源输入模块电路图 这部分电路由USB连接器,电源输入组成,为系统提供可靠稳定的电源。3.2电路参数的计算及元器件的选择显示部分(见图3.2),因为本组所测频率范围为20Hz到20KHz,共需5个八位LED数码显示管,所以选用了两组4个的LED显示管。在移相整形部分(见图3.1),R3 、R5、 R13 、R14、 R18采用10K电阻,R4用100电阻,R7 、R16用510电阻,R8、R
13、10用30K电阻,C1用0.2u电容。在片选部分(见图3.3)选用74HC138作译码器,选用74HC02对输出信号进行或非处理产生片选信号。3.3特殊器件的介绍3.3.1 74HC573的介绍74HC573为八进制3态非反转透明锁存器 ,是高性能硅门 CMOS器件。器件的输入是和标准CMOS输出兼容的;加上拉电阻,他们能和 LS/ALSTTL输出兼容。当锁存使能端为高时,这些器件的锁存对于数据是透明的(即输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。其特点有:(1)输出能直接接到CMOS,NMOS和 TTL接口上 ;(2)操作电压范围:2.0V6.0V (3)低输入电流
14、:1.0uA (4)CMOS器件的高噪声抵抗特性 其引脚图如图3.5。图3.5 74HC573引脚图 其功能表:见表3.2。表3.2 74HC573功能表X:任意变量 Z:高阻抗 额定功率的下降PDIP:10mW/ ,65125 SOIC:7 mW/ ,65125 74HC573参数最大值范围见表3.3。表3.3 74HC573参数最大值范围表74HC573推荐操作条件见表3.4。表3.4 74HC573推荐操作条件表这个器件带有保护电路,以免被高的静态电压或电场损坏。然而,对于高阻抗电路,必须要采取预防以免工作在任何高于最大值范围的条件下工作。VIN和VOUT应该被约束在GND(VIN或VO
15、UT)VCC。 3.3.2 RS232的介绍RS232是由电子工业协会(EIA) 所制定的异步传输标准接口。通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM2。其电气特性: EIA-RS-232 对电器特性、逻辑电平和各种信号线的功能都作了规定。 (1)在TxD和RxD上: (2)逻辑1(MARK)=-3V-15V (3)逻辑0(SPACE)=+3+15V (4)在RTS、CTS、DSR、DTR和DCD等控制线上: (5)信号有效(接通,ON状态,正电压)+3V+15V (
16、6)信号无效(断开,OFF状态,负电压)=-3V-15V3.4各单元模块的联接各个单元模块连接的具体关系参见附录1。4 软件设计4.1软件设计的总体结构系统软件设计总体结构如图4.1。主程序键盘扫描数据处理频率及相位显示图4.1 系统软件设计总体结构图4.2主要模块的设计流程框图程序流程如图4.2。初始化判断有键键盘扫描Y处理按键的键值显示测相测频键值N0XFEH0XFDH图4.2程序流程方框图数据处理模块流程图见图4.3。 显示部分模块流程图见图4.4。判断键值0XFE0XFD初始化T0,开启TR0,EA调用延时函数延时一秒关闭TR0提取出TH0, TL0 返回主程序初始化T1,开启TR1I
17、NT1=1时T1开始工作INT1=0时,TR1=0提取出TL1数据处理程序开始根据所得数值查表找到相应段码调用延时函数送入位码调用延时函数返回主程序显示程序开始 图4.3数据处理部分方框图 图4.4显示部分方框图5 系统调试5.1 Proteus软件仿真5.1.1 Proteus仿真总图Proteus仿真结果总图见附录2 5.1.2 Proteus仿真的元件参数Proteus仿真元件参数见表5.1所示。表5.1 Protues仿真元件参数表元件编号元件型号元件编号元件型号电阻R1510电阻R18100电阻R210K电阻R1930K电阻R310K电阻R2030K电阻R4100排阻RP11K电阻R
18、5510排阻RP21K电阻R610K无极性电容C10.2u电阻R710KU1AT89C52电阻R8100U2:ALM324电阻R9510U2:BLM324电阻R10510U3:A74HC02电阻R11100U3:B74HC02电阻R12100U474HC573电阻R13100U5ULN2803电阻R14100U674HC573电阻R15100U774HC138电阻R16100U8741电阻R17100U974085.1.3 Proteus仿真的具体操作软件仿真是设计的一个重要部分,一般来说,如果能够在软件仿真获得成功,下一步的硬件调试就不会出多大的问题。我们运用的软件仿真平台式Proteus的
19、ISIS仿真工具。首先按硬件调试平台或者是根据设计的原理图绘制出仿真的原理总图,然后根据需要一部分一部分的进行调试。在进行软件调试的时候,特别是对移相及整形电路进行调试的时候,为了看它的时序是否符合技术资料上的时序要求,最好单步进行调试。这里提供了一个比较好的解决方案。通过KEIL C和Proteus 7.5(及以上版本),可以通过驱动让Proteus和KEIL C联合调试,并通过ISIS的数字示波器实时监视单总线的时序。连接图如图5.1所示。频率及相位测试仪部分的仿真连接见图5.1。图5.1 频率及相位测试仪部分的仿真连接图6系统功能指标参数6.1系统功能本系统可完成对信号频率的频率测量和相
20、位差测量。可实现测量频率的范围为20Hz到20KHz,相位的范围为0到360。可通过按键实现测频或测相,用LED数码管直接显示读数,显示清晰直观。通过与现实温度的对比,可以粗略的测得该设计的准确度,从而对比该设计的指标。我们用标准的温度计对一杯温水的温度进行测量,并且将测量结果同本系统所测得结果作对比,得出如表6.1所示的结果。6.2系统指标参数测试通过与现实频率相位的对比,可以粗略的测得该设计的准确度,从而对比该设计的指标。我们用标准的频率相位计对一信号的频率相位进行测量,并且将测量结果同本系统所测得结果作对比,得出如表6.1所示的结果。6.1 系统性能参数测试表频率相位计测得频率(HZ)频
21、率相位计测得相位()系统测得频率(HZ)系统测得相位()频率相位计测得频率(HZ)频率相位计测得相位()系统测得频率(HZ)系统测得相位()10017310117716002791606280200199199205210029121022955002334992342700310268831110002561001262330033932953436.3系统功能及指标参数分析从表6.1可得,本设计能够比较准确的测量温度相位,并且能够实时显示其值,灵敏度较高。7 结论本次设计中遇到很多平常不常注意的和遇到的问题,知识面和实践上都有一些问题,在本次设计中充分感到了时间的紧迫和创新的快乐。理论上大
22、胆假设,实践上小心求证。本组同学齐心协力在四周时间里完成了设计。本设计的数字测频测相仪具有原理简单、易于编程的特点。使用单片机的定时器与计数器实现频率的等精度测量是本次设计的亮点,但由于时间与技术上的问题,本次设计还有诸多问题。但总的来讲本次设计是成功的。8 总结与体会通过这次课程设计,使自己的知识水平有了显著的提高,并学会了如何将自己所学的运用于实践之中,本系统所涉及的东西几乎涵盖了大学所学的各个方面的知识,如电子技术、电路原理、程序设计基础、检测与转换、单片机等,尽管下半年就将毕业,但是学习却是终身受益的事情,只有不断学习才能不断进步,只有不断的将所学运用于实践,才能检验出所学是否正确,自
23、己是否真的掌握。本系统还有很多有待提高之处,这需要在以后的学习中完善自己的知识不断补充。通过这次课程设计,我们学会了把书本上的理论知识如何运用到实践中,在以后的生活学习中,我们也将不断努力、创新。9.主要参考书单片机原理与接口技术 李朝青 北京航空航天大学出版社单片机原理与应用 李建忠 西安电子科技大学出版社智能仪器原理,设计及调试 季建华等 华东理工大学出版社单片机应用系统设计应用 何立民主编 北京航空航天大学出版社 智能化仪器原理及应用 曹建平 西安电子科技大学出版社 智能仪器原理与设计 赵新民 哈尔滨工业大学出版社智能仪器原理及应用 赵茂泰 电子工业出版社现代科学仪器 中国分析测试协会主
24、办自动化仪表 中国仪器仪表学会 上海工业自动化仪表研究所主办仪器仪表学报 中国仪器仪表学会主办仪器仪表网 (http:/www.china_)仪器商城网 (http:/)附录1:系统的电路原理图附录2:PCB图附录3:程序代码/*头文件定义*/#ifndef _HEAD_H_#define _HEAD_H_#define uchar unsigned char#define uint unsigned int#define ulong unsigned long #define Data P0 /数据口#define Addr P0 /地址口uchar ksp2=0xfe,0xfd;sbit
25、Write=P36; /写信号低电平有效sbit A1=P25; /低位sbit B2=P26; /中位sbit C3=P27; /高位uchar led=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/7SEG-CCuchar address=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;uchar button;ulong time0;ulong freq=0;uchar frequ8;#endif/*头文件函数库*/ #ifndef _FUNCTION_H_#define _FUNCTION_H_vo
26、id delay() /* 延时函数*/ unsigned int i; for(i=0;i10;i+); void delay1() unsigned int i; for(i=0;i2000;i+); void delay_1ms(uchar t) /延时 ms级 uchar i,j;while(t)t-;for(i=0;i10;i+)for(j=0;j100;j+);/*显示函数,先将段码通过P0口送出经74HC573锁存,再将位码通过P0口输出经74HC573,ULN2803输出位码*/display(uchar temp,uchar i) Write=0; /写壮态 Data=led
27、temp; /送入数据 C3=1; /打开数据锁存器 delay(); C3=0; Addr=addressi; A1=1; B2=1; delay1(); Addr=0x00; A1=0; B2=0; void jisuan(ulong database) /对所得数据信号(频率或者相位)进行处理 frequ0=database/10000000;frequ1=database/1000000-frequ0*10;frequ2=database/100000-frequ0*100-frequ1*10;frequ3=database/10000-frequ0*1000-frequ1*100-f
28、requ2*10;frequ4=database/1000-frequ0*10000-frequ1*1000-frequ2*100-frequ3*10;frequ5=database/100-frequ0*100000-frequ1*10000-frequ2*1000-frequ3*100-frequ4*10; frequ6=database/10-frequ0*1000000-frequ1*100000-frequ2*10000-frequ3*1000-frequ4*100-frequ5*10;frequ7=database-frequ0*10000000-frequ1*1000000-fr
29、equ2*100000-frequ3*10000-frequ4*1000-frequ5*100-frequ6*10;/*键盘扫描程序,通过向P1口输出0Xff,通过判断P1口的信号是否发生了改变,如果发生了改变,考虑到键盘的抖动,通过延时后,再次判断P1口的值,并将P1口的键值返回到主程序 */ uchar keypad_scan() uchar i;uchar key;for(i=0;i2;i+)if(P1=kspi) delay();key=P1;if(key=kspi) return(key); uchar test_freqT0(void) uint aa; TMOD=0x05; /计
30、数器0方式1 EA=1;TH0=0X00;TL0=0X00;ET0=1; TR0=1;delay_1ms(1000);TR0=0;aa=TH0;aa=TH0 8;aa=aa+TL0; return(aa);uchar test_pahse(void) uchar bb; SP=0X60;TMOD=0X00;TL1=0X00;TH1=0X00;LOOP:if(P3_3=1) goto LOOP;TR1=1;LOOP1:if(P3_3=0)goto LOOP1;LOOP2:if(P3_3=1)goto LOOP2; TR1=0;bb=TL1return(bb)#endif#include #inc
31、lude head.h#include function.hvoid main() uchar i;uchar freq,phase,ph;int x,y=0;while(1)button=keypad_scan(); /调接键盘扫描程序if(button=0xfe) /判断键值,如果为0xfe,则进行测试频率的操作freq=test_freqT0(); /调用测频函数jisuan(freq); /调用数据处理函数for(i=0;i8;i+)display(frequi, i); /显示频率 else if(button=0xfd) /判断键值,如果为0xfd,则进行测试相位的操作 Ph=te
32、st_phase();phase=180-(1-2*freq*ph);jisuan(phase);for(i=0;i8;i+)display(frequi, i); 附录4元器件见表所示。表3.1元器件选择表类别型号封装个数电阻100RES314510RES3810KRES35排阻SIP9210K电位器W2230KRES35二极管1N4148DIODE23三极管9014TO-924901890134IC74HC02DIP14374HC138DIP16174HC573DIP202ULN2803DIP181STC12C5A16S2DIP40174136DIP1417408DIP141741DIP081LM324ADIP142电容0.2uRB1230pFRAD1522uF/16VRB12极性电容4.7uF/25VRB11晶振11.0592MHzCY11继电器JDQ-T71T711显示器4LED-SM4205644按键KEY4KEY0.23USB连接器J5USB扁头1电源输入J4POWER4.31程序下载口CON3 SIP61电源模块 KEY3KEY31