4. 电流环控制:PI控制器原理、电流采样与滤波、PWM占空比与电流的关系
各位工程师朋友,咱们今天聊聊电流环。说实话,在机器人控制里,电流环是「最底层」的那一环,也是决定力矩控制精度的根基。你位置环、速度环调得再花哨,电流环跟不上,一切都是白搭。我当年刚入行时,就吃过这个亏——位置环震荡了半天,最后发现是电流环带宽不够,嗯,那感觉挺尴尬的。
4.1 PI控制器原理:为什么是PI,不是PID?
电流环控制,业界主流就是PI控制器。为什么不用PID?因为电流响应太快了,微分项D对高频噪声极其敏感,搞不好反而把系统搞震荡。我个人习惯,电流环只用PI,简单、可靠、够用。
PI控制器的数学形式很简单:
u(t) = Kp * e(t) + Ki * ∫e(t)dt
其中:
- Kp(比例系数):决定响应速度。Kp越大,电流跟踪越快,但太大就会超调、震荡。
- Ki(积分系数):消除稳态误差。没有积分项,电流永远到不了目标值,会有一个静差。
你想想看,比例项是「现在」的误差,积分项是「过去」的误差累积。两者配合,才能让实际电流又快又准地跟上指令。
核心要点:电流环PI的带宽通常设定为电流采样频率的1/10到1/20。比如采样频率20kHz,PI带宽设在1-2kHz比较合理。再高就容易出问题。
4.2 电流采样与滤波:信号质量决定控制质量
电流采样,说白了就是「把真实的电流值读进来」。但现实世界没那么理想——电机PWM开关会产生巨大的共模噪声,采样电阻上的电压信号往往被污染得不成样子。
我在项目中遇到过最典型的问题:采样回来的电流波形像「毛刺山」,PI控制器根本没法正常工作。后来怎么解决的?两个关键点:
- 采样时刻选择:在PWM周期的中间点采样,避开开关管导通/关断瞬间的噪声尖峰。这个技巧,我建议你务必用上。
- 硬件低通滤波:在采样电路上加RC低通滤波器,截止频率通常设在采样频率的1/2左右。比如采样频率20kHz,RC截止频率设在10kHz。
软件上,我还会再加一道「移动平均滤波」:
// 4次移动平均滤波示例
static float buf[4] = {0};
static int idx = 0;
float current_filter(float raw) {
buf[idx] = raw;
idx = (idx + 1) % 4;
float sum = 0;
for(int i=0; i<4; i++) sum += buf[i];
return sum / 4.0f;
}
小技巧:滤波次数不是越多越好。滤波太狠,信号延迟就大,电流环带宽会下降。我一般控制在4-8次移动平均,兼顾噪声抑制和响应速度。
4.3 PWM占空比与电流的关系:从电压到电流的桥梁
PI控制器算出来的是一个「电压指令」,但电机驱动器只能接受「PWM占空比」。这两者怎么对应?
对于直流电机,关系很简单:
V_motor = Duty * V_bus
其中Duty是占空比(0~1),V_bus是母线电压。电机电流则取决于电机电阻和反电动势:
I = (V_motor - E) / R
对于三相永磁同步电机(PMSM),情况稍微复杂一点。我们用的是FOC(磁场定向控制),PI输出的是d-q轴电压,再通过SVPWM(空间矢量调制)转换成三相占空比。
这里有个关键点:占空比和电流不是线性关系。因为电机有电感,电流变化有惯性。PI控制器本质上就是在「对抗」这个惯性。
曾经踩过的坑:有一次我直接把PI输出的电压指令除以母线电压得到占空比,结果电机低速时电流震荡严重。后来发现是母线电压波动没补偿——电池供电时电压会掉,占空比计算必须实时更新母线电压值。从那以后,我每次采样电流时都会同步采样母线电压。
4.4 知识体系总览
下面这张图,是我梳理的电流环控制核心逻辑。你可以把它当作一个「思维导图」来理解:
4.5 实战调参建议
最后,分享一点我个人的调参经验。电流环PI参数怎么调?我一般按这个步骤来:
- 先调Kp:给一个阶跃电流指令,观察响应。Kp从小到大加,直到出现轻微超调,然后退回20%。
- 再加Ki:保持Kp不变,慢慢加Ki,直到稳态误差消失。注意Ki太大容易引起低频震荡。
- 验证带宽:用扫频法或阶跃响应法,确认电流环带宽达到设计目标。
避坑指南:我曾经在调参时犯过一个低级错误——忘记检查电流采样是否饱和。采样电阻上的电压如果超过ADC参考电压,采回来的值全是最大值,PI积分项会疯狂累积,一恢复采样就炸。所以,调参前务必确认采样电路在量程范围内。
好了,电流环的内容就聊到这儿。记住一句话:电流环是力矩控制的「地基」,地基不稳,上层建筑再漂亮也没用。希望今天的分享对你有帮助。