单片机软件抗干扰技术研究

2022-09-12

单片机系统在工业现场使用时, 周围众多的干扰源不仅对其输入、输出产生巨大的影响, 而且时常破坏内部程序计数器P C状态使程序跑飞, 甚至对系统硬件造成致命的损害, 使系统不能正常运行, 致使控制失灵。相比于硬件抗干扰技术[1~2]的针对性强, 预见性较差, 成本高, 软件抗干扰不仅设计灵活, 节约硬件资源, 成本低, 还能作为一种干扰过后的补救手段, 通用性强, 适用于不同的系统抵抗不同的干扰。因此, 单片机抗干扰编程的研究愈来愈引起人们的重视。本文列举了已有的单片机常用的抗干扰编程技术, 并在它们的基础上提出了新的抗干扰方法。

1 软件抗干扰的前提

单片机软件抗干扰就是在系统受工业现场的干扰源干扰后, 消除干扰对系统运行的破坏或帮助系统恢复正常运行。因此, 实施单片机软件抗干扰技术的前提条件如下。

(1) 在干扰作用下, 系统硬件部分未受到任何损坏, 或易损部分设置有监测状态可供查询。

(2) 程序区不会受任何干扰, 确保系统故障恢复后程序重新运行的正确性。

(3) R A M中重要数据不被破坏, 或被破坏后可以重新建立, 或者有其它的方法保存有重要数据。

在编程时, 需要注意以下几点:首先, 需要注意程序结构化设计, 应保证程序的闭环运行, 避免出现无条件等待语句, 根据不同的I/O外设对时间的要求, 分配相应的最大正常的为I/O时间, 为添加看门狗定时器提供了前提条件;另外, 程序必须模块化, 且每个模块 (子程序) 执行一个相对独立的功能。模块化编程不仅增强了程序的可读性和可维护性, 层次分明, 而且便于程序跑飞后的捕捉及恢复跑飞前的程序, 为实施单片机软件抗干扰提供了必要条件。

2 软件抗干扰技术

工业现场中的干扰作用在单片机的输入系统可使模拟信号失真、数字信号出错;干扰作用在单片机的输出系统可使各输出信号混乱, 不能正常反映单片机系统的真实输出;干扰作用在单片机系统的内核可使C P U芯片内部逻辑发生混乱有可能导致取操作码变成取操作数, 发送出错误的地址值, 读取到错误的数据或指令, 使寄存器值发生变化, 产生错误的跳转, 导致程序的跑飞[3]。因此, 下面将从输入、输出及C P U三方面具体讨论单片机软件抗干扰措施。

2.1 输入信号抗干扰措施

输入信号的干扰是叠加在有效电平信号上的一系列离散尖脉冲, 作用时间不定, 幅值大小不定。根据干扰信号的特性, 输入抗干扰措施分为以下五种。

2.1.1 选择输入抗干扰

(1) 根据时间选择。

有些干扰信号作用时间较短, 且相对输入信号作用位置固定, 在干扰作用时先延时一段时间, 跳过干扰, 再进行采样。例如, 按键在按下与抬起时都会有1 0 m s~2 0 m s的抖动毛刺出现, 在读取键值时应该先延时, 再进行采样。

(2) 根据幅值选择。

当干扰信号作用时间不定, 且对原有信号干扰较大时, 连续采样N次, 将N个采样值视为一组。若一组中的采样值的幅值分布较为离散, 则将该组N个采样值视为无效, 重新采样N次。

2.1.2 多数表决

对于干扰信号作用时间较短, 且相对输入信号作用位置随机的系统, 在采样时连续采样多次, 取其中出现次数最多的值作为输入值。若时间允许, 在两次采样间隔中加入适当延时, 这样可更有效的降低对干扰信号的误读的几率。

2.1.3 多次平均

当干扰信号作用时间较长, 但相对于有用信号幅值较小时, 连续采样多次, 求出多次采样的算术平均值作为输入值。这种方法减小了由于干扰信号所造成的输入信号瞬时采样的误差。

2.1.4 输入分区

对于干扰信号作用时间较长, 但相对于有用信号幅值较小的输入系统, 还可选用区间法处理输入信号, 即将输入信号按区间划分, 在同一区间内的信号视为等同, 进行相同的后续处理步骤。

例如, 图1所示的电位器式传感器接口电路。该电路用于测量位移的变化, 滑动电阻的阻值随位移的变化, U o u t 1端输出方波的频率也随之变化。由于受到外界干扰及滑动电阻误差的影响, 即使滑动电阻的阻值不变, 输出方波频率也会发生波动。因此, 在读取输入信号后, 采用输入分区处理的办法可减少误操作。下面一段程序为处理程序, 累加器A中存有Uout1输出方波的频率值, D A T A内所存数据为参考值。若累加器A的值大于参考值加1, 则转至M O R E G (累加器A的值大于参考值的处理程序) ;若累加器A的值小于参考值减1, 则转至L E S S G (累加器A的值小于参考值的处理程序) ;若累加器A的值与参考值之差绝对值小于等于1, 视为相等, 跳转到E Q U G (累加器A的值等于参考值的处理程序) 。

