基于单片机的多功能频率计CPLD实现_第1页
基于单片机的多功能频率计CPLD实现_第2页
基于单片机的多功能频率计CPLD实现_第3页
基于单片机的多功能频率计CPLD实现_第4页
基于单片机的多功能频率计CPLD实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机的多功能频率计CPLD实现 第13页,共13页基于单片机的多功能频率计CPLD实现摘要:本设计利用CPLD进行测频计数,单片机实施控制实现频率计的设计。利用等精度的设计方法,克服了基于传统测频原理的频率计测量精度随被测信号频率下降而降低的缺点,利用CPLD来实现频率的测量计数,利用单片机完成整个测量电路的测试控制、数据处理,显示输出部分也由单片机来完成。CPLD芯片逻辑采用VHDL语言设计,给出了系统的功能、结构和设计方法。关键词:CPLD,单片机,等精度,频率计1、 引言数字化是电子设计的必由之路。从80年代单片机引入我国,单片机已广泛地应用于电子设计中,使智能化水平在广度和深度上

2、产生了质的飞跃然而,单片机的两大突出缺点:串行工作特点决定了它的低速性和程序跑飞、不可靠复位决定了它的低可靠性。CPLD的出现以其高速、高可靠性、串并行工作方式等突出优点在电子设计中广泛应用,并代表着未来EDA设计的方向。 CPLD的设计采用了高级语言(如VHDL语言),进一步打破了软硬件之间的界限,加速了产品的开发过程。然而,单片机与CPLD在电子系统设计中有很强的互补性,单片机能实现灵活的逻辑控制功能,很强的数据处理能力,与CPLD的高速、高可靠性相结合在电子系统设计中将发挥更强的作用。本设计就是利用CPLD 进行测频计数,单片机实施控制实现频率计的设计。利用等精度的设计方法,克服了基于传

3、统测频原理的频率计测量精度随被测信号频率下降而降低的缺点。2、 工作原理及电路设计2.1、系统工作原理2.1.1、传统测频方案传统频率测量法的基本工作原理见图1。在传统频率测量法中,参考晶振提供了测量的时间基准,分频后通过控制电路去开启与关闭时间闸门。闸门开启时,计数器开始计数,闸门关闭停止计数。若闸门开放时间为T,计数值为N,则被测频率f=N/T。用这种频率测量原理,对于频率较低的被测信号来说,存在着测量实时性和测量精度之间的矛盾,不适用于低频信号的测量。时间闸门计数器显示控制过程分频器(时基)晶体振荡器图1 传统频率测量基本工作原理2.1.2、等精度测频工作原理传统的频率计测量精度将随被测

4、信号频率的下降而降低,而等精度频率计在整个频率区域保持恒定测试精度, 实现方式可以简化为图2。DQCENCLKCLROUT1CN1CENCLKCLROUT2CN2门控信号标准信号被测信号清零信号图2 测频模块图2中门控信号是宽度为的一个脉冲,CN1和CN2是两个可控计数器,标准频率信号从CN1的时钟输入端CLK输入,被测信号从CN2的时钟输入端CLK输人,设其实际频率为, 测量频率为。当门控信号为高电平时,被测信号的上沿通过D触发器的Q端同时启动计数器CNl和CN2,对被测信号和标准频率信号同时计数。当门控信号为低电平时,随后而至的被测信号的上沿将使这两个计数器同时关闭。设在一次门控时间中对被

5、测信号计数值为。对标准频率信号的计数值为,则得 设所测频率值为,其真实值为,标准频率为,在一次测量中由于计数的起停时间都是由该信号的上升沿触发的,在时间内的计数无误差;此时内的计数最多相差一个脉冲,即则: 由此推得: 根据相对误差公式有: 可以得: 即 由此可知:1) 相对测量误差与频率无关;2) 增大或提高,可以增大,减少测量误差,提高测量精度;3) 标准频率误差为,由于晶体的稳定度很高,标准频率误差可以进行校准;4) 等精度测频方法测量精度与预置门宽度和标准频率有关,与被测信号的频率无关;在预置门时间和常规测频闸门时间相同而被测信号频率不同的情况下,等精度测量法的测量精度不变,而常规的直接

6、测频法精度随着被测信号频率下降而下降。为了恒定测频精度,可采用高频率稳定度和高精度的恒温可微调的晶体振荡器作标准频率发生器。2.1.3、测频模块功能CPLD中各模块用VHDL语言编写,计数器控制模块control程序见附2,CPLD 计数器模块count程序见附3,经Quartus编译,组成顶层原理图,如图3所示。图3 CPLD测评模块被测信号从control的fs端输入,标准频率信号从control的fx端输入,门控信号从control的gate端输入,control端输入的clr信号用于CPLD工作的初始化,在进行频率测量时,步骤如下: 1. 令clr=1,使得CPLD系统初始化,此时,不

