首发:嵌入式客栈
作者:逸珺
[导读] EMC( Electromagnetic Compatibility) 电磁兼容性对于一个产品而言是一个非常重要的性能指标,一个产品遇到EMC的坑,很多测试很难通过,很多软件同学可能会觉得EMC更多的是硬件攻城师要去应对的难题,与软件没毛关系。
个人认为这是一个不正确的认知,应该说EMC是一个系统性的综合性能指标。它与硬件设计、软件设计、机械结构设计都息息相关。本文就从软件编程的角度来分享一下个人的一些看法。
EMC是什么鬼?
电磁兼容性(EMC)是通过限制无意间产生、传播和接收电磁能量的电气设备和系统在其电磁环境中正常工作的能力。这些电磁能量可能会导致不必要的影响,例如电磁干扰(EMI:Electromagnetic Interference)甚至物理损坏、 设备功能异常、功能安全、人身财产安全等。
有这么严重吗?举个极端的例子,比如一个病人身上植入了心脏起搏器,他走到一个强干扰的环境中,外界的电磁干扰通过空间电磁波方式耦合进了心脏起搏器,心脏起搏器没扛住,然后就悲剧了。那么这样一个案例,就可以一体两面的来分析,干扰源从何而来?起搏器为啥没扛住?干扰咋进去的呢?.....
EMC研究三类主要问题:
- 能量来源:通过某种来源产生的电磁能,无论是有意还是无意的,都会释放到环境中。EMC研究了无用发射以及为减少无用发射而可能采取的对策。
- 抗干扰能力,它是指在遭受有害辐射(称为射频干扰(RFI))的情况下,受干扰的电气设备应对干扰避免或降低发生故障或损坏的能力。
- 耦合路径:干扰如何进入被干扰设备的机制/途径。
常见的EMC测试有哪些呢?
- 抗扰度测试:将干扰注入设备,检测设备表现是否正常,比如常规的静电抗扰度测试、脉冲群抗扰度、雷击浪涌,辐射抗扰度等等
- 传导辐射测试:测试设备对外部释放干扰的水平,设备应控制在一定的水准,否则测试将不通过。比如电源线传导测试、电磁波辐射测试等等,具体测试标准,这里就不一一列举了,有兴趣可以自行搜索查询。
有哪些电磁失效可能?
由于EMC干扰的注入,对于一个电子系统而言,可能会引起哪些功能失效呢?
- 系统死机无响应:怎么会呢?比如因为干扰原因,软件采集的一个错误的输入值,导致进入了死锁。
- PC指针失控,软件跑飞。
- 执行意外指令
- 错误的地址指向,数据损坏或丢失
- 子例程执行错误
- 设备重启和/或外部异常中断
- I/O表现异常,比如显示屏花屏,按键功能失效,继电器乱动,模数采样噪声增加,数模输出异常
- .......
哪些软件对策可考虑?来看一看我的一些体会,供大家参考。
看门狗技术
对于系统死机、PC指针失控、软件跑飞等等,可采用看门狗技术进行预防,即使出现了四级,由于看门狗技术,系统仍然能恢复正常,很多EMC测试等级,设备在干扰情况下,只要能恢复正常,都是可以接受的。为什么可以接受,因为这是具有现实应用价值的。具体可以采用什么样的喂狗策略呢?有兴趣的可以阅读之前的推文(点击即可阅读):
这里特别说下,为什么有序列检测(sequence check)技术的出现了。这也是需求驱动的,需求驱动技术发展!
数据冗余技术
数据在EMC场景下遭受磨坏,如果内部没有恢复机制,设备可能出现意想不到的表现。尤其在功能安全性要求很高行业,比如航空、医疗、汽车、工业等环境下。电子设备编程都会采用数据备份策略,对于关键安全功能链的内存数据都会强制要求采用备份数据机制。英文叫duplicate ,比如在IEC61508中就有强制要求。具体怎么实现呢?
将关键功能对应的运行时参数(在内存中的全局变量),都做一个备份。并利用链接绑定技术,将这些参数存储在两片连续的内存区中。在写某个参数时,同时也写备份参数。然后在一个后台中去检查两块区域是否相等,如果不相等则可能发生了致命的错误,可以采集故障报警或者设备重启的策略。
管理未使用的中断
对于单片机/DSP系统而言,如果很多中断异常并未使用,一方面应将中断控制寄存器对应的使能开关关闭,另一方面也应将中断处理接口显式给出,这样相对就比较安全。一个可以考虑的策略如下:
`void exception_isr(void)
{
/将异常中断记录或者如有可能显示/
record_exception_isr();
/让程序一直在这里死循环,通过看门狗让系统自动重启/
while(1);
}
`
在可能的情况下将出现这种异常中断记录并显示,同时进入死循环,利用前面说的看门狗技术让系统重启,或者进入设备安全状态。
谨慎IO策略
为啥干扰会注入,下图就是一个直观的例子,干扰最终会在数字系统中引起输入脉冲,这是异常行为:
输入通道:包括开关量输入,模数采样输入,可以采用滤波策略。比如开关量输入在既有的硬件输入滤波措施的基础上,可以采用诸如多次检测去抖动策略。如
`/描述一下思路/
define FILTER_TIMES 6
define SAMPLE_TIMES 10
define GET_IO_BIT(X) PA##X /硬件体系不同,具体实现修改/
bool read_io()
{
uint8 counter = 0;
for(int i=0;i<SAMPLE_TIMES;i++)
counter += GET_IO_BIT(0);
/大于门限占比则认为是高电平状态/
if(counter>=FILTER_TIMES)
return true;
else
return false;
}
`
这里仅仅描述一个思路,具体实现时,还需要考虑多次采样,中间是否需要加延时,你可以看成对开关量调整其采样率,进而做出合理判断。如果只读一次,则在干扰注入时,非常容易读取错误的信息。
对于一个模数采样而言,可以利用数字滤波器技术滤除噪声,消除噪声对系统的影响,在一些资源相对有限的系统,推荐使用一阶数字滤波器或者移动均值滤波器去处理。当然使用时需要合理选择截至频率,防止将真实有用信号频率干掉,导致正常功能也无法使用。
具体可以参考下面的文章,点击即可阅读:
输出通道:比如显示输出,比如LCD显示屏,可以增加刷新率,这样即使在某个瞬态设备被干扰了,由于刷新及时,那么外在显示就不会出现。人眼就可能无法识别,当然这是一个健壮措施。如果遇到这样的问题,还是建议从硬件上尽量将干扰切断或者降低注入的程度。对于电压模数输出,在可能的情况下,可以尝试采用工业4-20mA的标准,去传递信息。4-20mA标准在抗干扰方面性能优异。
掉电检测存储技术
一个电子系统的供电最容易被干扰,因此可以结合硬件设计一个掉电检测及短时板级UPS电路,检测出系统单片机/DSP供电被干扰到可能将要重启时,电路将备用供电切上,同时将关键运行时参数马上存储在非易失介质中(比如EEPROM/FRAM),如果系统真的无法抵抗干扰导致设备重启,在系统上电时,检测重启原因以及数据,如果识别出是由于短时掉电重启的,将介质中数据导入,恢复现场,系统继续执行。
健壮的通信协议设计
电子系统或多或少都需要与其他设备进行通信,那么设计一个健壮的通信协议也是提高抗干扰措施的一个重要手段,比如增加CRC报文完整性检查,增加错误重传机制,通信故障检测机制等等。
总结一下
电磁兼容是系统健壮性的一个重要方面,电磁兼容是一个系统性衡量指标,它绝不是硬件攻城狮一个人的锅,作为软件攻城狮(PCB布局布板、器件选择、电路参数设计、抗干扰器件等等)、机械工程师(比如加强屏蔽、设计吸波材料、结构尺寸、布局布线等等)都应该从各自的角度提出技术应对策略,来提升电子电气系统的工作稳定性,电磁兼容性水平。大家都被这个大锅妥妥的罩着,谁也别想独善其身~~~~
本文就这几个比较常用的技术应对措施,描述了一些方法措施,实际上这方面的对策远不止这些,有兴趣的可以深入研究,只是想表达一个观点:做研发,不要只做一个能用的产品,还要争取做一个稳定可靠的产品。编程也是如此,不要仅仅实现系统功能,还要努力实现一个鲁棒健壮的系统!大家共勉!!
写本文的过程中,找到一份个人觉得比较好的EMC基础PPT《emc design fundamentals》,如有兴趣,关注后台回复EMC可领取。
本文原创分享,如真心喜欢请留言、再看、转发三连支持走一波~~~ 哈哈哈,如需学习资料,可关注公众号,后台发送"领取“,即可免费获取海量学习资料。
_—END_—