1. 项目缘起:一块内置时钟芯片的RE超标困局
做硬件这行的朋友大概都有过类似的经历:板子功能跑通了,功耗也达标了,结果一进EMC暗室,辐射发射(RE)测试直接给你来个“满堂红”。我最近接手的一个项目就撞上了这堵墙——一颗带内置时钟的芯片,在RE测试中高频段超标严重,峰值余量几乎为零,部分频点甚至超出限值线3到6个dB。
这个项目用的是STM32系列芯片,内置RC振荡器作为系统时钟源,省掉了外部晶振,BOM成本和PCB面积都压得很低。听起来很美好对吧?但问题恰恰出在这个“内置时钟”上。芯片内部的RC振荡器虽然省事,但它的时钟信号频谱纯度远不如外部晶振,谐波分量丰富,加上芯片内部时钟树分布广、走线长,高频谐波很容易通过电源引脚和IO引脚辐射出去。更麻烦的是,这个项目对成本极其敏感,板子上能省的空间都省了,滤波电路的设计余地非常有限。
我拿到测试报告后,第一反应是“加滤波”。但仔细一看频段和超标量,心里就凉了半截——超标频点集中在120MHz到300MHz之间,这个频段用常规的RC滤波或者磁珠,效果非常有限。而且板子已经量产在即,改版空间几乎为零。这就逼着我必须从“滤波失效”这个前提出发,去找一条不依赖传统滤波手段的破局路径。
这篇文章就是把我整个排查、分析、整改的过程完整记录下来。如果你也正在被芯片内置时钟的RE超标问题折磨,或者你正在做EMC整改但发现滤波手段收效甚微,那这篇内容应该能给你一些不一样的思路。我会从原理讲起,把每一步的推导和实测数据都摊开来说,尽量让你能直接抄作业。
2. 为什么滤波在这类场景下会失效
2.1 内置时钟的噪声特性与外部晶振的本质差异
很多人一遇到RE超标,第一反应就是“加电容、加磁珠、加共模电感”。这个思路在大多数情况下没错,但前提是你得搞清楚噪声源的性质。内置RC振荡器和外部晶振的噪声特性,差别非常大。
外部晶振本质上是一个机械谐振器件,Q值极高,输出波形接近理想方波,谐波分量虽然存在但衰减很快。而芯片内置的RC振荡器,它的频率稳定性依赖内部比较器和电容充放电,输出波形的上升沿和下降沿往往不够陡峭,占空比也可能存在偏差。更关键的是,RC振荡器的相位噪声远大于晶振,频谱上表现为基频周围有较宽的裙摆,谐波之间的杂散分量也更丰富。
我实测过这颗STM32芯片的内置时钟输出,用近场探头扫出来的频谱在120MHz、180MHz、240MHz附近都有明显的谐波峰值,而且这些峰值的宽度比外部晶振方案宽了将近一倍。这意味着什么?意味着噪声能量不是集中在单一频点,而是分布在一个较宽的频带上。你用窄带滤波手段去对付宽带噪声,就像用渔网去捞沙子,根本兜不住。
2.2 滤波电路的插入损耗与频率响应的现实约束
再来说滤波电路本身。一个理想的低通滤波器,在截止频率之后应该以每倍频程40dB(二阶)或60dB(三阶)的斜率衰减。但现实中,你得考虑寄生参数。
我一开始在电源引脚上尝试了π型滤波,用10μF的MLCC配合1μF和100nF的电容,再加一颗0603封装的磁珠。理论上这颗磁珠在100MHz时的阻抗应该有几百欧姆,但实际测下来,由于磁珠自身的寄生电容和PCB走线的寄生电感,它在150MHz以上的阻抗急剧下降,几乎变成了一个电阻。换句话说,磁珠在高频段已经“失效”了。
更麻烦的是,板子上的空间只允许我放0402封装的器件,磁珠的额定电流和阻抗特性都受到封装尺寸的限制。我试过换用更高阻抗的磁珠,结果直流压降太大,芯片供电电压跌到了2.9V以下,系统直接跑飞。这就是现实——滤波器的设计永远是在插入损耗、直流压降、封装尺寸和成本之间做妥协,而在这个项目里,所有妥协的余地都被堵死了。
2.3 PCB布局与寄生参数对滤波效果的吞噬
还有一个经常被忽视的因素:PCB布局。这颗芯片的电源引脚和地引脚挨得很近,去耦电容必须放在非常靠近引脚的位置才能有效。但板子上的空间被其他器件占满了,我的100nF电容被迫放在了离引脚8mm远的地方。这8mm的走线,寄生电感大约在5到8nH之间。在200MHz的频率下,这个寄生电感的感抗大约是6到10欧姆,看起来不大,但它和电容形成的LC谐振频率会偏移,导致滤波效果在目标频段大打折扣。
我后来用仿真软件跑了一下,发现由于这8mm的走线,滤波电路在180MHz附近的插入损耗比理论值差了将近15dB。15dB是什么概念?相当于噪声幅度变成了原来的5.6倍。这就是为什么我说“滤波失效”——不是滤波器本身没设计好,而是整个物理环境不允许它好好工作。
3. 破局思路:从“堵”到“疏”的思维转换
3.1 重新审视噪声源:时钟信号的频谱整形
既然滤波这条路走不通,我就换了个角度想问题:能不能从噪声源本身下手,让它的高频谐波少一点?
内置RC振荡器的输出波形,上升沿和下降沿越陡,高频谐波就越丰富。如果我能让时钟信号的边沿变得“缓”一点,高频谐波的能量就会大幅下降。这就像开车过减速带,你开得越快,颠簸越厉害;开慢一点,颠簸就小很多。
具体怎么做?我在芯片的时钟输出引脚上串联了一个小电阻,阻值从22欧姆开始试,逐步增加到100欧姆。这个电阻和芯片输出端的寄生电容、PCB走线电容形成了一个天然的RC低通滤波器。实测下来,当电阻取到68欧姆时,120MHz以上的谐波峰值下降了大约8到10dB,而时钟信号的上升时间从原来的2ns左右变成了5ns左右,系统仍然能稳定工作在72MHz的主频下。
这里有个关键点:串联电阻的阻值不能太大,否则时钟信号的边沿太缓,会导致时序裕量不足,系统可能跑飞。我建议从22欧姆开始,每次增加10欧姆,同时用示波器监控时钟波形和系统运行状态,找到那个“谐波降下来了但系统还稳”的平衡点。
3.2 电源引脚的高频去耦策略调整
电源引脚的去耦,常规做法是放一个100nF的电容。但在高频段,100nF的电容由于自身寄生电感(ESL)的影响,阻抗在几十MHz以上就开始上升,到了200MHz可能已经变成了感性。这时候,你需要更小的电容。
我在这颗芯片的每个电源引脚旁边,并联了一颗100pF的电容。100pF的电容自谐振频率大约在800MHz到1GHz,在200MHz附近仍然呈现容性,能有效旁路高频噪声。同时,我把原来的100nF电容换成了1μF和100pF的组合,中间再加一颗10nF的电容,形成三级去耦。这样从低频到高频,都有电容在“值班”。
实测数据显示,这个调整让200MHz附近的辐射峰值下降了大约5dB。虽然不如串联电阻的效果明显,但它是一个不需要改版、只需要换料的措施,对于已经量产的板子来说,这是最容易落地的方案。
3.3 地平面完整性与回流路径的优化
还有一个容易被忽视的点:地平面的完整性。这颗芯片的地引脚旁边,我原本为了走线方便,在地平面上开了一条槽。这条槽切断了高频噪声的回流路径,导致噪声被迫绕行,形成了一个等效的环形天线,辐射效率反而提高了。
我把那条槽填上之后,用近场探头扫了一遍,发现180MHz附近的辐射强度下降了大约3到4dB。这个发现让我意识到,很多时候RE超标不是滤波没做好,而是地平面被破坏导致噪声回流路径变长,辐射效率被放大了。
如果你也在做EMC整改,我强烈建议你先检查一遍地平面。确保芯片下方有一个完整的地平面,所有去耦电容的地引脚都通过最短的路径连接到这个地平面。如果地平面不得不分割,确保高频噪声的回流路径不要跨越分割缝。
4. 实操过程:从测试到整改的完整记录
4.1 初始测试数据与超标频点分析
先交代一下测试环境。我在一个标准的3米法半电波暗室里做的RE测试,天线分别处于水平和垂直极化方向,转台360度旋转,天线高度在1米到4米之间扫描。测试标准是CISPR 32 Class B,限值线在30MHz到230MHz之间是40dBμV/m,230MHz到1GHz之间是47dBμV/m。
初始测试结果很不理想。水平极化方向,在144MHz处读数为43.2dBμV/m,超标3.2dB;在192MHz处读数为44.8dBμV/m,超标4.8dB;在240MHz处读数为49.1dBμV/m,超标2.1dB。垂直极化方向稍微好一点,但144MHz和192MHz也都超标了1到2dB。
我把这些频点和芯片内置时钟的谐波频率对了一下:芯片主频72MHz,二次谐波144MHz,三次谐波216MHz,四次谐波288MHz。144MHz和192MHz虽然不是严格的整数倍谐波,但考虑到RC振荡器的频率抖动和PCB上的寄生振荡,这些频点很可能就是时钟谐波通过电源引脚和IO引脚辐射出来的。
4.2 串联电阻方案的参数扫描与验证
确定了噪声源之后,我开始做串联电阻的参数扫描。我在时钟输出引脚和负载之间串了一个可调电阻箱,从0欧姆开始,每次增加10欧姆,记录144MHz、192MHz和240MHz三个频点的辐射读数。
| 串联电阻(Ω) | 144MHz读数(dBμV/m) | 192MHz读数(dBμV/m) | 240MHz读数(dBμV/m) | 系统状态 |
|---|---|---|---|---|
| 0 | 43.2 | 44.8 | 49.1 | 正常 |
| 22 | 41.5 | 42.3 | 46.8 | 正常 |
| 47 | 39.8 | 40.1 | 44.2 | 正常 |
| 68 | 38.2 | 38.6 | 42.5 | 正常 |
| 100 | 37.5 | 37.9 | 41.8 | 偶发复位 |
| 150 | 36.8 | 37.2 | 41.1 | 频繁复位 |
从数据可以看出,68欧姆是一个比较理想的平衡点。144MHz和192MHz的读数都降到了限值线以下,240MHz虽然还有42.5dBμV/m,但已经低于47dBμV/m的限值。系统在68欧姆时运行稳定,连续跑24小时没有出现复位或死机。
我最终选了68欧姆的0402电阻,精度1%,温度系数100ppm。这个电阻的功耗很小,时钟引脚的驱动电流大约在几毫安,68欧姆上的压降不到0.5V,完全在安全范围内。
4.3 去耦电容组合的替换与效果对比
串联电阻搞定了之后,我又在去耦电容上做了一轮优化。原来的方案是每个电源引脚一颗100nF的0402电容,我把它换成了100pF、10nF、1μF三颗电容并联,封装都是0402,尽量靠近引脚放置。
替换之后重新测试,144MHz和192MHz的读数又下降了1到2dB,240MHz下降了大约1.5dB。虽然幅度不大,但这是“锦上添花”的操作,而且成本增加很少,三颗0402电容加起来不到一毛钱。
这里有个细节要注意:100pF的电容必须放在最靠近引脚的位置,10nF次之,1μF可以稍微远一点。因为100pF负责的是最高频段的去耦,它的有效半径最小,放远了就没用了。
4.4 最终测试结果与余量评估
把所有整改措施都落实之后,我重新做了一次完整的RE测试。最终结果如下:
| 频点(MHz) | 初始读数(dBμV/m) | 整改后读数(dBμV/m) | 限值(dBμV/m) | 余量(dB) |
|---|---|---|---|---|
| 144 | 43.2 | 36.8 | 40 | 3.2 |
| 192 | 44.8 | 37.5 | 40 | 2.5 |
| 240 | 49.1 | 41.2 | 47 | 5.8 |
| 288 | 46.5 | 40.3 | 47 | 6.7 |
所有频点都降到了限值线以下,最小余量2.5dB,最大余量6.7dB。对于量产项目来说,这个余量已经足够覆盖批次一致性和温度变化带来的波动。我又做了高低温测试,在-40℃和85℃下各跑了2小时,辐射读数变化在1dB以内,系统运行稳定。
5. 常见问题与排查技巧实录
5.1 串联电阻后系统不稳定怎么办
这是最常见的问题。串联电阻会让时钟信号的上升沿变缓,如果电阻太大,时钟信号的边沿可能无法在下一个时钟周期到来之前达到有效的逻辑电平,导致时序违例。
我的经验是:先确认芯片的时钟输入引脚是否有施密特触发器或者迟滞比较器。如果有,边沿变缓的影响会小很多。如果没有,你就得严格控制电阻值。一般来说,22欧姆到47欧姆是比较安全的范围,68欧姆是上限。如果你发现系统在68欧姆时偶尔复位,降到47欧姆再试。
另外,你可以用示波器测量时钟引脚上的波形,看看上升时间是否超过了芯片数据手册规定的最小值。如果超了,就必须减小电阻。
5.2 去耦电容换了之后没效果是什么原因
如果你换了去耦电容但辐射没有改善,大概率是以下三个原因之一:
第一,电容放得太远。去耦电容的有效性取决于它和引脚之间的走线长度。100pF的电容,如果走线超过2mm,效果就会大打折扣。你必须把电容放在引脚旁边,走线尽量短而粗。
第二,地平面不完整。如果电容的地引脚通过一个很长的过孔连接到地平面,或者地平面本身有分割,电容的高频旁路效果就会失效。确保电容的地引脚通过最短的路径连接到完整的地平面。
第三,电容的封装不对。0402封装的寄生电感比0603小,0201又比0402小。如果你用的是0603封装的100pF电容,它的自谐振频率可能已经降到了500MHz以下,在200MHz附近的效果就不理想了。
5.3 近场探头扫描时发现噪声源位置漂移
这个问题我遇到过好几次。用近场探头扫板子的时候,发现噪声最强的位置在不同频点下会变化。这通常意味着板子上有多个噪声源,或者噪声通过不同的路径辐射。
我的做法是:先用近场探头在板子上方2mm处扫一遍,找出所有辐射热点。然后逐个频点去定位,看看每个频点的最强辐射位置在哪里。如果某个频点的最强辐射位置在芯片附近,那大概率是芯片本身的时钟谐波;如果在连接器或者线缆附近,那可能是共模辐射。
定位清楚之后,你才能对症下药。芯片附近的辐射用串联电阻和去耦电容;连接器附近的辐射用共模电感或者屏蔽。
5.4 整改后余量不足如何进一步优化
如果你的整改后余量只有1到2dB,我建议你从以下几个方向继续优化:
- 检查时钟走线是否远离板边和连接器。时钟走线如果靠近板边,会像天线一样辐射。尽量让时钟走线走在板子中间,并且用地线包围。
- 检查芯片的IO引脚是否有未使用的悬空引脚。悬空的IO引脚会像小天线一样接收和辐射噪声。把所有未使用的IO引脚配置为输出低电平或者输入带上拉。
- 检查电源平面的分割。如果电源平面被分割成多个区域,确保时钟相关的电源区域和其他区域之间有足够的去耦。
- 如果以上都做了还不够,可以考虑在时钟输出引脚上加一个RC低通滤波器,截止频率设在基频的3到5倍。比如72MHz的时钟,截止频率设在300MHz左右,用22欧姆电阻和100pF电容组成RC网络。
6. 个人实操心得与几个容易踩的坑
做EMC整改这些年,我最大的体会是:不要一上来就加滤波。滤波是最后的手段,不是第一手段。先搞清楚噪声源在哪里、噪声是怎么传出来的、辐射效率为什么高,然后再决定用什么手段去抑制。
内置时钟的RE超标问题,本质上是一个“噪声源+传播路径+辐射天线”的系统问题。你只盯着滤波器看,就像只盯着水龙头看却不管水管漏不漏水。串联电阻是从源头削弱噪声能量,去耦电容是切断噪声的传播路径,地平面优化是降低辐射效率。这三板斧下去,大部分内置时钟的RE问题都能搞定。
还有一个坑我要提醒你:不要迷信仿真。仿真软件里的电容是理想电容,电阻是理想电阻,PCB走线是理想传输线。但现实中的电容有ESL和ESR,电阻有寄生电感,走线有损耗和反射。我见过太多人仿真结果漂亮得不行,一上暗室就傻眼。仿真可以做趋势判断,但最终还是要靠实测。
最后说一个细节:串联电阻的位置。很多人把电阻放在时钟输出引脚和负载之间,这没错。但如果你把电阻放在负载端,效果会差很多。因为电阻放在输出端,它和输出端的寄生电容形成RC滤波,噪声在源头就被削弱了;放在负载端,噪声已经在走线上辐射了一部分,你再滤波就晚了。
这个项目从发现问题到整改完成,前后花了大约三周时间。中间走了不少弯路,也试过一些无效的方案,比如换更贵的磁珠、加屏蔽罩、改走线层叠。最后发现最有效的方案反而是最简单的:一个68欧姆的电阻加几颗小电容。有时候,解决问题的方法就藏在最基础的地方,只是我们容易被复杂的方案迷惑了眼睛。