单片微机已经广泛应用于工业控制、仪表、通讯及军事装备等众多领域。由于其应用、环境的差异,受到的干扰也各不相同。总的说来,对微机系统的干扰主要来自以下几个方面:
1)电网的电源干扰
工业控制领域,大型电机的开、关,电焊及各种电火花都可能引起对微机系统的干扰。
2)信号通道的干扰
数据采集及实时控制系统中,对模拟量的输入、输出是必不可少的,输入通道及被控对象都可能产生干扰。
3)空间的辐射干扰
某些应用场合,如发射机、中频炉等周围,微机系统常常会受到辐射的干扰。
4)地线干扰
系统不合理接地,对微机系统也会造成干扰。
当然,也有一些其它的原因产生的干扰。不论何种原因产生的干扰,其最终的表现形式都会造成微机系统的“死机”,控制紊乱。下面以intel 8031cpu为例,说明硬件、软件的抗干扰方式及其原理。
1 硬件抗干扰措施
对不同的干扰采用不同的抗干扰方法,如在设备的前端加上带屏蔽罩的低通滤波器抑制电源干扰等,这些文献1都作了介绍,这里所要介绍的是在单片机系统设计时,电路上采用的一些措施。
1.1 “看门狗”的设计
“看门狗”技术是电路设计中较常用的一种技术。
如图1,计数器上电后一直处于计数状态,在计数器从0到溢出所需时间T内,程序控制I/O口对其复位。为了保证计数器不溢出,在编写程序时,要求在2T/3内复位“看门狗”。
当程序受干扰“跑飞”,即cpu“死机”后,计数器溢出,重新启动cpu.。应用“看门狗”时必须注意下面两个问题:一是在cpu“死机”时,计数器的复位端无效;二是cpu的现场恢复问题。
1.2 监视CPU的地址空间
在设计时,对I/O的扩展常用地址译码技术。有时译码输出有富余端,即程序正常执行时,不被选通的译码器输出端。当这些输出端被选通时,虽然程序已经“跑飞”,但可以用系统外部中断0或1(系统不用时),可依据图2,将空闲的输出端接到cpu的中断口,依靠cpu的中断管理程序使cpu正常工作。
我们知道,8031程序存储区与数据存储区是可以分开的,当应用程序编好后,程序用到的最高位地址是知道的,可以用一片GAL芯片监视程序存储区的地址,当cpu读程序的byte,由于cpu复位后总是从“0”地址执行,则程序地址不会超过2000H,如果cpu发出的地址超出2000H,而同时:/PESN端有效,则GAL发出复位信号。
1.3 应用外部RAM进行现场保护
在一些控制应用中,cpu被干扰后不允许从“0”地址执行,必须从断店执行,这就要求对一些重要的现场参数及程序进行状态进行保护。应用外部RAM进行现场保护是一种较为常用的方法。
在电路设计时,必须保证用于保护现场的RAM不会受到干扰。如图3是一种常见的电路。
如图3,外部RAM用于保护现场,它的写操作受到cs及WR端的双重控制。对它的写操作的程序如下:
MOV DPTR,#4000;打开外部RAM的写锁存端
MOVA,#0;
MOVX @DPTR,A
MOV DPTR,#2000H;保护现场
:
:
MOV DPTR,#5000H
MOV A,#0FFH ;关闭外部RAM的写锁存端
MOVX @DPTR,A
这样,一旦CPU失控,CPU启动后可以从外部RAM相应得位置读出参数,并恢复现场,从断点处执行程序,使人感觉不到CPU曾经出现过故障。
2 CPU的软件抗干扰措施
上面介绍的抗干扰措施,是以外加硬件为前提的。在有些场合,在软件设计上采取一些措施也同样可以提高CPU的抗干扰能力。
2.1超时复位
8031 CPU有两个16位内部定时器,当其空置时,则可以利用定时器的定时功能,监视程序的运行情况。以定时器0为例,说明其工作情况。
ORG 0BH;中断入口
SJMP TIN0
:
:
MOV TNOD ,#11H;定时器初始化
MOVTH0,#0
MOVTH0,#0
SETBTR0; 启动定时器0
SETB ET0;打开定时器0溢出中断
SETB EA
:
TIN0:转入现场恢复程序
这样,只要每隔一段程序插入MOV TH0,#0 这条指令,定时器就不会溢出;当程序不正确时,定时器0则会溢出。CPU响应该中断,进行必要的处理。
2.2 插入空操作指令
CPU程序“跑飞”,就是cpu不能读出有效的指令码,8031的大部分指令为单字节指令,即使程序“跑飞”,都不会引起程序紊乱。但对于一些双字节指令或多字节指令,则影响较大。为了有效的消除程序“跑飞”的影响,在一些多字节指令后,插入一些空指令,以保证对指令的读操作没有影响。特别是一些转移指令,在它们的前后插入两个空指令,这样,即使程序“跑飞”后,也不会影响后续指令的执行。
2.3 EPROM空闲区域的处理
EPROM的空闲区域均为“1”,程序一旦进入该区域,则很难正常恢复。分析8031指令代码,不难发现:LJMP 0202H的代码正好020202H,这样,只要在EPROM的空闲区域均写上0202H ,程序一旦进入该区域,就会自动转到202H的地址上。在202H的地址开始的区域,编写适当的程序,就可以提高程序本身的抗干扰能力。
3 结束语
以上介绍的这些,是作者的一些体会。单片微机系统的抗干扰措施远远不止上面介绍的几种。在设计单片微机系统时,必须从硬件、软件两个方面进行考虑,才能提高系统的抗干扰能力。
参考文献:
[1] 马斌.单片机原理及应用[M].北京:人民邮电出版社,2009.
[2] 张积东.单片机51/98开发与应用[M].北京:电子工业出版社,2009.