目前, A D转换精度不断提高, 在提高准确度的同时, 也为增强系统的容错性提供了条件。应用输入分区抗干扰法, 可以对高精度模拟输入信号进行初步的处理, 降低外界干扰的破坏性。

另外, 在特殊系统中可以采用迟滞区间处理输入信号, 也就是信号处于增大过程和减小过程时选用不同的参考值进行处理, 划分区间。

2.1.5 特殊函数滤波

对于特殊的测控系统, 根据其输入信号变化的规律, 将采样信号通过经验公式处理后作为输入信号。

另外, 为单片机系统选择合适的抗干扰方案, 还需考虑输入信号的种类及后续程序对输入信号的应用。对于数字信号的输入, 首先根据干扰作用时间进行有选择性的输入, 然后对控制、判断用的信号应用输入分区法处理, 对计算、显示用的信号采用多数表决法处理。对开关量输入选用多数表决法尤为适宜。对于模拟信号的输入, 首先判断输入信号的幅值有选择的输入, 然后对控制、判断用信号及计算、显示用信号分别选用输入分区法及多数平均法进行处理。在实际应用中, 应该根据具体问题具体分析, 选择合适的抗干扰措施。

2.2 输出信号抗干扰措施

对于输出抗干扰, 几乎所有的相关文献都提出了反复输出或锁存输出的办法[4~6]。实际上, 在单片机输出口线有较大的容性负载时, 由于标准8 0 5 1单片机的端口结构上的特点, 在输出高电平时连续写端口对提高输出可靠性确有帮助。但在存在强干扰、负载也不是容性并且所输出的执行设备采用锁存方式接收信号的情况下, 这种方法对于提高系统抗干扰的效果值得探讨:第一、如何选择合适的反复输出周期, 以确保在外部执行设备还未对受干扰后的错误信息做出有效反应时, 正确的信息就再次输出。第二、无法保证最后一次的输出值避免外部干扰, 执行设备可以接收到正确的信号。因此, 为保证系统有足够的可靠性, 作者建议: (1) 将输出信息反馈回C P U, 对反馈值与输出值进行比较, 若不同则重新输出。对于数字量输出只需将端口值读回;对于模拟量输出需要将执行设备的信息反馈。 (2) 提高输出驱动能力。如对于数字量输出, 还可选用多口线并联输出, 增加驱动电流, 增强信号的抗干扰能力;对模拟信号, 也可以采用并联输出的方式。 (3) 一般说来, 单片机的低电平驱动能力远高于高电平的驱动能力, 可以用上拉电阻的方法来平衡单片机的端口驱动能力, 以提高整体的抗干扰能力。

2.3 CPU软件抗干扰措施

单片机最易受干扰的是内部程序计数器P C的值。在受强干扰时, P C的值被改变, 改变后的值又是随机的, 为一不确定值。因此, 对系统内核C P U进行软件抗干扰显得尤为重要, 可分为两步:单片机抗干扰监控及程序跑飞后的恢复。

2.3.1 单片机抗干扰监控

常用的单片机抗干扰技术有:软件陷阱、指令冗余、软件看门狗等, 它们的作用是在系统受干扰时能及时发现, 再用软件的方法使系统复位。以上三种方法发展的已较为成熟, 有关文献很多, 这里就不再详细介绍, 只简单说明使用时应当注意的问题。

(1) 软件陷阱。

通常对于软件陷阱的应用, 不应仅在每个子程返回语句后加入多条L J M P0 0 0 0 H。如果对于未使用的中断和未使用的E P R O M都不加以考虑, 一旦未使用的中断因干扰时进入未使用的E P R O M, 程序将无法落入陷阱, 继续跑飞。为解决以上问题可在非程序区内用0 2 0 0 0 0填满, 或是在定时中断 (充当看门狗定时器) 程序中加入下面一段程序。

中断程序中D I R E C T为主程序中未使用的存储器单元。很多文献中将L J M P0000H换为两句PUSH 00H和RETI, 这是不合适的。PUSH 00H是将RAM中00H (也就是寄存器R 0) 内的数据两次压入堆栈, 而不是将立即数0 0 H压入堆栈作为中断返回地址。

(2) 指令冗余。

不仅要在对程序流向起重要决定性作用的指令前加入N O P, 在中断、堆栈、多字节指令前也应加上。同时也应将参数寄存器、中断使能标志及其它标志字反复刷新、写入。

(3) 软件看门狗。

硬件“看门狗”可有效监视程序陷入死循环故障, 但对中断关闭故障无能为力。软件“看门狗”对高级中断服务程序陷入死循环无能为力, 但能监视全部中断关闭的故障。将硬件“看门狗”和软件“看门狗”结合起来, 可以互相取长补短, 获得良好的抗干扰效果。对可靠性要求高的系统, 建议使用硬件“看门狗”, 并将“看门狗”输出从不可屏蔽中断端口输入。对于没有不可屏蔽中断的单片机, 如5 1系列单片机, 要将硬件“看门狗”输出与单片机的R E S E T引脚相连。否则当跑飞程序进入中断服务子程序, 有可能无法响应看门狗定时器。

