4、离散化方法:从模拟PID到数字PID的变换

好,咱们进入第四章。前面几章我们把模拟PID的频域特性、时域响应都聊透了。但数字电源嘛,控制器最终得跑在DSP或者MCU里。这就引出一个核心问题:怎么把连续的模拟PID,变成离散的、能算的差分方程?

说白了,就是找一个数学上的“桥”,把s域映射到z域。我刚开始做数字电源那会儿,觉得这事儿很简单——不就是把积分换成累加,微分换成差分嘛。结果一上实际电路,环路振荡得一塌糊涂。后来才明白,不同的离散化方法,对高频特性的影响天差地别。

今天咱们就掰开揉碎,把三种最常用的方法讲清楚:前向欧拉、后向欧拉、双线性变换。

4.1 为什么要离散化?

模拟PID的传递函数长这样:

G(s) = Kp + Ki/s + Kd·s

这是连续时间的表达式。但数字控制器只能做两件事:定时采样和定时更新。每隔一个采样周期Ts,读一次ADC,算一次控制量,更新一次PWM。所以我们必须把s域的运算,转成z域的递推公式。

你想想看,一个积分器在模拟域是1/s,在数字域就得变成对过去所有采样值的累加。怎么累加?用矩形面积近似,还是用梯形面积近似?这就是不同离散化方法的本质区别。

核心思想:离散化就是用数值积分近似代替连续积分,用差分近似代替连续微分。近似精度越高,离散后的特性越接近原模拟控制器。

4.2 三种离散化方法详解

三种方法对应三种不同的数值积分近似方式。咱们一个一个看。

4.2.1 前向欧拉法(Forward Euler)

前向欧拉,也叫“矩形法(右矩形)”。它的映射关系是:

s = (z - 1) / Ts

怎么理解?模拟积分1/s,在离散域变成:

y[n] = y[n-1] + Ts · x[n-1]

注意看,它用当前时刻的输入乘以Ts,加上上一时刻的输出。相当于用矩形面积近似积分,但矩形的高度取的是上一时刻的输入值。

我曾经踩过的坑:前向欧拉法有一个严重问题——它可能把s左半平面的稳定极点,映射到z平面单位圆之外。换句话说,一个模拟上稳定的控制器,离散后可能变得不稳定。我早期一个项目用了前向欧拉离散PI,空载时好好的,一带载就开始低频振荡。查了两天才发现是离散化方法选错了。

所以我的建议是:前向欧拉尽量少用,除非你的采样频率远高于系统带宽(比如高个20倍以上),否则稳定性风险很大。

4.2.2 后向欧拉法(Backward Euler)

后向欧拉,也叫“矩形法(左矩形)”。映射关系:

s = (z - 1) / (z · Ts)

对应的积分离散形式:

y[n] = y[n-1] + Ts · x[n]

区别来了——它用的是当前时刻的输入值。这个小小的变化,带来了巨大的稳定性改善。后向欧拉会把s左半平面映射到z平面单位圆内的一个小圆盘,所以只要模拟系统稳定,离散后一定稳定。

我在实际项目中,后向欧拉用得最多。尤其是做纯积分环节(比如PI控制器的I项)时,后向欧拉简单、可靠、不折腾。

小技巧:后向欧拉在低频段(远低于采样频率)的幅频特性与模拟积分器几乎一致,但在接近奈奎斯特频率时,相位滞后会比模拟积分器多一点点。如果你的环路相位裕量很紧张,可以考虑用双线性变换。

4.2.3 双线性变换法(Bilinear Transform / Tustin)

双线性变换,也叫Tustin变换,是工程上精度最高的离散化方法。映射关系:

s = (2/Ts) · (z - 1) / (z + 1)

对应的积分形式:

y[n] = y[n-1] + (Ts/2) · (x[n] + x[n-1])

看出来了吗?它用的是梯形面积近似积分——取当前时刻和上一时刻输入的平均值,再乘以Ts。这个近似比矩形法精确得多。

