在基于微控制器的电子系统中,强壮的软件设计是提高 EMC 性能的主要因素。必须尽量在项目设计阶段的早期考虑 EMC 干扰导致的问题。EMC 导向的软件提高了应用的安全性和可靠性。强化 EMC 性能的软件的实施成本低,可提高最终的抗扰性能,并节约硬件和开发成本。用户应考虑到模拟或数字数据受到的 EMC 干扰,就像任何其它应用参数一样。
EMC 干扰导致的问题示例:
微控制器无响应
程序计数器失控
执行意外指令
地址指向错误
子程序执行错误
寄生复位和 / 或寄生中断
IP 配置损坏
I/O 失灵
软件故障的后果示例:
产品意外响应
上下文丢失
进程中的意外分支
中断丢失
数据完整性缺失
输入值误读
01使用看门狗或时间控制
为了确保 MCU 能够从软件失控故障中恢复,看门狗是最有效的可用工具。它的原理非常简单:它是一个在计数结束时产生 MCU复位的定时器。一旦看门狗启动,防止看门狗复位控制器的唯一方式就是在程序中周期性更新计数器。
但是为了使看门狗发挥它的最大潜力,用户必须在软件中的恰当位置插入使能和喂狗指令。
下图演示了错误的看门狗使用方式:
需要执行下列规则:
复位之后尽快启用看门狗,或者开启硬狗选项 (如果有)。
切勿在中断服务函数中或在代码中没有超时保护的任何本地环路中刷新看门狗。 根据不同程序的持续时间,包括中断程序,对两个刷新指令之间的间隔时间进行优化是非常重要的。
看门狗还有一种小用途,即可以使用它来复位 MCU,但这也意味着程序上下文的丢失,以及应用数据完整性的丢失。复位之后,除了启用看门狗外,在一些 MCU 上,你可以使用复位标志来区分上电或低电压复位或看门狗复位。
正确使用看门狗的实例如下图:
02保护闲置程序存储区域
在大多数应用中,程序存储空间并没有完全被用户代码占满。为了更强的安全性,如果你不想产生复位,可以使用代码填满闲置存储位置,这样会强制看门狗复位或者跳向已知的程序位置。
即使程序计数器损坏,并且跳向闲置存储位置,这都将确保 MCU 恢复和返回到正常操作。在这个闲置区域,还可以跳转到恢复故障安全子程序,通过该子程序可恢复正常运行。
带有 ARM Cortex-M 内核的 STM32 微控制器使用故障异常,当系统遭受 EMC 干扰时,它可以捕获可能发生的非法存储访问和非法编程行为。未定义的指令操作代码可以用来填充STM32 微控制器的闲置存储,在程序计数器失控的情况下,提高故障异常使用率,使得故障安全程序从错误中恢复。
03输入过滤和比较
最佳做法是在验证状态和继续编程执行之前,由程序对输入引脚稳定性进行几次检查,以避免由输入电路的外部噪声造成的不想要的尖峰响应。这是一个简单的对关键输入滤波的方法,不需要额外的成本。
04闲置中断向量管理
为了避免意外中断事件导致的问题 (无论是什么来源),建议在相应的向量中加入一个有效的中断程序地址,以管理所有可能的中断来源。在下面的示例中,未使用的中断向量指向故障管理程序标签,该标签中填充了简单的 “ 从中断返回 ” 指令06
05平均模数转换器结果
如果你在执行 A/D 转换操作,你可以重复多次转换,将结果存储在 RAM 中,然后取平均值(或者选择最多出现的值),以在任何可能的噪声错误的情况下获取准确的结果。
06冗余数据存储和交换
由于极端条件下的电磁干扰,所有存储在内部或外部存储器的数据都可能损坏。高级的预防技术包括将双倍互补值存储在非临近存储区域、存储和检查奇偶校验位或 ECC,它们可帮助识别和 / 或修正数据损坏。 关注本公众号,在后台回复【STM32】可以获取更多相关设计的参考电路。