7、会对标准频率和被测频率记数,计数值归零并且记数模块的输出均为0。clr=0时允许记数测频;2. 由门控信号将control的gate端置高电平, 预置门开始定时, 此时由被测信号fx的上升沿打开两个计数器count分别对标准频率和被测频率进行计数,count:inst6和count:inst7均是32位二进制计数器,输出8位数据总线,单片机给地址BA来分4次将32位数据全部读出。3. 预置门定时结束信号把control的gate端置为低电平(由单片机来完成),在被测信号的下一个脉冲的上升沿到来时,count停止对标准频率和被测频率的计数。4. 记数结束后,control的end_count端将

8、输出一个低电平信号表示测量记数的结束,单片机得到此信号后,即可利用A,B分别读回count:inst6和count:inst7的计数值,并根据等精度测量计算公式进行运算,计算出被测信号的频率。2.2、系统总体设计硬件电路包括按键控制模块、显示模块、以及单片机和CPLD主控模块。设计器件采用Atmel公司的单片机AT89S52和Altera公司的EPM240T100C5N。按键控制模块设置1个测频开始按键;显示模块用8位共阴极数码管,并且由74HC245驱动;CPLD模块用于对标准频率和被测信号频率的记数并且把测得的数据反馈给单片机,CPLD标准频率采用50MHz,被测信号频率范围为050MHz

9、;单片机模块完成整个测量电路的测试控制、数据处理,显示输出部分也由单片机来完成。整个系统的系统框图如图4所示。被测频率数码管显示电路CPLDMCU标准频率按键控制电路图4 系统框图2.3、按键电路设计本系统对外只有一个,如图5所示,此按键用于与单片机的人机交互,实现测频的开始控制。图5 按键电路2.4、显示电路设计系统显示采用8位共阴极LED数码管,8位的位选端接74HC138的8位输出端,74HC138的3位地址输入端接单片机的3个I/O口;LED的段选端通过串联一个330电阻和74HC245连接,以增强带负载能力。具体电路如图6所示。 图6 显示电路2.5、单片机小系统电路单片机选用Atm

10、el公司的AT89S52,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。为使单片机能正常工作,单片机必须外接必要的晶振电路和复位电路,还有电源、数字地等,具体的电路连接如图7所示。图7 单片机小系统电路2.6、CPLD小系统电路CPLD选用Atmel公司的EPM240T100C5N。闪存

11、类型,具有192个宏单元,80个I/O口线,5.9ns传播延时时间,频率201.1MHz。如图8所示。图8 CPLD小系统电路EPM240T100C5N的系统电源是3.3V,而系统供电电源是5V,所以必须用LDO进行降压稳压,如图9所示。图9 CPLD系统电源电路EPM240T100C5N通过JTAG接口进行程序下载及测试仿真,相关JTAG引脚的定义为:TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式。如图10所示。图10 CPLD系

12、统JTAG接口电路3、 软件设计3.1、总体程序流程图各种测试功能流程如下:系统初始化后,由键盘扫描子程序判断按键是否按下。若按键按下则马上跳转到按键处理程序,处理完之后进行对CPLD数据的读取,读取之后进行相应的公式运算,随后将运算结果处理存入LED显示的数据数组,最后进行LED显示。总体程序流程图如图11所示。图11 总体程序流程图3.2、子程序流程图按键处理子程序流程图如图12所示。按键处理子程序只要是对CPLD的控制,首先对CPLD初始化,计数器清零,然后给门控信号有效可以进行测频记数,最后判断测频记数是否结束,若CPLD没有给单片机测频结束的信号则单片机一直处于等待的状态。图12 子

13、程序流程图4、 功能仿真结果分析CPLD的8位fs_count、fx_count计数输出端分别与单片机的P0、P2口相连。当单片机检测到计数结束标志end_count=0时产生地址信号B、A,并分时从CPLD读取数据, 单片机按测频公式进行运算。CPLD模块的功能仿真图如图13所示。在B,A取“00”,end_count=0时,在fs_count、fx_count端口有稳定的数据输出,并且可以看出输出的计数值正是gate门控信号有效期间fs、fx信号的脉冲个数,达到了预期的目的。图13 CPLD功能仿真图 5、 小结本设计以单片机为控制器件, 结合CPLD高速、高可靠性、可编程的特点,实现了由

14、单片机进行控制、CPLD完成各种测试功能的等精度频率计的设计,克服了传统频率计测量精度随被测信号频率下降而降低的缺陷, 提供了等精度频率的测量,测频全域相对误差为百万分之一,仿真结果表明系统设计可行,可靠性高,完成了预定的技术指标。参考文献1 李斌,陈建辉,陈维,邱鹏,基于CPLD及C语言的等精度频率计设计J,电测与仪表,2006年07期。2 毛智德,吕善伟,基于FPGA的等精度频率计设计J,电子测量技术,2006年04期。3 裴立云,朱静,王守权,基于单片微机控制的等精度频率计设计制作J,电脑学习,2007年01期。4 朱彬,孙海山,基于STC89C51的等精度频率计研制J,中国仪器仪表,2

