1. 从一次现场“啸叫”说起:自激振荡是怎么形成的
做硬件这些年,我踩过最坑的一个坑,就是三极管放大电路的稳定性问题。原理图算得头头是道,电压增益、偏置电流、带宽全都没毛病,结果一上电,输出端冒出一堆高频毛刺,万用表量直流工作点还正常,示波器一看,波形上一片密密麻麻的杂波。轻则音质发毛、AD采样值乱跳,重则管子发热、后级芯片直接冒烟。这就是典型的自激振荡。
说实话,稳定性分析这件事,学校里讲得最多的是“巴克豪森准则”和“波特图”,听起来很高大上,但真到了调试现场,你得明白它到底在说什么。简单讲:任何放大电路,只要输入端和输出端之间存在一条“偷偷摸摸”的耦合路径,把输出信号绕回去一部分,并且这个回绕信号幅度够大、相位又恰到好处,电路就会自己振荡起来,和麦克风对着音箱发出“嗡——”的啸叫是同一个道理。你本来设计的是负反馈,结果高频段附加相移一叠加,负反馈活生生变成了正反馈,不振荡才怪。
这篇文章我打算把三极管放大电路里最容易被忽略的自激振荡成因拆开聊,包括米勒电容、电源去耦、地线阻抗、负载效应这些东西是怎么联手把环路稳定的最后一点余量吃光的,再结合我调试过的几块板子,把整套稳定性的实测排查思路和补偿手法尽量写清楚。适合正在画分立三极管放大电路的工程师,也适合刚接触放大电路、动不动被高频寄生振荡折磨的电子爱好者参考。
2. 隐藏在电路板里的三类“相移制造机”
2.1 米勒效应:一个跑不掉的附加电容
三极管放大电路和运放电路一个很大的不同,在于运放的增益级内部几乎都是经过设计的,而分立三极管放大电路里,每个管子本身的寄生参数都会直接参与高频行为。这里面最要命的,就是米勒效应。
任何一个共射极电路里,集电极和基极之间存在一个结电容 (C_{cb}),这个电容通常只有几皮法,单独看根本不起眼。但共射极放大时,集电极信号的相位和基极信号是反相的,于是这个电容两端的电压变化量被“放大”了,反映到输入端,等效输入电容大约是:
[ C_{in} \approx C_{cb} \times (1 + |A_v|) ]
如果这一级电压增益是 50 倍,(C_{cb}) 是 5 pF,那输入端等效就有 255 pF 左右的电容。你再想想,前一级的输出阻抗如果是几千欧姆,这个 RC 低通极点就落到了几百 kHz 附近。高频信号在这里就被砍下去一大截,同时带来非常明显的附加相移。两级三级这样串下来,每个管子都贡献几十度的相位滞后,加在一起轻轻松松凑够 180°,负反馈就变味了。
我在实际调试里见过最典型的情况,就是两级共射放大器,总增益 60 dB,中频段放大得挺正常,到 1 MHz 以上就开始出现几兆赫兹的正弦振荡。用手指去碰第一级管子,振荡频率还会变,这就是米勒电容和手部寄生电容在共同改变相位关系。所以,画高频放大电路之前,先算一遍每个管子的等效输入电容,再想想前级源阻抗,很多自激问题其实是可以在纸面上提前预判的。
2.2 电源地线和旁路电容:看不见的公共阻抗
很多刚做电路的人有个误区,觉得电源线就是一根理想的“零阻抗导线”,地就是“绝对参考点”。但实际 PCB 上,任何一段铜箔、任何一根杜邦线,都有电阻和电感。频率到了 MHz 级别,几十纳亨的走线电感都会产生相当可观的阻抗。
举个我调过的例子:一个三级放大电路,每一级都有自己的退耦电容,但都放得离三极管很远,电源走线又细又长。表面上看每一级都有 100 nF 和 10 uF 退耦,实际上高频时 100 nF 的引线电感早就抵消了它的退耦效果。输出级的信号电流在地线上形成一个几十毫伏级别的高频压降,这个压降恰好串到第一级的发射极或者基极偏置网络里,等于把输出信号“灌”回了输入端,环路就这么闭环了。
这种自激有一个很典型的特点:你用手碰电源线或者靠近板子时,振荡幅度和频率会明显变化,因为人体电容改变了几十 pF 级别的寄生回路参数。解决办法不是盲目加更大容量的电容,而是先把高频退耦电容放到管子的集电极、基极节点附近,走线尽量短,再用一个比较大的电解电容或者钽电容做低频段的稳压。如果板子上有数字和模拟部分,模拟级的电源入口最好加一点串联磁珠或者几十欧姆的电阻,把数字电路的高频噪声和模拟放大级隔离开。
2.3 输出负载与输入耦合:两头都在挖坑
还有一个经常被忽略的相移来源,是输出端的负载电容。很多放大电路不是直接接一个纯电阻负载,而是接同轴电缆、长导线,或者下一级放大器的输入电容。负载电容 (C_L) 会跟放大电路的输出电阻 (R_o) 组成一个极点,这本来是小事,但如果输出级的等效输出阻抗偏高,这个极点就会落在环路带宽附近,再叠加其他节电的相移,稳定性就很悬。
输入端的耦合也值得警惕。输入端对地如果有一个比较大的旁路电容,用来滤除高频干扰,这个电容会跟前级信号源的内阻构成低通,产生相移。有人在输入源内阻很高的情况下,还往基极对地加 1 nF 电容,结果放大器倒是听不到高频噪声了,但自激振荡也跑出来了。反馈网络的引线如果和输入引线平行走得太近,输出信号会通过线间寄生电容直接耦合回输入端,这种“空间耦合”在高增益电路中尤其致命。
所以排查自激振荡时,不要只盯着三极管本身,输入端的耦合电容、输出端的负载特性、反馈走线的物理位置,每一个都是嫌疑人。
3. 用示波器抓“元凶”:稳定性测试的一线方法
3.1 测量前的仪器准备与探头陷阱
先说一个很多人容易忽略的事情:示波器探头本身可能让你看到“假振荡”,也可能让你看不到“真振荡”。普通 10x 无源探头的地线夹如果是一根长长的鳄鱼夹线,这段地线在高频下会有较大的寄生电感。测一个本来稳定的信号,探头地线一接上去,测出来的波形上可能就会叠加一串高频振铃;反过来,如果你要抓的振荡频率很高,长地线还会把真实信号衰减掉,让你误以为电路很稳定。
我常用的办法,是把探头地线的鳄鱼夹取下来,改用探头自带的短接地弹簧,或者直接用一小段铜片绕在探头地环上,让探头地尽可能短地接触被测点。测电源纹波时,把探头针尖直接点在芯片电源脚上,短弹簧接地。这样测出来的波形才敢信。如果手头有 100 MHz 带宽的示波器,测 1 MHz 以下的自激振荡勉强够用,但要测 10 MHz 以上的寄生振荡,建议至少用 200 MHz 带宽的机器,并且打开示波器的带宽限制功能再确认一遍。注意,带宽限制能帮你滤掉探头自身引入的高频噪声,判断哪些振铃是真实的。如果开了 20 MHz 带宽后振荡波形更干净了,说明之前看到的高频成分多半是测量系统或者环境噪声带进来的。
3.2 几种实用的环路稳定性测试思路
最直接的判断方法,是把放大器的输入信号关掉,或者输入端直接短路到地,然后看输出端是否还有振荡波形。如果输入端悬空时输出端出现几十毫伏以上、频率固定的正弦波或方波,这就是典型自激。
接下来要做的是区分振荡回路。我习惯按以下步骤来:
- 断开输出端的负载电缆,看振荡是否消失。如果去掉负载后振荡没了,问题多半出在输出级和负载的匹配上,优先处理输出端的 (R_o) 和 (C_L) 极点。
- 把电源从交流电整流供电改成电池供电,或者用线性稳压电源单独给放大级供电。如果振荡消失,八成是公共电源阻抗造成的级间耦合。
- 用手或者金属镊子去触碰各级基极,观察振荡频率和幅度的变化。这个土办法虽然不够严谨,但能快速定位是哪一级对寄生参数最敏感。
- 如果条件允许,用网络分析仪或者带跟踪源的频谱仪测环路增益。做法是在反馈环路的某个合适位置串入一个小电阻,用网络分析仪注入扫频信号,测出环路的开环增益和相位。没有这些高门槛设备时,用信号发生器和示波器逐点扫频也可以,就是慢一些。
3.3 相位裕度怎么看、判据是什么
稳定性说到底要看相位裕度。对单极点系统,相位裕度 45°以上才算比较稳妥;多级放大电路最好做到 60°左右,这样即使温度变化、管子离散性导致参数漂移,电路也不至于跌进自激区间。
没有网络分析仪的时候,可以用瞬态响应法粗略评估相位裕度:给放大器输入一个方波信号,观察输出波形上的过冲和振铃。如果方波边沿过冲超过 20%,并且振铃超过两三个周期还没衰减完,说明相位裕度大概率低于 30°,已经很危险了。如果方波边沿出现持续等幅振荡不衰减,那基本上就是自激,只是幅度被限幅电路或者管子非线性压住了而已。
这套方法虽然不能给出精确的相位数字,但对工程排查足够了。至少你能在焊接完板子之前,用几分钟时间判断这块板子的稳定性有没有“硬伤”。
4. 一个共射放大电路的完整排障实录
4.1 故障现象与最初的判断
前阵子我搭了一个两级共射极音频前置放大器,设计增益约 46 dB,第一级用 2N3904,第二级也是 2N3904,级间直接电容耦合。原理仿真的时候波特图好好的,相位裕度有 50°以上,我想当然以为实板也差不到哪去。结果焊完上电,输入端不接任何信号,输出端用示波器一扫,直接看到 3.2 MHz 左右、幅度约 200 mVpp 的正弦振荡。音频放大电路冒出 3 MHz 的振荡,显然不是电路正常工作时该有的东西。
我当时的第一反应是电源问题。这块板子用的是实验室直流稳压电源供电,输出线大概半米长,属于很常见的“长引线供电”场景。我先在电源入口并了一个 100 uF 电解电容和一个 100 nF 的瓷片电容,振荡频率小幅变化了一下,从 3.2 MHz 降到了 2.8 MHz,但振荡并没有消失。这说明电源线电感确实参与了一部分,但主振荡回路不在这。
4.2 分步隔离:去掉输入、换电源、断负载
接着我用金属镊子短接第一级输入端到地,振荡依然存在,排除是输入端悬空感应噪声造成的假象。然后我把第二级集电极的输出负载断开,只留一个 4.7 kΩ 的测试电阻,振荡幅度稍微小了一点,但频率变化不大。
到这里基本能确认,振荡环路不是依赖输出端负载,而是在板子内部完成的。我拿出放大镜仔细看板子的走线,发现一个很明显的失误:第二级集电极的输出走线,从集电极电阻出来后,绕了大半圈才回到输出耦合电容,而这条走线旁边不到 3 mm 的地方,恰好是第一级基极的偏置电阻走线。输出走线和输入走线之间形成了几皮法的寄生电容,在高频下相当于把输出信号直接送回了第一级输入端。
这种板上寄生耦合,仿真软件里通常不会体现,除非你把 PCB 的寄生参数建模得非常仔细。我后来做了个试验,用一把绝缘螺丝刀轻轻拨动这两条走线的间距,示波器上振荡频率马上就跟着变化。这就是空间寄生耦合的铁证。
4.3 修复动作和最终效果
定位到问题之后,修复反而很简单。我把第二级输出走线重新割断,从另一侧绕行,尽量远离第一级输入区域,并且在输出耦合电容前面串了一个 100 Ω 的电阻,用来压低输出端的高频环路增益。同时,在第一级集电极和基极之间并了一个 10 pF 的负反馈电容,也就是故意加大米勒电容,把第一级的高频带宽往下压,给整个环路多一点相位裕度。
做完这三步再上电,3 MHz 的振荡彻底消失。输入端短接到地,输出端只剩毫伏级别的底噪;输入一个 1 kHz 正弦波,输出波形很干净,没有过冲。实测相位裕度虽然没有精确测量,但方波响应里的振铃只剩一个很轻微的半周,已经满足实际使用了。
说实话,这个案例如果当时画板子的时候就把布局走线想清楚,完全不用花一下午去排查。布局才是第一道稳定性防线,补电容、加电阻都是“事后救火”。
5. 经典补偿措施与设计阶段的红线
5.1 主极点补偿与米勒补偿怎么选
如果你在设计阶段就发现环路相位裕度不够,最常见的做法是主极点补偿,也就是在放大电路高频增益最低的那个节点上加一个电容,让它最先滚降,把其他节点的相移影响压低。对三极管放大电路来说,最方便的实现方式就是在共射级集电极-基极之间直接加一个小电容,也就是利用米勒效应来“放大”这个补偿电容。比如你想在输入端等效出 1 nF 的补偿电容,而该级增益为 50 倍,那么实际焊上去的电容只需要 20 pF 左右就能达到效果,这种做法的好处是所需电容值小、对低频增益影响小,而且几乎不改变直流工作点。
但米勒补偿有个代价:它会明显压缩带宽。补偿电容越大,等效输入电容就越大,前级源阻抗一高,高频增益就早早掉下去了。所以补偿电容要“够用就好”,不要一上来就并 100 pF。我习惯从 4.7 pF 开始试,每加一档就看方波振铃和带宽,加到振荡消失并且留有余量就停。那种一加加一大把的情况,最后往往是把电路搞得很慢,音质发闷,ADC 采集速度也上不去。
5.2 反馈网络与输出的“消振小零件”
除了在管子本身上下功夫,反馈网络和输出端也有很多补救手段。
常见的做法之一,是在反馈电阻上并联一个小电容,让高频反馈加深,压住高频增益。这个电容同样要从小往大调,通常在几 pF 到几十 pF 之间。另一种非常实用的方法,是给输出端串一个几十欧姆到一百欧姆的电阻再出去。这个电阻和负载电容构成了一个高频低通,能在相位上做文章的同时,也保护三极管不被容性负载的瞬态电流冲击。很多音频功放和运放电路里那个“看不见”的几十欧姆输出电阻,其实就是干这个的。
如果电源去耦不够好,还可以在每个放大级的集电极节点对地加一个 RC 串联吸收支路,也就是所谓的 snubber。这个支路的电阻通常选 10 Ω 到 100 Ω,电容选几百 pF 到几 nF。它的原理是给高频振荡提供一个低阻路径,让环路的 Q 值降下来。这个方法对付“顽固”的 MHz 级振荡很有效,代价是多几个贴片元件,成本可以忽略。
5.3 布局布线的底线要求
从我个人的经验看,稳定性问题有一半是布局问题。画板子时有几条红线尽量不要踩:
- 每一级三极管的集电极和基极元件都要尽量靠近管脚,特别是基极电阻、退耦电容,走线能短则短。
- 电源退耦电容的回路面积要小,电容放在管子的集电极负载电阻旁边,而不是放在板子角落,否则用于退耦的高频电流会绕着板子跑一大圈。
- 输入信号走线和输出信号走线要保持距离,不要在板子两侧平行长距离走线。如果非得交叉,尽量垂直。
- 多级放大电路里,信号路径尽量是“一字型”或者“L 型”,不要让输出级的走线绕回输入级附近。
- 地线尽量用完整地平面,不要在高频放大区域开大面积的断口。如果没有完整地平面,就用星形接地,把每一级的接地点单独引回总接地点,避免级间共享一段地线。
这些规则听起来像老生常谈,但真的在自激振荡排查现场,每一条都能派上用场。我见过不少自我感觉良好的板子,原理图毫无问题,就是走线布局不合规矩,最后振荡怎么都消不掉,只能改板子。
6. 自激振荡排查速查表与个人经验
6.1 症状、原因和动作对照表
下面这个表格是我这些年调试三极管放大电路时总结出来的,可以直接打印出来贴在工位上。遇到振荡先别急着乱加电容,先对照症状缩小范围。
| 现象 | 常见原因 | 先做的排查动作 |
|---|---|---|
| 固定高频正弦振荡,频率不随信号变化 | 环路相移足够,负反馈转正反馈,节点寄生电容/米勒效应主导 | 断开输入信号,用短地线探头测各节点,定位敏感级 |
| 振荡频率随电源线长度和退耦电容变化 | 公共电源阻抗耦合 | 改用电池或线性源供电,级间电源入口加磁珠或RC隔离 |
| 接上负载电缆或长导线后出现振荡 | 输出电阻和负载电容组成高频极点 | 输出端串 50 Ω 左右电阻,或并联 RC snubber |
| 手靠近电路板时振荡幅度明显改变 | 空间耦合、走线寄生电容 | 优化布局,拉开输入输出走线间距,必要时加屏蔽 |
| 输入端悬空时振荡,接入信号后消失 | 输入级悬空偏置不稳定 | 输入端对地加合适电阻,禁止高阻悬空 |
| 用示波器地线夹测量时看到大量振铃,但实际电路似乎正常 | 示波器探头地线太长,测量系统自身谐振 | 换短接地弹簧,打开 20 MHz 带宽限制对比 |
6.2 从一次次踩坑中总结的三条经验
第一,仿真软件里的相位裕度不是终极答案。我在实际项目中吃过太多次“仿真完美、上电翻车”的亏。仿真模型往往不包含 PCB 走线寄生参数、电源线电感、元件引脚电感和附近器件的耦合。这东西只能帮你判断电路拓扑本身是否合理,不能替代实板测量。
第二,排除自激时,一定要做“减法”,不要频繁做“加法”。一次只改一个元件,改完测一遍,记录频率和幅度的变化。我见过有人为了消振荡,一口气在电路里加了七八个电容电阻,最后振荡不仅没消,反而把工作点都搞乱了。逐个变量排查虽然慢,但能让你真正搞清楚病因。
第三,焊接和测试时要养成“探头地越短越好”的习惯。很多新手抱着长地线夹满板子测,看到满屏振铃就以为是板子自激。先检查自己的测量方法是不是引入了假信号。这个坑,我刚开始做硬件时至少浪费了一个礼拜。
最后再说一个我自己的土办法:每次给放大电路上电之前,先把手放在板子附近但不接触,观察示波器上有没有微弱的固定频率波形;然后把手指轻轻按在每一级三极管上,如果频率随之变化,就说明该级的高频环路确实受寄生参数影响。这个动作虽然土,但比盲目拿烙铁换元件快得多。毕竟,三极管放大电路的稳定性分析,最终比拼的不是谁理论背得熟,而是谁能在示波器面前快速找到那个“偷偷溜回来”的信号。