1. 从一次辐射发射测试超标说起
去年秋天,我接手了一个挺典型的案子。一块基于STM32的工业控制板,功能验证全部通过,EMC预测试的时候传导发射勉强压线过了,但辐射发射(RE)在30MHz到230MHz这个频段直接爆表,最高点超了限值线将近8dB。客户那边的项目节点卡得很死,留给整改的时间只有一周。
这块板子的特殊之处在于,它没有用外部晶振,而是直接用了STM32芯片内置的HSI时钟。当初选这个方案的理由很实在:省两颗电容、省一个晶振、省PCB面积,BOM成本能降几毛钱,而且产品对时钟精度要求不高,内置RC振荡器完全够用。但问题恰恰出在这里——内置时钟的辐射特性跟外部晶振完全是两码事,常规的滤波手段在它面前基本失效。
我试过在电源脚上加磁珠、加π型滤波,试过在晶振引脚(虽然没用外部晶振,但相关引脚还在)上并电容,甚至把整板用铜箔包起来做屏蔽,效果都不理想。后来用近场探头一点点扫,才发现辐射源根本不在电源网络上,而是内置时钟的谐波通过芯片内部的电源分配网络耦合到了IO口,再通过IO口的走线像天线一样辐射出去。
这个发现让我重新理解了“滤波失效”这四个字的含义。滤波电路设计得再好,如果干扰源在滤波器后面,那滤波器就是个摆设。芯片内置时钟的RE问题,本质上是一个源端抑制的问题,而不是路径滤波的问题。
这篇文章就是把这个案子的完整破局过程拆开来讲。从辐射机理分析、近场定位方法、到最终的源端抑制方案,每一步都有实测数据支撑。如果你手头也有用内置时钟的芯片,不管是STM32、ESP32还是其他MCU,正在被RE超标折磨,那这篇内容应该能帮你少走不少弯路。
2. 内置时钟为什么会让常规滤波手段失效
2.1 内置RC振荡器的辐射机理跟外部晶振完全不同
外部晶振的辐射模型相对简单。晶振本身是一个独立的器件,它的辐射主要通过两条路径传播:一是晶振引脚到芯片的走线,这段走线如果处理不好会形成小天线;二是晶振的电源引脚,如果电源滤波不干净,谐波会通过电源网络扩散。针对这两条路径,常规的滤波手段——比如在晶振电源脚加RC滤波、在走线上串小电阻、包地处理——都能起到明显效果。
但内置RC振荡器的情况完全不一样。以STM32的HSI为例,这个振荡器是集成在芯片内部的,它的输出直接送到芯片内部的PLL和时钟树,根本不经过任何外部引脚。这意味着你没法在“源”和“负载”之间插入任何滤波器。更麻烦的是,RC振荡器的工作电流是脉冲式的,每次充放电都会在芯片内部的电源分配网络(PDN)上产生一个电流尖峰。这个尖峰包含丰富的高频谐波,会通过PDN耦合到芯片内部的所有模块,包括IO口的驱动电路。
我实测过一块STM32F103的板子,用近场探头贴着芯片表面扫,在芯片正上方能测到很强的磁场辐射,频率正好是HSI的基频8MHz及其各次谐波。而把同样的探头放到外部晶振方案的另一块板子上,芯片正上方的辐射强度要低15dB以上。这个对比很直观地说明了问题:内置时钟的辐射源在芯片内部,你从外面够不着。
2.2 滤波电路失效的根本原因:干扰源在滤波器后面
很多工程师遇到RE超标,第一反应就是加滤波。电源线上加共模电感、加X电容Y电容,信号线上加磁珠、加RC滤波。这些手段对付外部干扰源或者传导发射确实有效,但对付内置时钟的RE问题,往往收效甚微。
原因可以用一个简单的类比来解释。假设你家水管漏水,水从墙里面渗出来。你在墙外面刷防水涂料,能解决问题吗?短期可能有点效果,但水压一上来,该渗还是渗。正确的做法是找到墙里面的漏点,从源头把水管修好。内置时钟的RE问题就是这堵墙里面的水管——干扰源在芯片内部,你在芯片外面的电源线上加再多滤波,干扰已经通过IO口辐射出去了,滤波器根本拦不住。
更准确地说,滤波电路的有效性取决于它在干扰传播路径上的位置。如果干扰源在滤波器的输入端(靠近芯片侧),那滤波器对干扰的抑制能力非常有限。内置时钟的谐波通过PDN耦合到IO口驱动电路,然后直接从IO引脚输出,这个路径完全绕过了电源入口处的滤波器。所以你会看到一个很奇怪的现象:电源线上的传导发射可能并不高,但辐射发射却严重超标。
2.3 哪些芯片和场景最容易踩这个坑
根据我这几年经手的案子,内置时钟导致RE超标的高发场景有这么几类。
第一类是成本敏感的消费类产品,比如小家电、玩具、LED驱动器。这些产品为了省成本,几乎必然用内置时钟,而且PCB通常是单面板或双面板,没有完整的地平面,IO口走线又长又乱,辐射效率极高。
第二类是IO口翻转频繁的应用,比如LED显示屏、电机驱动、通信接口。IO口每次翻转都会在PDN上产生一个电流尖峰,这个尖峰会激励内置时钟的谐波,形成调制辐射。翻转频率越高,辐射越强。
第三类是芯片封装小、引脚少的型号。比如QFN封装的MCU,芯片内部的PDN阻抗本身就比较高,内置时钟的电流尖峰在上面产生的电压波动更大,耦合到IO口的能量也更强。
我整理了一个简单的对照表,帮你快速判断自己的项目是不是高危:
| 风险因素 | 低风险 | 高风险 |
|---|---|---|
| 时钟方案 | 外部晶振 | 内置RC振荡器 |
| PCB层数 | 四层以上,有完整地平面 | 双层板,地平面不完整 |
| IO口翻转频率 | 低,大部分时间静态 | 高,PWM或通信接口频繁翻转 |
| 芯片封装 | LQFP,引脚间距大 | QFN,引脚密集 |
| 产品外壳 | 金属屏蔽壳 | 塑料壳,无屏蔽 |
如果你的项目中了三条以上,那RE测试大概率会出问题,建议提前做近场扫描定位。
3. 近场探头定位辐射源的标准操作流程
3.1 准备工作:你需要哪些工具
近场扫描不需要昂贵的暗室设备,一套基本的近场探头加频谱分析仪就能干活。我用的是Langer的RF-R 50-1和RF-B 3-2探头套装,配一台R&S的FPC频谱分析仪。如果预算有限,国产的近场探头套装也能用,关键是探头要能覆盖30MHz到1GHz这个频段。
除了探头和频谱仪,还需要几样辅助工具:一台能稳定供电的直流电源(最好带电流显示)、一根高质量的SMA线缆、以及一个简易的测试台架。测试台架不用太复杂,一块铜板做参考地,把待测板放在铜板上方1cm左右的位置就行。
注意:近场扫描的结果受探头方向、距离、角度影响很大。每次移动探头时,尽量保持探头与板面的距离和角度一致,否则测出来的幅度变化可能只是操作误差,不是真实的辐射分布。
3.2 第一步:全板粗扫,找出热点区域
先把频谱仪设置到RE测试超标的频段,比如30MHz到230MHz。RBW设成100kHz,扫描时间设成自动。然后把近场探头放在板子上方约5mm的高度,从板子的一角开始,按网格状慢慢移动。
移动的时候盯着频谱仪的峰值保持功能,记录每个位置的最大幅度。我一般会把板子分成1cm×1cm的网格,每个网格停留3到5秒,确保频谱仪的扫描能覆盖完整。粗扫的目的是找出辐射最强的几个区域,不用太精确,能定位到芯片附近还是连接器附近就行。
这个案子里,粗扫的结果很明确:辐射最强的点就在MCU芯片正上方偏IO口一侧,幅度比板子其他区域高12dB以上。这就排除了连接器辐射和电源线辐射的可能性,把问题锁定在了芯片本身。
3.3 第二步:精细扫描,区分电源辐射和IO辐射
粗扫定位到芯片区域后,需要进一步区分辐射是来自电源引脚还是IO引脚。方法很简单:把探头分别靠近芯片的电源引脚和IO引脚,对比幅度。
如果电源引脚附近的辐射更强,说明干扰主要通过电源网络传播,可以在电源引脚上加滤波。如果IO引脚附近的辐射更强,说明干扰是通过IO口驱动电路直接辐射的,滤波手段基本无效,必须从源端想办法。
这个案子里,IO引脚附近的辐射比电源引脚高了将近8dB。而且我注意到一个细节:辐射最强的IO口正好是那个用来驱动LED的PWM输出脚。把PWM关掉后,辐射立刻下降了6dB。这就实锤了——内置时钟的谐波通过PDN耦合到了IO口驱动电路,再通过PWM翻转调制后辐射出去。
3.4 第三步:确认辐射频率与内置时钟的对应关系
最后一步是确认辐射频率确实来自内置时钟。把频谱仪的标记点放在超标频率上,然后临时把系统时钟切换到外部晶振(如果板子上有预留的话),或者把内置时钟的频率改一下(比如从8MHz改成16MHz),观察超标频率是否跟着移动。
如果超标频率跟着时钟频率移动,那就百分之百确认是内置时钟的问题。如果不动,那可能是其他干扰源,比如开关电源的谐波或者通信接口的时钟。
这个案子里,我把HSI从8MHz切换到16MHz后,超标频率从64MHz、96MHz、128MHz变成了128MHz、192MHz、256MHz,完全跟着走。到这一步,问题的根源就彻底清楚了。
4. 源端抑制的四个实操方案与实测对比
4.1 方案一:展频时钟(SSC)配置
展频时钟是解决内置时钟RE问题最直接的手段。它的原理很简单:让时钟频率在一定范围内周期性抖动,把原本集中在单一频率上的能量分散到一个频带内,从而降低峰值幅度。
STM32的部分型号支持HSI的展频功能,可以通过配置寄存器开启。以STM32F0系列为例,需要设置RCC_CR寄存器中的HSION和HSITRIM位,配合RCC_CFGR中的展频相关位。具体的配置代码大概长这样:
// 开启HSI展频功能(以STM32F0为例) RCC->CR |= RCC_CR_HSION; // 使能HSI while(!(RCC->CR & RCC_CR_HSIRDY)); // 等待HSI稳定 RCC->CR |= RCC_CR_HSIDIVEN; // 使能HSI分频 // 配置展频参数,具体位定义参考参考手册 RCC->CR |= (0x1 << 8); // 设置展频深度展频的深度和调制频率需要根据RE测试结果调整。深度太浅,峰值降不下来;深度太深,可能影响通信接口的时序。我一般从0.5%的深度开始试,逐步增加到1%或2%,同时监控通信误码率。
实测下来,展频功能开启后,64MHz处的峰值从超标8dB降到了限值线以下3dB,效果非常明显。但有个坑要注意:不是所有STM32型号都支持HSI展频,选型的时候一定要查参考手册确认。
4.2 方案二:IO口驱动能力降级与斜率控制
如果芯片不支持展频,或者展频深度不够,第二个手段是降低IO口的驱动能力和翻转斜率。IO口的辐射强度跟驱动电流和电压变化率(dV/dt)直接相关。驱动能力越强,翻转越快,辐射越高。
STM32的IO口驱动能力可以通过GPIOx_OSPEEDR寄存器配置,有2MHz、10MHz、50MHz几档。默认通常是50MHz,对于LED驱动这种低速应用,完全没必要用这么高的速度。改成2MHz后,实测64MHz处的辐射下降了4dB左右。
除了降速,还可以在IO口上串一个小电阻(22Ω到100Ω),进一步降低翻转斜率。这个电阻要尽量靠近芯片引脚放置,否则走线的寄生电容会让效果打折扣。我试过串33Ω电阻,配合2MHz驱动速度,总共降了6dB。
实操心得:串阻的阻值不是越大越好。阻值太大,信号上升沿变缓,可能影响通信接口的时序余量。我一般先用示波器看信号质量,确保上升沿在可接受范围内,再确定最终阻值。
4.3 方案三:芯片内部PDN的去耦优化
内置时钟的谐波通过PDN耦合到IO口,所以降低PDN阻抗也能起到抑制作用。PDN阻抗主要取决于去耦电容的布局和容值组合。
很多工程师习惯在芯片电源脚旁边放一颗100nF电容就完事了,这对于低频去耦够用,但对于内置时钟的高次谐波(几十MHz到几百MHz),100nF电容的等效串联电感(ESL)已经让它的阻抗变得很高了。正确的做法是用多颗小容值电容并联,比如100nF、1nF、100pF组合,分别对应不同的频率段。
更重要的是布局。去耦电容的接地回路要尽可能短,最好直接打在芯片的地焊盘上。我见过很多板子,电容放在芯片旁边,但接地线绕了一大圈才到地平面,这个回路电感直接把电容的高频去耦效果废掉了。
这个案子里,我把芯片背面的地焊盘上直接打了四个过孔,然后在背面放了三颗电容:100nF、1nF、100pF,每颗电容的接地端直接连到过孔上。改完后,64MHz处的辐射又降了3dB。
4.4 方案四:IO口走线的天线化抑制
即使做了前面三步,IO口走线仍然可能像天线一样把残余的谐波辐射出去。这时候需要对IO口走线做“去天线化”处理。
具体手段包括:走线尽量短、尽量靠近地平面、避免形成长回路。如果IO口要连接到连接器或者排线,在靠近芯片的一端串一个磁珠或者共模电感,把高频谐波拦在走线之前。
这个案子里,PWM输出脚到LED驱动器的走线有8cm长,而且没有地平面参考,形成了一个典型的偶极子天线。我在走线中间串了一颗0603封装的磁珠(型号是Murata的BLM18系列),在64MHz处的阻抗大约60Ω,辐射立刻降了5dB。
四个方案叠加后的效果,我整理了一个对比表:
| 整改措施 | 64MHz处降幅 | 96MHz处降幅 | 128MHz处降幅 |
|---|---|---|---|
| 展频时钟开启 | 8dB | 7dB | 6dB |
| IO驱动降级+串阻 | 6dB | 5dB | 4dB |
| PDN去耦优化 | 3dB | 3dB | 2dB |
| IO走线串磁珠 | 5dB | 4dB | 3dB |
| 四项叠加 | 18dB | 16dB | 14dB |
最终测试结果,30MHz到230MHz频段内所有峰值都降到了限值线以下至少4dB,顺利通过认证。
5. 常见问题与排查技巧实录
5.1 为什么加了滤波反而辐射更严重了
这个问题我遇到过不止一次。有个案子,工程师在电源线上加了一颗共模电感,结果RE测试反而超得更厉害了。原因是他选的共模电感自谐振频率比较低,在超标频段上呈现容性,相当于给高频干扰提供了一条低阻抗通路,把干扰从电源线耦合到了信号线上。
选共模电感的时候,一定要看自谐振频率。对于30MHz到230MHz的RE测试,共模电感的自谐振频率至少要高于300MHz,最好在500MHz以上。如果拿不准,可以用网络分析仪测一下电感的阻抗曲线,确保在超标频段上呈现感性。
5.2 内置时钟的RE问题能不能靠屏蔽解决
能,但代价很大。屏蔽罩可以把芯片的辐射挡住,但前提是屏蔽罩要完整、接地良好。我试过用0.2mm厚的铜箔把芯片区域完全包起来,边缘用导电胶粘到地平面上,64MHz处的辐射降了10dB左右。但问题是,屏蔽罩增加了成本和组装工序,而且如果屏蔽罩上有缝隙或者接地不良,效果会大打折扣。
对于成本敏感的产品,屏蔽罩通常是最后的选择。优先考虑源端抑制方案,实在压不下去再上屏蔽。
5.3 展频功能开了之后通信误码率上升怎么办
展频的本质是让时钟频率抖动,这会影响所有依赖时钟精度的外设,比如UART、SPI、I2C。如果展频深度太大,通信接口的时序余量会被吃掉,导致误码。
我的经验是,展频深度控制在0.5%到1%之间,对大多数通信接口是安全的。如果误码率还是上升,可以尝试降低展频的调制频率,让频率变化更缓慢,给通信接口的时钟恢复电路更多时间跟踪。
另外,如果系统里有对时钟精度要求极高的外设(比如USB),展频可能会直接导致功能异常。这种情况下,只能把展频关掉,改用其他方案。
5.4 近场探头测出来的幅度跟暗室测试结果对不上
近场探头的测量结果是相对值,不是绝对值,跟暗室测试的场强没有直接的换算关系。近场扫描的目的是定位辐射源和对比不同位置的相对强度,不是预测暗室测试的绝对值。
如果你需要预估暗室测试结果,可以用近场探头做相对比较:整改前测一个基准值,整改后再测,看降了多少dB。这个降幅跟暗室测试的降幅通常有比较好的相关性,但绝对值对不上是正常的。
5.5 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 电源线加滤波后RE更差 | 滤波器自谐振频率低 | 用网分测滤波器阻抗曲线 | 换高自谐振频率的滤波器 |
| 超标频率不随时钟变化 | 干扰源不是内置时钟 | 切换时钟源观察频率是否移动 | 排查其他干扰源 |
| 展频开启后通信误码 | 展频深度太大 | 逐步降低展频深度 | 深度控制在0.5%-1% |
| IO口串阻后信号异常 | 阻值太大影响时序 | 示波器看上升沿 | 减小阻值或换磁珠 |
| 屏蔽罩效果不明显 | 屏蔽罩接地不良 | 检查屏蔽罩与地平面连接 | 增加导电衬垫或螺钉 |
6. 我在这个案子里踩过的坑和总结的经验
这个案子做完之后,我复盘了一下,有几个坑是之前没遇到过的,值得记下来。
第一个坑是过早下结论。一开始看到RE超标,我下意识认为是电源滤波不够,花了三天时间在电源线上折腾,换了好几种滤波方案,效果都不好。后来用近场探头一扫,才发现方向完全错了。如果一开始就做近场扫描,至少能省两天时间。所以现在我的习惯是,RE超标先扫近场,定位辐射源之后再动手整改。
第二个坑是忽略了IO口翻转频率的影响。这个案子里,PWM输出脚的辐射比其他IO口高了8dB,我一开始没注意到这个细节。后来把PWM频率从1kHz改成100Hz,辐射立刻降了3dB。这说明IO口的翻转频率对辐射强度有直接影响。如果应用允许,尽量降低IO口的翻转频率,或者在不影响功能的前提下让IO口保持静态。
第三个坑是去耦电容的接地回路。我之前一直觉得去耦电容只要容值对、位置近就行,接地回路长一点没关系。但这个案子让我改变了看法。芯片背面的地焊盘上直接打过孔,跟电容接地端绕一圈再到地平面,高频去耦效果差了将近一倍。现在我的PCB布局规则里,去耦电容的接地端必须直接连到芯片地焊盘上的过孔,不允许绕线。
第四个坑是展频功能的兼容性。不是所有STM32型号都支持HSI展频,我在选型阶段没注意这个细节,导致第一版方案没法用展频。后来换了一个支持展频的型号才解决。所以如果你打算用展频来压RE,选型的时候一定要查参考手册,确认芯片支持这个功能。
最后分享一个我觉得挺有用的小技巧:在PCB设计阶段,可以预留一些“整改位”。比如在IO口走线上预留一个0603的磁珠焊盘,在电源脚旁边预留几颗不同容值的电容焊盘。这样即使RE测试超标,也有地方可以动手,不用飞线或者割线。这个习惯让我在好几个案子里省了重新打板的时间。
这个案子的完整整改周期是五天,其中近场扫描定位花了一天,方案验证花了两天,最终测试和微调花了两天。如果一开始就按正确的流程走,三天应该能搞定。希望这篇内容能帮你少走我走过的弯路。