单片机运用系统的软件抗干扰技术研究与分析

2011-03-26 07:32吴兴纯赵金燕杨秀莲杨燕云
电子设计工程 2011年16期
关键词:指令单片机程序

吴兴纯,赵金燕,杨秀莲,杨燕云

(1.云南农业大学基础与信息工程学院,云南昆明650201;2.云南农业大学国资处,云南昆明650201)

抗干扰措施与可靠性设计是单片机应用系统开发与研究的一项重要内容。许多在实验室运行良好的单片机系统安装到工业现场,常常由于干扰的原因,系统变得严重不可靠,甚至出这样或那样的问题。干扰源产生的干扰通过耦合通道对单片机系统发生电磁干扰[1]。干扰作用于单片机系统的输入通道时,它能使模拟信号失真,数字信号出错;作用于单片机系统的输出通道时,它能使输出信号混乱,不能正常反应系统工作的真实输出。如果是检测系统,则其输出信号不可靠;如果是控制系统,则会使一些执行机构误动作;如果干扰作用于单片机应用系统的核心,它能使计算机的CPU得到错误的地址信息,引起程序计数器PC出错,使程序运行离开正常轨道,导致程序失控。

常用的抗干扰技术主要有硬件抗干扰和软件抗干扰。硬件抗干扰是系统设计时首选的抗干扰措施,它能有效抑制干扰源,阻断干扰传输通道。目前,硬件抗干扰技术和手段都有了很大的进步,各种抗干扰器件以及干扰抑制器已有许多现成产品可供选购,只要合理地布置与选择有关参数,硬件抗干扰措施就能抑制系统的绝大部分干扰[1-2]。但是,微机系统的抗干扰不可能完全依靠硬件来解决,在许多复杂的控制环境下,软件抗干扰往往能取得事半功倍的效果,因此软件抗干扰技术越来越得到程序设计人员的重视。

1 干扰对单片机应用系统的影响

干扰按其产生的原因来分类,可分为放电干扰、高频振荡干扰和浪涌干扰;按其传导模式分类,可分为共模干扰和串模干扰;按其波形分类,可分为持续的正弦波、偶发性脉冲电压以及脉冲序列干扰。干扰源产生的干扰通过耦合通道对单片机系统发生电磁干扰。干扰的耦合方式有直接耦合、公共阻抗耦合、电容耦合、电磁感应耦合、辐射耦合和漏电耦合等6种耦合方式。干扰传入单片机应用系统,大大影响了系统的可靠性、安全性[1]。另外,影响单片机系统可靠、安全运行的因素还与系统的结构设计、元器件选择、安装、制造工艺和外部环境条件等有关。

干扰对单片机应用系统的影响主要表现在:

1)使数据采集误差加大干扰侵入测量单元模拟信号的输入通道,干扰信号叠加在有用信号上,使数据采集误差加大,特别是当传感器输出微弱信号时,干扰会更加严重。

2)控制状态失灵一般测控系统输出的控制信号较大时,不易受到外界干扰。但输出的控制信号通常是依据某些条件的状态输入信号和这些信号的逻辑处理结果。若这些输入的状态信号受到干扰,引入虚假的状态信号,会导致输出控制误差加大,甚至控制失常。

3)数据受干扰发生变化单片机应用系统中,RAM存储器的数据是可以读写的。在干扰的侵害下,RAM中的数据有可能被篡改。程序及表格存于程序存储器EPROM中,这些数据虽然不容易受到破坏,但是对于内部RAM和外扩RAM中的数据都有可能受到外界干扰而变化。根据干扰窜入的途径、受干扰数据的性质不同,系统受损坏的情况也不一样,有的造成数据误差,有的使控制失控,有的改变程序状态,有的改变某些部件(如定时器,计数器,串行口等)的工作状态等。

4)程序运行失常CPU程序计数器的正常工作,是单片机应用系统维持程序正常运行的关键[2]。若外界干扰导致程序计数器的值改变,那就破坏了程序的正常运行。由于系统受干扰后,程序计数器的值是随机的,因而会导致程序运行混乱,通常情况是程序执行一系列毫无意义的指令,最后使系统陷入死循环,这将使输出严重混乱,系统失灵。

2 软件可靠性和软件抗干扰的前提条件

2.1 软件可靠性的的概念

