3. 电流环PI控制器设计:电流环传递函数、PI参数整定方法、数字实现注意事项

好,咱们进入正题。电流环是PMSM矢量控制的基石,说白了,你位置环和速度环调得再好,电流环不行,一切都是白搭。我在项目里见过太多人,上来就调速度环,结果电机嗡嗡响,电流波形乱七八糟,最后发现是电流环根本没整对。

这一节,我就把电流环PI控制器设计的底裤扒干净。从传递函数到参数整定,再到数字实现里的那些坑,咱们一个一个过。

3.1 电流环传递函数推导

先看数学模型。PMSM在d-q坐标系下的电压方程,大家应该都熟:

ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)

嗯,这里要注意。电流环设计时,我们通常忽略反电动势项。为什么?因为反电动势是转速的函数,变化相对慢。电流环的带宽远高于速度环,在电流环的响应时间内,反电动势基本不变。我早期做项目时没注意这个,结果低速还行,高速时电流环就抖得厉害。后来才明白,反电动势相当于一个扰动,你得用前馈去补偿它。

忽略反电动势后,d轴和q轴的传递函数就对称了:

G(s) = id(s) / ud(s) = 1 / (Ld * s + Rs)
G(s) = iq(s) / uq(s) = 1 / (Lq * s + Rs)

这是一个典型的一阶惯性环节。时间常数τ = L/R,增益K = 1/R。

加上PI控制器后,系统的开环传递函数为:

G_open(s) = (Kp + Ki/s) * (1 / (L*s + Rs))

我习惯把PI控制器写成零极点形式:

G_PI(s) = Kp * (1 + 1/(Ti * s)),其中 Ti = Kp/Ki

这样设计起来更直观。你想想看,PI控制器的零点在 s = -1/Ti,我们要用这个零点去对消掉电机模型的极点 s = -Rs/L。

核心思想:零极点对消。让PI控制器的零点等于电机模型的极点,这样系统就降阶为一阶系统,设计变得极其简单。

3.2 PI参数整定方法

好,理论讲完了,咱们来点实在的。参数怎么给?

方法一:零极点对消法(我最常用的)

令 Ti = L/Rs,即 Ki/Kp = Rs/L。那么对消后的闭环传递函数为:

G_close(s) = 1 / (1 + (L/Kp) * s)

这是一个一阶低通滤波器,带宽 ωbw = Kp/L。

所以,给定你想要的电流环带宽 ωbw,Kp 和 Ki 直接算:

Kp = ωbw * L
Ki = ωbw * Rs

就这么简单。我一般把电流环带宽设为速度环带宽的5-10倍。比如速度环带宽100Hz,电流环就给500-1000Hz。但注意,带宽不能超过开关频率的1/10,否则数字控制延迟会搞死你。

我的经验值:对于10kHz开关频率,电流环带宽通常取500Hz-1kHz。再高就容易振荡了。我曾经在一个项目里硬拉到1.5kHz,结果电机高频啸叫,电流波形全是毛刺。

方法二:工程整定法(现场调试用)

有时候电机参数不准,或者你懒得算,可以直接现场调。我一般这么干:

  1. 先给Ki一个很小的值,比如1-10
  2. 逐渐增大Kp,直到电流环出现振荡
  3. 取振荡临界值的0.6-0.8倍作为Kp
  4. 然后增大Ki,消除稳态误差
  5. 反复微调几次

这个方法虽然土,但很有效。特别是当你手头没有准确的L和Rs参数时。

参数 增大Kp的影响 增大Ki的影响
响应速度 变快 变快(有限)
超调量 增大 增大
稳态误差 减小 消除
稳定性 降低 降低(积分饱和)

3.3 数字实现注意事项

嗯,这里才是真正的坑。模拟域设计得好好的,一上数字芯片,全变味了。

1. 离散化方法选择

PI控制器在连续域的表达式是:

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

离散化后,我推荐用后向欧拉法,简单且稳定:

u(k) = Kp * e(k) + Ki * Ts * Σe(i)

写成增量形式更实用:

Δu(k) = Kp * [e(k) - e(k-1)] + Ki * Ts * e(k)
u(k) = u(k-1) + Δu(k)

为什么用增量式?因为积分饱和处理起来方便。我曾经用位置式,结果积分一饱和,电机直接飞车,吓得我赶紧按了急停。

警告:积分饱和是数字PI控制器的头号杀手。当输出限幅时,积分项还在继续累加,导致输出恢复缓慢,产生超调甚至振荡。必须做抗积分饱和处理。

2. 抗积分饱和实现

我常用的方法有两种:

  • 条件积分法:当输出饱和时,停止积分累加
  • 反计算法:将饱和量反馈回积分器,反向衰减积分值

代码实现(条件积分法):

// 增量式PI控制器,带抗积分饱和
float pi_controller(float error, float kp, float ki, float ts) {
    static float integral = 0.0f;
    static float prev_error = 0.0f;
    static float output = 0.0f;
    
    float proportional = kp * error;
    integral += ki * ts * error;
    
    // 计算输出
    float new_output = proportional + integral;
    
    // 限幅
    if (new_output > OUTPUT_MAX) {
        new_output = OUTPUT_MAX;
        // 条件积分:停止积分
        integral -= ki * ts * error;
    } else if (new_output < OUTPUT_MIN) {
        new_output = OUTPUT_MIN;
        integral -= ki * ts * error;
    }
    
    output = new_output;
    prev_error = error;
    
    return output;
}

3. 采样与PWM同步

这个很多人会忽略。电流采样必须在PWM载波的波峰或波谷触发,这样才能采到电流的平均值。我见过有人随便采,结果电流波形全是开关噪声,根本没法用。

一般做法是:

  • PWM定时器在载波顶点触发ADC采样
  • ADC转换完成后触发中断
  • 在中断里执行电流环PI计算
  • 计算结果更新PWM比较寄存器,下一个周期生效

这样一拍完成,延迟最小。

4. 计算延迟补偿

数字控制有一个拍的计算延迟。你当前周期采的电流,算出来的电压,要到下一个周期才输出。这个延迟在高带宽时会显著影响稳定性。

我常用的补偿方法是:在PI控制器中引入一个超前环节,或者直接用预测控制。简单点的话,把电流环带宽适当降低,留出裕量。

总结一下数字实现的要点:

  • 用增量式PI,方便处理积分饱和
  • 必须做抗积分饱和
  • 采样与PWM同步
  • 考虑一拍延迟的影响
  • 参数整定时留出稳定裕量

3.4 本章知识体系

下面这张图,是我自己梳理的电流环PI控制器设计流程。你看一遍,心里就有谱了。

电流环PI控制器设计知识体系 PMSM d-q轴数学模型 电流环传递函数推导 PI参数整定方法 零极点对消法 工程整定法 带宽设计原则 数字实现注意事项 离散化方法 抗积分饱和 采样同步 延迟补偿

这张图把整个设计流程串起来了。从数学模型出发,到传递函数,再到参数整定,最后落到数字实现。每一步都有坑,每一步也都有解法。

好了,电流环PI控制器设计就讲到这里。记住,理论是基础,但真正让你成为高手的,是那些踩过的坑和积累的经验。下一节咱们聊参数辨识,那又是另一番天地了。

最后送大家一句话:电流环调好了,你的电机控制就成功了一半。别急着往上堆算法,先把基础打牢。


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