3、电流环设计:PI控制器原理、电流环带宽计算、d/q轴电流解耦

电流环,是FOC控制中最内层的环。说白了,它就是整个电机控制的"地基"。地基不稳,上面的速度环、位置环再怎么调也是白搭。我见过不少工程师,一上来就调速度环,结果电机嗡嗡响、电流乱跳,最后发现是电流环根本没整好。

这一章,我们就来把这个"地基"打扎实。我会从PI控制器的原理讲起,然后带你算清楚电流环的带宽,最后把d/q轴解耦这个"拦路虎"给解决掉。

3.1 PI控制器原理——不只是P和I的简单相加

PI控制器,比例-积分控制器。教科书上会说:P负责响应速度,I负责消除静差。这话没错,但不够。

在电流环里,P和I的分工其实更具体:

  • 比例项(P):决定电流跟踪指令的速度。P越大,响应越快,但太大就会振荡。
  • 积分项(I):消除稳态误差。I越大,消除误差越快,但太大就会超调、甚至积分饱和。

核心公式:

u(t) = Kp * e(t) + Ki * ∫e(t)dt

其中 e(t) = i_ref - i_feedback,就是电流误差。

嗯,这里要注意。数字控制器里,我们用的是离散形式:

// 位置式PI
u_k = Kp * e_k + Ki * sum(e_k) * Ts

// 增量式PI(我更喜欢用这个,防积分饱和好处理)
delta_u = Kp * (e_k - e_k_1) + Ki * e_k * Ts
u_k = u_k_1 + delta_u

我个人习惯用增量式。为什么?因为限幅方便。你想想看,位置式一旦积分饱和,要退出来很麻烦;增量式只要把输出限幅,积分自然就不会无限累加。

我的经验:在GD32上实现PI时,记得把Kp和Ki用Q格式定点数处理。浮点运算虽然方便,但中断里跑多了会影响实时性。我一般用Q15格式,精度够用,速度还快。

3.2 电流环带宽计算——到底该设多少?

带宽,说白了就是电流环能响应的最快频率。带宽越高,电流跟踪越快,但噪声也越容易被放大。

那怎么算?我们得从电机模型入手。

永磁同步电机的电气方程简化后:

L * di/dt + R * i = u - e

忽略反电动势e(电流环响应远快于速度变化),传递函数就是:

G(s) = 1 / (L*s + R)

这是一个一阶惯性环节。我们用PI控制器去补偿它,目标是把开环传函整成典型的"Ⅰ型系统":

开环传函 = K * (1 + Ti*s) / (Ti*s) * 1/(L*s + R)

令 Ti = L/R(零极点对消),开环传函简化为:

开环传函 = K / (L*s)

这时候,闭环传函就是:

闭环传函 = 1 / (1 + (L/K)*s)

带宽 ω_bw = K / L。而 K 其实就是 Kp(因为零极点对消后 Ki = Kp * R / L)。

带宽计算公式:

ω_bw = Kp / L      (rad/s)
f_bw = Kp / (2πL)  (Hz)

举个例子。我手头一个电机,L = 0.5mH,我想让电流环带宽 f_bw = 1000Hz:

Kp = 2π * 1000 * 0.0005 = 3.14
Ki = Kp * R / L = 3.14 * 0.1 / 0.0005 = 628

你看,算出来就这么简单。但实际调试时,我建议你先用计算值,然后逐步增大Kp,直到电流波形出现轻微振荡,再回调20%。这就是工程上的"临界比例度法"。

注意:带宽不是越高越好。带宽受限于PWM频率和采样频率。一般建议:电流环带宽 ≤ PWM频率 / 20。比如PWM 10kHz,带宽最多设500Hz。我曾经在一个项目里把带宽设到2kHz,结果电流噪声大得离谱,电机发热严重。

3.3 d/q轴电流解耦——为什么需要它?

