基于AVR微控制器的交流信号峰值检测与校正
扫描二维码
随时随地手机看文章
摘要:微控制器外围电路的设计已经是一个比较成熟的领域,相比硬件,软件系统的研发周期更短,投入更少,在中国更加具有发展空间。基于AVR单片机的硬件结构和工作原理,采用一种全新的检测交流信号峰值的算法,并辅以相应的自校正算法来实现精确的峰值检测。通过硬件上的实现证明此种算法的速度非常快,精度高达0.1%,在测控工业应用中具有非常好的前景。
关键词:峰值检测;自我校正;算法
0 引言
单片机在民用电子产品中的应用主要以测量和控制为主。一个完整的单片机系统除了健全的软件系统外,往往还需要外围电路的支持。而现如今,对一些传统电路的设计已经非常成熟,因此在硬件上要想有所突破要比在软件算法的突破难得多。拿峰值检波电路来说,理论上,交流电源在正半周的一段时间内,通过二极管对电容充电,使电容上的电压逐渐趋近于峰值电压。只要RC足够大,可以认为其输出的直流电压数值上十分接近于交流电压的峰值。但是由于泄放电流的影响,输出电流很难精确地等于输入电流的峰值。尽管有很多改良后的解决方案,但无论是哪一个种检波电路,它们的一个相通的缺点就在于电路是非线性的。非线性的电路使内部的软件系统不能用相对简单的方法来实现系统误差的校正。系统误差是指在相同的条件下(包括温度,电路,测量工具等),误差值随输入值按一定规律变化,这种变化可以是线性或非线性的。非线性系统误差通常采用查表法来修正,通过实际校准将各校准点的数据存入校准表中,在以后的实际测量中,通过查表求得修正了的测量结果,因此需要建立大量的校正点数据来提高计算结果的准确度,增加算法的计算量和复杂程度就不可避免的了。一个系统研发人员追求的是简洁度与先进性,而不是复杂度,因此简化外部模拟输入电路是当务之急。
1 硬件电路设计
图1给出的是精密电压表与精密电流表的模拟输入部分电路。整个电路只用到放大器与分压电路,设计简洁,而且在低频区系统误差是线性的,因此用作AVR内部ADC的模拟输入电路。
不足的是,图l中的LM324放大器对高频信号的频率响应不理想。如果用传统的峰值计算的算法,利用Nyquist定理,在采样频率不小于信号频率的条件下,对多个样本的幅值进行综合运算如下:
这种方法对采样频率有较高的要求,尤其是高频输入的时候,要求高速的ADC,而且样本数过大会造成计算量加大,所以要想在高频区有所应用非常困难。如果使用专用转换芯片又会增加产品制作的成本,而且存在系统误差难测算的问题。因此笔者在硬件设计和软件设计上都做出了一些新的尝试。
硬件电路方面,借助图2的频率测量电路和AVR的输入捕捉功能(ICP)配合来测算输入信号的频率。74HCU04是高速的16进制CMOS反相器,传输时间很短,具有很好的频率特性。2 正弦波峰值测量理论的建立
算法上,通过测算出来的信号周期值,在1/4个周期上任取两点就可以推导求出信号的峰值,下面是对该方法的推导和求证。
首先,利用AVR ATmega64的定时器1的输入捕捉功能,在单位圆的1/4周期内截取两个点yl,y2。无论它的捕捉属性是上升沿还是下降沿,因为延时的关系不可能绝对准确地捕捉到电平翻转的瞬间时刻,也就是说检测的初相不同于真实的初相,又因为初相会随着峰值和频率发生变化,因此不能用勾股定理中使用相位相加为90度方法取出两点再求出峰值。具体的推导如下。
在公式(17)中,y1和y2的相位是已知的,幅值可以通过内部ADC采样得到。那么,求峰值的问题就迎刃而解了。
3 算法实现
前面提到,通过AVR内部的ICP捕捉到的初相和实际初相有偏差,但因为在下一个周期来临的时刻又会出现相同的偏差,所以并不影响周期计算的结果。只要利用Timerl的ICP中断服务程序,就可以轻松求得信号周期,然后再将y1的相位增量(φ1=30所对应的周期分量:周期的1/12)加到输出比较寄存器上,以此来控制ADC的启动并对y1进行采样。同时利用输出比较中断服务程序和y2的相位增量,开启ADC并对y2进行采样。
因为外部的模拟输入部分是线性电路,在实际测量时,只要取两点做为校正点,读取和测取两组真实值和误差值,就能求得下面二元二次方程的解Ki和K0:
4 总结
本文中采用一种新的峰值测算方法,打破传统方法中对硬件的过度依赖,不仅方法新颖,而且大大简化了硬件电路的设计,将测控功能最大程度地转移到软件系统中来实现,使得校正工作变得十分简单而有效。同时,这种检测方法具有超乎寻常的高精度,可达O.1%,为工业测控的一些技术难题提供了很好的解决方案。