3、数字控制环路架构:ADC采样、数字补偿器(数字PID)、DPWM调制、环路延迟分析
数字电源和模拟电源最大的区别在哪?
说白了,就是控制环路里跑的不再是连续的电压信号,而是一串串离散的数字。你想想看,一个模拟控制器,误差放大器、补偿网络、PWM比较器,全是模拟电路,信号是连续的。但数字控制器呢?你得先把模拟量变成数字量(ADC),然后用一段代码算出一个控制量(数字PID),最后再把这个数字变回脉冲宽度(DPWM)。
这个流程,就是数字控制环路的骨架。今天我们就把它拆开,一截一截看明白。
核心要点:数字控制环路 = ADC采样 + 数字补偿器 + DPWM调制。这三者之间的时序关系,决定了环路的稳定性和动态响应。
3.1 ADC采样:模拟世界的“快照”
ADC是数字电源的眼睛。它把输出电压、电感电流这些模拟量,变成处理器能理解的二进制数。
我个人习惯把ADC采样分成两个维度来看:分辨率和采样速率。
- 分辨率(位数):决定了你能“看”多细。12位ADC,满量程3.3V,一个LSB就是3.3V/4096 ≈ 0.8mV。够不够?对于大多数12V输出的电源,够了。但如果你做1.0V内核供电,0.8mV的误差就有点大了,这时候可能需要14位甚至16位。
- 采样速率(SPS):决定了你“看”多快。数字电源的开关频率通常是100kHz~1MHz。根据奈奎斯特定理,采样率至少是开关频率的2倍。但实际项目中,我建议至少做到开关频率的4~8倍。为什么?后面讲环路延迟的时候你就明白了。
我的经验:曾经在一个400kHz的Buck变换器项目里,我用了200kHz的采样率,结果环路怎么调都不稳。后来发现,采样点刚好落在开关噪声的波峰上,ADC读到的全是假数据。改成800kHz采样,再做一次均值滤波,问题就解决了。
还有一个关键点:采样时刻。你是在开关管的导通中点采样?还是在关断中点采样?还是连续采样?这直接影响你看到的纹波大小。我一般建议在电感电流的谷底或峰值处采样,这样能避开开关噪声最严重的时刻。
3.2 数字补偿器(数字PID):算法的核心
ADC把模拟量变成了数字量,接下来就要靠数字补偿器来算一算:当前输出电压和目标电压差了多少?该调多少占空比?
数字PID,其实就是模拟PID的离散化版本。公式长这样:
u(k) = u(k-1) + Kp * [e(k) - e(k-1)] + Ki * e(k) + Kd * [e(k) - 2*e(k-1) + e(k-2)]
看着有点复杂?别怕,我们拆开看:
- Kp(比例项):对当前误差做出反应。误差大,调得多;误差小,调得少。但光有Kp,系统会有静差。
- Ki(积分项):消除静差。误差一直存在,积分项就慢慢累积,直到把误差推回零。但积分太强,容易超调。
- Kd(微分项):预测误差的变化趋势。误差突然变大,微分项会提前“刹车”,抑制过冲。但微分对噪声敏感,容易引入高频抖动。
在实际项目中,我很少直接用标准的PID公式。为什么?因为数字控制器的计算能力有限,而且ADC采样有延迟。我通常会用增量式PID,也就是上面那个公式。它只计算当前控制量和上一次控制量的差值,输出变化更平滑,也更容易做抗积分饱和。
注意:数字PID的系数不是随便调的。Kp、Ki、Kd的取值,和你的采样周期Ts、开关频率、输出滤波器的参数都有关。我曾经见过一个工程师,把模拟PID的系数直接搬过来用,结果系统振荡得一塌糊涂。数字域和模拟域的系数换算,一定要用双线性变换或零极点匹配法。
3.3 DPWM调制:把数字变回脉冲
数字PID算出了一个控制量u(k),这个值是一个数字。怎么把它变成开关管需要的PWM波形?
DPWM(数字脉宽调制)就是干这个活的。它本质上是一个数字比较器:一个计数器从0开始累加,当计数值等于u(k)时,PWM输出翻转。
DPWM的分辨率很关键。假设你的DPWM计数器是10位,开关频率是200kHz,那么计数器的时钟频率就是200kHz × 2^10 ≈ 204.8MHz。这个频率,一般的MCU还能扛得住。但如果你想要更高的分辨率,比如12位,时钟频率就要到819.2MHz,这就有点吃力了。
关键指标:DPWM的分辨率必须高于ADC的分辨率,否则ADC的精度会被DPWM“吃掉”。举个例子,12位ADC配10位DPWM,你ADC测出来的0.8mV精度,到了DPWM那里只能实现3.2mV的调整步长,白白浪费了ADC的性能。
我常用的DPWM架构有两种:
| 架构类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 计数器比较型 | 实现简单,资源占用少 | 分辨率受限于时钟频率 | 低成本MCU,开关频率较低 |
| 延迟线型(DPWM) | 分辨率高,可达ps级 | 需要专用硬件,设计复杂 | 高频电源,FPGA实现 |
3.4 环路延迟分析:数字电源的“阿喀琉斯之踵”
模拟控制环路几乎没有延迟。误差信号一出现,补偿网络立刻响应,PWM比较器立刻调整占空比。但数字环路不一样,每一步都有延迟。
数字环路的延迟主要来自三个地方:
- ADC采样延迟:从模拟信号稳定到ADC输出数字值,需要几个时钟周期。逐次逼近型ADC通常需要10~20个时钟周期。
- 数字补偿器计算延迟:CPU或DSP执行PID算法需要时间。这个时间取决于主频和代码效率。我一般控制在1~2个采样周期内。
- DPWM更新延迟:计算出的新占空比,要等到下一个PWM周期才能生效。这个延迟最大,通常是一个完整的开关周期。
把这些加起来,数字环路的延迟大约是1.5~2.5个开关周期。别小看这1~2个周期的延迟,它会在环路中引入额外的相位滞后,严重时会导致系统振荡。
避坑指南:我曾经在一个500kHz的Buck变换器上,用了2个周期的环路延迟。结果相位裕度从60°掉到了25°,系统在轻载时出现了次谐波振荡。后来我把采样和计算都放在PWM周期的起始时刻,把延迟压缩到1.5个周期,相位裕度才回到45°以上。
所以,设计数字电源时,一定要把环路延迟作为一项关键指标来评估。我通常会在仿真阶段就加入延迟模型,看看它对相位裕度的影响。如果延迟太大,要么提高主频,要么优化算法,要么降低开关频率。
3.5 小结:环路的“节奏感”
数字控制环路,说白了就是一场精心编排的舞蹈。ADC采样是第一步,数字PID是第二步,DPWM是第三步。每一步都有固定的节奏,每一步都有延迟。
你作为设计者,就是要让这三个步骤配合得天衣无缝。采样点选对了,PID算得快,DPWM更新及时,环路就稳。任何一个环节慢了半拍,系统就可能振荡。
嗯,这里要注意:不要只盯着算法本身。很多时候,环路不稳不是PID参数的问题,而是时序没调好。先搞定采样时刻和计算延迟,再去调Kp、Ki、Kd,这才是正确的顺序。