计算机软件是一系列计算机指令的逻辑序列[3]。软件可靠性的主要标志是软件能否真实而准确地实现设计者赋予系统的各种功能和要求。计算机软件也是系统实行的各项功能的信息组织形式。一个软件的各程序段之间有着密切的联系,软件的运行过程是各程序段间的逻辑组合过程,不同的逻辑组合决定了软件不同的程序路径。程序路径的选择是由软件自身确定的,如果软件在某些程序路径上有缺陷,那么当程序运行到这里时就会发生错误。因此,程序设计人员对工业现场、生产工艺的了解与熟悉程度将直接关系到软件的编写质量。从根本上说,提高软件可靠性的前提条件是设计人员对生产工艺过程的深入了解,并且在编写软件时做到软件易读、易测和易修改。为了提高软件的可靠性,应尽量将软件编写工作规范化、标准化和模块化,尽量把复杂的问题划分成若干较为简单明确的小问题,把一个大程序分成若干个子程序,这有助于即时发现设计中的不合理因素,同时还要尽量减少循环嵌套、调用嵌套以及中断嵌套的次数。

此外,软件的可靠性是通过软件的可测试性来反映的,软件设计要易于测试。软件的可测试性指针对系统是否能比较容易地制定出测试准则,并根据这些准则对软件的运行状态进行测定。通常,在设计完软件或部分程序时,应先让其在模拟环境下进行静态和动态仿真运行,以检验其正确性和可靠性。在软件测试中,检查和测试几个小模块要比检查和测试大程序方便得多。检验软件可靠性的应用软件是解决软件可靠性的有力工具。

2.2 软件抗干扰的前提条件

单片机应用系统的抗干扰措施一般以硬件为主,软件为辅。硬件抗干扰措施的基本出发点是减小、隔离、衰减干扰信号,使易被干扰的元器件在比较好的环境中工作。这类措施只起到“防”的作用,并没有从根本上解决自身抵抗干扰的能力。软件抗干扰措施的出发点是:计算机不仅在正常工作时能充分发挥其智能作用,而且在系统因受到干扰而破坏其正常工作时也应发挥其智能作用。也就是说当系统受到干扰时,系统应立即感知并开始自检工作,检查自身系统被破坏的程度和性能等,并进一步进行处理,然后重新启动,恢复正常工作。如果采用硬件与软件相结合的方法,充分发挥软件智能作用,系统本身的抗干扰能力就可以大大增强,可以有效地提高系统的稳定性和可靠性。软件抗于扰的基本条件是抗干扰软件不会因干扰而损坏。在单片机测控系统中,程序及其—些重要常数都放在ROM中,这使得抗干扰软件拥有—个较为稳定的工作环境,为软件抗干扰创造了良好的前提条件,对于一些在RAM中运行用户应用程序的微机系统,应用软件本身的抗干扰能力局限性很大,更主要依赖于操作平台的稳定性和微机系统的抗干扰性能。

软件抗干扰的前提条件可以概括为以下几个方面:

1)在干扰作用下,微机系统的便件部分不会受到任何损坏。

2)程序区不会受干扰侵害。对于单片机控制系统,程序、常数以及表格都应固化在ROM中。但对于上面提到的需要在RAM中运行应用程序的微机系统,则无法满足这—条件,这种系统一旦因干扰造成运行失常时,只能在干扰过后重新向RAM区中调入应用程序。

3)RAM中的重要数据不能被破坏,或虽被破坏但可以重新建立。在控制系统中,这些数据被干扰破坏后,在实时采样控制系统中一般都能马上纠正,因其而引起的系统短期波动往往还来不及表现出来就已经恢复正常。当然,如果在RAM区中有一些不允许丢失的重要数据,那么系统的正常工作就会受到影响。在单片机控制系统中,我们应该尽量避免这样的软件编制。

4)软件抗干扰技术是一种辅助手段,在相当大的程度上硬件抗干扰性能决定着整个微机控制系统的抗干扰性能[4]。控制系统的抗干扰设计从方案阶段就应展开,在原理设计、印制板设计、电源设计、传输方式等诸多方面加以全盘考虑。例如对于一个双机远程串行通讯电路,往往用双绞带屏蔽的传输线路进行连接,以保证其电磁兼容性和双机通讯的误码串要求。如果将传输线换成一般导线并将它们与其他信号线在系统接线时混扎在一起、势必造成误码率的增大。那么在软件方面是无法从根本上解决问题的。因此软件抗干扰不是万能的、它对硬件基础的依赖性很大。

3 常见的干扰现象及其软件抗干扰措施

3.1 数据采集误差