这个问题,很多初学者会忽略。你想想看,d轴和q轴在数学上是正交的,但实际电机里,它们通过反电动势和交叉耦合项互相影响。

d轴电压方程:

u_d = R*i_d + L_d*di_d/dt - ω_e*L_q*i_q

q轴电压方程:

u_q = R*i_q + L_q*di_q/dt + ω_e*(L_d*i_d + ψ_f)

看到没?d轴方程里有 -ω_e*L_q*i_q,q轴方程里有 +ω_e*L_d*i_d。这就是耦合项。转速越高,耦合越严重。

如果不解耦,你调q轴电流时,d轴电流会跟着波动;调d轴电流时,q轴电流也会受影响。这就好比你在调一个双入双出的系统,两个旋钮互相干扰,根本调不稳。

3.4 前馈解耦——最实用的方法

解耦的方法有好几种,我推荐用前馈解耦。原理很简单:在PI输出上,把耦合项补偿回去。

// 前馈解耦实现
u_d_ref = u_d_pi - ω_e * L_q * i_q
u_q_ref = u_q_pi + ω_e * (L_d * i_d + ψ_f)

其中 u_d_pi 和 u_q_pi 是PI控制器的输出。加上补偿项后,d轴和q轴就变成了两个独立的系统。

我的经验:前馈解耦依赖电机参数L_d、L_q和ψ_f。如果参数不准,解耦效果会打折扣。我建议你在台架上做一次参数辨识,把L_d、L_q、ψ_f测准。我在一个项目中,就因为L_q参数差了20%,导致高速时电流振荡,查了两天才找到原因。

下面这张图,把电流环的整体结构画清楚了:

电流环控制结构图(含前馈解耦) i_d_ref i_q_ref PI控制器 (d轴) PI控制器 (q轴) 前馈解耦 u_d += -ωL_q i_q u_q += +ω(L_d i_d+ψ) (需电机参数) 反Park变换 d,q → α,β SVPWM → 逆变器 电流采样 i_a, i_b, i_c Clark变换 α,β → d,q Park变换 α,β → d,q θ (来自编码器/观测器) 说明:前馈解耦将d/q轴耦合项补偿到PI输出,使d/q轴成为两个独立的单入单出系统 解耦效果依赖电机参数L_d、L_q、ψ_f的准确性

3.5 参数整定步骤——照着做就行

好了,理论讲完了。我们来点实际的。在GD32上整定电流环,我建议按这个步骤来:

  1. 测电机参数:L_d、L_q、R、ψ_f。用LCR表测电感,用直流伏安法测电阻,用反电动势法测磁链。
  2. 计算初始Kp:根据目标带宽 f_bw,Kp = 2π * f_bw * L。带宽建议从500Hz开始。
  3. 计算初始Ki:Ki = Kp * R / L。这是零极点对消的条件。
  4. 上电调试:给一个阶跃电流指令(比如1A),观察电流响应。如果振荡,减小Kp;如果响应太慢,增大Kp。
  5. 微调Ki:看稳态误差。如果误差消除慢,适当增大Ki;如果超调大,减小Ki。
  6. 加入前馈解耦:把计算好的补偿项加进去,验证高速时的解耦效果。

避坑指南:我曾经在一个项目里,直接用了电机手册上的标称参数。结果L_q实际值比标称大了30%,导致解耦补偿不足,电机在3000rpm以上时q轴电流振荡。后来我花了一天时间做参数辨识,才把问题解决。所以,永远不要完全相信手册参数。

3.6 总结——电流环的核心要点

环节 关键点 常见问题
PI控制器 Kp决定响应速度,Ki消除静差 积分饱和、超调过大
带宽计算 ω_bw = Kp/L,受限于PWM频率 带宽过高导致噪声放大
前馈解耦 补偿耦合项,使d/q轴独立 参数不准导致解耦失效
参数整定 先算后调,逐步逼近 跳过参数辨识直接试凑