2. PLL线性模型:传递函数推导与闭环响应分析

做PLL设计,第一件事就是建立线性模型。别小看了这一步,你想想看,一个锁相环里既有鉴频鉴相器这种数字电路,又有电荷泵和压控振荡器这种模拟模块,怎么统一分析?

我的做法是:在小信号扰动下,把所有模块都近似成线性时不变系统。锁相环锁定时,相位误差很小,PFD输出的是窄脉冲,电荷泵充放电可以等效成连续电流,VCO的调谐曲线也可以用斜率近似。说白了,线性化之后我们才能用拉普拉斯变换那套工具。

我在项目中吃过一次亏:某次5G收发机里的PLL锁定时序总出问题,查了半天发现是忽略了一个零点位置。从那以后我每做一个PLL,第一件事先把传递函数完整写出来,再谈后续优化。

2.1 开环传递函数推导

先搭一个典型的电荷泵PLL框图(Type-II三阶),各模块的传递函数如下:

  • PFD + 电荷泵:增益 \(K_{pd} = \frac{I_{cp}}{2\pi}\),单位 A/rad。Icp是电荷泵电流。
  • 环路滤波器:\(H(s) = \frac{1 + sR_2C_1}{s(C_1+C_2)(1 + sR_2C_1C_2/(C_1+C_2))}\),简化常用二阶无源滤波器。
  • VCO:\(K_{vco}/s\),单位 rad/(s·V)。VCO的相位积分特性带来一个原点极点。
  • 分频器:\(1/N\),纯比例环节。

把四个模块串联,就得到开环传递函数:

G(s) = Kpd × H(s) × (Kvco/s) × (1/N)

其中:
Kpd = Icp/(2π)                     # 电荷泵增益
H(s) = (1 + s·τz) / [s·C1·(1 + s·τp)]  # 常用简化形式
τz = R2·C1,  τp = R2·C1·C2/(C1+C2)

我的小窍门:写成因式乘积后,可以直接看出零点个数和极点个数。Type-II PLL有两个原点极点(一个来自积分器,一个来自VCO),所以相位在低频处比较低(-180°),必须靠零点来补偿相位。

2.2 闭环传递函数与响应分析

闭环传递函数就是负反馈的经典形式:

Φout(s) / Φref(s) = G(s) / (1 + G(s))

相位误差传递函数:Φe(s) / Φref(s) = 1 / (1 + G(s))

从闭环传函能读出很多关键指标:

  • 环路带宽 ωc:开环增益|G(jω)|=1时的频率,决定了锁定速度和噪声滤除能力。
  • 相位裕度 PM:在ωc处,开环相角距离-180°的余量。PM必须 > 45°,否则闭环有严重峰值。
  • 闭环峰值:PLL在带宽附近对输入相位噪声有放大作用,峰值过大会让积分带内噪声恶化。
参数 数学表达式(简化二阶) 对设计的影响
自然角频率 ωn √(Kpd·Kvco/(N·C1)) 决定瞬态响应快慢,ωn越大锁定越快
阻尼因子 ζ (R2·C1·ωn)/2 ζ≈0.7~1时过冲和稳定时间最佳
闭环带宽 BW ωn·(1+2ζ²+√[(1+2ζ²)²+1])^(1/2) ≈1.8ωn(ζ=0.707时),带宽越窄噪声越低

避坑指南:我曾经设计一个25GHz的整数分频PLL,把带宽设得很小(20kHz)以压低带内噪声。结果参考杂散因为环路抑制不够,直接出现在目标频率附近。后来发现带宽不能太低,否则电荷泵的周期性注入压控振荡器,杂散抑制会变差。

2.3 不同类型PLL的传递函数对比

实际工程中不只有Type-II,还有Type-I和全数字PLL。它们的模型差异很大,我整理了一个对比表:

PLL类型 环路滤波器阶数 开环极点分布 相位裕度典型值 常用场景
Type-I 0阶(RC低通) 1个原点(VCO)+ 1个实极点 45°~60° 低功耗、窄带时钟恢复
Type-II(最常用) 1阶有源/无源 2个原点 + 1个实极点 + 1个零点 50°~70° 整数/小数分频,频率合成
Type-III 2阶有源 3个原点 45°以下,需补偿 超低噪声,雷达本振
All-Digital (ADPLL) 数字环路(无滤波器电容) 离散极点 由数字系数决定 先进工艺,可编程SoC

从表中能看到,Type-II之所以主流,就是因为它有一个零点可以自由调节相位裕度,而且两个原点极点保证了低频高增益,稳态相位误差小。但注意:不能把零点放得太靠近原点,否则相位补偿不够;也不能太远,否则高频噪声会进来。

2.4 传递函数推导的完整流程图

下面这张SVG图,是我画在笔记本上的草图基础上重绘的。它把整个推导路线画清楚了:从参考输入开始,经过每个模块的传递函数,到输出和反馈。你可以对照着看开环和闭环的公式位置。

PLL线性模型传递函数推导流程 Φref(s) Kpd = Icp/(2π) H(s) = (1+sτz)/sC Kvco/s Φout(s) 1/N ⊕ 开环 G(s) Kpd · H(s) · Kvco/s · 1/N 闭环 Φout/Φref G(s) / [1 + G(s)] 比较器:减法(参考−反馈) 虚线为反馈路径,实线为前向路径 注意VCO积分特性带来原点极点

千万别忘了分频器延迟:在所有推导中,我们都假设分频器是理想的比例1/N。但实际分频器有有限响应时间(特别是多模分频器),会给环路引入额外的相移。我曾经在一个小数N PLL项目里没考虑这个,导致仿真相位裕度比测量值差15°。后来加了一个全通滞后补偿网络才搞定。

推导出传递函数之后,下一步就是分析闭环响应。核心是看带宽和相位裕度之间的折衷。我个人习惯在Matlab中画出开环Bode图,然后手动调整R2/C1/C2使得PM在60°左右,ωc落在目标值的±20%范围内。这个过程中你会发现:带宽越宽,锁定越快,但噪声和杂散抑制越差;反之亦然。没有完美解,只能按系统指标去折衷。

嗯,这里要注意一点:闭环响应分析时,不要只看增益曲线。我看到很多新手只看-3dB带宽,忽略了闭环峰值。峰值超过2dB就说明相位裕度不足,可能会导致输出相噪在带宽附近出现“鼓包”。这时要回过去调整零点位置,或者增大电荷泵电流(Kpd)来改变环路增益形状。

最后补充一下:不同类型的PLL(整数N、小数N、双环、注入锁定)传递函数的形式会有所不同,但分析框架完全一样。掌握好Type-II的推导,其他类型就是加点零点或改为离散模型的事。你在实际项目里,不妨像我一样:先用手算一遍传递函数,再用Cadence或Matlab仿真验证,最后对比硅片测试结果——这个过程至少会让你少走三次弯路。