在电子系统设计中,为了少走弯路和节省时间,应充分考虑并满足抗干扰性 的要求,避免在
设计完成后再去进行抗干扰的补救措施。形成干扰的基本要素有三个:
(1)干扰源,指产生干扰的元件、设备或信号,用数学语言描述如下:du/dt, di/dt大的地方就是干扰源。如:雷电、继电器、可控硅、电机、高频时钟等都可 能成为干扰源。
(2)传播路径,指干扰从干扰源传播到敏感器件的通路或媒介。典型的干扰传播路径是通过导线的传导和空间的辐射。
(3)敏感器件,指容易被干扰的对象。如:A/D、D/A变换器,单片机,数字IC,弱信号放大器等。
抗干扰设计的基本原则是:抑制干扰源,切断干扰传播路径,提高敏感器件的 抗干扰性能。
(类似于传染病的预防)
1 抑制干扰源
抑制干扰源就是尽可能的减小干扰源的du/dt,di/dt。这是抗干扰设计中最优 先考虑和最重要的原则,常常会起到事半功倍的效果。 减小干扰源的du/dt主要是通过在干扰源两端并联电容来实现。减小干扰源的 di/dt则是在干扰源回路串联电感或电阻以及增加续流二极管来实现。
抑制干扰源的常用措施如下:
(1)继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。仅加续流二极管会使继电器的断开时间滞后,增加稳压二极管后继电器在单位时间内可动作更多的次数。
(2)在继电器接点两端并接火花抑制电路(一般是RC串联电路,电阻一般选几K 到几十K,电容选0.01uF),减小电火花影响。
(3)给电机加滤波电路,注意电容、电感引线要尽量短。
(4)电路板上每个IC要并接一个0.01μF~0.1μF高频电容,以减小IC对电源的影响。注意高频电容的布线,连线应靠近电源端并尽量粗短,否则,等于增大了电容的等效串联电阻,会影响滤波效果。
(5)布线时避免90度折线,减少高频噪声发射。
(6)可控硅两端并接RC抑制电路,减小可控硅产生的噪声(这个噪声严重时可能 会把可控硅击穿的)。
按干扰的传播路径可分为传导干扰和辐射干扰两类。
所谓传导干扰是指通过导线传播到敏感器件的干扰。高频干扰噪声和 有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰 噪声的传播,有时也可加隔离光耦来解决。电源噪声的危害最大, 要特别注意处理。 所谓辐射干扰是指通过空间辐射传播到敏感器件的干扰。 一般的解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感器件上加蔽罩。
2 切断干扰传播路径的常用措施如下:
(1)充分考虑电源对单片机的影响。电源做得好,整个电路的抗干扰就解决了一大半。许多单片机对电源噪声很敏感, 要给单片机电源加滤波电路或稳压器,以减小电源噪声对单片机的干扰。比如,可以利用磁珠和电容组成π形滤波电路,当然条件要求不高时也可用100Ω电阻代替磁珠。
(2)如果单片机的I/O口用来控制电机等噪声器件,在I/O口与噪声源之间应加隔离(增加π形滤波电路)。 控制电机等噪声器件,在I/O口与噪声源之间应加隔离(增加π形滤波电路)。
(3)注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离起来,晶振外壳接地并固定。此措施可解决许多疑难问题。
(4)电路板合理分区,如强、弱信号,数字、模拟信号。尽可能把干扰源(如电机,继电器)与敏感元件(如单片机)远离。
(5)用地线把数字区与模拟区隔离,数字地与模拟地要分离,最后在一点接于电源地。A/D、 D/A芯片布线也以此为原则,厂家分配A/D、D/A芯片 引脚排列时已考虑此要求。
(6)单片机和大功率器件的地线要单独接地,以减小相互干扰。大功率器件尽可能放在电路板边缘。
(7)在单片机I/O口,电源线,电路板连接线等关键地方使用抗干扰元件 如磁珠、磁环、电源滤波器,屏蔽罩,可显着提高电路的抗干扰性能。
3 提高敏感器件的抗干扰性能
提高敏感器件的抗干扰性能是指从敏感器件这边考虑尽量减少对干扰噪声 的拾取,以及从不正常状态尽快恢复的方法。
提高敏感器件抗干扰性能的常用措施如下:
(1)布线时尽量减少回路环的面积,以降低感应噪声。
(2)布线时,电源线和地线要尽量粗。除减小压降外,更重要的是降低耦合噪声。
(3)对于单片机闲置的I/O口,不要悬空,要接地或接电源。其它IC的闲置 端在不改变系统逻辑的情况下接地或接电源。
(4)对单片机使用电源监控及看门狗电路,如:IMP809,IMP706,IMP813,X25043,X25045等,可大幅度提高整个电路的抗干扰性能。
(5)在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字电路。
(6)IC器件尽量直接焊在电路板上,少用IC座。
...................................................................................
我先说说我在这方面的经验吧!不当之处请指正,有好经验与心得也请大方贡献!
软件方面:
1、我习惯于将不用的代码空间全清成“0”,因为这等效于NOP,可在程序跑飞时归位;
2、在跳转指令前加几个NOP,目的同1;
|