微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机频率测量原理

单片机频率测量原理

时间:11-13 来源:互联网 点击:

+ time0_new);

time0_old = time0_new;

if (++freq_time >= 100)

{

freq_time = 0; // 100ms到,

freq_to_disbuff(); // 将100ms内的脉冲计数值送显示

freq = 0;

}

time_1ms_ok = 0;

}

};

}

程序中LED扫描形式函数desplay(),以及脉冲计数值转换成BCD码并送显示缓冲区函数freq_to_disbuff()比较简单,请读者自己分析。

在该程序中,使用了两个定时计数器。T/C0工作在计数器方式,对外部T0引脚输入的脉冲信号计数(下降沿触发)。T/C2工作在CTC方式,每隔1ms中断一次,该定时时间即作为LED的显示扫描,同时也是限定时间的基时。每一次T/C2的中断中,都首先记录下T/C0寄存器TCNT0当前的计数值,因此前后两次TCNT0的差值(time0_new – time0_old)或(256 - time0_old + time0_new)就是1ms时间内T0脚输入的脉冲个数。为了提高测量精度,程序对100个1ms的脉冲个数进行了累计(在变量freq中),即已知限定的时间为100ms。

读者还应该注意频率的连续测量与LED扫描、BCD码转换之间的协调问题。T/C2中断间隔为1ms,因此在1ms时间内,程序必须将脉冲个数进行的累计、BCD码转换和送入显示缓冲区,以及LED的扫描工作完成掉,否则就会影响到下一次中断到来后的处理。

在本实例的T/C2中断中,使用了display_ok标志,将LED扫描分配在奇数ms(1、3、5、7、……),而将1ms的TCNT0差值计算、累积和转换等处理放在主程序中完成。另外由于计算量大的BCD码转换是在偶数ms(100ms)处理,所以程序中LED的扫描处理和BCD码转换处理不会同时进行(不会在两次中断间隔的1ms内同时处理LED扫描和BCD码转换),这就保证了在下一次中断到达时,前一次的处理已经全部完成,使频率的连续测量不受影响。

该实例程序的性能和指标为(假定系统时钟没有误差 = 4MHz):

ü 频率测量绝对误差:±10Hz。由于限定的时间为100ms,而且T/C0的计数值有±1的误差,换算成频率为±10Hz。

ü 被测最高频率值:255KHz。由于T/C0的长度8位,所以在1ms中,TO输入的脉冲个数应小于255个,大于255后造成T/C0的自动清另,丢失脉冲个数。

ü 测量频度:10次/秒。限定的时间为100ms,连续测量,所以为10次/秒。

ü 使用资源:两个定时器,一个中断。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top