一种AVR单片机的快速工频干扰滤除算法

发布者:PositiveEnergy最新更新时间:2016-10-25 来源: eefocus关键字:AVR单片机  工频干扰  滤除算法 手机看文章 扫描二维码
随时随地手机看文章
    工频干扰广泛存在各种工业现场中,其产生的途径主要包括输电馈线、照明设备、发动机以及各种电子仪器设备等。一般可以通过滤波电路消除工频干扰,但这必将增加硬件结构的复杂程度。实际上,还可以采用数字信号处理的相关算法,通过软件滤波器滤除工频干扰。软件滤波算法的采用,无疑会在简化电路结构的同时,使系统的硬件资源得到更加充分的利用,并达到降低产品成本的要求。

    AVR 单片机是Atmel 公司生产的8位精简指令集(RISC)单片机。与同类单片机相比,在运算速度、外设资源、灵活性等方面性能均衡,性价比较高。 AVR 单片机适合C语言开发,Mega 系列AVR 单片机还有一个内部硬件乘法器单元。这些特点都为软件滤波器的实现提供了极大的便利。
    
    1 滤波算法

    常用的单片机滤波算法包括中值滤波、均值滤波、滑动平均以及复合滤波算法等。工频干扰的频率范围在50Hz附近,可以采用一个截止频率远低于50Hz的低通滤波器来滤除工频干扰。

    假设输入信号为x(t),输出信号为y(t),则一个RC低通滤波器表达式为:一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩,其中t为时间常数。

    连续时间信号经过采样后成为离散时间信号,低通滤波器的表达式也变为:

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩为采样时间间隔,k为归一化时间。

    由(1)式可得:

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    所以系统的传递函数为:

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    假设采样频率Fs=500Hz,a分别取0.8, 0.85, 0.9, 0.95, 代入(4)式,利用matlab 画出频率响应曲线,如图1。其中50Hz频率对应的幅度衰减见表1。

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

     2 定点小数表达方式

    为了精确构造数字滤波器,经常要用到浮点数据和系数。在进行浮点数乘法运算时,针对AVR 单片机设计的C编译器例如AVR-GCC,需要加入额外的数学库函数进行编译。而这会使编译后程序的代码量增加、处理时间加长、处理器的开销也随之增加。为了更大限度地降低系统开销,提高程序效率,采用定点小数表示形式进行乘法运算是最佳选择。

    AVR 单片机是一种8位精简指令集(RISC)单片机。其中megaAVR 系列内部都带有一个硬件乘法器,计算一次8位乘8位的定点乘法只需2个时钟周期。因此采用8位定点采样数据乘以8位系数的定点乘法方式完成滤波算法是最高效的。

    低通滤波处理涉及的运算形式为一个纯小数系数和一个已知数据相乘再相加。因此将系数采用定点小数的表示形式,对于提高算法速度是至关重要的,可以定义一种8 位定点小数表示形式--Q8 数,其各位权系数如下:

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    Q8 数的表示范围从0到1-2-8=0.99609375,每两个数之间的间隔是2-8(0.00390625),其所能表达的纯小数共有28=256个。例如11011000就表示2-1+2-2+2-4+2-5=0.84375,而11011001 就是表示2-1+2-2+2-4+2-5+2-8=0.84765625 ,因此0.84375 和0.84765625 之间的纯小数只能用这两个数中的一个近似表示了。这对于乘法计算的精度有一定的影响,但是由于滤波公式(3)中的系数a和(1-a)都是常数,在整体性能稳定的情况下,系数微小的不确定性对滤波器整体性能并没有太大的影响。

     3 分配系数法原理

    从(3)式可知,滤波算法可以用迭代计算实现,为保证每个新的输出值都可以作为下次计算的输入值,必须使输出值和输入值的位宽度一致。 AVR单片机内部硬件乘法器的输出结果为16 位,两次乘法运算的结果还要进行加法运算,其结果很有可能超过16 位宽度。如果要进行迭代计算,就要将乘加运算的结果转化成8 位表示方式。一种解决方法是用查表法实现乘法计算,这样运算结果就直接表达成8 位定点数形式,不用进行表示方式的转化,但是这种方案要占用额外的硬件存储空间构造一张查找表。

    可以从逆向进行思考:由(3)式可知,每个新的输出值y(k)都与上一次的输出值y(k-1)和新的输入值x(k)有关。 y(k-1)和x(k)都是8 位的,因此最大值为0xFF。为了使a×y(k-1)+(1-a)×x(k)不超过0xFFFF,两个系数a和(1-a)的和不能超过0xFFFF/0xFF=0x101 。实际上,a+(1-a)等于“1” ,因此这里的0x101 就可以看作“1” 。如果取a=0.9,那么对应地将0x101 平均分成10份,取其中的9 份,即0x101×0.9 近似等于0xE7 ,相应地0.1 就等于0x101-0xE7=0x1A。这里的0xE7 可以近似被认为是0.9 的一种定点Q8 数表示形式,而0.1 的定点Q8 数表示形式就是0x1A。由于滤波器系数a和(1-a)采用了Q8 数的表示形式,这种将16 位乘加运算结果转化为8 位定点数表示形式的工作就变得简单了,只需通过移位运算,取y(k)的高8 位即可,对应的C语言代码为:

    y(k)=(char)(y(k)>>8)

    在C语言编程处理中,并不需要建立一个数组来储存y(k)的值,而只需定义两个unsigned char型的变量分别储存y(k-1)和x(k) 。当乘加计算a×y(k-1)+(1-a)×x(k),将结果转化成8 位定点数形式,再将其赋值给y(k-1)所对应的变量即可。因此采用迭代方式进行乘加运算后,整个运算过程只需要两个变量和两个常数参加即可。

    通过这种处理,y(k)就可以作为计算下一次输出值y(k+1)的一个已知量,并继续与Q8 数形式的滤波器系数相乘,得到新的输出值。这种处理方式简化了乘加运算的完成过程,节省了系统硬件资源,并降低了处理器开销。

     4 采样时间的控制

    采用单片机进行数字信号处理,一种有效而准确的数据采集方式就是通过计数器中断服务程序(ISR)控制AD对输入信号进行精确采样。但是(图2)中断服务程序(ISR)的开销影响了AD采样时间间隔的精确度,同时如果中断服务程序(ISR)的开销过大,必然导致AD的最高采样频率的降低。因此,要想获得精确的采样频率,就必须在尽量减少中断服务程序开销的前提下,适当调整计数器中断的时间间隔。这可以通过调整OCRO的预置数来完成。

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

     5 算法流程图

    滤波算法是通过中断服务程序(ISR)来完成的,整个应用程序的主函数main()主要负责初始化计数器中断,并处理其它应用。整个程序的流程图如图3 所示。

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    本算法的C语言代码(附录A)经过AVR-GCC编译器的编译后,“.text”段只有310个字节,大大节省了单片机的flash 空间。

     6 基于VMLAB的滤波系统仿真实现

    VMLAB的全称为:Visual Micro lab。它针对AVR系列单片机和ST62 系列单片机设计,是一个单片机的虚拟原型框架,可以提供给用户一个真正意义上的虚拟微控制器(MCU)设计实验室。它具有强大的多窗口、多文件的编辑器,微控制器的集成开发环境,拥有一系列的集成开发工具,图形界面的调试器,混合模式的模拟-数字电路仿真器,代码质量检查器等。基于MCU,它可以仿真出包括模拟元器件在内的更多外围设备,并具有交互式器件模拟仿真功能。

    假设有用信号是2V大小的直流信号,工频干扰是峰峰值为1V,频率为50Hz的正弦波,建立单片机AD的输入信号表示形式如下:

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    VMLAB 通过工程文件来管理和控制各种仿真信息、硬件连接以及显示I/O 电压波形等。根据本算法的特点,采用Atmega16作为目标单片机,时钟选为8MHz ,建立工程文件。恰当设置OCRO寄存器,使计数器比较匹配中断的时间间隔约为2ms ,这样AD的采样频率近似认为Fs等于500Hz 。经过仿真,对比结果如表3 。

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    从表3可以看出:随着a的增大,算法收敛的时间变长,同时50Hz对应的衰减幅度增加,衰减的幅度值和理论推导基本一致。另外,当a=0.95时,DA输出的均值变小。这主要是进行循环迭代运算时,需要将16位的变量转化为8位表示形式所导致的。在有用信号失真较小的情况下,为使滤波器达到降低工频干扰的最佳效果,必须恰当选择a 值。经过以上的仿真试验可以发现,当a=0.9 时,衰减幅度、DA输出均值和算法收敛时间表现比较均衡,可以作为一般情况下的选择值。

    将VMLAB 中虚拟示波器的显示数据导出到一个*.cvs文件中,用matlab 读出这些数据,并画出不同a值对应的输出响应,如图4 。从图4 可以清晰看出不同a值下算法的性能变化的大致走向。

    将AD的采样间隔设置为4ms ,对应的采样频率Fs就变为250Hz ,其它条件不变。通过VMLAB 进行仿真,对比结果如表4 、图5。

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

