ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:26.96KB ,
资源ID:12092721      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12092721.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的AD采集的滤波算法.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的AD采集的滤波算法.docx

1、基于单片机的AD采集的滤波算法基于单片机的AD采集的滤波算法1引言理论上讲单片机从A/D芯片上采集的信号就是需要的量化信号,但是由于存在电路的相互干扰、电源噪声干扰和电磁干扰,在A/D芯片的模拟输入信号上 会叠加周期或者非周期的干扰信号, 并会被附加到量化值中,给信号带来一定的 恶化。考虑到数据采集的实时性和安全性,有时需要对采集的数据进行软处理, 一尽量减小干扰信号的影响,数字滤波算法就算通过特定的计算机处理, 降低干扰信号中的比例,故实际上是一种基于单片机的程序滤波。2单片机的AD接口以AVR单片机atmega128为例,atmega128是10位的逐次逼近式 ADC先 介绍一下AD转换的

2、主要技术指标。2.1 A/D转换器的主要技术指标(1)分辨率ADC 的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC勺分辨率就是12位,或者说分 辨率为满刻度FS的1/4096。一个10V满刻度的12位ADC能分辨输入电压变化 最小值是 10VX 1/4096=2.4mV。(2)偏移误差偏移误差是指输入信号为零时,输出信号不为零的值,所以有时又称为零值误差。假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定 是直线,这条直线与横轴相交点所对应的输入电压值就是偏移误差。(3)满刻度误差满刻度误差又称为增益误差。ADC的满刻度误差

3、是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。(4)线性度线性度有时又称为非线性度,它是指转换器实际的转换特性与理想直线的 最大偏差。(5)绝对精度在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之 差的最大值,称为绝对精度。对于ADC而言,可以在每一个阶梯的水平中点进行 测量,它包括了所有的误差。(6)转换速率ADC 的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。2.2 AVR单片机内部ADO介(1)预分频与转换时间在通常情况下, ADC的逐次比较转换电路要达到最大精度时,需要50kHz2

4、00kHz之间的采样时钟。在要求转换精度低于 10位的情况下,ADC勺采 样时钟可以高于200kHz,以获得更高的采样率。ADC 模块中包含一个预分频器的 ADC寸钟源,它可以对大于100KHz的系统 时钟进行分频,以获得合适的 ADC时钟提供ADC使用。预分频器的分频系数由 ADCSR寄存器中的ADPS位设置的。一旦寄存器 ADCSR中的ADEF位置“ 1”( ADC 开始工作),预分频器就启动开始计数。ADEN位为“ 1”时,预分频器将一直工 作;ADEh位为“ 0”时,预分频器一直处在复位状态。AVR的ADC完成一次转换的时间见表4.1。从表中可以看出,完成一次 ADC专换 通常需要13

