3. 状态空间模型:连续系统状态方程、离散化方法、电机系统的状态空间表示

好,咱们进入正题。状态空间模型这东西,说白了就是描述系统“内部状态”怎么变化的数学工具。你想想看,我们做电机控制,不能光盯着输入输出看——电流怎么变、转速怎么变、磁链怎么走,这些内部变量才是关键。我个人习惯把状态空间模型看作系统的“心电图”,它把系统每一时刻的“心跳”都记录得清清楚楚。

3.1 连续系统状态方程

先聊连续系统。在物理世界里,时间是不间断的。电机里的电流、电压、转速,都是连续变化的。连续系统的状态方程长这样:

ẋ(t) = A·x(t) + B·u(t)
y(t) = C·x(t) + D·u(t)

这里:

  • x(t) 是状态向量——你想观测的内部变量,比如电机的电流、转速、位置。
  • ẋ(t) 是状态向量的导数——也就是变化率。
  • u(t) 是输入向量——你施加的控制量,比如电压。
  • y(t) 是输出向量——你能测量到的量,比如编码器读到的转速。
  • A 是系统矩阵——描述状态之间怎么互相影响。
  • B 是输入矩阵——输入怎么影响状态。
  • C 是输出矩阵——状态怎么映射到输出。
  • D 是前馈矩阵——输入直接传到输出,电机系统里通常为0。

嗯,这里要注意:A矩阵是核心。它决定了系统是稳定的还是发散的。我在项目中遇到过,有人把A矩阵的符号搞反了,结果仿真时电机转速直接飞上天——还好只是仿真,不然电机就烧了。

核心要点:状态方程描述的是“状态的变化率”与“当前状态和输入”的关系。说白了,就是系统下一步怎么走,取决于现在在哪、你给了什么力。

3.2 离散化方法

但现实是,我们的控制器是数字的。DSP、MCU,它们只能在离散的时间点采样、计算。所以,必须把连续方程变成离散方程。

离散化方法有好几种,我挑最常用的两个讲:

3.2.1 前向欧拉法

最简单粗暴的方法。用差分代替微分:

x(k+1) ≈ x(k) + Ts·ẋ(k)
代入连续方程得:
x(k+1) = (I + Ts·A)·x(k) + Ts·B·u(k)

其中Ts是采样周期。这个方法精度一般,但计算量小。我早期做无刷电机控制时就用它,采样率够高的话,效果还行。

3.2.2 零阶保持法(ZOH)

更精确的方法。假设输入在两个采样点之间保持不变。离散化后的矩阵是:

Ad = e^(A·Ts)
Bd = ∫(0→Ts) e^(A·τ)·B dτ

这个计算起来麻烦点,但精度高。我建议在电机控制中,如果采样频率是开关频率的10倍以上,用前向欧拉就够了。否则,老老实实用ZOH。

避坑指南:我曾经在永磁同步电机项目里,采样频率只有5kHz,用了前向欧拉法,结果状态估计误差大到离谱。换成ZOH后,问题立刻解决。记住:采样率低时,别偷懒。

3.3 电机系统的状态空间表示

好,现在把理论落到电机上。以永磁同步电机(PMSM)为例,咱们看看状态空间模型长什么样。

PMSM在d-q坐标系下的电压方程:

vd = Rs·id + Ld·(did/dt) - ωe·Lq·iq
vq = Rs·iq + Lq·(diq/dt) + ωe·(Ld·id + ψf)

选状态变量为:x = [id, iq, ωe, θe]^T

输入为:u = [vd, vq, TL]^T(TL是负载转矩)

那么连续状态方程就是:

d(id)/dt = (-Rs/Ld)·id + (Lq/Ld)·ωe·iq + (1/Ld)·vd
d(iq)/dt = (-Rs/Lq)·iq - (Ld/Lq)·ωe·id - (ψf/Lq)·ωe + (1/Lq)·vq
d(ωe)/dt = (1.5·p·ψf/J)·iq - (B/J)·ωe - (p/J)·TL
d(θe)/dt = ωe

写成矩阵形式:

| did/dt |   | -Rs/Ld    (Lq/Ld)·ωe    0    0 |   | id |   | 1/Ld   0     0   |   | vd |
| diq/dt | = | -(Ld/Lq)·ωe  -Rs/Lq   -ψf/Lq  0 | · | iq | + |   0   1/Lq   0   | · | vq |
| dωe/dt |   | 0         1.5pψf/J   -B/J   0 |   | ωe |   |   0    0   -p/J |   | TL |
| dθe/dt |   | 0            0         1     0 |   | θe |   |   0    0     0   |   |    |

输出方程通常选电流和转速作为可测量:

| id_meas |   | 1 0 0 0 |   | id |
| iq_meas | = | 0 1 0 0 | · | iq |
| ωe_meas |   | 0 0 1 0 |   | ωe |
                            | θe |

注意:这个模型里,A矩阵包含ωe项,说明系统是时变的。这意味着卡尔曼滤波的A矩阵每次迭代都要更新。我见过有人把A矩阵当成常数,结果滤波发散——嗯,这是新手常犯的错误。

3.4 知识体系结构图

下面这张图,把本章的核心逻辑串起来了。我画图时习惯用颜色区分层次,这样一眼就能看清脉络。

状态空间模型知识体系 连续系统状态方程 离散化方法 电机状态空间表示 核心公式 ẋ = A·x + B·u y = C·x + D·u A矩阵决定系统稳定性 两种常用方法 前向欧拉:x(k+1) = (I+TsA)·x(k) + TsB·u(k) 零阶保持:Ad = e^(A·Ts) 采样率低时用ZOH PMSM状态变量 x = [id, iq, ωe, θe]^T u = [vd, vq, TL]^T A矩阵含ωe,时变系统 核心逻辑:连续模型 → 离散化 → 电机应用 状态空间是卡尔曼滤波的基础,必须吃透 💡 建议:先手写推导一遍PMSM的状态方程 再对照仿真结果,理解每个矩阵的含义

3.5 实际应用中的注意事项

最后,聊几个实战中容易踩的坑:

  • 矩阵维度要匹配:我见过有人把4x4的A矩阵写成3x3,结果程序直接崩。写代码前,先画个矩阵草图。
  • 离散化精度:前向欧拉法在采样频率低于10kHz时,误差会明显增大。我建议用ZOH,虽然计算复杂点,但稳定。
  • 参数敏感性:电机参数(Rs、Ld、Lq、ψf)会随温度变化。状态空间模型对这些参数很敏感。我曾经在高温测试时,模型误差直接翻倍——后来加了在线参数辨识才解决。
  • 初始状态:卡尔曼滤波需要初始状态估计。如果初始值偏差太大,滤波收敛会很慢。我习惯先让电机静止,把初始状态设为0。

总结一下:状态空间模型是卡尔曼滤波的基石。连续方程描述物理规律,离散化让数字控制器能用,电机系统的具体表示则把理论和实践串起来。你想想看,没有这个基础,后面的滤波就是空中楼阁。

嗯,这一章就到这。内容不少,但都是干货。建议你动手推导一遍PMSM的状态方程,再写个简单的离散化仿真——相信我,亲手做一遍比看十遍都管用。


公众号:蓝海资料掘金营,微信deep3321