一种AVR单片机的快速工频干扰滤除算法 - 风之轩 - 风之轩

    对比Fs = 500Hz 的情况,随着采样频率Fs降低,50Hz频率的幅度衰减值会逐渐增加。这主要是因为随着采样频率降低,低通滤波器的截至频率fc也随之降低,相应的滤波器在50Hz处的衰减也就越来越低。根据奈奎斯特低通采样定理,当采样频率小于100Hz时,由于信号频谱混叠,滤波器对50Hz信号的滤波效果将会变差。如果只是对缓变信号进行采样,采样频率比100Hz稍大即可。但是随着采样频率的降低,滤波算法的收敛时间也会增加。因此必须在算法的滤波性能和收敛时间上进行折衷考虑。

    本文提出的分配系数法设计数字滤波器,算法速度快、代码效率高、滤波效果理想,是一种实用的数字滤波器设计方法,体现了将算法嵌入到具体硬件的思想。另一方面,将定点小数的表示形式进行适当扩展,这个算法还可以用于10位或16位AD转换精度的应用场合。

关键字:AVR单片机  工频干扰  滤除算法 引用地址:一种AVR单片机的快速工频干扰滤除算法

上一篇:AVR ATMega128自引导IAP(boot load)的应用设计
下一篇:不要忘记使用AVR的BOD功能!

