摘要 阐述单片机应用系统千扰的来源及后果,从理论上分析了单片机系统抗千扰的措施;介绍了当程序运行混乱时,使程序重入正轨在软件设计上应采取的抗干扰方法。
关键词 单片机 抗干扰 硬件 软件
中图分类号 TP2 文献标识码 B
一、单片机干扰的来源和后果
干扰用数学语言描述为du/dt, di/dt,雷电、继电器、可控硅、电机、高频时钟等都可能成为干扰源。典型的干扰传播路径是通过导线的传导和空间的辐射。敏感器件有A/D、D/A变换器,单片机,数字IC,弱信号放大器等。
1.干扰的分类
按产生的原因分有放电噪声、高频振荡噪声、浪涌噪声。按传导方式可分为共模噪声和串模噪声。按波形可分为持续正弦波、脉冲电压、脉冲序列等。
2.干扰的耦合方式
干扰源产生的干扰信号是通过一定的耦合通道才对测控系统产生作用的。耦合方式是通过导线、空间、公共线等,主要有:
(1)直接耦合。这是最直接、最普遍的一种方式。比如干扰信号通过电源线侵人系统。对于这种形式,最有效的方法就是加入去耦电路。
(2)公共阻抗耦合。常常发生在两个电路电流有共同通路的情况。为了防止这种耦合,通常在电路设计上就要考虑。使干扰源和被干扰对象间没有公共阻抗。
(3)电容耦合,又称电场耦合或静电耦合。是由于分布电容的存在而产生的耦合。
(4)电磁感应耦合,又称磁场耦合。是由于分布电磁感应而产生的耦合。
(5)漏电耦合。这种耦合是纯电阻性的,在绝缘不好时就会发生。
3.干扰产生的后果
干扰可造成:数据采集误差大,定时不准,系统被控对象的误操作,系统程序紊乱,被控对象状态不稳定,储存器中的有效数据发生变化。
二、单片机系统硬件抗干扰常用方法
1.抑制干扰源
就是尽可能地减小干扰源的du/dt, di/dt。减小du/dt主要是通过在干扰源两端并联电容来实现。减小di/dt则是在干扰源回路串联电感或电阻以及增加续流二极管来实现。常用措施如下:
(1)继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。仅加续流二极管会使继电器的断开时间滞后,增加稳压二极管后继电器在单位时问内可动作更多的次数。
(2)在继电器接点两端并接火花抑制电路(一般是RC串联电路,一般R选几k到几十k,C选0.01μF ),减小电火花影响。
(3)给电机加滤波电路,注意电容、电感引线要尽量短。
(4)电路板上每个IC要并接一个0.01~0.1μF高频电容,以减小IC对电源的影响。注意高频电容的布线应靠近电源端并尽量粗短,否则,等于增大了电容的等效串联电阻,会影响滤波效果。
(5)布线时避免90°折线,减少高频噪声发射。
(6)可控硅两端并接RC抑制电路,减小可控硅产生的噪声(噪声严重时可能会把可控硅击穿)。
2.切断干扰传播路径
按干扰的传播路径可分为传导干扰和辐射干扰两类。传导干扰是指通过导线传播到敏感器件的干扰高频干扰。噪声和有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰噪声的传播,有时也可加隔离光耦来解决。辐射干扰是指通过空间辐射传播到敏感器件的干扰。解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感器件上加屏蔽罩。切断干扰传播路径的常用措施如下:
(1)充分考虑电源对单片机的影响。许多单片机对电源噪声很敏感要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。比如,利用磁珠和电容组成π形滤波电路,条件要求不高时也可用100Ω电阻代替磁珠。
(2)如果单片机的I/O口用来控制电机等噪声器件,在I/O口与噪声源之间应加隔离(增加π形滤波电路)。
(3)注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。
(4)电路板合理分区,如强、弱信号,数字、模拟信号尽可能把干扰源(如电机、继电器)与敏感元件(如单片机)远离。
(5)用地线把数字区与模拟区隔离。数字地与模拟地要分离,最后在一点接电源地A/D、D/A芯片布线也以此为原则。
(6)单片机和大功率器件的地线要单独接地,以减小相互干扰。大功率器件尽可能放在电路板边缘。
(7)在单片机I/O口、电源线、电路板连接线等关键地方使用抗干扰元件如磁珠、磁环、电源滤波器、屏蔽罩,可显著提高电路的抗干扰性能。nextpage
3.提高敏感器件的抗干扰性能
提高敏感器件的抗干扰性能是指敏感器件应尽量减少对干扰噪声的拾取,以及从不正常状态尽快恢复的方法。常用措施如下:
(1)布线时尽量减少回路环的面积,以降低感应噪声。
(2)布线时电源线和地线要尽量粗,以减小压降及降低耦合噪声。
(3)对于单片机闲置的I/O口,要接地或接电源。其他IC的闲置端在不改变系统逻辑的情况下接地或接电源。
(4)对单片机使用电源监控及看门狗电路,如:IMP809、IMP706、IMP813、X5043、X5045等,可大幅度提高整个电路的抗干扰性能。
(5)在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字电路。
(6)IC器件尽量直接焊在电路板上,少用IC座。
4.其他常用抗干扰措施
(1)交流端用电感电容滤波,去掉高频低频干扰脉冲。
(2)变压器采用双隔离措施,即在变压器初级输入端串接电容,初、次级线圈间屏蔽层与初级间电容中心接点接大地,次级外屏蔽层接印制板地,这是硬件抗干扰的关键手段。次级加低通滤波器,可吸收变压器产生的浪涌电压。
(3)采用集成式直流稳压电源,有过流、过压、过热等保护作用。
(4)I/O口采用光电、磁电、继电器隔离,同时去掉公共地。
(5)通信线用双绞线,以排除平行互感。
(6)防雷电用光纤隔离最为有效。
(7)A/D转换用隔离放大器或采用现场转换,可减少误差。
(8)外壳接大地,可保证人身安全及防外界电磁场干扰。
(9)加复位电压检测电路,防止复位不充分CPU就工作,尤其有EEPROM的器件,复位不充分会改变EEPROM的内容。
(10)印制板工艺抗干扰。①电源线加粗,合理走线、接地,三总线分开以减少互感振荡;② CPU、RAM、ROM等主芯片,VCC和GND之间接电解电容及瓷片电容,去掉高、低频干扰信号;③独立系统结构。减少接插件与连线,提高可靠性,减少故障率;④集成块与插座接触可靠。用双簧插座,最好集成块直接焊在印制板上,防止器件接触不良故障;⑤有条件的采用四层以上印制板,中间两层为电源及地。
三、单片机系统软件抗干扰方法
一般来说,采用硬件抗干扰措施,只能抑制某个频率段的干扰,由于窜入单片机系统的干扰,频谱往往很宽,单凭硬件系统抗干扰是不够的,所以再利用软件进行抗干扰。下面着重介绍程序运行混乱时使程序重入正轨的抗干扰方法。
1.系统程序失控的对策
(1)指令冗余。CPU取指令过程是光取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当“飞”到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码,程序将出错。若“飞”到了二字节指令,出错机率更大。
在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP,这样即使乱飞程序“飞”到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。此外,对系统流向起重要作用的指令如RET、RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。
(2)拦截技术。所谓拦截,是指将乱飞的程序引同指定位置,再进行出错处理。通常用软件陷阱来拦截乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。
①软件陷阱的设计。软件陷阱就是在PC正常运行不该到达的存储区设置一条引导指令,捕获PC并强行将其引向一个指定的地址如0000H,那里有一段专门对程序出错进行处理的程序,以此达到复位系统的目的通常在EPROM中非程序区填入以下指令作为软件陷阱:
NOP
NOP
LJMP 0000H
其机器码为0000020000。
②陷阱的安排。通常在程序中未使用的EPROM空间填0000020000最后一条应填入020000,当乱飞程序落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
NOP
NOP
RETI
返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、完善用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。考虑到程序存贮器的容量,软件陷阱一般1k空间有2~3个就可以进行有效拦截。nextpage
(3)软件“看门狗”技术。若失控的程序进入“死循环”、通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。“看门狗”技术可由硬件实现,也可由软件实现在。在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件“看门狗”可有效地解决这类问题。
笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通信的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机、也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中,各设一运行观测变量,假设为M_Watch、T0_Watch、T1_Watch,主程序每循环一次,M_Watch加1,同样T0、T1中断服务程序执行一次,T0_Watch、T1_Watch加1。在T0中断服务程序中通过检测T1_Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测M_Watch的变化情况判定主程序是否正常运行,在主程序中通过检测T0_Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。
2.测控系统故障处理、自恢复程序的设计
测控系统因干扰复位或掉电后复位均属非正常复位,应进行故障检查和诊断并能给出故障的部位。
程序的执行总是从0000H开始,导致程序从0000H开始执行有四种可能:①系统开机上电复位;②软件故障复位;③看门狗超时未喂狗硬件复位;④任务正在执行中掉电后来电复位。四种情况中除①外均属非正常复位,需加以识别。
(1)硬件复位与软件复位的识别。硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H,SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为1。那么系统复位时只需检测PSW.5标志位或SP值便可判是否硬件复位。此外,由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态、因此可选取片内某一个或两个单元作为上电标志。设40H用来做上电标志,上电标志字为78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。
(2)开机复位与看门狗故障复位的识别。开机复位与看门狗故障复位囚同属硬件复位,所以要想予以正确识别,一般要借助非易失性RAM或者EEPROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为AAH),而在主程序中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。
(3)正常开机复位与非正常开机复位的识别。识别测控系统中因意外情况如系统掉电等引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标难的测控系统,完成一次测控任务需lh。在已执行测控50min的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执行某时间段,则将监测单元置为非正常关机值。系统复位后可据此单元判断系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。
3.非正常复位后系统自恢复运行的程序设计
对顺序要求严格的一些过程控制系统,系统非正常复位与否,一般都要求从失控的那一个模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态、系统的进程值、当前输入、输出值,当前时钟值、观测单元值等,这些数据既要定时备份,同时若有修改也应立即予以备份,并加以数据可靠性检查。在已判别出系统非正常复位的情况下,先恢复一些必要的系统数据,如显小模块的初始化、片外扩展协片的初始化等。其次再对测控系统的系统状态、运行参数包括显小界面等的恢复。之后再把复位前的任务、参数、运行时问等恢复再进入系统运行状态。
软件抗干扰常用方法还有如数字滤波、RAM数据保护与纠错等,在此不作讨论。在工程实践中通常都是硬、软件抗干扰方法并用,互相补充完善,才能取得较好的抗干扰效果。