15、007年08期。5 李宝营,赵永生,祖龙起,牛悦苓,基于单片机的等精度频率计设计J,微计算机信息,2007年26期。6 毛文宇,吴剑文,李伟斌,等精度频率计的设计J,科技咨询导报,2007年29期。7 魏景田,基于单片机和CPLD的等精度频率计设计J,科技资讯,2007年34期。8 V. Yu. Teplov,A. V. Anisimov. Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier EffectJ ,20029 Yeager Br

16、ent.How to troubleshoot your electronic scaleJ.Powder and Bulk Engineering. 1995附1 单片机程序#include<reg52.h>sbit gate_key=P10; /唯一的一个按键开关sbit gate=P11;/门控信号位sbit clr=P12;/对CPLD所有计数器清零信号位sbit B_add=P13;/读数据时的高地址位sbit A_add=P14;/读数据时的高地址位sbit eend=P15;/CPLD记数结束位sbit dis_add1=P14; /LED显示的位选地址(外界38译码

17、器)sbit dis_add2=P16;sbit dis_add3=P17;#define duanxuan P3 /LED段选#define fs_buf P0 /P0接收标准频率信号记数数值,分4次读取32位二进制数值#define fx_buf P2 /P2接收被测信号记数数值,分4次读取32位二进制数值unsigned long fs_data;/标准频率信号记数数值寄存器unsigned long fx_data;/被测信号记数数值数值寄存器unsigned long fx;/被测信号频率值unsigned long fs=50000000; /标准频率为50MHzunsigned

18、char dis8;/8位LED显示的数值寄存数组unsigned char code smgduan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /共阴极LED显示数组表void delayms(unsigned int t); /毫秒级别的延时函数void main(void)gate=0; /初始化CPLD,门控信号清零clr=0; /让CPLD计数器清零while(1)if(!gate_key)/按键按下时处理clr=1;/CPLD计数器清零delayms(1); /延时1ms给硬件反应时间clr=0;/允许记数delayms(

19、1);gate=1;/打开门控信号,开始记数delayms(1500); /延时1.5sgate=0; /关闭门控信号while(eend); /等待CPLD给记数结束信号fs_data=0x00000000;/对数值寄存器清零,便于数值的接收,否则出错fx_data=0x00000000;B_add=0;/根据B_add、A_add地址的不同分时读取计数器的数值A_add=0;delayms(1);fs_data+=fs_buf;fx_data+=fx_buf;fs_data<<=8;fx_data<<=8;B_add=0;A_add=1;delayms(1);fs_

20、data+=fs_buf;fx_data+=fx_buf;fs_data<<=8;fx_data<<=8;B_add=1;A_add=0;delayms(1);fs_data+=fs_buf;fx_data+=fx_buf;fs_data<<=8;fx_data<<=8;B_add=1;A_add=1;delayms(1);fs_data+=fs_buf;fx_data+=fx_buf;fx=fs*fx_data/fs_data;/根据被测频率计算公式计算被测信号频率dis0=fx%10; /LED显示的各位存入dis数组dis1=fx%100/

21、10;dis2=fx%1000/100;dis3=fx%10000/1000;dis4=fx%100000/10000;dis5=fx%1000000/100000;dis6=fx%10000000/1000000;dis7=fx/10000000;dis_add3=0;/给38译码器地址,送位选dis_add2=0;dis_add1=0;duanxuan=smgduan(dis0); /送段选delayms(2);duanxuan=0x00; /关闭LED显示,消隐dis_add3=0;dis_add2=0;dis_add1=1;duanxuan=smgduan(dis1);delayms(

22、2);duanxuan=0x00;dis_add3=0;dis_add2=1;dis_add1=0;duanxuan=smgduan(dis2);delayms(2);duanxuan=0x00;dis_add3=0;dis_add2=1;dis_add1=1;duanxuan=smgduan(dis3);delayms(2);duanxuan=0x00;dis_add3=1;dis_add2=0;dis_add1=0;duanxuan=smgduan(dis4);delayms(2);duanxuan=0x00;dis_add3=1;dis_add2=0;dis_add1=1;duanxua

23、n=smgduan(dis5);delayms(2);duanxuan=0x00;dis_add3=1;dis_add2=1;dis_add1=0;duanxuan=smgduan(dis6);delayms(2);duanxuan=0x00;dis_add3=1;dis_add2=1;dis_add1=1;duanxuan=smgduan(dis7);delayms(2);duanxuan=0x00; void delayms(unsigned int t)/毫秒级别的延时函数unsigned int i,j;for(i=0;i<t;i+) for(j=0;j<123;j+) 附

24、2 CPLD的计数器控制模块VHDL程序library ieee;use ieee.std_logic_1164.all;entity control isport(gate,fs,fx,clr:in std_logic; -gate门控信号,fs标准频率信号,fx被测频率out1,out2,eend:out std_logic); -计数器实际计数的是out1、out2信号end control;architecture one of control is signal Q:std_logic;begin process(gate,fx) beginif (fx'event and fx='1') thenQ<=gate;end if; end process; process(fs,fx,clr) beginif clr='1' thenout1<='0'out2<='0'elsif Q='1' thenout1<=fs;out2<=fx;end if; end process; eend<=Q;end one;附3 CPLD 计数器模块library ieee;use ieee.std_l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论