当传感器的位置与采集或显示的单片机应用系统相距较远时,外来干扰就会显得特别严重。在高精度A/D转换器的电压测量电路中,常见的干扰有电源电压窄脉冲窜扰、工频电网的串模干扰等。这些干扰轻则影响被测信号精度或大幅度扭曲被测信号,严重时甚至可能出现可控硅闸锁现象。所谓可控硅闸锁现象就是在系统正常使用过程中,A/D转换器芯片电源电压骤增,芯片突然发热,时间一旦过长,芯片被烧坏。出现可控硅闸锁现象时,只要马上切断电源,重新上电后系统又能恢复正常。这种情况发生原因是由于芯片衬底存在着寄生的横向PNP管和纵向NPN管所形成的可控硅结构,如果输入的脉冲信号超过了额定值,产生较大的输入电流时,就会使寄生可控硅导通,使VDD与VSS或与地之间形成直接通路,产生较大的短路电流。要消除这些干扰,首先是从硬件上考虑,例如加强各级的抗干扰措施,避免较大的电流干扰窃入电路,或加强电源稳压和滤波措施,在A/D芯片电源入口处加退耦滤波电路等。但在实际中不少干扰源是不可能消除的,它们影直接响着输出信号的线性度或精度,所以利用数字滤波技术以实现模拟滤波器类似的功能被越来越广泛地采用。比较常用也比较简单有效的方法有:

1)算术平均值法对一点数字连续采样多次、计算其平均值,以平均值作为该点采样结果。这种方法对抑制随机干扰有一定的效果。如果CPU工作频率足够高且能满足采样间隔要求,—般取10次左右平均为宜[4]。

2)比较取舍法当测量结果的个别数据存在幅度差时,为了剔除个别错误数据,可采用比较取舍法,即对每个采样值是连续采样几次。根据所采样数据的变化规律,确定相应的取舍办法来剔除数据。例如对每个采样点连续采样3次,取2次相同数据为采样结果;或对—个采样点连续采样多次,并对这些采样值进行比较,取中值作为该点的采样结果[5]。

3)一阶递推数字滤波法这种方法利用软件完成RC低通滤波器的算法,实现用软件方法代替硬件RC滤波器。一阶递推数字滤波公式为:

其中Q—数字滤波器时间常数;Xn——第n次采样时的滤波输入;Yn——第n次采样时的滤波输出。

采用软件滤波对消除数据采集中的误差可以获得较好的效果。可以看出,效果越好的数字滤波方法对CPU工作速度的要求越高、在实际应用中采用何种方法,还要根据信号的变化规律和控制方式特性来选择。

3.2 状态控制失灵

在单片机应用系统中,控制状态的输出一般由后向通道完成。对输出控制状态的干扰一般通过以下两种方式侵入:一是干扰改变了单片机系统输入条件状态或逻辑判断数据,从而使依据某一算法或逻辑处理得出的输出状态结果出现误差,二是控制信号输出正常。但干扰侵入了后向通道上的主要输出器件、改变了正常输出状态。例如,在—个电磁阀开关量单片机控制系统中,由于电磁阀开闭存在较大的空间干扰,造成输出状态锁存器的自动复位,从而使整个单片机系统经常出现控制失灵或者误动作。

在实际工作中,首先应从硬件角度考虑如何尽量减少控制对象或输出方式所带来的干扰,例如对上面的例子可以增加电源滤波器,在后向通道上增加地线或者隔离光电耦合器,对电磁阀采用屏蔽网屏蔽其空间干扰等措施。正如上面提到过的,硬件措施是不可能完全解决问题的,所以上面的例子最终是通过硬件、软件两方面的配合使系统达到高可靠性的目的。

对状态控制失灵常用的软件对策主要有:

1)软件冗余设计[5]对于条件控制系统,将控制条件的一次采样、处理、控制输出改为循环采样,实时刷新控制输出。这种方法对于单片机开关量控制系统特别有效,它将瞬间偶然误差在执行器件尚未响应之前及时更正,但对于惯性较小或响应较快的系统则抗干扰作用相对较小一些。

2)设置闭环输出控制系统对于单片机控制系统,在硬件上设计输出状态采集电路,在软件上设置输出状态寄存单元,当干扰侵入后向通道造成输出状态破坏时,系统能及时查询比较实际输出状态与寄存单元输出状态信息是否一致,并及时纠正输出状态。

3)设计软件看门狗[4]在单片机系统硬件的特定部位或某些内存单元上设状态标志,在开机运行时不断查询测试,系统一旦发现问题,就能自动纠错复位,以保证系统中信息存储、运算和传输的高可靠性。

3.3 RAM区数据窜改