5、-14个ADC寸钟。而启动ADC开始第一次转换到完成的时间需要 25个ADC寸钟,这是因为要对ADC单元的模拟电路部分进行初始化表4.1 ADC转换和采样保持时间转换形式启动ADC后第一次转换 正常转换,单端输入 自动触发方式米样保持时间13.5个ADC寸钟1.5个ADC寸钟2个ADC寸钟1.5/2.5个ADC寸乍中完成转换总时间25个ADC寸钟13个ADC寸钟13.5个ADC寸钟13/14个ADC寸钟正常转换,差分输入真当ADCSR寄存器中的ADS(位置位,启动ADC专换时,A/D转换将在随后ADC寸钟的上升沿开始。一次正常的 A/D转换开始时,需要1.5个ADC寸钟周期的采样保持时间(AD

6、Ct次启动后需要13.5个ADC寸钟周期的采样保持时间) 当一次A/D转换完成后,转换结果写入ADCt据寄存器,ADIF(ADC中断标志位) 将被置位。在单次转换模式下,ADS(也同时被清零。用户程序可以再次置位ADSC 位,新的一次转换将在下一个 ADC时钟的上升沿开始。当ADCS置为自动触发方式时,触发信号的上升沿将启动一次 ADC转换。 转换完成的结果将一直保持到下一次触发信号的上升沿出现,然后开始新的一次 ADC转换。这就保证了使ADC每隔一定的时间间隔进行一次转换。在这种方式下, ADC需要2个ADC寸钟周期的采样保持时间。在自由连续转换模式下,一次转换完毕后马上开始一次新的转换,此

7、时,ADS(位一直保持为“1”(2) ADC输入通道和参考电源的选择寄存器ADMU中的MUXr和REFS1 REFSG位实际上是一个缓冲器,该缓冲器 与一个MCI可以随机读取的临时寄存器相连通。 采用这种结构,保证了 ADC输入 通道和参考电源只能在ADC专换过程中的安全点被改变。在ADC专换开始前,通 道和参考电源可以不断被更新,一旦转换开始,通道和参考电源将被锁定,并保 持足够时间,以确保ADC专换的正常进行。在转换完成前的最后一个ADC时钟周 期(ADCSR的 ADIF位置“ T时),通道和参考电源又开始重新更新。注意,由 于A/D转换开始于置位ADSCH的第一个ADC时钟的上升沿,因此

8、,在置位 ADSC 后的一个ADC时钟周期内不要将一个新的通道或参考电源写入到 ADMUXJ存器 中。改变差分输入通道时需特别当心。一旦确定了差分输入通道,增益放大器需 要125s的稳定时间。所以在选择了新的差分输入通道后的 125?s内不要启动A/D 转换,或将这段时间内转换结果丢弃。通过改变 ADMU中的 REFS1 REFS睐更 改参考电源后,第一次差分转换同样要遵循以上的时间处理过程。1)当要改变ADC俞入通道时,应该遵守以下方式,以保证能够选择到正确的通道:在单次转换模式下,总是在开始转换前改变通道设置。尽管输入通道改变发 生在ADS(位被写入“ 1”后的1个ADC寸钟周期内,然而,

9、最简单的方法是等到 转换完成后,再改变通道选择。在连续转换模式下,总是在启动ADC开始第一次转换前改变通道设置。尽管 输入通道改变发生在ADS(位被写入“1”后的1个ADC寸钟周期内,然而,最简单的方法是等到第一次转换完成后再改变通道的设置。然而由于此时新一次的转 换已经自动开始,所以,当前这次的转换结果仍反映前一通道的转换值, 而下一次的转换结果将为新设置通道的值。2)ADC电压参考源ADC 的参考电压(VREF决定了 A/D转换的范围。如果单端通道的输入电 压超过VREF将导致转换结果接近于 0x3FF(1023)。ADC的参考电压 VREF可以 选择为AVCC或芯片内部的2.56V参考源

10、,或者为外接在AREF引脚上的参考电压 源。AVCC通过一个无源开关连接到ADC内部2.56V参考源是由内部能隙参考 源(VBC通过内部的放大器产生的。注意,无论选用什么内部参考电源,外部 AREF引|脚都是直接与ADC相连的,因此,可以通过外部在AREF引脚和地之间并 接一个电容,使内部参考电源更加稳定和抗噪。可以通过使用高阻电压表测量 AREF引脚,来获得参考电源 VREF的电压值。由于VREF是一个高阻源,因此, 只有容性负载可以连接到该引脚。如果将一个外部固定的电压源连接到 AREF引脚,那就不能使用任何的内 部参考电源,否则就会使外部电压源短路。外部参考电源的范围应在 2.0V到AV

11、CC-0.2V之间。参考电源改变后的第一次 ADC专换结果可能不太准确,建议抛 弃该次转换结果。2.3 ADC转换结果A/D 转换结束后(ADIF = 1 ),在ADC数据寄存器(ADCL和ADCH中可以取 得转换的结果。对于单端输入的 A/D转换,其转换结果为:ADC = ( Vn X 1024) / V ref其中VIN表示选定的输入引脚上的电压,VREF表示选定的参考电源的电压。0x000 表示输入引脚的电压为模拟地,0x3FF表示输入引脚的电压为参考电压值减去一 个LSB对于差分转换,其结果为:ADC=(VOsVneG x GAINX 512/Vref例:若差分输入通道选择为 ADC3

12、-ADC210倍增益,参考电压2.56V,左端对齐(ADMUX=0xED ADC3|脚上电压 300mV ADC勿脚上电压 500mV 则 ADCR =(300-500) X 10X 512 / 2560 = -400 = 0x270 ADCL=OxO0 ADCH=0x9。若结果为右端对齐时(ADLAR“0” ),贝U ADCL=0x70 ADCH=0x023 ADC应用设计的深入讨论尽管AVR内部集成了 10位的ADC但是在实际应用中,要想真正实现10位 精度,比较稳定的ADC的话,并不象上一节中的例子那么简单。 需要进一步从硬 件、软件等方面进行综合的、细致的考虑。下面介绍一些在ADC设计

13、应用中应该 考虑的几个要点。3.1参考电压Vref的选择确定在实际应用中,要根据输入测量电压的范围选择正确的参考电压 Vref,以求得到比较好的转换精度。ADC的参考电压VREF还决定了 A/D转换的范围。如 果单端通道的输入电压超过 *EF,将导致转换结果全部接近于 0x3FF,因此ADC 的参考电压应稍大于模拟输入电压的最高值。ADC 的参考电压Vref可以选择为AVCC或芯片内部的2.56V参考源,或者 为外接在AREF引脚上的参考电压源。外接参考电压应该稳定,并大于 2.0V (芯 片的工作电压为1.8V时,外接参考电压应大于1.0V)。要求比较高的场合,建 议在Vref引脚外接标准参

14、考电压源来作为 ADC的参考电源。3.2模拟噪声的抑制器件外部和内部的数字电路会产生电磁干扰,并会影响模拟测量的精度。 如果ADC转换精度要求很高,可以采用以下的技术来降低噪声的影响:(1) 使模拟信号的通路尽可能的短。模拟信号连线应从模拟地的布线盘上通过, 并使它们尽可能远离高速开关数字信号线。(2) AVR的 AVcc引脚应该通过LC网络与数字端电源Vcc相连。(3) 采用ADC噪声抑制器功能来降低来自 MCI内部的噪声。(4) 如果某些ADC引脚是作为通用数字输出口使用,那么在 ADC转换过程中, 不要改变这些引脚的状态。3.3 ADC的校正由于AVD内部ADC部分的放大器非线性等客观原

15、因,ADC的转换结果会有误 差的。如果要获得高精度的ADC专换,还需要对ADC结果进行校正。具体的方法 请参考AVR应用笔记 AVR120( avr_app_120.pdf ),在这篇应用设计参考中详细 介绍了误差的种类,以及校正方案。3.3 ADC精度的提高在有了上述几点的保证后,通过软件的手段也能适当的提高 ADC勺精度。 如采用多次测量取平均,软件滤波算法等。在AVR应用中可以结合一种采样算法 的软件实现,可以将ADC的精度提高到11位或更高,当然这是在花费更多的时 间基础上实现的。4单片机实现数字滤波算法的优点(1)当今单片机多采用流水线结构,指令执行速度有很大提高。在系统时钟为 25

16、MHZ寸它的峰值速度可达25MIPS最大系统时钟频率已接近100MHz采用软件滤 波算法基本可满足测控系统实时性很强的要求。(2)数字滤波无需硬件,只用一个计算过程,不存在阻抗匹配问题,可靠性高, 尤其对频率很高或很低的信号进行滤波,数字滤波相对模拟滤波器的设计其优越 性更为显著。(3)数字滤波是用软件算法实现的,多输入通道可共用一个滤波程序, 不仅可 以大大降低系统开支,而且可以大大简化硬件电路设计。(4) 只要适当改变软件滤波器的滤波程序或运算参数, 就能方便地改变其滤波 特性,这对于低频干扰、随机信号的滤波会有较大的效果。5在单片机系统中常用的数字滤波算法为便于以下的程序书写方便,这里做

17、一个假设:假定从8位AD中读取数据, 如果是更高位的AD可定义数据类型为int,子程序为get ad()。5.1 一阶滞后滤波法硬件滤波电路中最常用的是一阶惯性 RC模拟低通滤波器,当采用这种模拟滤波器来抑制低频干扰时,要求滤波器有较大的时间常数和高精度的 RC网络,增 大时间常数有求增大R值,其漏电流也随之增大,从而降低了滤波效果。而采用数 字滤波算法来实现动态的RC滤波,则能很好的克服上述模拟滤波器的缺点。 在模 拟常数要求较大的场合这种方法显得更为实用,一阶惯性滤波算法对于周期干扰 具有良好的抑制作用,其不足之处是带来了相位滞后,导致灵敏度低。同时它不能 滤除频率高于采样频率二分之一(称

18、为奈奎斯特频率)的干扰信号。例如采样频率为100Hz,则它不能滤除50Hz以上的干扰信号。对于高于奈奎 斯特频率的干扰信号,应该采用模拟滤波器。假设X为输入,丫为滤波后的输出值, 则其公式为:yn=a*Xn+(1-a)*y n-i式中a为与RC值有关的一个参数。下面是实现一阶惯性滤波算法的程序。为加快程序处理速度假定基数为100,a=0100#defi ne a 50char value;char filter()char new value;new value=get ad();retur n (100-a)*value+a* new value;5.2 限副滤波法由于单片机系统中可能存在随

19、机脉冲干扰,或由于变送器不可靠而将脉冲干 扰引入输入端,从而造成测量信号的严重失真。对于这种随机干扰,限副滤波是一 种有效的方法。其基本方法是比较相邻(n和n-1时刻的两个采样值yn和yn-J。 然后根据经验确定两次采样允许的最大偏差。如果两次采样值yn和yn-1的差值超 过了所允许的最大偏差范围,则认为发生可随机干扰,并认为后一次采样值yn为 非法值,应予删除,删除yn后,可用yn-1代替yn。若未超过所允许的最大偏差范围, 则认为本次采样值有效。下面是实现限副滤波法的程序。A值可根据实际情况调整,value为有效值,new value为当前采样值滤波程 序返回有效的实际值#defi ne

20、A 10char value;char filter()char new value;new value=get ad();if (new value-valueA) II (value-newvalue A)retur n value;retur n new value;5.3 中位值滤波法中位值滤波法是对某一被测参数连续采样 n次(一般n取奇数),然后再把采样值按大小排列,取中间值为本次采样值。中位值滤波法能有效克服偶然因素引 起的波动或采样不稳定引起的误码等脉冲干扰。 对温度、液位等缓慢变化的被测参数用此法能收到良好的滤波效果,但是对于流量压力等快速变化的参数一般不 宜采用中位值滤波法。

21、下面是实现中位值滤波法的程序。N值可根据实际情况调整排序采用冒泡法#defi ne N 11char filter()char value bufN;char coun t,i,j,temp;for (co un t=0;co un tN;co un t+)value bufco un t=get ad();delay();for (j=0;jN-1;j+)for (i=0;ivalue bufi+1)temp=value bufi;value bufi=value bufi+1;value bufi+1=temp;return value buf(N-1)/2;5.4 算术平均滤波法算术平均

22、滤波法适用于对一般的具有随机干扰的信号进行滤波。 这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这 种情况。算术平均滤波法是要按输入的 N个采样数据,寻找这样一个丫,使得丫与各个米样值之间的偏差的平方和最小。在编写算术平均滤波法程序时严格注意两 点:一是对于定时测量,为了减小数据的存储容量,可对测得的值直接进行计算, 但由于某些应用场合,为了加快数据测量的速度,可采用先测量数据,并存放在存 储器中,测完N点后,再对N个数据进行平均值计算。二是选取适当的数据格式, 也就是说采用定点数还是采用浮点数。采用浮点数计算比较方便,但计算时间较 长,采用定点数可加快计算速度

23、,但必须考虑累加时是否产生溢出。例如数据为 14位二进制定点数时,采用双字节运算,当N4时,就可能产生溢出。下面是实现算术平均滤波法的程序。#defi ne N 12char filter()int sum=O;for(co un t=0;co un tN;co un t+)sum+=get ad();delay();return (char)(sum/N);5.5递推平均滤波法(又称滑动平均值滤波法)上面介绍的算术平均值滤波,每计算一次数据,需要测量N次。对于测量 速度较慢或要求计算速度较高的实时系统,该方法是无法使用的。例如某 ADC芯 片的转换速率为每秒钟10次,而要求每秒输入4次数据时

24、,则不能大于2。下面 介绍一种只需要进行一次测量,就能得到一个新的算术平均值的方法,即滑动平 均值滤波法。滑动平均值滤波法采用队列作为测量数据存储器 ,设队列的长度为N,每进行一次测量,把测量结果放于队尾,而扔掉原来队首的一个数据,这样在队 列中始终就有N个“最新”的数据。当计算平均值时,只要把队列中的N个数据 进行算数平均,就可得到新的算数平均值。这样每进行一次测量,就可得到一个新 的算术平均值。滑动平均值滤波法中的队列一般采用循环队列来实现。下面是实现递推平均滤波法的程序。#defi ne N 12char value bufN;char i=0;char filter()char cou

25、nt;int sum=0;value bufi+=get ad();if(i=N) i=0;for (co un t=0;co un tN,co un t+)sum=value bufco un t;return (char)(sum/N);5.6加权滑动平均滤波法在算术平均滤波和滑动平均滤波法中,N次采样值在输出结果中的比重是均等的,即1/N,用这样的滤波算法,对于时变信号会引入滞后,N越大,滞后越 严重。为了增加新的采样数据在滑动平均滤波法中的比重,以提高系统对当前采 样值中多受干扰的灵敏度,可以采用加权滑动平均滤波法。实质上它是前面介绍 的滑动平均滤波算法一种改进,即对不同时刻的数据加以

26、不同的权,通常越接近 现时刻的数据,权取得越大。加权滑动平均滤波算法适用于由较大纯滞后时间常 数的对象和采样周期较短的系统,而对于纯滞后时间常数较小,采样周期较长,变 化缓慢的信号,则不能迅速反映系统当前所受干扰的严重程度,滤波效果较差。5.7 复合滤波法单片机系统在实际应用中,所受到的随机干扰往往不是单一的,又是既要消 除脉冲干扰的影响,又要做数据平滑处理。因此,在实际应用中常常把前面介绍的 两种以上的方法结合起来使用,形成所谓的的复合滤波。例如,防脉冲扰动平均值 滤波算法就是一种实例。这种算法的特点是先用中位值滤波算法滤掉采样值中的 脉冲干扰,然后把剩下的各个采样值再进行滑动平均滤波。由于

27、这种滤波算法兼 容了中位值平均滤波算法和滑动平均滤波算法的优点,所以无论是对缓慢变化的 过程变量还是对快速变化的过程变量都能起到较好的滤波效果。6基于AVF单片机的去极值平均滤波法程序对3个通道交替进行AD转换,滤波时对窗口内的18个数据进行去极值取平 均值滤波。#i nclude #in elude #defi ne uint8 un sig ned char#defi ne uin t16 un sig ned intuin t8ucADC_select;/三通道AD选择uin t16uiadc_temp;/ AD转换结果volatileui nt16 ADC0_value;/ 0通道AD

28、数据volatileui nt16 ADC1_value;/ 1通道AD数据volatileuin t16 ADC2_value;/ 2通道AD数据/ 18个数据临时寄存器/*去极值平均滤波法子程序*/ ui nt16 arr18;ui nt16 average(ui nt16 arr18) uint8 i;uin t16 temp=O,max=O ,min=0x3ff;for (i=0;i18;i+)if (maxarri)mi n=arri;temp+=arri;temp=(temp-max-mi n)/16;return (temp); void adc_init( void )/*AD

29、C初始化DDRF&=0XF8;设置 PA0 PA1、PA2 口为输入PORT F&=0XFE;不使用片内上拉电阻ADCSRA= 0x00; / 关闭 ADCACSR = (1ACD); /disable comparatorADMUX=(1vvREFS1)|(1vREFS0)/选择片内基准电压源 2.56V;转换结果右对 齐;ADC0单端输入,Z轴输入。11100000/ADMUX = 0x00; / 外部 Vref,ADC0 通道ADCSRA=(1vvADEN)|(1vvADSC)|(1vADATE)|(1vvADIE)|(1vvADPS2)|(1vvADPS1)|(0ADPS0);/ADC

30、使能;ADC开始转换;连续转换;中断使能;64分频125K8MHz 系统时钟*ADC初始化*en d*/连续转换3个ADC!道的值*#pragma in terrupt_ha ndler adc_isr:15/AD转化完成进入中断void adc_isr( void) uiadc_temp = ADCL;uiadc_temp|=(uint16)ADCH8; /AD 转换结果存储 uiadc_temp=ADCL+ADCH*256 switch (ucADC_select)case 0 : / ADC0通道 数据处理ADMUX = 0xc1; / 切换到 ADC1通道,内部 VrefADCO_value = uiadc_temp;ucADC_select + ; / 切换到 ADC1通道break;case 1 : / ADC1通道数据处理ADMUX = 0xc2; / 切换到 ADC2通道,内部 VrefADC1_value= uiadc_temp;ucADC_select + ; / 切换到 ADC2通道break;case 2 : / ADC2通道 数据处理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1