基于微控制器的抗干扰软件编程的方法

时间:2011-09-03

 

  在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。在工程实践中,软件抗干扰研究的内容主要是: 一、消除模拟输入信号的嗓声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。

  在嵌入式微控制器内部,对于内部产生的电磁发射,采用软件措施的效果并不明显。因为发射主要是由CPU中的内部时钟和噪声引起,而且高速开关电流是由微控制器中的多种不同的门所形成。如果芯片版图设计时没有考虑电磁兼容性,那么外部的PCB(印制电路板)将会大大增强那些不必要的噪声信号。所以在很多设计中,采用软件很难消除这种固有的电子发射影响。

  一、内嵌抗干扰软件

  在很多的应用中,用简单的抗干扰设计,就可以将一个微控制器的干扰抑制效果大大提高。这种抗干扰设计的魅力就在于实现该设计的费用较低,还可以节省PCB板上硬件成本。抗干扰设计的常用技巧如下:

  1.刷新端口引脚(Refreshing port pins):抗干扰软件简单的一个例子就是可以不断地更新I/O端口和一些重要的寄存器。在大多数微控制器的应用中,软件将会执行一个有规律的主循环。由于微控制器的I/O端口通常靠近连接焊点(bond pads),而这些焊点通常是位于芯片的边沿。当一个确定振幅的噪声施加到微控制器时,噪声将会从芯片的边沿向内传入硅晶体中。这意味着芯片边沿的逻辑电路容易被外部噪声源破坏,输入/输出电路就属于这种类型。因此有规律的更新数据寄存器和数据说明寄存器,就可以把这种故障的威胁降低。

  2.检测输入脚(Polling inputs):另一个方法就是采用多次读输入脚数据,且取平均值作为该脚的正确数据方式。其典型的应用就是用软件每隔10ms读键盘,以保证真实的键入发生。这种表决式做法被称作反弹跳保护。作为一种高频率检测某个端脚的Motorola HC05代码的实例如图1所示。

  图1的程序可以很迅速地连续读出该端口,如果有3次读出结果相同,那么CPU将以进位标志的状态作为读结果返回(这是HC05 CPU的BRSET和BRCLR的一个固有特征)。这个程序的问题在于当输入引脚是处于很嘈杂的环境时,CPU将会按这个程序持续很长时间,这在那些对时间要求较苛刻的应用中是不实际的。更好的一个程序就是多次读出输入引脚,并使寄存器递增,如果结果小于某个数,那么就将它当作0;如果大于某个数,就作为1。这个程序通常会在有间内退出,以保证不会妨碍到该应用中其他程序的运行。

  3.标记通过(Token Passing):在一些重要的处理中,标记通过用以确认任务已进入受控方式而未失去控制。标记通过可以利用RAM里未用到的空间来完成。在应用的一段特定时间间隔里,该软件将通过许多未用的RAM空间循环一个1.在任何一个重要任务被执行之前。这种循环检查将会得出结果。结果检测通过,该任务将会被执行。如果以没通过,则说明微控制器是从未指定的跳转进入该任务,那么就跳转去执行一个初始化程序。见图2。

  4.未使用的内存(Unused Memory):在大多数的应用中,程序的存储器总有一些区域未使用。如果在一些事件中,程序计数器(Program Counter)被破坏且跳转进入未用的存储空间,那么有些应该执行的控制就会起作用。例如,在16K字节的程序空间里存在未使用的500Byte的子块。如果我们用"SWI"指令填满这些未用空间,那么任何指向未用地区的无效激励将会导致微控制器去读取SWI矢量,而该向量是被编程跳转到程序中的已知的起始位置。同样,在微管制器的应用中,SWI也可用其它函数来替代,以填充那些未用的区域,其实例如图3所示。

  二、看门狗电路

  若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过循环运行时间,则认为系统陷入“死循环”,需进行出错处理。

  “看门狗”技术可由硬件实现,也可由软件实现。 在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件看门狗可有效地解决这类问题。

  笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch 、T1Watch,主程序每循环,MWatch加1,同样T0、T1中断服务程序执行,T0Watch、 T1Watch加1。在T0中断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。当然,对主程序循环周期、定时器T0和T1定时周期应予以全盘合理考虑。限于篇幅不赘述。

  一个看门狗电路通常被描述成一块在有规律的时间间隔中进行更新的硬件,该更新必须由微控制器或是使微控制器重新启动的电路来完成。一个外部的看门狗电路是的,因为它不依赖微控制器,如果微控制器发生故障需要看门狗更新,则该电路将给出reset信号使微控制器重新启动。一个看门狗通常由一个硬件定时器构成,如果没有来看微控制器的更新或是信息,该定时器将会溢出。一个简单的看门狗电路如图4。

  在加电的POR时延内,微控制器将保持在复位状态。时钟可以来自一个外部源或是来自用于微控制器的晶振的一个脉冲。当该微控制器处于复位状态时,输入/输出引脚就成为输入,而此时计数器也开始运作。如果Q是0,那么C1就会被充电,而微控制器将会跳离复位状态。

  微控制器的首要任务是给出一个小脉冲来重启计数器到一个已知的时间溢出值,微控制器上的I/O端口形成交流耦合,目的在于保证只有边沿触发才能重新发计数器。这样就保证了一个恒定的直流电平将不会有效作用于微控制器或看门狗。该微控制器必须在Q跳为1之前发送一个小的脉冲,以保证微控制器不被复位(正常情况下该操作至少需要两个微控制器的软件指令)。还有一个可供选择的方法就是微控制器在晶片上具有内嵌看门狗电路。例如Motorola 的MC68HC705C8就有它自身的看门狗,由一个可编程计数器组成,该计数器大约在每32768时钟周期就要被刷新,或是它将在内部产生一个清零指令。

  CM1,0位通常用来选择一个暂停周期(也就是CPU的时钟被2 15,2 17,2 19,2 21 所划分)。COPE位是"只写"的而且一旦看门狗有效,就不会停止,只有重启才能停止看门狗的动作。COPF位是通知用户的标志,它通知用户前的重启的由于看门狗的时溢或是其它原因所引起。刷新看门狗的时序是在COP重启寄存器(COPRR)上的两个写操作。即该序列是一个对COPRR进行$55写操作后紧跟$AA的写操作。

  不是所有的微控制器都有看门狗电路的,但是在一些设计中,设计者能够用未使用的中断来执行它自己的看门狗功能。举例来说,一个MC68HC05P1没有看门狗,但是有一个16bit可自由运行的计时器。有3种可能的方式,使该计时器能够产生一个中断。这3种方式是:

  1)一个从FFFF向0000溢出的定时器。

  2)一个输出比较,16bit寄存器和定时器的值的比较。

  3)对TCAP端口的上升或下降边沿的一个输入捕捉。

  如果此输出比较(Output Compare)中断不能被执行,则其将被当做假的看门狗。在这种情况下,定时器将与"输出比较(output compare)"寄存器作个比较,以检验系统是否都正常。如果系统运行正确,那么将执行一个中断返回。如果有不正常情况,那么堆栈指针的复位和一个往初始化程序的跳转将会执行。该系统检验可以是前述的"标志通过"程序。

    三、开机复位

  开机复位与看门狗故障复位因同属硬件复位, 所以要想予以正确识别,一般要借助非易失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH),而在主程中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。

  识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标准的测控系统,完成测控任务需1小时。在已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。

    四、结束语

  在一个程序里,"看门狗更新(watchdog updates)"选位置的选择不是一个简单的事情,一般说来,是结束程序时的进程。通常用户需要测试软件流程和所有的中断程序和子程序的时序,关键的和非关键的应用。在所有的程序中进行看门狗恻新是的,但是由于微控制器有很长的程序和很多的芯片功能,因此这样是很难做到的。如果可能的话,看门狗刷新程序不应该被放在中断或是子程序中。原则上应该直接放入主程序中。要注意的是刷新速率不要太大,否则将使失控状态恢复的几率下降。

  对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充完善,才能取得较好的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片机系统是完全可行的。



  

参考文献:

[1]. MCS-51 datasheet https://www.dzsc.com/datasheet/MCS-51_477840.html.
[2]. PCB datasheet https://www.dzsc.com/datasheet/PCB_1201640.html.


上一篇:深入解析为何发展多核基站调制解调器
下一篇:设计宽带压控式交流电流源

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料