上周调一块2.4GHz接收机的本振板子锁相环芯片、VCO、参考时钟都按参考设计选了上电后频率能锁住可频谱上离主信号几百kHz的地方总有几个不干净的突起而且切频的时候VTUNE电压甩来甩去像弹簧一样过了好几拍才停。查到最后问题落在一颗环路滤波电容上——容值没算对环路实际带宽比设计值偏了将近一倍。这件事让我决定把这次PLL设计过程中关于LPF计算的部分整理成一篇记录给正在被锁相环折腾的同行提供一个能直接参考的路线。1. 先想清楚环路要什么LPF计算的本质是定带宽很多人以为PLL里的LPF就是个低通滤波用来把电荷泵输出的电流脉冲“弄平”。这个理解不算错但会严重低估它在设计里的分量。电荷泵PLL本质上是一个负反馈控制系统鉴相器比较参考时钟和反馈时钟的相位差电荷泵把相位差变成电流脉冲LPF把电流脉冲积分成控制电压VCO再根据这个电压调整输出频率分频器把输出频率降下来送回鉴相器。整个环路的动态特性几乎全部由LPF的零极点位置决定。从传递函数看开环增益可以写成G_ol(s) (Icp / 2π) · F(s) · (Kvco / s) · (1 / N)其中Icp是电荷泵电流F(s)是环路滤波器的传递函数Kvco是VCO增益N是分频比。如果把一个典型的无源三阶LPF带进去F(s)大概是这个样子F(s) (1 s·T2) / [s·Ctot·(1 s·T1)·(1 s·T3)]看到这个结构你应该立刻意识到它和PI控制器是一个东西。分子里的s·T2提供零点是为了补偿积分极点带来的相位滞后分母里的积分项1/s负责把电流累积成电压后面两个高频极点负责把高频段压下去。再叠加VCO自身的积分特性整个PLL是一个II型系统两个积分器保证了频率阶跃下稳态相位误差为零。这就是为什么说LPF不是配角它就是你手上那个模拟PI控制器的本体。1.1 环路滤波器在反馈环里的位置在电荷泵PLL里LPF的一端接电荷泵输出另一端接VCO的调谐电压输入。电荷泵输出的是三态电流源如果不经过LPFVCO的调谐电容上只会积累电荷无法建立稳定电压。LPF做的第一件事是把电流变成电阻上的压降和电容上的积分电压第二件事才是滤掉鉴相频率及其谐波分量。如果只放一个积分电容环路在穿越频率附近的相位滞后接近180度开环相位裕度几乎为零环路会一直振荡。所以要加一个零点来救相位。接下来的权衡就开始了零点放多低、极点放多高、总积分电容做多大这些参数最终被压缩成两个核心指标——环路带宽Fc和相位裕度PM。这里有个工程上的习惯需要先统一我们说的PLL环路带宽指开环增益穿越0dB的那个频率不是闭环-3dB带宽。这一点在设计记录里必须写清楚否则对拍仿真工具时会出现莫名其妙的对不上。1.2 带宽选多少噪声、锁定时间、杂散三方博弈环路带宽的选择是PLL设计里最纠结的一步没有之一。我习惯用一张表格来摆清楚利害关系以免自己又犯“带宽越大越好”的直觉错误设计取向环路带宽偏大环路带宽偏小锁定时间快频阶后快速建立慢需要几十上百微秒量级VCO带内噪声能被环路充分抑制低频段抑制不足噪声抬高PLL带内底噪参考时钟/电荷泵噪声更容易透出带内底噪相对干净参考杂散抑制差鉴相频率处衰减不足好杂散容易被压低稳定性余量小相位裕度难做足大环路更稳工程经验上环路带宽一般不超过参考频率的1/10做低相噪频综时经常取到1/50甚至1/100。如果你在做一个既要锁定快、又要杂散小的系统那基本就是在这个三角约束里反复试。多数情况下我会先用噪声交叉点思路定一个初始带宽把VCO自由振荡的相位噪声曲线和PLL带内底噪曲线画在一张图上选它们的交叉频率作为带宽起点再根据锁定时间要求做微调。1.3 二阶还是三阶电荷泵PLL的经典选择二阶LPF是最简单的可用方案一个零点、一个高频极点配上VCO的积分极点总共能做出一个稳定的II型环路。它的好处是元件少、手算友好适合学习阶段。三阶LPF则是在二阶基础上多了一个高频极点和一个RC支路是目前频率合成器的主流选择。多加的那个极点主要压鉴相频率附近的参考杂散和高频噪声。代价是相位裕度会被多扣一截设计时必须把第三个极点一起放进相位计算里。四阶以上的无源LPF很少见。极点数越多相位裕度越难做锁定时间也会被拖慢除非你遇到极端的杂散指标要求否则三阶已经够了。2. 算之前先把这几个参数钉死LPF计算不是从电阻电容开始的而是从一组设计输入开始的。这一步偷懒的话后面所有计算都是在沙子上盖楼。2.1 电荷泵电流与分频比它们决定开环增益电荷泵电流Icp和分频比N直接出现在开环增益公式里决定的是“系统需要多大的总积分电容才能让穿越频率落在目标点”。分频比通常由输出频率和参考时钟一出比如我做2.5GHz本振、鉴相频率10MHzN就是250。电荷泵电流则要查PLL芯片手册通常有寄存器可以配置成不同档位。这里有个容易踩的坑Icp不是越大越好。带内相位噪声确实和电荷泵电流有关但Icp调大之后为了让带宽保持不变总积分电容也得跟着变大而大电容的物理尺寸和温度特性会反过来限制你。所以我一般先用芯片手册推荐的典型Icp比如1mA或者2mA实在需要更低的带内底噪再回头调整。2.2 VCO增益和控制电压范围无源滤波器的边界Kvco取什么值是另一个常见坑。VCO的调谐曲线不是一条直线同一颗VCO在调谐电压低端和高端增益可能差出30%以上。设计初期我用的是数据手册调谐曲线上的平均斜率但交付前一定会用最陡的那一段重算一遍确认环路带宽不会因为Kvco变化而超出目标范围太多。无源LPF还有一个硬边界它能输出的最高电压约等于电荷泵电源电压减去一个小的压降。如果VCO要求的控制电压范围超过了这个限制比如需要5V以上的调谐电压无源滤波器的方案就要放弃考虑有源LPF。有源滤波器会引入运放噪声所以窄带频综里能不用就不用。控制电压范围小于电荷泵电源电压是采用无源三阶方案的前提条件。2.3 环路带宽和相位裕度的工程取值有了输入参数接下来要把目标带宽翻译成零极点频率。这一步我心里会先给一个粗略的布局零点频率fz放在环路带宽的1/3到1/5第一极点频率fp1放在环路带宽的3到5倍第二极点频率fp3放在环路带宽的5到8倍以100kHz环路带宽为例我习惯取fz25kHz、fp1400kHz、fp3800kHz。相位贡献估算零点带来约76度超前第一极点扣约14度第二极点扣约7度最后相位裕度约55度。这个数值留了余量因为元件误差和温度漂移都会继续扣相位。第三极点放太低相位裕度会被明显吃掉放太高对参考杂散的抑制作用又会衰减。800kHz这个位置在实践中是一个比较舒服的折中。3. 手算无源三阶LPF一个可复现的数字例子纸上谈兵到此为止下面用一个具体例子把完整计算走一遍。这套数字我做成了一条设计记录可以直接替换成你自己的参数复算。3.1 设计规格与零极点布局先列出设计输入参数符号数值说明鉴相频率Fpd10 MHz参考时钟分频后输入输出频率Fvco2.5 GHzVCO中心频率分频比N250Fvco / Fpd电荷泵电流Icp1 mA取芯片典型配置VCO增益Kvco40 MHz/V取调谐曲线平均斜率控制电压范围Vtune0.5V - 4.5V满足无源滤波器条件目标环路带宽fc100 kHz开环穿越频率目标相位裕度PM约55度含温度余量零极点布局按上一节的经验fz25kHz、fp1400kHz、fp3800kHz。换算成时间常数T2 1 / (2π·25kHz) ≈ 6.37μsT1 1 / (2π·400kHz) ≈ 0.40μsT3 1 / (2π·800kHz) ≈ 0.20μsT2对应的是滤波器传递函数分母这里统一说明T2是零点时间常数T1是第一极点时间常数T3是第二极点时间常数。后面反推元件值时都用这三个符号免得混。3.2 从零极点反推元件值总积分电容Ctot由开环增益在穿越频率处等于1这个条件解出来。把F(s)代入开环增益在ωc2π·100kHz处令幅度为1Ctot (Icp·Kvco·√(1(ωc·T2)²)) / (2π·N·ωc²·√(1(ωc·T1)²)·√(1(ωc·T3)²))逐项代入数值Icp / 2π ≈ 1.59e-4 A/radKvco 40MHz/V ≈ 2.51e8 rad/s/Vωc ≈ 6.28e5 rad/s√(1(ωc·T2)²) ≈ 4.12√(1(ωc·T1)²) ≈ 1.03√(1(ωc·T3)²) ≈ 1.01分子算出来约 1.6e5分母约 1.0e14Ctot约1.6nF。接下来分配元件值。无源三阶LPF的结构是电荷泵输出节点上有C1对地串联电阻R1后到VCO调谐脚调谐脚节点上有C2对地再经过R3-C3支路构成第二高频极点。C1是主积分电容C2参与构成零点它们在低频段表现为并联关系所以CtotC1C2。两个时间常数的关系是T2 R1·C1T1 R1·C1·C2 / (C1C2)。于是C2 Ctot · T1 / T2 ≈ 1.6nF × 0.40/6.37 ≈ 100pFC1 Ctot - C2 ≈ 1.5nFR1 T2 / C1 ≈ 6.37μs / 1.5nF ≈ 4.24kΩ再看第三极点支路。T3R3·C3若取C3100pFR3约2kΩ。这里取C3和C2同量级是比较常见的做法太小则高频极点没有实际作用太大又会和C2形成更复杂的阻抗网络影响先前算好的零点频率。最终初步元件值C11.5nF、C2100pF、R14.3kΩ、R32kΩ、C3100pF都取常见E24系列标准值。3.3 用开环波特图做一次自查手算结束不意味着完事我会把圆整后的元件值回代到传递函数里用一段很短的Python脚本画开环波特图确认穿越频率和相位裕度没有因为取标准值而飘掉。import numpy as np import matplotlib.pyplot as plt Icp 1e-3 Kvco 2 * np.pi * 40e6 N 250 R1 4.3e3 C1 1.5e-9 C2 100e-12 R3 2e3 C3 100e-12 Ctot C1 C2 T1 R1 * C1 * C2 / Ctot T2 R1 * C1 T3 R3 * C3 f np.logspace(3, 7, 2000) w 2 * np.pi * f s 1j * w F (1 s * T2) / (s * Ctot * (1 s * T1) * (1 s * T3)) G (Icp / (2 * np.pi)) * F * (Kvco / s) / N G_mag 20 * np.log10(np.abs(G)) G_phase np.angle(G, degTrue)跑完之后重点看两个地方一是幅度曲线在哪个频率过0dB如果不在100kHz附近说明某个元件值取偏了二是在0dB频率处相位是多少用180度减去它得到相位裕度应该落在50到55度范围内。脚本只是自查真正做完整验证还是会过一遍芯片原厂工具但手算脚本能让我在几十秒内建立“这个结果对不对”的判断能力。4. 工具能帮你算出来但不能替你理解现在做PLL设计的人很少真的拿笔算环路滤波器ADI的ADIsimPLL、TI的PLLatinum这类工具点几下鼠标就能给出一整套元件值。这是好事但也会带来一个副作用当工具给出的结果和你的预期不一致你会不知道问题出在自己身上还是工具身上。4.1 仿真工具对拍与信任边界我用相同的设计规格在工具里跑了一遍结果和我手算的元件值在一个量级上个别元件差异在10%到20%。这个差异是正常的原因主要有两个工具内部对第三极点和其他寄生效应的建模更严格而且工具默认选的相位裕度经常比我手算时留得高。工具的信任边界在于VCO模型。原厂工具内置的VCO模型大多是理想线性曲线Kvco只有一个固定值。如果你用的是另一家厂商的VCO或者VCO调谐曲线明显非线性工具给的结果就必须当起点而不是终点。我在实际项目里见过不少人把工具输出直接画到PCB上结果VCO增益曲线斜率偏陡的那一段让环路带宽跑到了设计值的两倍最终表现为相位噪声曲线出现奇怪驼峰。4.2 为什么有必要自己写一个验证脚本工具越方便手算能力越不能丢。原因很简单工具计算过程中间步骤是黑盒你不能在它给出奇怪结果的瞬间立刻知道是哪个参数的问题。自写脚本虽然粗糙但每个公式、每个参数都摊在明面上改一个电容能立刻看到带宽怎么变、相位裕度怎么变这种手感是工具给不了的。我建议的验证流程是先手算一遍拿到初步元件值再用脚本画Bode图确认环路行为最后用原厂工具对拍。如果三个结果都一致放心进行如果不一致定位到具体环节再处理。这个流程看起来多花半小时实际上帮你规避的返工可能是一周。4.3 元件值圆整后的再验证计算结果是理想值采购时只能用标准容值阻值。圆整这一步看着简单但同样会改变环路带宽和相位裕度。比如R1从4.24kΩ取4.3kΩ只偏了1.4%这无所谓但如果你手里只有1.8nF和1.5nF两档电容可选C1如果取了1.8nF总积分电容会增大20%穿越频率直接往下掉。我处理这类情况的原则是优先保证Ctot尽量靠近计算值C1和C2之间的比例关系再作调整最后用脚本重新确认PM。5. 上板后真正决定成败的三件事计算做到这里理论上已经把环路滤波器的值定下来了但从“能算”到“能用”还差三道关卡元件本身、PCB布局、实测验证。5.1 元件选型性能从料表开始决定先说电容。C1作为主积分电容容值精度和温度稳定性会直接影响环路带宽我坚持用C0G/NP0材质。很多人觉得C0G容值范围做不大1.5nF可能不好买这个说法有一定道理但X5R/X7R在十几伏直流偏压下的实际容量可能只有标称值的60%到70%环路带宽会肉眼可见地跑偏。如果买不到一颗C0G解决就用两颗并联凑容值也比用一颗X7R省心。C2和C3对环路的影响虽然小一些但C2和R1共同决定高频极点温度漂了杂散抑制也会变同样不建议随便拿库存电容顶替。电阻R1是零点时间常数的关键用1%精度金属膜电阻。R3的精度要求可以放宽到5%它的主要工作是配出一个大致准确的高频极点误差几十个百分点对整体稳定性的影响有限。5.2 布局LPF位置直接影响调制噪声环路滤波器在PCB上的摆放位置往往比元件值本身的误差更能决定最终性能。原则只有一句话LPF要贴着VCO的调谐电压引脚放。电荷泵输出到LPF、LPF到VTUNE这两段走线能短就短最好控制在1到2毫米的尺度。我踩过的一个典型问题是为了方便调试把LPF放到了板子边缘VTUNE走线变得很长还从一片数字控制线下面穿过。结果参考杂散怎么调都压不掉后来把走线缩短杂散直接降了十几个dB。另外LPF下方的地平面要保持完整不要把地孤岛化否则高频回流路径会被拉长性能同样会变差。5.3 实测反馈判定环路行为的三组信号第一组信号是VTUNE的静态值。锁定后VTUNE应该是平稳的直流电压如果看到低频波动或者毛刺优先怀疑参考时钟串扰和LPF接地问题。第二组信号是锁定过程。给PLL一个频率阶跃用示波器抓VTUNE的建立波形相位裕度充裕的时候波形是一条平滑上升的曲线顶多有一点轻微过冲相位裕度在50度上下时上升沿会有一次小小的振铃但很快收敛如果波形出现明显振荡甚至失锁说明相位裕度严重不足先回头检查LPF元件是不是焊错、C1是否偏压降容或者第三极点是不是放太低。第三组信号是带内相位噪声和参考杂散。用信号源分析仪看带内平台如果平台高于设计预期检查电荷泵电流配置和参考时钟的底噪如果带内出现VCO噪声的驼峰基本可以判断实际环路带宽比设计值窄了这时候第一步怀疑C1的实际容量。参考杂散超标则优先检查LPF和VCO的地平面而不是一味加大C3。按我个人的习惯每次拿到新PLL板我会固定做三件事用示波器测VTUNE的锁定过程看环路有没有隐性振荡用信号源分析仪扫一次带内相位噪声确认拐点位置最后在常温、低温各测一次锁定时间确认环路带宽没有因为电容温度特性飘出范围。这三步走完基本能放心。希望这份PLL设计的LPF计算记录能让你少走一圈我之前走过的弯路。
阅读完成 · 觉得有帮助?