第三章 鉴相器(PD)详解:乘法器鉴相器、数字鉴相器(PFD)、鉴相器的死区问题与解决方案

各位同学,大家好。今天我们聊聊鉴相器。

鉴相器,说白了就是锁相环的“眼睛”。它负责比较输入信号和本地振荡器的相位差,然后输出一个误差信号。这个误差信号经过环路滤波,再去控制VCO,最终让两个信号同步。

我做了这么多年射频,见过不少锁相环“锁不住”的情况。十有八九,问题都出在鉴相器上。所以这一章,咱们把它彻底讲透。

3.1 乘法器鉴相器:最朴素的模拟方案

乘法器鉴相器,也叫模拟鉴相器。它的原理很简单:把两个信号相乘,然后低通滤波。

假设输入信号是:
V_in = A * sin(ωt + θ_in)
本地振荡器信号是:
V_lo = B * cos(ωt + θ_lo)

相乘之后,利用积化和差公式:

V_out = (A*B/2) * [sin(θ_in - θ_lo) + sin(2ωt + θ_in + θ_lo)]

看到没?前面一项是直流分量,后面一项是二倍频分量。低通滤波器把二倍频滤掉,剩下的就是:

V_pd = (A*B/2) * sin(Δθ)

其中 Δθ = θ_in - θ_lo,就是相位差。

关键点:当相位差很小时,sin(Δθ) ≈ Δθ。所以鉴相器输出近似线性。但一旦相位差超过 ±π/2,输出就开始非线性了。这就是它的局限性。

我在项目中用过一次乘法器鉴相器,是在一个老式的模拟锁相环里。说实话,性能一般。主要问题是:

  • 对幅度敏感:输出和输入信号的幅度A、B成正比。信号幅度不稳,鉴相增益就飘。
  • 谐波干扰:二倍频分量需要滤波器处理,但滤波器会引入额外相移。
  • 锁定范围窄:只能在 ±π/2 范围内线性工作。

所以现在主流方案,基本都转向数字鉴相器了。

3.2 数字鉴相器(PFD):现代锁相环的标配

数字鉴相器,准确说应该叫“鉴频鉴相器”(Phase Frequency Detector,PFD)。它不仅能鉴相,还能鉴频。这一点非常实用。

为什么?因为锁相环刚开始工作时,频率可能差得很远。如果只有鉴相功能,环路根本拉不回来。PFD能先检测频率差,把频率拉到接近,再切换到相位锁定。

典型的PFD结构是三个D触发器和一些逻辑门。它的状态机有三个状态:UP、DOWN、IDLE。

工作原理我简单说一下:

  1. 参考信号上升沿到来时,UP输出高电平。
  2. 反馈信号上升沿到来时,DOWN输出高电平。
  3. 如果UP和DOWN同时为高,复位到IDLE状态。

输出波形是这样的:

参考信号:  __|‾‾‾|__|‾‾‾|__|‾‾‾|__
反馈信号:  ____|‾‾‾|____|‾‾‾|____

UP输出:    __|‾‾‾|________________
DOWN输出:  ________|‾‾‾|__________

UP和DOWN的脉冲宽度之差,就代表了相位差。

个人经验:我建议在设计PFD时,注意复位路径的延迟。如果复位路径太长,会导致UP和DOWN同时为高的时间过长,产生不必要的噪声。我曾经在一个项目中,就因为复位路径多了一个缓冲器,导致锁相环的带内噪声恶化了3dB。

3.3 鉴相器的死区问题

死区,是鉴相器最头疼的问题之一。什么叫死区?就是当相位差非常小时,鉴相器“看不见”这个误差,输出为零。

为什么会这样?

对于PFD来说,当相位差小于某个阈值时,UP和DOWN脉冲的宽度太窄,逻辑门来不及响应。结果就是:UP和DOWN同时为高,然后立即复位。输出始终为零。

死区的危害很大:

  • 相位噪声恶化:环路在锁定点附近“漂移”,VCO的控制电压会抖动。
  • 锁定精度下降:输出信号和参考信号之间会有固定的相位偏移。
  • 杂散增加:死区会导致周期性误差,在频谱上表现为杂散。

我记得有一次调试一个宽带锁相环,输出频谱在偏离载波100kHz处有一个很大的杂散。查了半天,最后发现是PFD的死区导致的。那段时间真是被折磨得够呛。

3.4 解决方案:如何消除死区

解决死区问题,核心思路就一个:确保PFD在零相位差时,仍然有足够的脉冲宽度。

常用的方法有几种:

3.4.1 增加复位延迟

在复位路径上故意加一个延迟单元。这样即使UP和DOWN同时为高,也不会立即复位。它们会保持一小段时间,然后再复位。

这个延迟时间要足够长,确保逻辑门能可靠响应。一般取几个门延迟,大约几百皮秒。

// 伪代码示例
always @(posedge ref or posedge fb) begin
    if (reset_delayed) begin
        up <= 0;
        down <= 0;
    end else begin
        if (ref) up <= 1;
        if (fb) down <= 1;
    end
end

// 复位延迟
assign reset_delayed = (up & down) | delay_buffer(up & down);

注意:延迟时间不能太长。太长会导致UP和DOWN同时为高的时间过长,增加电荷泵的开关噪声。我一般控制在500ps到1ns之间,具体要看工艺和频率。

3.4.2 使用预充电技术

在PFD的输出端,预先充入一个固定宽度的脉冲。这样即使相位差为零,也有一个基础脉冲输出。这个基础脉冲在电荷泵里会被抵消掉,但能保证PFD始终处于工作状态。

这种方法的好处是:死区完全消除。坏处是:增加了额外的功耗和噪声。

3.4.3 采用差分PFD结构

差分PFD使用两路对称的PFD,一路处理正相位差,一路处理负相位差。两路输出相减,得到最终的误差信号。

这种结构对共模噪声有很好的抑制,而且死区问题也得到缓解。但代价是面积和功耗翻倍。

3.5 实战建议:选型与调试

最后,我给大家一些实战建议:

场景 推荐方案 理由
低频锁相环(<10MHz) 乘法器鉴相器 电路简单,功耗低
中高频锁相环(10MHz-1GHz) 标准PFD + 复位延迟 性能均衡,易于实现
高频低噪声锁相环(>1GHz) 差分PFD + 预充电 噪声性能最优
宽带频率合成器 PFD + 自动死区消除 适应不同频率范围

调试时,我习惯用频谱仪观察VCO的控制电压。如果控制电压上有周期性的毛刺,十有八九是死区问题。这时候可以调整复位延迟时间,或者检查PFD的输入信号质量。

嗯,这一章就讲到这里。下一章我们聊电荷泵,它是连接鉴相器和环路滤波器的桥梁。电荷泵的设计好坏,直接决定了锁相环的噪声和杂散性能。到时候见。