做运放设计这一行,前端时间把一个低压锁相环里的轨到轨运放重新过了一遍,发现很多细节项目里不常展开,却是新手最容易卡住的地方:输入级共模范围不够怎么办,跨导翻倍怎么压回去,两级放大后相位裕量怎么凑,Miller补偿电容到底该取多大。这几个问题网上搜出来全是碎片化的公式和PPT截图,真正从设计者角度把一条路走通的文章很少。
这篇文章就按我实际做过的一个小尺寸、低压、带恒定跨导输入级和Miller补偿的两级运放来写。全文围绕核心难点展开:P/N互补输入级为什么会让跨导飘忽不定,恒定跨导电路哪些方案能落地,两级架构下补偿电容和调零电阻怎么定,最后给一份完整的仿真排查清单。不管你是刚接触模拟IC的学生,还是正在赶流片节点的工程师,这套思路拿来就能用。
1. 为什么“轨到轨”在低压系统里躲不掉
1.1 传统输入级的共模范围边界
先从最朴素的差分输入对说起。一个普通运放的输入级如果只用了PMOS差分对,那它的输入共模范围大概是这样:
输入电压最低可以到负电源轨附近,往上走,要保证PMOS差分对两个管子都处在饱和区,输入共模电压最高不能超过VDD - |VDSAT_p| - |VTH_p|。这里的VTH是阈值电压、VDSAT是过驱动电压,通常留个余量就要吃进去0.5V到0.8V。同理,如果只用NMOS差分对,输入共模范围低端会被VSS限制住,大概要高于VSS + VDSAT_n + VTH_n才能正常工作。
问题就出在这“吃掉的”电压上。早年电源电压是正负15V,共模范围差个一两伏根本无所谓;现在大量系统是单电源3.3V、1.8V甚至更低,信号调理电路里输入信号经常贴着正轨或负轨走。比如一个采用3.3V电源、输入信号范围0~3V的ADC驱动电路,如果运放输入共模范围只能到2.5V,那顶部0.5V的信号进来,差分对的管子直接截止,整个运放就是失效的。
更麻烦的是,很多场景下输入信号既可能接近VSS也可能接近VDD。比如电池供电设备里的电流检测电路,采样电阻两端电压随负载变化很大,共模点可能在接近0V也可能接近电源电压;再比如做电机相线电压调理,共模范围从负轨一路扫到正轨。这种时候,普通单端输入级的运放根本没得选,必须上轨到轨输入级。
1.2 轨到轨输入级到底要解决什么问题
所谓轨到轨输入级,最简单的理解就是:输入共模电压从负电源轨到正电源轨之间扫一圈,输入级的跨导、增益、失调这些关键参数都不能出现明显恶化。
这里有一个容易误会的地方。很多初学者以为轨到轨就是“把PMOS对和NMOS对拼一起就行了”,但从设计角度讲,拼起来只是第一步,真正难的是让两个差分对交替工作时总跨导保持不变。为什么跨导重要?因为运放的单位增益带宽近似等于第一级跨导gm除以Miller补偿电容Cc,如果跨导在工作范围内翻一倍,带宽也翻一倍,环路相位裕量就会随共模电压剧烈变化——轻则性能波动,重则在某个共模电压下系统直接振荡。
所以,一个拿得出手的轨到轨输入级,必须同时满足两件事:第一,整个共模范围内没有“死区”;第二,整个范围内跨导基本恒定。这也是这道题里“恒定跨导”四个字的由来,它是轨到轨设计真正的主菜,而不是配菜。
2. 恒定跨导输入级:从结构到实现
2.1 互补差分对为何会跨导翻倍
先讲基础结构。把PMOS差分对和NMOS差分对并联起来,输入共模电压分成三个区域:
- 共模电压接近VDD时,PMOS对导通,NMOS对截止,总跨导由PMOS对决定;
- 共模电压接近VSS时,NMOS对导通,PMOS对截止,总跨导由NMOS对决定;
- 共模电压在中间区域时,两个差分对同时导通,总跨导是两者之和。
中间区域的跨导很容易直接翻倍。原因很简单,差分对的小信号跨导公式是gm = sqrt(2 * μ * Cox * W/L * ID),两个差分对都注入偏置电流时,总gm就是两个gm的线性叠加。如果两个差分对的偏置电流都按单对满值给,那么中央区的总跨导大约是两端正常工作区跨导的两倍。
跨导翻倍会带来两个直接后果:一是单位增益带宽GBW随共模电压变化,二是相位裕量随共模电压变化。这俩都是系统稳定性的大忌。还有一种不太直观的后果,如果运放用在闭环里,开环增益随共模变化会造成环路增益不恒定,闭环带宽在不同输入共模情况下不一样,做高精度信号调理时会发现不同电平下的频响曲线明显不一样。
2.2 恒定跨导的三种主流实现
要让总跨导恒定,核心思路就一句话:让两个差分对在不同共模区间,扫描偏置电流的大小,使总跨导保持在一个固定值附近。工程上有三类主流做法。
第一种是电流开关法,思路是给PMOS对和NMOS对分配不同倍数的尾电流。常用做法是在PMOS对和NMOS对之间做一个电流比较器,用输入共模电压决定哪个差分对获得更大比例电流。经典例子里,当只有一个差分对导通时,该对获得总电流I;当两个对同时导通时,每个对只分配总电流的1/3到1/4。为什么是这个比例?因为总gm = gm_n + gm_p,gm正比于电流的平方根,要让总gm约等于单对满电流时的gm,每个小电流对只需提供单对满电流1/4的电流,因为sqrt(1/4) + sqrt(1/4) = 1。这个1/4关系是恒定跨导设计里最经典的一张牌。
第二种是最大电流选择法,不限制各差分对电流,而是让两个差分对的输出电流同时送入一个最大电流选择电路,也就是Winner-Take-All结构,最终只有最大的一路对输出起作用。这种方案的好处是跨导恒定精度高,但电路复杂度高,多了一整套电流比较和选择逻辑,对低压低功耗场景不友好。
第三种是幅度辅助法,额外加一个电流检测电路,实时检测总输出电流,如果检测到电流超过目标值,就把尾电流源“关”掉一部分,形成一个跨导负反馈环路。这种方案精度更高,但同样有额外功耗和环路稳定性问题。
从流片风险、功耗和设计成本来权衡,我和身边同行在低压轨到轨运放里用最多的还是第一种电流开关法。它在性能和复杂度中间取了一个很好的平衡,也是教科书上讲的所谓“三倍电流镜恒定跨导电路”的基础。
2.3 一组不踩坑的参数设计实例
我这里给一个具体的例子。假设目标是输入级跨导恒定在2mA/V,工艺给到的参数大致是:NMOS的μCox = 200μA/V²,PMOS的μCox = 80μA/V²,电源电压1.8V。
先算差分对尾电流和宽长比的关系。单管跨导公式gm = sqrt(2 * μCox * (W/L) * ID)。要让总跨导2mA/V,平分给四个管子,每个管子贡献约1mA/V。以NMOS对为例,若尾电流源设定为40μA,每个管子的漏极电流是20μA,那么:
(W/L)_n = gm² / (2 * μCox * ID) = (1m)² / (2 * 200μ * 20μ) = 125
这个宽长比不算小,但也不是离谱。PMOS对因为μCox低,同样的跨导需要的宽长比更大,算出来大约是312。这两个尺寸在版图上要占掉不少面积,这也是恒定跨导输入级成本的一部分——你想要低噪声、恒定跨导,就必须在面积上买单。
有一点要特别提醒:流入两个差分对的电流比例不是随便取的。想要跨导恒定,电流分配比例必须遵守上面说的1/4关系。实际操作时,我会先在Cadence或HSPICE里搭一个理想电流源版本的测试台,扫描输入共模电压,画gm对VICM的曲线,先确认三区切换点平滑,再上真实的电流开关电路。这个习惯能帮你把“电路工作原理不熟”和“参数没调对”两类问题分开。
当然,除了跨导曲线本身,还要关注切换点的位置。系统的共模电压如果经常停留在一个特定值(比如一半电源电压),那就要尽量让切换点偏离这个工作区间,否则切换瞬间的失调波动会被系统当成低频噪声处理,信噪比直接受损。
3. 两级结构里的Miller补偿:把相位裕量给稳住
3.1 两级运放的增益与摆幅分工
很多入门电路教材讲运放,喜欢从一开始就讲经典两级结构,但真正开始设计时,要回答的不是“两级行不行”,而是“为什么两级够用”。
单级运放的增益大约等于输入跨导乘以输出阻抗,也就是gm·ro。在现代短沟道工艺里,本征增益能有30到40dB就偷着乐了。而高精度模拟系统动辄要求80dB以上开环增益,靠单级几乎不可能实现,除非上增益提高技术(gain boosting)。能力有限,功耗和面积代价也大。
两级结构的分工就很清晰:第一级负责提供高增益,所以第一级输出阻抗要做高,最好在输出端加一个高阻节点,也就是Cascode或电流镜负载;第二级负责提供输出摆幅和驱动能力,所以第二级常用共源级,栅极接第一级输出,漏极直接或间接推负载。
这里顺带澄清一个和网上常见问题相关的话题:经常有人搜“两级运放可以先同相放大再反相放大吗”,其实模拟IC设计里的两级运放,和用两片通用运放搭同相放大级联完全是两码事。IC里的两级是一个整体,第一级把小信号放大后,第二级继续放大,两级之间是靠补偿电容跨接的,不是靠阻容耦合。理解了这个区别,后面看Miller补偿就不会晕。
3.2 Miller补偿的极点分裂和零点问题
两级运放最显著的问题是各节点都有寄生电容,形成多个低频极点。如果直接用开环结构,相位裕量大概率不够,闭环就振荡。Miller补偿就是在第二级输入输出之间跨接一个电容Cc,利用Miller效应把第一级输出端的等效电容放大若干倍。
Miller效应的本质是:跨接在反相放大器两端的电容C,从输入端看进去的等效电容约等于C*(1+Av2),其中Av2是第二级增益。这样,原本频率较高的第一级极点被推低,成为主极点;第二级输出极点则因为Cc跨接,在输出端引入了与信号路径并联的电容路径,被推高到远离单位增益频率。这就是教科书里的“极点分裂”。
但Miller补偿有个经典副作用:它会在传输函数里引入一个右半平面零点,频率大约在gm2 / Cc。这个零点在幅频特性上等于一个+20dB/dec转折,在相频特性上等于滞后90度,对相位裕量是个巨大的威胁。做补偿时可不能只关心极点,不关心这个零点。
解法是串一个调零电阻Rz,让零点位置从gm2/Cc移到1/(Cc*(1/gm2 - Rz))。一般取Rz ≈ 1/gm2,可以彻底抵消零点,或多个设计里取Rz略大于1/gm2,把零点推到左半平面高频处,用它来抵消次极点,帮助提升相位裕量。
我第一次做这个设计时,光把Miller电容加上,以为相位裕量就够了,结果瞬态仿真在5MHz附近振荡。后来把输出信号反馈点扫了个波特图,发现零点阻碍了相位恢复,接上调零电阻后,相位裕量从30度一路爬到60度。这个教训值一篇博文。
3.3 GBW、SR、相位裕量到底怎么定
指标上,单位增益带宽、压摆率和相位裕量这三个参数和补偿直接挂钩,也经常被问“SR的预留怎么设计,留多少余量”。
单位增益带宽的标准公式是:
GBW = gm1 / Cc
这里的gm1是第一级跨导,Cc是Miller补偿电容。从这个公式能看出一个设计顺位:先定GBW,再定Cc,然后反推gm1,再由gm1回推输入级电流和尺寸。
压摆率公式是:
SR = I_tail_first / Cc
注意,大信号时,Miller电容的充电电流由第一级差分对的尾电流决定,所以SR和尾电流、Cc直接相关。预留余量这个问题,如果系统对瞬态建立时间有要求,SR至少要保证输出以目标压摆率摆满整个输出范围,并且建议留20%到50%的余量,因为芯片还有PVT偏差,电容绝对值也会随工艺浮动。
相位裕量的目标值也有讲究。绝大多数运放设计建议PM≥60度。但如果在反馈回路里有额外负载电容,或者输出要接长走线,我习惯把目标打到70度以上。相位裕量不足时,闭环频响会出现尖峰,时域阶跃会有振铃,这是最直观的判断依据。
我整理一份常用补偿方案的参数对比表,方便大家初选。
| 方案 | 主极点位置 | 零点处理 | 适用场景 | 代价 |
|---|---|---|---|---|
| 单Miller电容 | gm2/(2πCc) 附近 | 右半平面零点存在 | 对PM要求不高 | 容易振荡 |
| Miller电容+调零电阻Rz | gm2/(2πCc) 附近 | 零点被抵消或左移 | 标准两级运放 | 多一个电阻,需精调 |
| 两级Miller(嵌套补偿) | 由外Cc主导 | 多个零点,需每个都处理 | 三级以上运放 | 结构与计算复杂 |
| 前馈零点补偿 | 无额外主极点 | 人为构造左半平面零点 | 高速缓冲器 | 需额外gm级 |
4. 完整设计实操:从指标拆解到仿真验证
4.1 先把设计规格翻译成管子参数
我习惯在动任何一个管子的宽长比之前,先立一张规格清单。比如这次的目标:
- 开环增益:≥80dB
- 单位增益带宽:≥10MHz(带2pF负载)
- 相位裕量:≥60度
- 压摆率:≥20V/μs
- 输入共模范围:0~1.8V(轨到轨)
- 输出摆幅:0.05~1.75V
- 静态功耗:≤300μA总电流
- 工艺:0.18μm CMOS,1.8V电源
从这些规格往前推。GBW=10MHz,如果取Cc=2pF,那么第一级跨导至少要gm1 = 2π * GBW * Cc ≈ 2π * 10M * 2p ≈ 125.7μA/V。压摆率要求20V/μs,则第一级尾电流Itail = SR * Cc = 20V/μs * 2pF = 40μA。这个电流水平和gm1目标匹配度不错,按前面恒定跨导输入级的计算,单管跨导可以做到1m左右,整个输入级跨导只有125μ级别,差距还很大。这说明什么?说明输入级电流的分配要重新规划。
实际项目里,输入级跨导不一定直接等于GBW公式里那个gm1。第一级差分对跨导取决于其具体结构,如果输入级用了辅助管或源极负反馈,等效gm会降低。这里要特别注意,GBW公式里的gm是“第一级等效跨导”,不是“差分对单管跨导”。很多新手在这里算挂,一上来把差分对跨导设得很大,结果GBW远超预期,功耗失控。
我的做法是:先按gm1_required = 2π * GBW * Cc算需求,再以这个为输入级的电流设定依据。比如需求125uA/V,输入级若采用源极负反馈或恒定跨导结构,实际差分对单管跨导可以做到250~300uA/V,然后通过等效关系折回来满足需求。
4.2 偏置电路:恒流源和尾电流源怎么搭
运放里所有电流来源都来自偏置电路。最简单的偏置结构是电流镜拷贝外部基准电流,尾电流源就常用PMOS电流镜实现。恒定跨导输入级里,两个差分对的尾电流比例要精确可控,所以尾电流源的匹配是关键。
设计电流镜时,几个经验值直接给你:
- 电流镜管子的过驱动电压建议设计在150mV到250mV之间。过驱动太小,管子进入亚阈值,匹配变差;过驱动太大,需要的
VDS余量太多,在低压下容易让偏置管掉出饱和区。 - 每个尾电流源都用Cascode结构。普通单管电流镜输出阻抗低,做尾电流源会降低共模抑制比,Cascode几乎是运放偏置的默认选择。
- 如果要给多个差分对分配不同比例的电流,电流镜的复制比例不能做得太偏,比如1:4这种大比例其实不算夸张,但要注意管子失配。我建议大比例用两三级电流镜逐级分,避免一次拷贝误差太大。
有人会问,运放输出级接MOS基极是什么情况,是不是要用LDO或功率驱动?这其实是把运放当驱动器用,输出端直接推一个功率MOS管的栅极。这种用法里,输出级必须有足够的电流驱动能力给栅极电容充电,否则高频时MOS栅极电容会拖慢响应,甚至和运放输出电阻形成新极点。设计时,我会在运放输出端和MOS栅极之间仔细确认负载电容,必要时在运放外再加RC网络隔开,避免两级系统变成三级系统。
4.3 从仿真清单到流片前检查
我每次做运放项目,仿真清单都固定这几项,按顺序执行:
第一步,DC扫描,确认静态工作点。扫输入共模电压,看输入级所有管子是否都在饱和区,总功耗是否符合预算。这个步骤能抓出大多数偏置错误。
第二步,AC开环仿真。断开反馈环,用stb分析或经典断环法测开环增益曲线、单位增益带宽和相位裕量。扫描输入共模电压,检查GBW和PM随共模的变化,确认恒定跨导是否真的压住了。
第三步,瞬态仿真。接成单位增益缓冲器,给一个大的阶跃,看压摆率和建立时间。再看一个小信号阶跃,看有无振铃。若振铃明显,PM多半不足或者零点处理不到位,回头调Cc和Rz。
第四步,PVT角分析。至少跑TT/SS/FF三种工艺角,常温、低温、高温,电源电压拉到1.62V、1.8V、1.98V。这一步是流片前最重要的把关,设计在典型角下再好,在全角下垮掉也是白搭。
第五步,共模抑制比和电源抑制比的AC仿真。轨到轨输入级在切换点附近的CMRR最容易恶化,仿完如果发现180度附近有塌陷,通常是两个差分对失配或者电流开关切换时序出了问题。
针对输出级,额外跑一次带容性负载的开环AC仿真,分别挂1pF、5pF、20pF容性负载,看PM还能不能保住。这个比什么公式都管用。
下面给一段简化参考网表片段,展示两级运放核心部分在SPICE里的连接方式。实际流片网表还要加各种寄生和ESD,但主体思路就是这个:
* 两级运放简化网表片段:恒定跨导输入级 + Miller补偿 * 电源与地 VDD vdd 0 DC 1.8 VSS vss 0 DC 0 * 输入级偏置电流 IB_BIAS vdd ibias 50u * 偏置电流镜 MP_BIAS1 ibias vbp m1 vdd PMOS W=4u L=0.5u M=2 MP_BIAS2 ntail vbp m1 vdd PMOS W=4u L=0.5u M=1 MP_BIAS3 ptail vbp m1 vdd PMOS W=4u L=0.5u M=3 * PMOS差分对(输入接近负轨时导通) MP1 vinp ntail vdd vdd PMOS W=20u L=0.5u MP2 vinn ntail vdd vdd PMOS W=20u L=0.5u * NMOS差分对(输入接近正轨时导通) MN1 vinp ptail vss vss NMOS W=40u L=0.5u MN2 vinn ptail vss vss NMOS W=40u L=0.5u * 第一级输出节点(高阻节点) MCL1 n1 vinp vdd vdd PMOS W=10u L=0.5u MCL2 n1 vinn vdd vdd PMOS W=10u L=0.5u * 第二级共源级 MN_OUT out n1 vss vss NMOS W=80u L=0.5u MP_OUT out vbp vdd vdd PMOS W=40u L=0.5u * Miller补偿电容与调零电阻 CC out n1 2p RZ out n1 2k * 负载 CL out vss 2p网表里RZ的取值不能乱来,它要和第二级跨导匹配。假定第二级跨导gm2约500μA/V,那么1/gm2 ≈ 2k,所以RZ暂取2k,具体在仿真里微调。CC=2pF考虑到了寄生电容会被吞掉一部分,实际有效补偿要仿真验证。
还有一个经验:调零电阻尽量用poly电阻,不要用有源电阻。有源电阻随工艺和电压变化太剧烈,零点位置会飘。如果你在仿真里发现全工艺角下PM始终不稳,先检查RZ的电阻类型,再看电阻绝对值偏差多大,通常要保证零点频率离单位增益带宽有3倍以上远。
5. 常见问题与排查技巧实录
5.1 问题速查表
我把这几年做轨到轨运放最常见的故障整理成了表格,每一类都是我本人或同事真实踩过的坑。
| 故障现象 | 可能原因 | 解决办法 |
|---|---|---|
| 相位裕量不足,闭环振荡 | Miller电容过小;调零电阻位置不对 | 增大Cc;确认Rz接在Cc与输出之间;扫Cc值看PM趋势 |
| GBW随共模电压明显变化 | 输入级跨导未恒定 | 检查恒定跨导电流比例是否为1/4;电流开关是否提前/滞后切换 |
| 压摆率远低于预期 | 尾电流不够或Cc偏大 | 用SR=Itail/Cc核算;确认尾电流源Cascode管没过早饱和 |
| 输出接功率MOS后自激 | 栅极电容形成额外极点 | 加大Cc或加隔离电阻;重新扫描带容性负载的相位裕量 |
| 共模抑制比在中间区下降 | 两个差分对失配或开关电流时序不良 | 在版图上做交叉耦合;平衡切换点电压 |
| 满载输出幅度不足 | 输出管进入线性区 | 减小输出管过驱动电压;检查共源级负载管的VDS余量 |
| 静态电流比预算大很多 | 偏置电流镜比例错误或管子进入亚阈值 | 复算电流镜W/L比例;查看所有偏置管VGS |
5.2 阶段排查实录:一个从PM到恒定的典型案例
有一次,我给一个传感器接口做缓冲器,运放刚开始搭出来,开环模拟一切正常,带宽、增益都达标,但一接成跟随器,阶跃响应尾部拖了个小尾巴,后来连尾巴都变成持续振荡了。
我第一步先看AC曲线,发现GBW点附近有-20dB/dec的下降,但相频曲线在穿越频率处直接冲穿了-180度。典型的相位裕量为负。因为我的第一版只放了Cc,没放Rz,加速零点在单位增益带宽附近,把相位拖崩了。加上Rz之后,PM恢复到60度左右。
接着扫输入共模电压,又发现问题:VICM从0V扫到1.8V,GBW从9M到16M持续变。这说明恒定跨导模块没起作用。我用理想电流源代替电流开关,逐段测GM,发现两个差分对在中间区同时导通时总跨导比其他区高了60%,而不是理论上的恒定。原因出在电流开关的切换阈值电压设计得太靠近中间点,导致两个差分对同时获得大量电流。
解决办法是把电流开关的阈值点外移,让PMOS对满电流区域更宽一点,NMOS对满电流区域更窄一点,并对切换点附近的电流比例再做细调。调完后GBW随共模的变化压到了正负5%以内。
这类问题,定位时最好的工具就是“参数扫描+分区测量”:把共模电压分三段,分别看每一段内的gm和电流分配,很快就能找出是哪一段出了问题。不要一上来就乱动管子尺寸,那样反而会把问题搞乱。
5.3 关于运放经典应用场景的几句闲话
处理完运放本身的设计,它就变成通用模块了,经典应用电路照接不误:加法器、差分放大、恒流源、输出推MOS管,这些场景对运放的要求不太一样。加法器和差分放大器更看重直流增益和失调,恒流源更看重输出级能提供的电压余量,输出推MOS管则在意带宽和压摆率。
从我实际经验看,轨到轨运放的输出级如果做成了真正的推挽结构,驱动MOS管栅极时反而比普通AB类输出级更有优势,因为它输出摆幅大,能给功率管栅极提供更宽的电压范围,让功率管更充分利用电源电压。缺点是在低压下输出级本身的饱和余量比较紧张,设计时要多用Cascode承受一点压降,换来稳定和匹配。
有一句话送给正在做运放的人:运放设计最大的风险不是增益不够、带宽不够,而是“你以为够了”的隐藏极点和“你以为会好”的工艺漂移。做仿真时把所有角落都跑一遍,比在典型角下抠参数更重要。
我个人最深的体会是,轨到轨运放的关键步骤一定要按顺序来:先把输入级跨导曲线调到平坦,再调增益和GBW,最后才调补偿。顺序反了,每次都会陷入“调了这个参数另一个指标又坏了”的循环。电流开关法做恒定跨导时,1/4比例的来源一定要理解透,不要死记数字,因为不同工艺下,两个差分对迁移率比不同,这个比例其实也要微调。
最后分享一个小技巧:仿真里判断补偿电容是否足够,可以先不看波特图,给运放接成单位增益缓冲器,输入一个100mV小阶跃,若输出出现过冲超过30%,多半PM不足60度;若出现长尾振铃,多半是低频增益滚降过慢或者零点没处理好。这个方法两三分钟出结论,比一路扫PM快得多。把这些检查项固化到自己的仿真模板里,项目越做越稳。