推荐阅读最新更新时间:2024-03-16 15:17

基于AVR单片机的医用智能输液系统
  静脉输液是我国目前临床治疗中最主要的一种输液方式,在实践工作中,医护人员一般是靠经验和观察通过转动输液器上的滑轮对滴速进行手动调节的。本系统是一种非接触式全自动的静滴检测和报警控制装置,时刻检测液体的滴速,并且在药液滴完后能够自动地切断液体进行本地和远程报警,以通知医护人员及时更换液体,对提高现代医疗服务系统的效率和质量都有着非常重要的意义。   1. 研究意义   目前,医院静脉输液主要是人工控制,由人监控的静脉输液,无法正确调解药液流速,速度过快由于点滴里有钾元素的成分会造成血管刺激,通常刺激会表现为疼痛。但通常输液快慢要看自身身体情况,但输液还是会对血管和心脏,肾脏有刺激。利用现有的科技设计智能输液系统,即可以控制药
[单片机]
基于<font color='red'>AVR单片机</font>的医用智能输液系统
基于AVR单片机的新型防汽车追尾安全装置设计
1 引言 随着我国汽车保有量逐年增加,高速公路的发展使得汽车的行驶速度越来越快。车流量也越来越大,导致高速公路交通事故频频发生,其发生率甚至达到普通公路的4倍,且有上升趋势。在高速公路所发生的交通事故中尤以汽车追尾居多,约占30%~40%,而在这些事故中,80%以上的事故是由于司机反应不及时或者判断失误引起的。由于目前只有高档车型才配有防碰撞装置,而且以往设计中只单纯考虑在车前或车后安装防碰撞装置,不尽全面,所以设计一套低成本、通用性好的汽车防车前车后追尾的安全装置具有广阔的应用和市场前景。因此。这里提出一种基于AVR的新型防汽车追尾安全装置设计。 2 安全装置组成和硬件电路设计 安全装置硬件电路设计主要由单片
[单片机]
AVR单片机学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。 1、 AVR单片机采用RISC 架构 ,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令 2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器 3、 哈佛结构,131条机器指令 4、 延迟开机功能 5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟 6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG
[单片机]
AVR单片机全系列性能参数表
AVR单片机全系列性能参数表 包括:tiny11,tiny12,tiny13,tiny15L,tiny2313,tiny26,tiny26L,tiny28L,tiny28V,90S1200, 90S2313 Mega128,Mega128L,Mega16,Mega16L,Mega162,Mega162L,Mega162V, Mega169,Mega169L,Mega169V,Mega32,Mega32L 包括:Mega48,Mega88,Mega168,Mega64,Mega64L,Mega8,Mega8L,Mega8515, Mega8515L,Mega8535,Mega8535L
[单片机]
<font color='red'>AVR单片机</font>全系列性能参数表
基于AVR单片机的单键开关电路应用实例介绍
   1 引 言   单键开关电路已经广泛应用于PDA、手机和电子词典等数码产品中,其实现方式多种多样。一般可采用RS触发器、计数器以及采用555集成电路等等。在单片机的一些实际应用中,以上的实现方式会增加整个电路的复杂度,不能达到简洁、实用的效果。本文将介绍一种可以在单片机应用中实现的,简易、稳定的轻触式单键开关电路。   2 电路原理   如图1所示,DC-DC为一个带有关断控制端的直流稳压电源芯片,MCU是一个单片机。当按下S1时,Q1和D1导通,稳压芯片工作,为单片机供电。单片机马上将相应的I/O引脚置为输出高,这时Q1和Q2导通,整个电路进入工作状态。而后单片机再将这个I/O引脚设置为输入,由于上拉电阻R4
[单片机]
基于<font color='red'>AVR单片机</font>的单键开关电路应用实例介绍
基于AVR单片机和EM4094读写芯片的多协议RFID读卡器
  引言   射频识别(RFID)是利用无线方式对电子数据载体(电子标签)进行识别的一种新兴技术。与接触式IC卡和条形码识别等系统比较,它有着巨大的优势。利用射频识别技术,能有效实现对数量大、分布区域广的信息进行智能化管理,达到高效快捷运作的目的,特别是在第二代身份证、物流、交通航运、自动收费、超市、门禁系统管理、服务领域等方面有着广泛的应用前景。随着我国国民经济的快速发展,国内RFID行业也正经历着深刻的变革。   RFID系统一般是由读写器、射频卡、应用软件来组成。其中读写器的设计是至关重要的,它决定了系统的稳定性和准确性。   除了要求其能支持一系列协议、标准和收发器外,对读写器可能还有其它功能性方面的要求,如高性能、
[单片机]
基于<font color='red'>AVR单片机</font>和EM4094读写芯片的多协议RFID读卡器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved