一、测量原理
电路如上图(电源电路略)。外部频率信号从单片机CCP1(RC2)脚输入,测量结果显示在液晶屏上。
PIC16F877A单片机内部有2个CCP模块。当它工作在PWM方式时。可以产生周期和电平宽度均可由编程决定的PWM波形;当它工作在捕捉方式时。可以捕捉外部输入脉冲的上升沿或下降沿,当输入信号发生边沿跳变时,CCP模块立即把当时TMR1的16位计数值放入CCPRxH和CCPRxL寄存器。并产生相应的中断。利用CCP模块的捕捉功能,可以很容易地完成。PWM信号的周期、频率、脉宽、占空比等参数的测量。
PWM信号参数的测量以周期测频法为基础。原理如右图所示。把单片机的CCP1模块设置为捕捉模式,先把CCP1设置为捕捉脉冲的上升沿。当脉冲信号上升沿到来时。触发CCP中断,并在中断服务程序中记录下此时TMR1寄存器中16位的值T1:然后把CCP1模块设置成捕捉脉冲下降沿,当脉冲信号下降沿到来时,再次触发CCP中断。并在中断服务程序中记录下此时TMR1寄存器中16位的值T2;最后把CCP1模块设置成捕捉脉冲上升沿,当脉冲信号上升沿到来时,触发CCP中断,并在中断服务程序中记录下此时TMR1寄存器中16位的值T3,这样就完成了PWM信号一个周期的测量。示例程序如下:
通过T1~T3可算出PWM信号的周期、频率、脉宽、占空比等。当PIC16F877A使用4MHz晶振时。时钟周期=1/4MHz=250ns,指令周期=1μs,TMR1寄存器中16位数值的单位就是μs。PWM信号各参数的计算方法如下:信号周期:T=(T3-T1)μs;信号频率:F=1000000/T;脉冲宽度:P=(T2-T1)μs;占空比:R=P/T×100%。
为了提高准确性。可以重复测量多个周期的PWM信号参数,以平均值为最终测量结果。需要注意的是。两次CCP中断发生的时间间隔必须大于一次中断服务的执行时间。否则,就会在中断服务程序执行过程中又发生CCP中断,其测量结果将会出错。如果发现上述状况,可以改变CCP1CON寄存器的设置值,使CCP1模块每4个脉冲上升沿或每16个脉冲上升沿捕捉一次,增大两次中断发生的时间间隔。如果还不能达到要求,则可以通过使用分频器对输入脉冲信号进行分频处理后,再由CCP1脚输入,这样就可以测量更高频率的PWM信号。
二、实测效果
该PWM参数测量仪的测量范围如下:输入信号电压:直流0V~5V:输入信号电流:≤20mA;信号频率范围:10Hz~20kHz;LCD1602字符液晶屏依次显示周期T、频率F、脉宽P和占空比R。为了检测该测量仪的测量效果。用信号发生器产生一组频率为1kHz,占空比为50%的PWM方波信号,接到PIC16F877A的CCP1(RC2)脚,得到的实际测量结果如下图所示。