引言
随着单片微机在各个领域中的应用越来越广泛,对其可靠性要求也越来越高。单片机系统的可靠性由多种因素决定,其中系统抗干扰性能是可靠性的重要指标。工业环境有强烈的电磁干扰,因此必须采取抗干扰措施,否则难以稳定、可靠运行。
工业环境中的干扰一般是以脉冲形式进入微机系统,渠道主要有三条,如图1所示。
空间干扰(场干扰),电磁信号通过空间辐射进入系统。
过程通道干扰,干扰通过与系统相连的前向通道、后向通道及与其它系统的相互通道进入。
供电系统干扰,电磁信号通过供电线路进入系统。
一般情况下空间干扰在强度上远小于其它两种,故微机系统中应重点防止过程通道与供电系统的干扰。
抗干扰措施有硬件措施和软件措施。硬件措施如果得当,可将绝大部分干扰拒之门外,但仍然会有少数干扰进入微机系统,故软件措施作为第二道防线必不可少。由于软件抗干扰措施是以CPU为代价的,如果没有硬件消除绝大多数干扰,CPU将疲于奔命,无暇顾及正常工作,严重影响系统的工作效率和实时性。因此,一个成功的抗干扰系统是由硬件和软件相结合构成的。
笔者设计的激光打标控制系统由于现场使用环境较恶劣,各种干扰因素较多,如交流噪声、电网干扰及其它电磁干扰等,因此必须采取有效的抗干扰措施以确保系统稳定工作,下面介绍我们在该系统硬件、软件和CPU上采取的抗干扰措施。
硬件措施
光电隔离
在输入和输出通道上采用光电隔离器来进行信息传输是很有好处的,它将微机系统与各种传感器、开关、执行机构从电气上隔离开来,很大一部分干扰将被阻挡。本系统中步进电机驱动电路采用了光电隔离器4N33。电路如图2所示。
过压保护电路
在输入输出通道上应采用一过压保护电路,以防引入高电压,伤害微机系统。过压保护电路由限流电阻和稳压管组成,限流电阻选择要适宜,太大会引起信号衰减,太小起不到保护稳压管的作用。稳压管的选择也要适宜,其稳压值以略高于最高传送信号电压为宜,太低将对有效信号起限幅效果,使信号失真。步进电机驱动电路即采用过压保护电路。
抗干扰电源
微机系统供电线路是干扰的主要来源,电源采用隔离变压器接入电网,可以防止电网的干扰侵入微机系统。隔离变压器与普通变压器的不同之处在于它在初级和次级之间加了一层屏蔽层,并将它和铁芯一起接地。
配置去耦电容
原则上每个集成电路芯片都应安置一个0.01mF的陶瓷电容器,可以消除大部分高频干扰。
良好接地
本系统既有模拟电路又有数字电路,因此数字地与模拟地要分开,最后只在一点相连,如果两者不分,则会互相干扰。
软件措施
单片机在输出信号时,外部干扰有可能使信号出错。本系统中单片机发出的驱动步进电机的信号经锁存器锁存后传送给驱动电路,锁存器对干扰非常敏感,当锁存线上出现干扰时,会盲目锁存当前数据,而不管是否有效。因此首先应将锁存器与单片机安装在同一电路板上,使传输线上传送的是已经锁存好的控制信号。在软件上,最有效的方法就是重复输出同一个信号,只要重复周期尽可能短,锁存器接收到一个被干扰的错误信号后还来不及作出有效的反应,一个正确的输出信号又来到,就可以及时防止错误动作的产生。
CPU抗干扰措施
前面几项抗干扰措施是针对I/O通道,干扰还未作用到单片机本身,这时单片机还能正确无误地执行各种抗干扰程序,当干扰作用到单片机本身时(通过干扰三总线等),单片机将不能按正常状态执行程序,从而引起混乱。如何发现单片机受到干扰,如何拦截失去控制的程序流向,如何使系统的损失减小,如何恢复系统的正常运行,这些就是CPU抗干扰需要解决的问题。我们采用了以下几种方法。
人工复位
对于失控的CPU,最简单的方法是使其复位,程序自动从0000H开始执行。为此只要在单片机的RESET端加上一个高电平信号,并持续10ms以上即可。
掉电保护
电网瞬间断电或电压突然下降将使微机系统陷入混乱状态,电网电压恢复正常后,微机系统难以恢复正常。对付这一类事故的有效方法就是掉电保护。掉电信号由硬件电路检测到,加到单片机的外部中断输入端。软件中断将掉电中断规定为高级中断,使系统及时对掉电作出反应。在掉电中断子程序中,首先进行现场保护,保存当时重要的状态参数,当电源恢复正常时,CPU重新复位,恢复现场,继续未完成的工作。
睡眠抗干扰
CMOS型的51系列单片机具有睡眠状态,此时只有定时/计数系统和中断系统处于工作状态。这时CPU对系统三总线上出现的干扰不会作出任何反应,从而大大降低系统对干扰的敏感程度。
我们仔细分析系统软件后发现,CPU很多情况下是在执行一些等待指令和循环检查程序,由于这时CPU虽没有重要工作,但却是清醒的,很容易受干扰。让CPU在没有正常工作时休眠,必要时再由中断系统来唤醒它,之后又处于休眠。采用这种安排之后,大多数CPU可以有50~95%的时间用于睡眠,从而使CPU受到随机干扰的威胁大大降低,同时降低了CPU的功耗。
指令冗余
当CPU受到干扰后,往往将一些操作数当作指令码来执行,引起程序混乱。这时我们首先要尽快将程序纳入正轨(执行真正的指令系列)。MCS-51系统中所有指令都不超过3个字节,而且有很多单字节指令。当程序弹飞到某一条单字节指令上时,便自动纳入正轨。当弹飞到某一双字节或三字书指令上时,有可能落到其操作数上,从而继续出错。因此,我们应多采用单字节指令,并在关键的地方人为地插入一些单字节指令(NOP),或将有效单字书指令重复书写,这便是指令冗余。[page]
在双字节和三字节指令之后插入两条NOP指令,可保护其后的指令不被拆散。或者说,某指令前如果插入两条NOP指令,则这条指令就不会被前面冲下来的失控程序拆散,并将被完整执行,从而使程序走上正轨。但不能加入太多的冗余指令,以免明显降低程序正常运行的效率。因此,常在一些对程序流向起决定作用的指令之前插入两条NOP指令,以保证弹飞的程序迅速纳入正确的控制轨道。此类指令有:RET、RETI、LCALL、SJMP、JZ、CJNE等。在某些对系统工作状态至关重要的指令(如SETB EA之类)前也可插人两条NOP指令,以保证被正确执行。上述关键指令中,RET和RETI本身即为单字书指令,可以直接用其本身来代替NOP指令,但有可能增加潜在危险,不如NOP指令安全。
软件陷阱
指令冗余使弹飞的程序安定下来是有条件的,首先弹飞的程序必须落到程序区,其次必须执行到冗余指令。当弹飞的程序落到非程序区(如EPROM中未使用的空间、程序中的数据表格区)时前一个条件即不满足,当弹飞的程序在没有碰到冗余指令之前,已经自动形成一个死循环,这时第二个条件也不满足。对付前一种情况采取的措施就是设立软件陷阱,对于后一种情况采取的措施是建立程序运行监视系统(WATCHDOG)。
所谓软件陷阱,就是一条引导指令,强行将捕获的程序引向对程序出错进行处理的程序。如果我们把这段程序的入口标号称为ERR的话,软件陷阱即为一条LJMP ERR指令,为加强其捕捉效果,一般还在它前面加两条NOP指令,因此,真正的软件陷阱由三条指令构成:
NOP
NOP
LJIMP ERR
软件陷阱安排在下列四种地方:
(1)未使用的中断向量区。当干扰使未使用的中断开放,并激活这些中断时,就会进一步引起混乱。如果在这些地方布上陷阱,就能及时捕捉到错误中断。
(2)未使用的大片ROM空间。现在使用EPROM都很少将其全部用完。对于剩余的大片未编程的ROM空间,一般均维持原状(0FFH),0FFH对于指令系统,是一条单字节指令(MOV R7,A),程序弹飞到这一区域后将顺流而下,不再跳跃(除非受到新的干扰)我们只要每隔一段设置一个陷阱,就一定能捕捉到弹飞的程序。软件陷阱一定要指向出错处理过程ERR。我们可以将ERR字排在0030H开始的地方,程序不管怎样修改,编译后ERR的地址总是固定的(因为它前面的中断向量区是固定的)。这样我们就可以用00 00 02 00 30五个字节作为陷阱来填充ROM中的未使用空间,或者每隔一段设置一个陷阱(02 00 30),其它单元保持0FFH不变。
(3)表格。有两类表格,一类是数据表格,供MOVC A,@A+PC指令或MOVC A,@A+DPTR指令使用,其内容完全不是指令。另一类是散转表格,供JMP @A+DPTR指令使用,其内容为一系列的三字节指令 LJMP或两字节指令 AJMP。由于表格内容和检索值有一一对应关系,在表格中间安排陷阱将会破坏其连续性和对应关系,只能在表格的最后安排五字节陷阱(NOP NOP LJMP ERR)。
(4)程序区。程序区是由一串串执行指令构成的,在这些指令串之间常有一些断裂点,正常执行的程序到此便不会继续往下执行了,这类指令有JMP、RET等。这时PC的值应发生正常跳变。如果还要顺次往下执行,必然就出错了。当然,弹飞来的程序刚好落到断裂点的操作数上或落到前面指令的操作数上(又没有在这条指令之前使用冗余指令),则程序就会越过断裂点,继续往前冲。我们在这种地方安排陷阱之后,就能有效地捕捉住它,而又不影响正常执行的程序流程。例如:
……
AJMP ABC
NOP
NOP
LJMP ERR
……
ABC:MOV A,R2
RET
NOP
NOP
LJMP ERR
ERR: ……
由于软件陷阱都安排在程序正常执行不到的地方,故不会影响程序执行效率。
结语
综上所述,通过对单片机应用系统的软硬件全面考虑,并针对不同的情况采取不同的技术措施,保证了系统准确、可靠运行。激光打标控制系统采用了上述抗干扰措施后,系统可靠性大大增强,运行稳定,效果理想,现已批量生产,取得了良好的经济效益。■
参考文献
1.陈光东,赵性初,单片微型计算机原理与接口技术,华中理工大学出版社,1995:150。
2.邵贝贝,单片机系统可靠性技术及发展,电子产品世界,1998;8:20-21。
上一篇:Flash型单片机的加密与解密
下一篇:C语言出错信息速查
推荐阅读最新更新时间:2024-03-16 13:02