4、速度环的离散化:从连续域到数字世界的跨越
做电机控制这些年,我越来越觉得——离散化是理论到工程的一道分水岭。你在课本上推导的PI参数再漂亮,到了单片机里跑起来,效果可能完全两样。为什么?因为连续域是理想世界,而离散域才是我们真实面对的数字战场。
今天我们就来聊聊,速度环从连续域到离散域的转换方法。我会结合自己踩过的坑,把双线性变换、前向欧拉、后向欧拉这些方法讲透。
核心观点:离散化不是简单的数学替换,它决定了你的控制器在真实采样周期下能否稳定工作。
4.1 为什么要离散化?
你想想看,我们的MCU是数字芯片,它只能处理离散的采样值。速度环的输入——编码器反馈,每隔Ts微秒才更新一次。输出——电流指令,也是每隔Ts微秒才刷新一次。这中间的时间间隔,就是采样周期。
连续域的传递函数是s域的函数,它假设信号是连续的、无限精度的。但现实是:
- 采样有延迟
- 计算有耗时
- PWM更新有同步问题
所以,我们必须把连续域的PI控制器,转换成离散域的差分方程。这个过程,就叫离散化。
4.2 三种离散化方法对比
我个人习惯把离散化方法分成三类。它们本质上都是用不同的数值积分近似方式,把s域映射到z域。
| 方法 | 映射关系 | 特点 | 我的评价 |
|---|---|---|---|
| 前向欧拉 | s = (z-1)/Ts | 简单,但可能不稳定 | 新手容易踩坑 |
| 后向欧拉 | s = (z-1)/(z·Ts) | 稳定,但精度一般 | 工程中常用 |
| 双线性变换 | s = (2/Ts)·(z-1)/(z+1) | 精度高,频率畸变需补偿 | 我最推荐的方法 |
4.3 前向欧拉:简单但危险
前向欧拉是最直观的方法。它用当前时刻的导数近似下一时刻的值。公式很简单:
s = (z - 1) / Ts
代入连续PI控制器:
C(s) = Kp + Ki/s
得到:
C(z) = Kp + Ki · Ts / (z - 1)
写成差分方程:
u[k] = u[k-1] + Kp·(e[k] - e[k-1]) + Ki·Ts·e[k-1]
我曾经在这个方法上吃过亏。 有一次做高速主轴的速度环,采样周期设得比较大(500μs),前向欧拉直接导致系统在高增益下振荡。后来查资料才发现,前向欧拉会把s左半平面的稳定区域映射到z平面单位圆外——说白了,连续域稳定的系统,离散后可能不稳定。
4.4 后向欧拉:工程中的稳妥选择
后向欧拉比前向欧拉更稳定。它的映射关系是:
s = (z - 1) / (z · Ts)
代入PI控制器:
C(z) = Kp + Ki · Ts · z / (z - 1)
差分方程:
u[k] = u[k-1] + Kp·(e[k] - e[k-1]) + Ki·Ts·e[k]
注意看,积分项用的是当前误差e[k],而不是前向欧拉的e[k-1]。这个区别很关键——后向欧拉相当于用后向差分近似导数,数值稳定性更好。
我的建议: 如果你的采样周期比较小(比如50μs以下),后向欧拉和前向欧拉的差异不大。但采样周期一大,后向欧拉明显更靠谱。
4.5 双线性变换:精度之王
双线性变换(也叫Tustin变换)是我个人最推荐的方法。它用梯形积分近似连续积分,精度远超前两种。
s = (2/Ts) · (z-1)/(z+1)
代入PI控制器:
C(z) = Kp + Ki · (Ts/2) · (z+1)/(z-1)
整理后:
C(z) = (Kp + Ki·Ts/2) + ( -Kp + Ki·Ts/2 )·z⁻¹
─────────────────────────────────────
1 - z⁻¹
差分方程:
u[k] = u[k-1] + (Kp + Ki·Ts/2)·e[k] + (-Kp + Ki·Ts/2)·e[k-1]
关键点: 双线性变换保持了s域到z域的双线性映射关系,不会出现前向欧拉那种稳定性问题。唯一的代价是频率轴有畸变——高频段的频率响应会被压缩。但速度环的带宽通常远低于采样频率,这个畸变影响很小。
4.6 离散域PI控制器的标准实现
在实际工程中,我习惯用位置式PI还是增量式PI?这取决于应用场景。
位置式PI:
u[k] = Kp·e[k] + Ki·Ts·Σe[i]
特点:输出直接是控制量,积分项需要累加,容易积分饱和。
增量式PI:
Δu[k] = Kp·(e[k] - e[k-1]) + Ki·Ts·e[k]
u[k] = u[k-1] + Δu[k]
特点:输出是增量,不会积分饱和,但需要保存上一时刻的输出。
我个人偏好: 速度环我几乎只用增量式PI。为什么?因为速度环的输出是电流指令,如果积分饱和了,电流会一直往上冲,电机可能飞车。增量式天然抗饱和,省心很多。
4.7 采样时间对性能的影响
这是很多人容易忽略的问题。采样时间Ts不是随便选的,它直接影响控制器的性能。
我总结了几条经验:
- Ts越小越好? 不一定。Ts太小,计算负担重,而且微分噪声会被放大。一般速度环的采样周期在50μs~1ms之间。
- Ts与带宽的关系: 采样频率至少是速度环带宽的10倍以上。比如你的速度环带宽是100Hz,采样频率至少1kHz(Ts=1ms)。
- Ts与离散化误差: 双线性变换的误差与Ts²成正比,前向欧拉的误差与Ts成正比。所以Ts越大,离散化误差越明显。
| 采样周期Ts | 适用场景 | 注意事项 |
|---|---|---|
| 50μs ~ 100μs | 高速伺服、主轴 | MCU算力要求高 |
| 100μs ~ 500μs | 通用伺服、机器人 | 最常用范围 |
| 500μs ~ 1ms | 低速、大惯量系统 | 注意离散化误差 |
我曾经遇到一个案例: 某客户做AGV的轮毂电机速度环,采样周期设了2ms。用双线性变换离散化后,速度环带宽只能做到30Hz,再高就振荡。后来把采样周期降到500μs,带宽直接拉到150Hz。你看,采样时间的影响就是这么直接。
4.8 离散化方法的选择建议
嗯,这里我给出一个实用的选择流程:
- 如果Ts很小(<100μs): 三种方法差异不大,随便选。我习惯用后向欧拉,代码简单。
- 如果Ts中等(100μs~500μs): 推荐双线性变换,精度和稳定性兼顾。
- 如果Ts较大(>500μs): 必须用双线性变换,前向欧拉基本不可用。
一句话总结: 双线性变换是速度环离散化的首选方法。它稳定、精度高、实现也不复杂。除非你的采样周期非常小,否则别偷懒用前向欧拉。
4.9 本章知识体系
下面这张图展示了本章的核心逻辑:
好了,这一章的内容就到这里。离散化是速度环从理论到工程的关键一步,选对方法、选好采样周期,你的速度环才能跑得稳、跑得快。
公众号:蓝海资料掘金营,微信deep3321