基于AVR微控制器的交流信号峰值检测与校正
算法上,通过测算出来的信号周期值,在1/4个周期上任取两点就可以推导求出信号的峰值,下面是对该方法的推导和求证。
首先,利用AVRATmega64的定时器1的输入捕捉功能,在单位圆的1/4周期内截取两个点yl,y2。无论它的捕捉属性是上升沿还是下降沿,因为延时的关系不可能绝对准确地捕捉到电平翻转的瞬间时刻,也就是说检测的初相不同于真实的初相,又因为初相会随着峰值和频率发生变化,因此不能用勾股定理中使用相位相加为90度方法取出两点再求出峰值。具体的推导如下。
![](http://m.amcfsurvey.com/editerupload/fetch/20130823/163012_2_0.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20130823/163012_2_1.jpg)
在公式(17)中,y1和y2的相位是已知的,幅值可以通过内部ADC采样得到。那么,求峰值的问题就迎刃而解了。
3 算法实现
前面提到,通过AVR内部的ICP捕捉到的初相和实际初相有偏差,但因为在下一个周期来临的时刻又会出现相同的偏差,所以并不影响周期计算的结果。只要利用Timerl的ICP中断服务程序,就可以轻松求得信号周期,然后再将y1的相位增量(φ1=30所对应的周期分量:周期的1/12)加到输出比较寄存器上,以此来控制ADC的启动并对y1进行采样。同时利用输出比较中断服务程序和y2的相位增量,开启ADC并对y2进行采样。
因为外部的模拟输入部分是线性电路,在实际测量时,只要取两点做为校正点,读取和测取两组真实值和误差值,就能求得下面二元二次方程的解Ki和K0:
4 总结
本文中采用一种新的峰值测算方法,打破传统方法中对硬件的过度依赖,不仅方法新颖,而且大大简化了硬件电路的设计,将测控功能最大程度地转移到软件系统中来实现,使得校正工作变得十分简单而有效。同时,这种检测方法具有超乎寻常的高精度,可达O.1%,为工业测控的一些技术难题提供了很好的解决方案。
评论