在干扰侵害下,由于RAM的可读/写性,RAM中的数据就有可能发生窜改,使系统不能正常工作。在单片机系统中,片内RAM、外部扩展RAM以及片内各种特殊功能寄存器等状态都有可能受外来干扰而变化。干扰窜改RAM数据的渠道不尽相同,对于MCS51单片机运用系统,干扰主要通过电源或复位端进入系统引起RAM区数据改变。干扰窜入复位端,在大多数情况下不会造成系统错误复位,但会引起内部某些寄存器的错误复位。防止RAM区数据被窜改可从硬件、软件两方面下手。

硬件方面,由于单片机的复位、直流工作电源都是由硬件电路实现的,所以首先应在硬件上采取相应的措施,如增加电源滤波器等。对于RESET端干扰,为了保证复位电路可靠地工作,除了在RESET复位引脚上接一个去耦电容,常将RC复位电路接斯密特电路(如74HCl4)后再接入单片机复位端和外围电路复位端。斯密持电路的滞后特性对脉冲整形、滤除干扰有较好的效果,所以特别适合应用于现场干扰大、电压波动大的工作环境,并且当系统有多个复位端时,能保证可靠地同步复位。

软件方面,因为复位端窜扰改变的往往是单片机内特殊功能寄存器(SFR)的状态,所以在软件编制上应尽量做到实时刷新,另外对于一些特别重要的RAM区数据。可以增加EEPROM等可读写ROM加以保存,实时查询对比RAM数据,—旦发现错误立即从EEPROM中读出正确数据予以纠正。在实际应用系统中,还要针对控制对象和控制方式考虑EEPROM的读写周期是否满足系统工作频率的要求。

3.4 程序跑飞

程序跑飞是因为系统在干扰侵害下改变了程序计数器PC指针值,破坏了程序正常运行。如果PC值超出应用程序区,将非程序区中的随机数作为指令代码运行,这种程序的盲目运行叫做程序“跑飞”。程序“跑飞”往往会破坏数据区及工作寄存器中的数据,造成系统工作紊乱,直至程序进入死循环,导致系统死机。解决程序跑飞的基本思想是及时发现、及时复位。通常采用的方法有:

1)软硬件看门狗[4-5]这是微机控制系统常用的一种方法,电路设计形式也多种多样,主要思想是在程序正常运行时不断对看门狗电路进行刷新,使其计时重新开始,刷新频率视具体情况而定,一旦程序失常不能正常刷新看门狗时,则该电路立即给RESET复位端一个复位电平,强制系统硬件复位。

自监视法是单片机系统自己对自己的运行状态进行监视。某些类型的单片机CPU内部具有Watchdog(程序运行监视系统),俗称为“看门狗”。例如Inter8098,80198系列,就可以方便地通过设定Watchdog工作方式以及采用合适的软件编程相配合来达到自监视目的。而没有Watchdog的CPU,例如Z80,8051系列等,当然也可以通过外加Watchdog电路,再配以软件完成自监视目的。这种软硬结合的自监视法可以大幅度提高工控机的抗干扰能力。

Watchdog具备以下功能:①该系统能独立工作,基本不依赖CPU;②CPU在一个固定时间间隔内与该系统打一次交道,表示目前尚工作正常;③当CPU掉入死循环时,该系统及时发觉并使系统复位。如果Watchdog电路设计得好,并且软件也编制得好的话,不但可以及时发现程序“跑飞”,而且还可以实现跑飞程序修复。这是最好的自监视手段。然而,这并不等于万无一失。例如:①Watchdog电路本身失效;②设置Watchdog的指令正好在取指令时被干扰而读错;③Watchdog发现程序跑飞之后,其产生的复位脉冲或者INM申请信号正好被干扰而未奏效等。

虽然以上导致Watchdog失效的因素发生几率很小,但总是存在的;另一方面,还有相当数量的工业控制计算机没有Watchdog电路。这两种情况可用设置软件陷阱或监视定时器法来解决程序跑飞问题。

2)设置监视定时器检查程序计数器的PC值是否在程序区,通常采用的方法就是定时中断法。所谓定时中断法,就是利用定时中断监视程序运行状态,即在一个经常产生外部中断的某个定时中断服务程序中读取转入该中断时压入堆栈的断点地址。如果该地址在程序区内,则认为PC值正常,否则认为程序一定“跑飞”。定时器的定时时间一般稍大于主程序正常运行一个循环的时间,可视机器的繁忙程度和重要性设定,通常为几个毫秒到几十毫秒。定时器在主程序运行过程中执行—次定时时间常数的刷新操作,程序正常运行时,定时器不出现中断;当程序失常不能刷新定时器时间常数则产生定时中断,执行中断程序,并在中断程序中判断系统是硬件复位还是定时中断产生自动复位,然后得出相应的处理方法,使系统恢复正常。该方法的局限性是不能查出PC值是否在程序区内(即此时PC值虽受干扰却并没有超出程序区)的乱跳,而是错位执行指令而构成一些莫名其妙的操作或者陷入死循环。

