单片机应用系统的抗干扰设计是系统设计的重要内容之一,抗干扰性能的好坏将决定系统能否在复杂的电磁环境下稳定可靠地工作,从而决定了系统的实际使用价值。特别是在各种实时控制的远距离系统中,由于现场环境恶劣,干扰因素较多,系统不可避免地要受到其他电磁设备的干扰,若仅按常规设计就很难保证系统的正常运行。因此,抗干扰问题是设计者必须充分考虑和解决的,下面从硬件和软件两个方面谈谈抗干扰设计。
硬件抗干扰设计
1 供电系统
为了防止从电源系统引入干扰,首先采用交流稳压器保证供电系统的稳定性,防止电源的过压和欠压。其次,电源滤波和退耦是抑制电源干扰的主要方式,可将电源变压器的初级隔离起来,使混入初级的噪声干扰不致进入次级;使用隔离变压器滤掉高频噪声,低通滤波器滤掉工频干扰。
当系统中使用继电器、磁带等电感设备时,数据采集的供电电路应与继电器的供电电路分开,以避免在供电线路之间的干扰,即如图1所示。
对单片机系统的主机部分使用单独的稳压电路,必要时输入、输出供电分别采用DC-DC模块,避免各个部分之间的干扰。
图1 分别供电的系统示意图
2 印制电路板
① 注意合理布置印制电路板上的器件,遵循器件之间电气干扰小和易于散热的原则。
② 电路板要合理划分,模拟电路区、数字电路区、功率驱动区等要尽量分开,地线不能相混,要分别和电源端的地线相连。
③ 布线时尽量不要构成环路,特别避免沿印制电路板周围做成环路,不要出现长段的窄线并行,旁路电容的引线不能很长;单元电路的输出和输入应当用地线隔开; 电源线 和地线的走向尽量和数据传输的方向一致,并加宽宽度提高电路板的抗干扰能力。
④ 原则上每个IC都要加去耦电容,并靠近IC的电源脚和接地脚。
3 输入输出干扰的抑制
输入输出信号加上光电耦合器隔离,可以将主机部分和前向、后向通道及其他部分切断电路的联系,有效地防止干扰进入主机系统。
在单片机实时系统信号的长线传输过程中,要注意使用双绞线,提高系统的抗噪声能力。同时对传输线要进行阻抗匹配,可以在传输线的始端串联电阻、末端并联电阻,以实现匹配,提高系统的抗干扰能力。
软件抗干扰设计
为了提高测控系统的可靠性,仅靠硬件抗干扰措施是不够的,还需采用适当的软件抗干扰技术,软件抗干扰技术是当输入信号受干扰后去伪求真或系统受干扰后使系统恢复正常运行的一种辅助方法。对抑制输入信号的干扰主要采用数字滤波技术,通过软件去除噪声对数据采集结果的影响。系统受干扰后会使得程序失控,失控原因大都可以归结为程序计数器PC的内容发生变化,引起程序“跑飞”或陷入死循环,CPU执行了一系列错误的指令从而导致系统失控,,可以采用软件冗余、软件陷阱和“看门狗”技术等使程序纳入正规。
MCS-51所有指令都不超过三个字节,且多为单字节指令,指令由操作码和操作数组成,操作码指明CPU完成什么样的操作,单字节指令仅有操作码,隐含操作数。CPU受到干扰后,PC内容发生变化,当程序弹飞到某一单字节指令时,便自动纳入正规。当“跑飞”到某一双字节或三字节指令时,若恰恰在取指令时刻落到其操作数上,CPU就将操作数当作操作码来执行,引起程序混乱。因此软件设计应多采用单字节指令,并在关键的地方人为的插入一些单字节指令 NOP,或将有效的单字节指令重写,这称作指令冗余。在实际软件设计中,往往在双字节和三字节指令之后插入两个NOP指令,可以保证程序“跑飞”后其后面的指令不会拆散,后面的程序可以正常运行。在那些对程序流向起决定作用的指令,如RET、RETI、ACALL、LJMP、JZ、JNC等之前也插入2条 NOP指令,可保证跑飞的程序迅速进入正确的控制轨道。
2 软件陷阱技术
软件冗余技术适用于干扰后PC指向不正确的程序区,当跑飞程序进入非程序区(如EPROM未使用的空间)或表格区时,使用冗余指令的措施已不再适用,可采用软件陷阱的办法拦截跑飞程序,将其迅速引向一个指定的位置,执行一段对程序运行出错的处理程序。软件陷阱可采用以下形式:
NOP
NOP
LJMP ERROR ;ERROR为指定地址,安排有出错处理程序
软件陷阱可安排在下面几个区域。
①未使用的中断向量区
当干扰使未使用的中断开放,并激活这些中断时,就会引起系统程序的混乱,如果在这些地方设置陷阱,就能及时捕捉到错误中断。
②未使用的EPROM区
假设使用了一片2764,但程序并没有用完这个2764区域,这些非程序区可以用0000020000数据填满,020000是指令LJMP 0000H的机器码,当跑飞程序
进入此区后,便会迅速自动进入正确轨道。
③数据表格区
由于表格中内容和检索值有一一对应关系,在表格中安排陷阱将会破坏其连续性和对应关系,应在表格区的尾部设置软件陷阱。
④程序区
前面已介绍,跑飞的程序在用户程序内部跳转时可用指令冗余技术加以解决,也可以设置软件陷阱,更有效地抑制程序跑飞。程序设计常采用模块化设计,模块化的程序是由一序列执行指令构成的,一般不能在这些指令串中间任意安排陷阱,否则正常执行的程序也可能被抓走,可以将陷阱指令分散放置在各模块之间的空余单元中。正常程序中不执行这些陷阱指令,但当程序跑飞一旦进入陷阱区,马上将程序拉回正确轨道。陷阱的多少视用户程序的大小而定,一般每1K字节有几个陷阱就够了。
⑤非EPROM 芯片 空间
MCS-51有64K程序系统空间,一般除了EPROM芯片占用的地址外,还剩余大片未编程的EPROM空间。当PC跑飞进入这些空间时,读入数据为0FFH,对51系列而言,相当于指令MOV R7,A,将修改R7的内容。
当CPU读程序存储器时,会产生一个PSEN的低电平信号,可利用该信号和EPROM的地址译码信号产生选通信号,引起一个空闲的中断,在中断服务程序中设置软件陷阱,将跑飞程序拉入正规,图2是一个实例。
图2 非EPROM区程序陷阱实例
3 ”看门狗“技术
PC受到干扰引起程序失控,有可能使程序进入“死循环”,指令冗余和陷阱技术都不能解决这个问题,通常采用“看门狗”技术(Watchdog)。该技术就是不断监视程序循环运行的时间,若发现时间超过已知的循环设定时间,即认为进入死循环,然后强迫程序返回到0000H入口地址,在0000H安排出错处理程序,使系统纳入正规。“看门狗”技术既可由硬件实现,也可以由软件来实现,二者还可以结合使用。
在实际应用中,有各种专用芯片例如MAX813815等能够完成“看门狗”功能,这些芯片集成了电压监控电路、备用电池和切换电路以及 Watchdog电路,功能齐全,应用非常广泛。在实时测控系统中,为了根据系统的需要来设定定时时间,也可采用图3所示8254构成的“看门狗”电路,该电路使用8254的一个计数器,工作在方式1,定时时间可以由程序设定。
图3 8254构成的“看门狗”电路
由图3可以看出,无论8254输出端OUT有正的上升沿还是系统上电复位的上升沿都将使系统复位,但两者的含义是不同的。方式1的特点是OUT端输出负脉冲的宽度为写入8254的计数初值,在8254计数期间,若GATE端有重触发信号,则重新装入计数初值计数,亦即输出保持为低电平。因此可设定 8254的计数初值,使其输出负脉冲的宽度稍大于程序正常运行的时间,然后在程序运行的适当位置上设置指令,使P1.0口向8254发来触发脉冲,这样当程序正常运行时,OUT端一直输出低电平,若程序“跑飞”后P1.0口不能正常送来触发信号,则计时时间到后,OUT端变为高电平,形成复位脉冲,使系统复位。由D触发器7474构成的电路是用来区别是上电复位还是失控后的自动恢复复位的。
结论
单片机实际应用系统抗干扰的根本在于硬件结构,软件抗干扰起到的是补充作用,在系统设计时只有二者兼顾,相互结合、互补才能达到较好的抗干扰效果。