用PIC16F87X单片机实现高分辨率频率计的一种方法
扫描二维码
随时随地手机看文章
1 引言 随着电子技术的迅速发展,以单片机为控制核心的控制器件,已经全面渗透到测试仪器和计量检定的各个方面。同时,频率计作为一种常用工具,在工程技术和无线电测量、计量等领域的应用十分广泛。本文介绍了一种以pic16f87x系列单片机为控制器的高分辨率频率计的实现方法。 该方法设计的频率计主要用来测量脉冲频率。它采用lcd图形液晶显示,清晰度高,可视范围广,可外接晶体频率源,具有测量速度快、分辨率高的优点。 2 设计原理 pic16f877a单片机内部集成有捕捉/比较/脉宽调制pwm (ccp)模块。当ccp工作在捕捉(capture)方式时,可捕捉外部输入脉冲的上升沿或下降沿,并产生相应的中断。 pic16f877a单片机内部还集成了定时器/计数器模块,在本方案中采用其中的tmr1作为定时器,该定时器的工作原理是通过tmr1“寄存器对”tmr1h:tmr1l从0000h递增到ffffh,之后再返回0000h时,会产生高位溢出,并且将会设置溢出中断标志位tmr1if为i,同时引起cpu中断响应。 在均匀的脉冲序列中,脉冲频率值等于单位时间内发生的脉冲次数。根据这个原理,可以采用pic16f87x系列单片机(本文以pic16f877a型单片机为例)内置定时器模块tmr1计时,同时使用ccp模块的捕捉功能,每间隔n(n=1,4,16)个脉冲捕捉一次并产生中断,记录第1个和第(m-1)*n+1个脉冲到来时的定时器计时t1和tm,如图1所示。图1脉冲捕捉示意图 用被捕捉的脉冲次数除以第1次和第(m-1)*n+1次脉冲之间间隔的时间即可得到脉冲频率值。因此,脉冲频率值计算公式为: 3 被测频率值范围 在测试过程中,需要特别注意的是,两次ccp中断的时间间隔必须大于1次中断服务的执行时间。否则,如果在中断服务程序执行时又发生ccp中断,就不能正常工作。 根据上述条件,则有: 由上式得到: 式中: sccp — 表示捕捉分频倍数。 fx — 表示被测频率t tcyc —表示系统时钟周期。 n —表示中断所需最小指令周期数。 设定:sccp=16,n=40,tcyc= 4/20mhz = 0.2 us,则: fx<2,000,000hz 由此可知,实际频率测量范围在0-2 mhz之间。 若需测量更大频率,可以根据需要在待测频率和cpu的ccp口之间接入相应倍数的分频器,每接入一个1/n倍分频器,可测频率范围可扩大n倍(如图2所示)。如在待测频率和ccp口之间接入三个1/10倍分频器,则可测频率范围为0~2 ghz。图2 cpu外接示意图 4 程序设计 4.1中断程序 中断程序流程图如图3所示。图3中断子程序流程图 中断服务子程序如下: void interrupt tmr i_ccp2_ini(void)
{
if(tmr1if==i) //判断是否定时器中断
{
tmriif=0; //tmr1中断标志位