以上讨论的两种方法都是建立在工控机能正确运行全部或部分程序基础上,有时一个意想不到的干扰,中断或破坏了所有程序的正常运行,此时PC值可能在程序区内,也可能在程序区外,要使其能够自己恢复正常运行,只有依赖于广布“陷阱”的方法了。

3)设置软件陷阱[6]这里所谓的软件“陷阱”,是指某些类型的CPU提供给用户使用的软件中断指令或者复位指令,它能强行地将捕获到的程序引向另一个新的指定地址,在那里有一段对程序出错时进行处理的专用程序。如果把这段程序的地址称为ERROM地址,软件陷阱即为一条LJMP ERROM指令,为加强其捕获能力,可在其前面加两条NOP指令作为冗余指令。软件陷阱一般安放在非程序区,包括未使用的中断向量区、未使用的大片程序存储器空间及各种表格的最后位置。程序区是由一系列执行指令构成的,一般不能在此指令串中任意安排陷阱,否则正常执行的指令也会被抓走。但是在跳转指令、调用指令、返回指令等之后,程序会有一些断裂点,正常程序到此便不会继续执行,这时CPU的PC的值应正常跳变,从而使其转向其他入口位置。如果跑飞来的程序落到断裂点或其前面的指令操作数上,程序就会超过断裂点继续执行,就必定出错了。如能在该处设置陷阱,则可有效地捕捉到它,不会影响正常执行的程序。由于软件陷阱均安排在正常程序执行不到的地方,故不会影响程序的执行效率。陷阱不但需要在ROM的全部非内容区、RAM的全部非数据区设置,而且要在程序区的模块之间广泛布置。一旦机器程序“跑飞”,总会碰上“陷阱”,立即就可以“救活”系统。

4 结束语

在单片机应用系统中,系统的可靠性问题越来越受到人们的普遍重视。实践表明,硬件技术和软件技术是提高单片机应用系统抗干扰能力的有力措施。软件抗干扰技术作为硬件抗干扰措施的辅助手段,具有简单、灵活方便、耗费硬件资源少等特点,在设计单片机应用系统中获得了广泛的应用。目前人们对软件可靠性的研究还处于起步阶段,为了适应和解决工程应用中的实际问题,现在采用的对策是将其看成一个系统的抗干扰问题来解决。在实际应用中,应针对各类单片机测控系统的特点、被控对象的性质以及工业现场环境,充分考虑各种因素的影响,并在设计中采取一定的软硬件抗干扰措施,使系统满足既定的测控要求,又能保证其长期稳定可靠地工作。

[1]李正军.计算机测控系统的设计与应用[M].1版.北京:机械工业出版社,2004.

[2]胡汉才.单片机原理及其接设计[M].2版.北京:清华大学出版社,2004.

[3]Simon P,Baumann A,Roscoe T,et al.30 seconds is not enough:a study of operating system timer usage[C]//Proceedings of the 3rd ACMsigops/Eurosys.European conference on computer systems 2008.Glasgow,Scotland UK,New York,NY,USA:ACM,2008:205-218.

[4]翟晓华.单片机软件抗干扰技术分析与设计[J].山西科技,2008,11(6):70-72.

ZHAI Xiao-hua.Technical analysis and design of the software interference of MCU[J].Shanxi Science and Technology:2008,11(6):70-72.

[5]王伟.软件抗干扰在单片机控制系统中的应用研究[J].机械管理开发,2010,25(3):203-204.

WANG Wei.Study on software anti-Jamming problem of single chip microcomputer control system[J].Mechanical Management and Develo,2010,25(3):203-204.

[6]曲辉.提高嵌入式系统可靠性软件抗干扰措施[J].内蒙古农业大学学报,2009,30(1):229-231.

QU Hui.Software anti-interference measurement of enhancing the reliability of embedded system[J].Journal of Inner Mongoa A cultural Universit,2009,30(1):229-231.

猜你喜欢
指令单片机程序
基于单片机的SPWM控制逆变器的设计与实现
基于单片机的层次渐变暖灯的研究
基于单片机的便捷式LCF测量仪
试论我国未决羁押程序的立法完善
ARINC661显控指令快速验证方法
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
杀毒软件中指令虚拟机的脆弱性分析
创卫暗访程序有待改进
中断与跳转操作对指令串的影响