目前很多芯片都加有“看门狗”定时器功能, 应用十分简单, 同时可以得到很好的效果。X I C O R公司的内部集成了4 K B的E E P R O M、电压监视及可编程看门狗定时器。X5045有三种时间长度的“看门狗”定时器可供选择, 应用时只需按规定将所选定时器时间写入状态寄存器, 在每次闭环程序返回前调用下面的程序, 就可实现软件看门狗。另外, 可将重要数据存入4 K B的E E P R O M, 在程序恢复时从X 5 0 4 5中调入, 确保程序的继续运行。

2.3.2 故障恢复

系统摆脱失控状态, 转入初始入口0 0 0 0 H后, 并不希望从头开始进行初始化, 而应继续跑飞前的程序, 尽量减小程序跑飞所带来的损失。在继续运行前, 要进行以下三步。

(1) 区分上电复位与系统复位。文献3中将P S W.5设为上电标志位, 上电复位后系统设置为0, 在系统初始化时将其置1。故障恢复时, 若P S W.5为1, 则跳过系统初始化。但是若P S W中数据遭干扰冲毁, 仍将其作为区分上电复位与系统复位的标志位, 必将引起后续错误。若在上电复位后, 选取E E P R O M中某个单元作为上电复位标志位用于区分上电复位与系统复位, 可以避免上述采用片内R A M作为标志所出现的问题。

(2) 恢复R A M中重要数据。微处理器受到干扰程序跑飞后, R A M中数据有可能会受到破坏。电源电压受到强烈干扰, 产生巨大波动, 快速下降到下限工作电压以下。在短暂干扰后, 电源电压恢复正常, 系统重新启动, 但此时R A M中数据整体受到冲毁, 故障恢复将无法实现。对于重要的单片机系统, 应选用以下方法保护R A M中数据, 即把对于恢复程序继续运行起重要作用的数据存于E E P R O M中, 掉电后这些数据仍有效。将这些数据从E E P R O M中读出并写入R A M中相应位置, 就恢复了R A M中重要数据。

(3) 根据状态寄存器, 跳转到相应模块, 继续运行跑飞前的程序。

3 一种新的软件抗干扰方法

在上述分析讨论的基础上, 本文提出一种新的软件抗干扰方法。

这种方法要求程序必须模块化编程, 且每个模块功能明确, 执行独立、唯一的功能。首先, 设立一个模块的功能字寄存器, 并为每个模块配置唯一的功能字。然后在每个模块在调用返回前, 将其功能字写入功能寄存器, 这时再返回上级程序。最好可以将功能寄存器中数据存入片外存储器 (E E P R O M) , 理由同2.3.2。故障恢复中不在R A M中备份重要数据。返回后, 先判断功能寄存器中的功能字是否正确。若正确, 继续运行下面的程序;若不正确, 则表示P C指针可能已经跳转到错误的位置, 程序已经跑飞, 子程序没有按预计的出口返回。这时程序将被拦截强制性跳转到0 0 0 0 H, 根据不同的状态字对程序进行错误处理及恢复性操作。

这种方法, 如同在程序中设立了若干个岗哨, 每次调用子程序返回后, 都要对返回的功能字进行验证, 正确后方可继续下面的程序。程序设计的时候可能会比原来复杂一些, 但是系统的运行稳定性会有很大提高。

4 结语

综上, 硬件抗干扰是主动措施, 与之相比软件抗干扰就是被动措施。它们各有所长, 只有将软、硬件抗干扰相结合, 同时选用多种抗干扰的方法并把它们有机地结合起来, 才能有效地保证工业现场单片机系统长期、可靠的运行。

摘要:单片机系统在复杂工业现场很容易因为受干扰而产生状态变化, 程序跑飞等现象, 通常可以通过硬件或软件编程方法将系统恢复到正常。由于软件编程相对硬件设计比较灵活, 节约硬件资源, 成本低, 单片机软件抗干扰编程越来越受到人们的重视。本文讨论了已有的单片机软件抗干扰技术, 并在讨论的基础上提出一些软件抗干扰方面的改进意见。

关键词:单片机,软件抗干扰,看门狗

参考文献

[1] 张军, 彭宣戈.嵌入式系统硬件抗干扰技术, 微计算机信息, 2006, 5 (22) :16~17.

[2] 朱顺华, 王成春, 邹逢兴.单片机控制系统的硬件抗干扰设计[J], 微计算机信息, 2007 (23) :86~88.

[3] 何立民.单片机应用技术选编1[M].北京航空航天大学出版社, 1993.

[4] 何立民.单片机应用技术选编5[M].北京航空航天大学出版社, 1997.

[5] 雷霖.单片微机测控系统软件的容错设计[J], 计算机自动测量与控制, 1999 (3) :65~68.

[6] 何立民.单片机应用系统抗干扰技术[M].北京航空航天大学出版社, 2000.

上一篇:新时代大学生理想信念教育探究下一篇:产融结合资本配置效应的理论分析