探讨提高单片机系统可靠性方法
(4)模拟量的通讯传输。使用一个CPU,把模拟量读入到CPU,再通过RS485接口把数据按照通讯协议,传输到主CPU模块;当然,也可以传输开关量信号等。实际上,这是一个分布式的测控网络的方法;多板的单片机测控系统经常使用这种方法。
(5)独立的“看门狗”。选用独立的“看门狗”作为系统复位信号产生;当系统跑飞时,由于没有“喂狗”,“看门狗”产生复位信号,使得系统可以最大限度地找回跑飞前的数据,尽可能重新开始平稳的运行。
(6)采用RS232电平传输。比如,机箱的面板显示,经常采用max7219,这时如果使用TTL电平,经常被干扰使得显示不正常;可以在发送端使用一片MAX232,将TTL电平转换成RS232电平,在面板显示电路板,选用一片MC1489,将RS232电平,转换TTL电平,加强驱动能力,就可以保证信号正确传输。
(7)采用RS422电平传输。同样,也可以在发送端,采用一片MAX485,将TTL电平转换成RS485电平,在接收端,选用一片MAX485,将RS485电平,转换TTL电平,就可以保证信号正确传输。
3.2 单片机软件抗干扰
在单片机软件程序的设计中,采用一些措施来提高单片机系统工作的可靠性。软件抗干扰研究的内容主要是:①消除模拟输入信号的噪声(如数字滤波技术);②程序运行混乱时使程序进入正轨的方法。这里针对后者提出几种有效的软件抗干扰方法。
3.2.1 指令冗余技术
单片机CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当“乱飞”到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码,程序将出错。若“飞”到了三字节指令,出错概率更大。在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使“乱飞”程序飞到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。此外,对系统流向起重要作用的指令如RET、RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将“乱飞”程序纳入正轨,确保这些重要指令的执行。
3.2.2 软件陷阱技术
当“乱飞”程序进入非程序区,冗余指令便无法起作用。通过设置软件陷阱,拦截“乱飞”程序,将其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的“乱飞”程序引向复位入口地址0000H的指令。
例如,对于8051单片机,通常在单片机程序存储器中非程序区填入以下指令作为软件陷阱:
NOP
NOP
LJMP0000H
在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
NOP
NOP?
RETI
返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、完善,用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。考虑到程序存储器的容量,软件陷阱一般1K空间有2~3个就可以进行有效拦截。
3.2.3 软件“看门狗”技术
若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。“看门狗”技术可由硬件实现,也可由软件实现。 在工业应用中,严重的干扰有时会破坏中断方式控制,关闭中断。则系统无法定时“喂狗”,硬件“看门狗”电路失效,而软件“看门狗”可有效地解决这类问题。