双线性变换最大的优点是:它把s平面的整个左半平面,一一映射到z平面的单位圆内。所以稳定性绝对有保障。而且频率响应在低频段与模拟滤波器几乎完全重合。

但要注意一点:双线性变换会产生频率翘曲(Frequency Warping)。高频段的频率点会被压缩。如果你需要在某个特定频率(比如穿越频率)精确匹配模拟特性,需要先做预翘曲校正。

我的个人习惯:做数字电源的电流环时,我几乎只用双线性变换。因为电流环带宽高(通常到开关频率的1/6~1/10),对相位精度要求苛刻。双线性变换的梯形积分能最大程度保留模拟控制器的相位特性。电压环带宽低一些,用后向欧拉就够用了。

4.3 三种方法对比

我把它们放在一张表里,方便你对照:

特性 前向欧拉 后向欧拉 双线性变换
映射公式 s = (z-1)/Ts s = (z-1)/(z·Ts) s = (2/Ts)·(z-1)/(z+1)
积分近似方式 右矩形 左矩形 梯形
稳定性 差(可能不稳定) 好(保持稳定) 最好(一一映射)
低频精度 一般 较好 优秀
高频精度 差 一般 好(需预翘曲)
实现复杂度 最简单 简单 中等
推荐应用场景 极少使用 PI控制器、低频环路 高带宽环路、精确相位控制

4.4 从传递函数到差分方程:实操步骤

光讲理论不行,咱们来点实际的。假设你有一个模拟PID:

G(s) = Kp + Ki/s + Kd·s

用双线性变换离散化,怎么做?

  1. 代入映射公式:把s换成 (2/Ts)·(z-1)/(z+1)
  2. 整理成z的有理分式:得到 G(z) = (b0 + b1·z⁻¹ + b2·z⁻²) / (1 - a1·z⁻¹ - a2·z⁻²)
  3. 写出差分方程:y[n] = b0·x[n] + b1·x[n-1] + b2·x[n-2] + a1·y[n-1] + a2·y[n-2]

嗯,这里要注意,系数b0、b1、b2、a1、a2都是Kp、Ki、Kd和Ts的函数。我一般用MATLAB的c2d函数先算一遍,再手动验证一遍,防止符号搞反。

避坑指南:差分方程里的系数,在定点DSP上实现时一定要做Q格式定标。我曾经因为系数溢出,导致PID输出在某个占空比附近突然跳变,电源输出纹波瞬间飙到200mV。后来把所有系数归一化到[-1, 1]之间,问题就解决了。

4.5 知识体系总览

下面这张图,把三种离散化方法的核心逻辑串起来了。你可以把它当作本章的“地图”:

离散化方法知识体系 模拟PID → 数字PID 前向欧拉法 后向欧拉法 双线性变换 s = (z-1) / Ts s = (z-1) / (z·Ts) s = (2/Ts)·(z-1)/(z+1) 右矩形:y[n]=y[n-1]+Ts·x[n-1] 左矩形:y[n]=y[n-1]+Ts·x[n] 梯形:y[n]=y[n-1]+(Ts/2)(x[n]+x[n-1]) 稳定性:差 稳定性:好 稳定性:最好 推荐:极少使用 (除非fs >> 带宽) 推荐:PI控制器 低频环路、电压环 推荐:高带宽环路 电流环、精确相位控制

4.6 选型建议

最后,我根据多年经验,给你一个简单粗暴的选型建议:

  • 做电压环(带宽几百Hz到几kHz):后向欧拉就够了,简单、稳定、代码量少。
  • 做电流环(带宽几十kHz):用双线性变换,相位特性更准,环路裕量更好把握。
  • 做有源阻尼或谐振控制器(对特定频率点敏感):必须用双线性变换,而且要做预翘曲校正。
  • 前向欧拉:除非你是在做学术研究或者采样频率极高,否则别碰它。