以下是采用VerilogHDL硬件描述语言设计的CPLD内部电路源码:
3.3程序设计
整个测量过程由MCU控制完成,然后计算并把结果送LCD显示。测量开始,MCU首先发出清零CLR信号,对外部CPLD电路复位和计数器清零,还要将定时器软计数器清零,之后发出启动信号GATE=1,测量开始。MCU通过查询软计数器(定时中断加1),控制闸门时间大致在1 s左右,时间到,MCU立即发出停止信号GATE=0,随后查询引脚INT0,确认计数停止。之后,分别读回外部计数和内部计数器计数结果,MCU根据等精度原理算出信号频率,将结果送LCD显示。程序主流程和定时中断流程如图8所示。
4测试结果
笔者在实验室使用RIGOL-DG1015DDS信号发生器校准。通过修正单片机时钟偏差,22.118 4 MHz的12分频为1.843 2 MHz,对1 843 200 Hz修正86.95 Hz后带入程序计算,整数频点测量结果可以达到和信号发生器完全一致,接近零误差。特针对一些非整数频点进行测量,结果如表1所列,误差达到10
-7数量级,与理论值一致。
由于系统采用的是单片机机器时钟作为基准信号时钟,基准信号频率较低,使得测量精度不高;如果采用外部更高频基准信号做时钟信号,精度还可进一步提高。
结语
将等精度频率测量原理巧妙地用MCU+CPLD实现,设计了一种低成本、高性价比的频率计方案。MCU选择STC89C52RC,CPLD选择
Atmel公司的
ATF1504AS,实现了宽范围高精度的频率测量。该方案具有结构简单,成本低等优点,具有广阔的市场前景。