时钟信号从引脚进去,用示波器看波形全是毛刺
上周有个学员拿着板子来找我,手里捏着探头,一脸郁闷。
"老师,时钟信号从MCU引脚直接出来,按理说应该是干净的方波,示波器一看全是毛刺,我换了三块芯片还是这样。"
我接过来一看,板子上一颗STM32,时钟输出到一颗W25Q Flash,PCB走线大概5cm长,单端50Ω设计。探头一点,确实有问题:上升沿抖得像狗啃的,幅度还能差出200mV。
学员第一反应是芯片坏了。
其实不是。这种问题,90%不是芯片的锅,是PCB的锅。今天我们就来掰扯一下,时钟信号从引脚进去看着全是毛刺,到底是哪些地方在作怪。
5个常见原因(从最容易踩的坑说起)
1. 阻抗不连续——反射是头号嫌疑犯
时钟线本质上是传输线,不是普通导线。信号在传输线上的传播速度接近光速,遇到阻抗不连续的地方,一部分能量会反射回来。
想象一根水管,水流经过粗细不一的接口会产生水锤效应——反射的原理跟这个差不多。
常见的阻抗不连续点:
源端串联电阻没加:很多新手驱动时钟线不加源端串联电阻,导致驱动器的输出阻抗远低于走线特性阻抗(典型50Ω)
走线中途换层:从顶层换到底层,过孔的stub或者参考平面变化都会让阻抗跳变
拐角太急:90度直角相当于走线宽度突变,理论上有寄生效应(虽然工程上不严重)
焊盘/封装尺寸:芯片焊盘和走线宽度不一致,相当于打了个嗝
最典型的表现:方波的边沿出现过冲(overshoot)和下冲(undershoot),严重时形成振铃(ringing),毛刺就这样出来了。
2. 串扰——邻居在偷偷"电"你
时钟线旁边如果有其他高速信号线(比如SPI、SDRAM、并行数据线),电磁耦合会让时钟线上叠加噪声。
我自己的经验是,串扰引起的毛刺一般幅度不大(几十mV),但频率成分复杂,示波器FFT一下能看出明显的高频分量。
判断方法:把可疑的邻居信号线拔掉,或者让它们三态输出,毛刺消失就是串扰没跑了。
PCB上的防御措施:
时钟线两侧包地(包地线间距≤3倍线宽)
加大与其他信号线的间距(3W原则)
相邻层走线正交,避免长距离平行
3. 地弹和电源噪声——回流路径不顺畅
地弹(ground bounce)这个概念很多人不熟悉,但它是毛刺的重要来源。
电流回流时会"找最近的路径",如果地平面不完整(被走线、Via、焊盘切断),回流路径就会绕远,等效电感急剧上升。高速变化的电流经过这个电感,就会产生电压毛刺。
更常见的是电源去耦不足:
时钟芯片的VCC引脚没加去耦电容
或者加了,但位置离芯片太远(>5mm)
或者电容选型不对(高频特性差)
这种情况的毛刺通常跟时钟边沿同步,因为开关瞬间电流最大。
4. 驱动能力不足——MCU带不动
一些MCU的时钟输出引脚驱动能力有限,如果负载较重(比如长走线+多个负载),输出波形就会塌陷。
STM32的MCO引脚就是个典型例子,规格书里写明了最大输出负载能力。接错负载(比如接了50Ω到地)直接拉垮。
经验值:单端时钟信号走线不超过10cm,负载不超过2个。如果超过这个范围,中间要加时钟缓冲器(比如74LVC245、CDCLVC1104这种)。
5. 端接缺失——长走线必须戴"帽子"
长走线(一般认为>1/6波长,工程上>5cm就算长了)必须有端接匹配,否则反射来回叠加,毛刺严重。
常见的端接方案:
端接方式适用场景特点源端串联单负载短走线串联22-33Ω电阻到驱动器并联端接多个负载走线末端对地接50Ω戴维南端接高速差分时钟上下拉分压,功耗稍高AC端接频率较高串联电阻+对地电容,直流偏置不变
没加端接的时钟线,就像演讲时不戴麦克风——前排的人听不清(信号弱),后排的回声(反射)还会叠在原声上。
· · ·
实战复盘:5cm长的SPI时钟毛刺
接开头那个学员的板子。
他的问题症状:MCO引脚输出8MHz时钟,送给W25Q Flash的SCK引脚。示波器探头点在Flash端SCK焊盘上,看到上升沿有3-4个周期的振铃,幅度200mV。
排查步骤:
量波形:探头分别点在MCU端和Flash端对比。MCU端干净方波,Flash端明显振铃 → 反射点不在源头,在负载端或者中间
查走线:5cm长、8mil宽、对应50Ω、参考层完整、中间无换层无过孔stub → 走线本身没问题
查端接:源端没有串联电阻,Flash端没有并联端接 → 端接缺失
试验验证:在源端串联一个33Ω电阻(0603封装),重新测量,振铃明显减小,过冲从200mV降到50mV以内
根本原因:MCU的输出阻抗较低(典型10-20Ω),5cm走线的特性阻抗是50Ω,两者不匹配。一部分信号在负载端(Flash高阻)反射回来,与原信号叠加形成振铃。
修复方案:源端串联33Ω电阻(典型22-33Ω范围内),使总输出阻抗接近50Ω,吸收反射能量。
反思:这个板子原理图设计阶段就没考虑过时钟信号的完整性。学员说"我以为是低速信号,8MHz而已"——8MHz的基频虽然不高,但时钟信号的边沿速率很快(ns级),早就属于高速信号的范畴了。
经验法则:方波信号只要边沿时间小于走线延时的1/6,就该按传输线处理。FR4板上1ns边沿对应约15cm,所以5cm走线+1ns边沿,就已经需要端接了。
· · ·
排查清单
遇到时钟毛刺,按这个顺序查:
量波形:探头分别点在驱动端和接收端,看毛刺在哪一侧
查端接:源端有没有串联电阻?负载端有没有并联电阻?
查走线:长度多少?有没有换层?有没有过孔stub?
查串扰:相邻信号线是什么?有没有包地?
查电源:芯片VCC的去耦电容离引脚多远?什么封装?
查回流:地平面是否完整?有没有被走线切断?
查驱动:MCU的输出能力够不够?负载是不是太重?
· · ·
写在最后
时钟信号看着简单,实际上是PCB设计里最容易翻车的地方之一。
新手最容易犯的错:
觉得"时钟信号"和"普通IO"没区别,走线时随便拉
以为"频率低"就不用考虑完整性,8MHz也敢布5cm不加端接
焊上才发现毛刺,怪芯片有问题
其实,原理图上看不出问题的,PCB布局时一定要把时钟信号当成"高速信号"对待。
如果你正在做时钟相关的设计,先把端接加上,走线尽量短且直,参考平面保持完整,负载不要太多。
这几个原则能解决90%的时钟毛刺问题。
剩下的10%,下次有空再聊。
你做板子时遇到过时钟毛刺吗?是怎么解决的?评论区聊聊。
数据来源:STM32规格书、TI LVCMOS时钟驱动设计指南、Howard Johnson《High-Speed Digital Design》
