4、电流环设计:PI控制器参数整定、电流环带宽分析
好,咱们接着聊电流环的设计。前面我们把电流采样、坐标变换这些基础打好了,现在要动真格的了——调PI参数。
说实话,我刚入行那会儿,觉得PI参数整定就是玄学。调来调去,要么电机嗡嗡响,要么电流波形像锯齿。后来做多了才发现,其实背后是有清晰逻辑的。今天我就把这套逻辑掰开揉碎了讲给你听。
4.1 PI控制器的基本形式
先看最常用的数字PI控制器表达式。在电流环里,我们用的是增量式PI,避免积分饱和带来的麻烦。
// 增量式PI控制器
float pi_controller(float error, float kp, float ki, float ts)
{
static float integral = 0.0f;
float output;
// 积分项累加
integral += error * ts;
// 限幅,防止积分饱和
if (integral > INTEGRAL_MAX) integral = INTEGRAL_MAX;
if (integral < -INTEGRAL_MAX) integral = -INTEGRAL_MAX;
// PI输出
output = kp * error + ki * integral;
return output;
}
这里有个细节——ts是电流环的采样周期。我见过不少新手直接把ki当常数用,结果换了个采样频率,系统就崩了。嗯,这里要注意:ki的单位是V/(A·s),它和采样周期是耦合的。
4.2 参数整定的工程方法
理论上的零极点对消法、对称最优法,咱们课程里会讲。但今天我想先说说我实际项目中最常用的方法——带宽法。
说白了,就是先定电流环的带宽,再反推PI参数。你想想看,电流环的本质是个一阶惯性系统,它的闭环传递函数可以近似为:
G_cl(s) ≈ 1 / (1 + s / ω_c)
其中ω_c就是电流环带宽(单位:rad/s)。
那怎么定这个带宽呢?我个人习惯遵循两个原则:
- 带宽不能超过开关频率的1/10。比如你PWM频率是10kHz,那电流环带宽最多设1kHz(约6283 rad/s)。再高就控制不住了,会出现振荡。
- 带宽要高于速度环带宽的3~5倍。这样才能保证速度环看到的是“理想”的电流响应。
核心公式:
对于表贴式永磁同步电机(Ld = Lq = Ls),PI参数与带宽的关系:
Kp = ω_c * Ls
Ki = ω_c * Rs
其中Ls是定子电感,Rs是定子电阻。
这个公式怎么来的?其实就是把PI控制器的零点对消掉电机的电气极点。我在一个伺服驱动器项目里用过这套参数,效果相当不错,电流响应几乎没有超调。
4.3 带宽分析——到底能跑多快?
带宽不是你想设多高就设多高的。有几个硬约束:
| 限制因素 | 说明 | 典型值 |
|---|---|---|
| PWM开关频率 | 电流环采样率通常等于PWM频率,带宽上限约为f_sw/10 | 10kHz PWM → 1kHz带宽 |
| 数字控制延迟 | 包括采样延迟、计算延迟、PWM更新延迟,约1.5~2个采样周期 | 2个Ts的延迟 |
| 反电动势干扰 | 高速时反电动势会耦合到电流环,降低有效带宽 | 随转速升高而恶化 |
| 电感饱和 | 大电流时电感下降,实际带宽会变高,容易振荡 | 注意降额设计 |
我曾经踩过的坑:
有一次做高速主轴电机,我把电流环带宽设到了1.5kHz(PWM 12kHz)。仿真时波形漂亮得很,结果一上电,电机高频啸叫,电流波形全是毛刺。后来用示波器抓PWM更新时刻才发现——数字延迟导致相位裕度不够了。最后老老实实降到800Hz,问题解决。
所以我的建议是:理论计算值打七折,留足裕量。
4.4 实际整定步骤
好,理论讲完了,咱们来点实操。我一般按下面几步走:
- 先测电机参数:用LCR表测Rs和Ls,或者用自整定程序。别信铭牌数据,那玩意儿误差能到20%。
- 初算PI参数:按上面公式,带宽取开关频率的1/15作为起点。比如10kHz PWM,带宽取666Hz(约4189 rad/s)。
- 上电调试:给一个阶跃电流指令(比如1A),看响应波形。
- 微调Kp:如果上升时间太慢,增大Kp;如果有超调或振荡,减小Kp。
- 微调Ki:如果稳态误差大,增大Ki;如果积分引起低频振荡,减小Ki。
小技巧:
调试时可以用示波器观察Vd和Vq的波形。如果Vq上有明显的6倍频波动,说明电流环带宽不够,跟不上反电动势的变化。这时候适当提高带宽,或者加入前馈补偿。
4.5 离散化带来的影响
别忘了,我们是在数字处理器上实现的。连续域的PI参数到了离散域,需要做变换。常用的方法是双线性变换(Tustin变换)。
// 离散域PI参数转换(双线性变换)
float kp_d = kp;
float ki_d = ki * ts / 2.0f;
// 实际代码实现
float pi_digital(float error)
{
static float integral_prev = 0.0f;
static float error_prev = 0.0f;
float output;
// 梯形积分
integral_prev += (error + error_prev) * ts / 2.0f;
error_prev = error;
output = kp_d * error + ki_d * integral_prev;
return output;
}
为什么用梯形积分而不是矩形积分?因为梯形积分在高频段更接近连续积分,相位滞后更小。我在一个要求高动态响应的项目中对比过,梯形积分能让带宽再往上提10%左右。
4.6 总结一下
电流环设计,说白了就是三个字:快、准、稳。
- 快:带宽要高,但别超过数字系统的极限。
- 准:稳态误差要小,靠Ki来消除。
- 稳:相位裕度要够,别振荡。
我个人习惯是先保守再激进。第一次调参数,带宽设低一点,确保系统稳定。然后慢慢往上提,直到出现振荡的临界点,再往回退20%。这个“临界点”就是你的系统能达到的极限带宽。
下一章我们会讲速度环的设计,到时候你会发现——速度环的带宽受限于电流环,所以电流环调好了,速度环就成功了一半。