频率的概念就是1 s时间内被测信号的周期个数,最直接的测量方法就是单位时间内计数法,这种方法比较适合高频测量。低频通常用测周期法。这两种方法的测量精度不固定,与被测信号的范围相关。
等精度频率测量法融合以上两种方法的优点,可兼顾低频与高频信号;但较以上两种方法而言,等精度频率测量有较高的测量精度,且误差不会随着被测信号频率的改变而改变。
1等精度频率测量原理
等精度频率测量原理框图如图1所示。图中计数器是带使能控制的32位计数器,EN是计数允许使能信号,高电平允许计数。计数器1对基准时钟信号fb计数,计数器2对被测信号fx计数。D触发器实现对被测信号fx上升沿检测,实现门控信号与fx上升沿同步,从而保证计数器2对被测信号计数刚好为整数个周期,零误差。
测量过程控制时序波形如图2所示。测量开始,t0时刻MCU发出一个清零信号Clr,使计数器和D触发器置0;t1时刻MCU发出测量启动信号Gate,使D触发器输人D为高电平;在被测信号fb上升沿到来t2时刻,D触发器Q端才被置1,使计数器1和计数器2的EN同时为1,计数器开始计数,系统进入计数允许周期。这时,计数器1和2分别对基准时钟信号和被测信号同时计数。一段时间过后,t3时刻MCU发出停止信号,即D触发器输入D为低电平,但此时计数器仍然没有停止计数,直到下一个被测信号的上升沿t4时刻到来时,D触发器Q输出0将这2个计数器同时关闭。
由图2可见,Gate的宽度Tc和发生的时间都不会直接影响计数使能信号EN,EN总是在被测信号fx上升沿改变,从而保证了被测信号被计数的周期总是整数个周期nTx,而与被测信号的频率无关。正确理解这点,是理解等精度频率测量的关键。由于测量过程中不能保证基准时钟周期的完整性,还会引入测量误差。这种随机误差dt最多只有基准时钟fb信号的一个时钟周期。由于fb的信号通常由高稳定度的高频晶体振荡器发出,任何时刻的绝对测量误差只有1/N1。例如,对于门控信号接近1 s的测量过程,fb取100 MHz的晶振,最大误差可以达到10-8。
2方案设计
2.1系统方案
单片机定时器/计数器电路如图3所示。当C/T=0,TR=1,GATE=1时,单片机内部计数器时钟开关可受外部引脚INTn控制,这样就可以实现单片机内部计数器与外部计数器同步开关。
正是基于单片机这种电路结构,根据等精度原理,提出图4所示的系统框图。单片机加CPLD结构,利用单片机内部定时器定时,外部CPLD实现等精度测量逻辑电路和计数功能。基准时钟fb由单片机晶振提供,频率为单片机时钟晶振12分频后所得机器时钟。预置闸门由单片机引脚P1.0输出控制,计数器清零和复位由单片机引脚P1.1输出控制,单片机引脚P3.2是内部定时器使能开关控制引脚。
2.2单片机与CPLD接口设计
图5所示为一种基于总线的接口方案,采用三总线(数据、控制、地址)结构,用于实现单片机与CPLD之间的数据传输。
单片机P0口为双向数据总线,与CPLD的通用IO口连接,完成数据和低8位地址传送。控制总线包括单片机读写控制总线RD和WR,以及地址锁存信号ALE(Address Lock Enable)。地址总线A15(P2.7)通过CPLD的全局输入信号引脚输入。
2.3 CPLD电路
CPLD内部电路原理框图如图6所示。当预置闸门GATE输入高电平时,由于DFF触发器为边沿触发器,在上升沿时才将数据输出,所以Q输出端并不立即置1,只有当外部信号上升沿到来时,Q才为1,使能计数器和定时器。这样保证了计数器和定时器在被测信号的上升沿到来时同时有效。当预置闸门GATE=0关闭时,两计数器的允许信号同样在被测信号的上升沿到来时同时关闭。由于基准信号的定时器与被测信号严格同步,所以理论上最大误差只有基频的一个周期。CPLD内计数器为32位,在预置时间内,只要计数器不溢出,即可准确测量被测信号个数。
3方案实现
3.1电路原理
电路原理如图7所示。图中给出了单片机(STC89C52RC)与CPLD(ATF1504AS)的具体接口电路,LCD1602接口电路,带ISP下载接口的CPLD电路,被测信号从J1直接输入给CPLD I/O引脚。这里没有给出信号前置调理与波形整形电路。
3.2 CPLD电路设计
CPLD开发选择Altera公司的EDA软件QuartusII和目标器件EPM7064SLC44=10,需要完成电路设计输入、编译、仿真、引脚绑定(引脚分配请参考电路图),并编译得到最终配置文件*.pof。然后再使用Atmel公司提供的转换工具POF2JED软件将前面得到的*.pof文件转换成*.jed文件,再用AtmelISP软件将*.jed文件下载到CPLD器件ATF1504即可。
以下是采用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,实现了宽范围高精度的频率测量。该方案具有结构简单,成本低等优点,具有广阔的市场前景。