单片机及其周边外设所组成的单片机系统,如今已被广泛应用于工业控制、交通设备、智能仪器和各类电子产品当中。随着应用的广泛和深入,人们对单片机系统的可靠性越来越重视,要求也越来越高。因为单片机系统的工作环境大多比较恶劣,系统容易受到各种干扰,轻则不能稳定工作,重则发生崩溃,后果十分严重[1]。因此,如何增强单片机系统的可靠性,成为设计人员普遍关注的问题。
单片机系统的可靠性与它的硬件、软件以及它所处的环境密切相关,可看作是受内部因素和外部因素的共同影响[2]。从内部因素看,系统需要能够对运行过程中自身以及周围产生的干扰信号进行有效的抑制和消除;而从外部因素看,要求改善外部环境质量,清除干扰源,切断干扰途径,降低干扰程度,为系统创造一个良好的运行环境。但是,外部因素的改善总是有限的,有时甚至是很难做到的。因此,在改善外部因素的同时,应该将主要精力放在如何从内部因素出发,积极合理地运用各种技术手段来设计完善系统,这才是提高单片机系统可靠性的关键。
以内部因素为重点进行单片机系统可靠性设计时,应明确设计的分工和所能达到的效果。减小和消除器件和电路产生的干扰,主要和硬件可靠性设计有关;而在干扰已被降至极限时,如何提高系统自身的容错纠错能力,与软件可靠性设计联系紧密。在实际运用中,各种技术需要根据情况和场合的不同,把握重点,软硬结合,合理选择运用。作者从硬件和软件两方面入手,将几种效果显著、实用性强的关键设计有机结合,实现了消防监控报警系统(以下简称“系统”)这样一个单片机系统的高可靠运行。
1硬件可靠性设计
为了提高系统的可靠性,本系统在滤波技术、隔离技术、屏蔽技术、接地技术等方面都有专门的考虑和设计。
1.1滤波技术
电源和负载的变化、电路状态的切换以及突发的雷击等都有可能在线路上形成尖峰电流,从而产生噪声电压。该噪声电压耦合到电路中,严重时就会影响电路的正常工作[3]。利用电容、电感的储能特性来抑制产生的噪声,称为“滤波技术”。
在本系统中,供电模块设计了前级滤波电路,有效地抑制了高频和低频噪声分量,稳定了系统电源电压。实践证明,电源部分的干扰问题解决得好对于整个系统的可靠性有着极其重要的意义。以系统使用的AT89C51单片机5 V供电电压为例,滤波电路如图1所示,其中78M05为三端稳压器。
图1前级滤波电路
1.2隔离技术
(1) 物理隔离技术
物理隔离技术是指在单片机系统中,通过器件的合理布局和线路的合理布线,将容易产生干扰和容易被干扰的器件和线路分开或者按照合理的规则放置,将系统自身可能产生的干扰降到最低。具体来说包括:大功率、高电平器件与小功率、低电平器件隔离;模拟电路和数字电路隔离;数字信号线、模拟信号线与电源线隔离。
在本系统中,包含有电机、继电器、整流桥等噪声设备,同时也含有单片机芯片、AD/DA、RAM等敏感器件。它们被限定在了各自划分的区域,保持了合适的距离,噪声设备也被放置在了电路板边缘;信号线和模拟线在各自的区域布线,不平行,不重叠。
(2) 信号隔离技术
信号隔离技术是指通过安装中间器件来切断两个电路的直接电联系,使之相互独立不成回路,从而割断噪声从一个电路进入另一个电路的通道。
在系统的供电模块,采用模拟电源设计了末级隔离电路。它承接前级滤波电路,将输入电源和输出电源完全隔离,实现独立电源供电。其中,输出电源的电压可以与输入相同,也可以不同,如图2所示。图中的SPX1117为DC/DC,输出电压大小可调。
在本系统的信号传输部分,采用了光电耦合的隔离方式,对数字信号的输入、输出进行了隔离。负责光电转换的光耦,具有高隔离电阻特性,能够实现无公共地的两个不同电平数字信号的隔离传输,如图3所示。图中6N137为10 MHz高速光耦。
图2末级隔离电路图3光电耦合隔离电路
1.3屏蔽技术
高频电源、交流电源、电器设备的火花、雷电等都能产生电磁波。当干扰源距离系统较近时,电磁波通过分布电容、分布电感耦合到悬浮回路形成干扰;当干扰源距离系统较远时,电磁波将以辐射形式构成干扰。屏蔽技术是利用金属板、金属网、金属盒等屏蔽体,通过反射和吸收电磁场来削弱进入屏蔽体内的电磁场能量,或把电磁场限制在一定空间,形成对电磁波的屏蔽作用,从而使得系统具有较高的EMC特性[4]。
在本系统中,针对以电压形式出现的干扰,考虑干扰源与电子设备之间存在的容性电场耦合,将屏蔽体以对地极低阻抗进行了良好接地,对干扰源施行了有效的电场屏蔽,如图4所示。
图4电场屏蔽
在本系统中,针对以电流形式出现的干扰源,考虑到电流所产生磁场的互感耦合效应,对干扰源施行了有效的磁场屏蔽,如图5所示。运用时,应根据干扰源的频率高低选用不同的屏蔽材料。100 kHz以下的低频磁场选用高导磁率铁磁材料做屏蔽体,而100 kHz以上的高频磁场选用高电导率材料做屏蔽体[5]。
图5磁场屏蔽
1.4接地技术
接地技术可以分为安全接地和信号接地两种。安全接地就是把系统电路的外壳以低阻抗导体接大地,使得外壳上的漏电能够及时快速地被导入地下,从而保证设备和人身安全,如图6所示。
图6安全接地
在本系统中,存在许多接口和信号需要接地的情况,这就是信号接地。特别是对于弱信号电路,信号接地不仅是为电路提供一个公共电路参考点,同时还可以消除噪声干扰。根据各个子系统情况的不同,应采用不同的接地方式。当频率低于10 MHz时,适于采用“单点接地”;10 MHz以上的高频情况下,适合采用“多点接地”。如果想方便子系统的分类管理同时兼顾降低成本,也可以采用“复合式接地”的方法,如图7所示。无论采用何种方法接地,都要尽可能避免产生接地环路,这可以通过各种隔离技术来保证。
图7信号接地
2软件可靠性设计
软件可靠性设计是在硬件可靠性设计的基础上,对系统可靠性的进一步提升,成本低廉、灵活可靠。它是在软件指令正确和功能完整的前提之下,采取容错纠错机制,保证系统遇到异常情况时仍能够保持正常运行。这些机制之所以重要,是因为一些无法避免的外界干扰虽然不会造成硬件的损坏,但是常会破坏数字信号的时序,更改寄存器和存储器内容,导致程序跑飞或进入死循环[6]。
2.1数字滤波
在采集模拟信号时,得到的数据可能存在偏差。这些偏差有时并不是由程序本身引起的,而是由于噪声信号串入前向传感器中所致。数据失真有可能进一步导致系统发出错误的控制信号,后果可能非常严重。针对这种情况,可采用数字滤波确保采集到的数据的准确性和真实性。它通过一定的计算或者判断程序,剔除错误数据,消除随机干扰,减小干扰信号在有用信号中的比重,提高数据的可信度,具有很好的灵活性和适应性。数字滤波技术方法很多,有算术平均值法、滑动平均值法、一阶递推数字滤波法等[7]。
在本系统中,噪声主要是不规则的随机噪声,因而选择采用了防脉冲干扰平均值法。它将采样和A/D变换后的数字序列中的N个数据进行比较,去掉最大、最小值,计算余下的N-2个数据的算术平均值。实际运用中,可以根据采集数据的速度要求选取合适的N值,滤波程序通常被安排在中断处理程序中,如下所示:
#define N 4
char filter() {
char num,i,j; int sum=0;
char value_buf[N]; //设置数据缓冲区
for (num=0;num<N;num++) {
value_buf[num] = get_ad();
delay ();} //延时采样得到采样数列
for (j=0;j<N-1;j++) {
for (i=0;i<N-j;i++) {
if ( value_buf[i]>value_buf[i+1] ) {
temp = value_buf[i];
value_buf[i] = value_buf[i+1];
value_buf[i+1] = temp;
}
}
} //对采样数列进行正向冒泡排序
for(num=1; num <N-1; num ++)
sum += value[num];
return (char)(sum/(N-2));
} //计算余下的N-2个数据的算术平均值
2.2恢复技术
当单片机系统遇到电磁干扰而导致芯片程序运行错误或者进入死循环时,系统应当能够尽快摆脱死循环或者重新启动。此时可以借助一些软件手段来实现系统的自我恢复。
2.2.1软件陷阱
当PC指针失控,程序跑飞而进入非程序区时,可通过在非程序区设置软件陷阱来捕获程序;将程序强行引向专门处理错误的程序的入口地址,进行错误处理或进行初始化处理,从而将系统引导上正确的轨道。
软件陷阱其实就是几条专门的指令或者是一小段代码。在本系统的EPRAM区中,每相隔1 KB空间安排了如下所示的一小段代码所组成的软件陷阱。测试证明,这样的安排能有效地对跑飞的程序进行捕获。
NOP
NOP
LIMP ERROR//ERROR为错误处理程序入口地址
软件陷阱通常都被安排在正常程序执行不到的非程序区中,故填入这样的软件陷阱来对失控的程序进行引导,不会影响程序的执行效率。
2.2.2看门狗
跑飞的程序落到一个临时构成的死循环程序中而无法自行摆脱时,冗余指令和软件陷阱都不能够起作用,这时可用“看门狗”程序来引导系统。“看门狗”技术可由硬件实现,也可由软件实现。硬件“看门狗”独立于单片机程序而存在,具有很高的可靠性;而软件看门狗则可以作为硬件“看门狗”的辅助,不需额外硬件,设置灵活,效果明显,有很高的实用价值。
在本系统中,软件“看门狗”程序可以看作由三个部分组成,即定时器程序、“喂狗”程序和中断处理程序。在程序运行的过程中,若程序循环时间超过设定的最大允许循环时间,而未执行“喂狗”程序,即未能对“看门狗”进行及时的“喂狗”复位操作,则“看门狗”认为系统陷入“死循环”,于是产生定时器产生中断,将程序转向中断处理程序进行出错处理或者重新引导程序。理论上,只要程序不死循环在“喂狗”程序中而能够进入中断处理程序,那么软件“看门狗”就能够发挥作用。
2.3冗余技术
2.3.1数据冗余
有时干扰虽然不会损坏整个系统RAM区,但是可能会造成RAM中个别区域数据丢失。为了保护RAM中重要的数据和信息,可以采用数据冗余技术,将系统重要参数在RAM中实行多备份保留。在系统复位后或者其他必要情况下,利用备份对重要参数区进行自我检验和恢复。
2.3.2时间冗余
时间冗余技术,实际上是以牺牲时间为代价来换取系统的可靠性。它重复执行某一操作或程序,然后将结果与前一次结果进行主动比较来判断系统工作是否正常。两次结果相同则认可,不同则再重复一次,将不相同的那一次结果认作是干扰所致并剔除;如果三次结果均不相同则判定为故障,转入故障处理程序。
时间冗余通常使用在程序的关键判断上,它能够明显地排除抖动信号的影响,防止系统误动作。例如在对布尔类型控制信号进行采集判断时,可以重复执行采集操作,将得到的信号相比较,再判断是否真的存在外部控制信号的到来。
2.3.3指令冗余
与时间冗余技术的主动判断相比,指令冗余技术的特点在于,它通过添加冗余指令来降低程序运行出错的可能性,具有一定的被动性。
CPU取指令过程是先取操作码,再取操作数。若程序跑飞到某双字节指令,而取指令时刻落在操作数上,就会误将操作数当作操作码执行,使得程序出错。若是三字节指令,则出错概率更大。
对于此种情况,本系统在关键地方人为插入了一些单字节指令,或将有效单字节指令进行了重写。通常是在双字节指令和三字节指令后插入2个字节以上的NOP指令。这样即使跑飞的程序飞到操作数上,由于空操作指令NOP的存在,也能够避免后面的指令被当作操作数执行,使程序自动纳入正轨。在RET、RETI、LCALL、LJMP、JC等对本系统流向起重要作用的指令之前插入2条NOP指令,确保了这些重要指令的执行。
3系统可靠性的检测
本系统经硬件和软件可靠性设计之后,进行了各项可靠性测试。结果表明,本系统的可靠性达到了很高的水平,数据合理,控制无误,实时性好,能够满足单片机系统的可靠性要求,具有如下的明显特征:
① 以既定功能为目标,输入编写的各种测试向量,输出结果显示系统功能正常。
② 重复性地对系统进行上电、掉电相当次数,系统上电掉电正常。
③ 把系统分别置于正常和强电磁干扰环境进行老化试验,系统长时间工作仍然非常稳定。
④ 使用静电模拟器和噪声干扰模拟器测试系统ESD和EFT能力,系统信号清晰。
⑤ 人为模拟系统使用环境中可能产生的干扰情况,如摩擦、触碰等,系统无异常反应。
4结论
消防监控报警系统这一单片机系统应用了以上软硬件可靠性设计,并且顺利通过了可靠性测试,取得了令人满意的效果。同时,运行结果表明,这些技术运用合理,软件和硬件紧密结合,对于提高系统的可靠性和保证系统的稳定运行起到了非常积极的作用,具有很强的实用性和很高的推广价值。