单片机休眠-复位运行方式提高抗干扰能力
(2)容 错
适当选取输出端并联电容的容量,可以实现容错控制。在某个复位周期,因干扰输出了错误电平。由于电容的保持作用,在本周期内尚不能使输出变化到有效的电平;在下个周期,错误被纠正。因此,只要不是连续2个周期出错,输出是可容错的。当然,这种方法会使正常的输出变化滞后一个周期,才真正反映到输出端子。
2.5 上电检测与手动复位
有些系统在初上电时要做一些初始化操作。采用复位方式运行时,每次复位已经成为正常运行的开始条件,无法辨别是否初上电。在某引脚对地接一个1μF的电容,复位后检测该引脚,如果是低电平就是初上电。如果给系统设立一个复位按钮,也就是常见的手动复位,这个按钮不是连接在复位端,而是并联在上述引脚对地的电容两端。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 软件实现要点
3.1 输出恢复与不清零RAM
定时复位后全部引脚变成高电平,使得本应为低的引脚发生了不应有的变化,因此,复位后要立即恢复所有引脚的状态。有2种方法:① 本次复位后立即进行分析判断,根据需要给出引脚状态;② 根据RAM中上一次留存下来的状态,这些RAM在定时复位时是不能清零的;而在初上电或手动复位按下时应清零,在软件编制时要体现出来。如果计算时间允许,尽量采取方法1。因为连续2次复位周期都计算出错的概率很小,按照2.4叙述的输出端子并联电容的处理方法,可以达到很好的抗干扰效果。
3.2 实现跨越定时复位间隔的时序控制
现在用复位方式工作,每次从头开始反复执行同一程序。可分为2种情况:① 对于单纯显示仪表,每次复位后进行测量、送显示,两次复位之间没有因果关系,只需把原来的等待改为休眠即可。要注意的是,测量、送显示用的总时间要小于复位低电平时间,否则会出现永远不能完整执行程序的错误。② 对于有时序控制的应用,每次复位后,先要查看上个周期留下的标志,以决定本周期做什么。也就是说,凡是跨过复位周期的操作,都是靠标志传递的,这些标志存放在内部RAM中,只有初上电时才清零。例如,前面提到的变压器综合保护器,按照20ms的间隔定时复位。它在上电后,经过一定的动作顺序达到正常工作状态,如图4;根据这个动作编写软件流程的一部分,如图5。
在图4中,当保护器初上电时,首先试送电0.5s,提示马上就要送电;等待30s后正式送电。送电后的1s内为启动时间,不进行过电流检测。启动完成后,如果一切正常,则把“正常标志”置位,保护器在下一个复位周期进入正常运行。试送电的0.5s延时是对复位进行25次计数实现的,因为每次复位时间是20ms。初上电时,对内部RAM做全部清零,令试送电计时Ts=25后休眠。下一次被复位后,再检测上电引脚已不是初上电,于是进行到试送电计时Ts的检测。如果Ts≠0,说明在送电延时期间,把Ts减1后进入休眠。当Ts-1=0时,应该进入停电等待30s的过程了。就在Ts递减到0的时候,令停电等待标志Td=1500。当程序再次由复位开始时,检测到Ts=0但是Td≠0,表明已经越过了试送电,现在正处于停电等待30s的过程中。这样,整个进程由Tr、Td、Ts等这些参数相互传递着,一步步进行下去。
图5 变压器保护器部分程序流程
结 语
抗干扰是电子设计中的重要问题,在单片机中尤其重要。这是因为单片机有程序跑飞的特殊性,它受到干扰的后果可能是死机,也可能在死机前发出各种错误或非法动作,使整个系统产生致命性错误。因此,仅仅保证单片机不死机还不够,还要研究如何减少受干扰的风险,以及出错后如何能够容错。本文力图从这两方面作些探索,希望这些粗浅见解能够起些抛砖引玉的作用,对大家有所帮助;也希望各位同仁一起探索,共同提高我们的设计水平。