电流环调试(上):PI控制器参数整定、电流采样偏置校准、电流环带宽测试方法
好,咱们开始聊电流环调试。这是整个电机控制里最核心、也最磨人的一环。我常说,电流环调好了,速度环和位置环就是锦上添花;电流环调不好,后面全是白搭。
今天这节,咱们只讲三件事:PI参数怎么整定、电流采样偏置怎么校准、带宽怎么测。嗯,内容不少,但都是硬货。
一、PI控制器参数整定——别急着上自动整定
很多人一上来就开自动整定,结果整出来参数电机嗡嗡响。我个人习惯,先手动摸一遍底。
1.1 先搞清楚你的电机参数
PI整定前,你至少要知道:
- 定子电阻 Rs(用万用表或LCR表测)
- d/q轴电感 Ld、Lq(一般厂家会给,或者自己用脉冲法测)
- 逆变器开关频率 fsw(决定了电流环的极限带宽)
有了这些,才能算初始PI值。我在项目中遇到过,有人拿着别人家的电机参数直接套用,结果电流震荡得一塌糊涂。说白了,每台电机的电气参数都不一样,别偷懒。
1.2 经典PI整定公式(工程版)
对于表贴式永磁同步电机(Ld ≈ Lq),我常用这个公式起步:
// 电流环PI参数工程估算
// 目标带宽:f_bw (Hz),一般取 f_sw / 20 ~ f_sw / 10
// 电机参数:Rs, Ls (Ld ≈ Lq)
Kp = 2 * PI * f_bw * Ls;
Ki = Kp * Rs / Ls; // 或者 Ki = Kp * (Rs / Ls) * 1.2 留点余量
// 举例:Rs=0.5Ω, Ls=1.2mH, f_sw=10kHz, 目标带宽取500Hz
// Kp = 2 * 3.1416 * 500 * 0.0012 ≈ 3.77
// Ki = 3.77 * 0.5 / 0.0012 ≈ 1570
你想想看,这个公式的本质是什么?是把电流环近似成一阶惯性环节,然后用零极点对消法。实际中,因为数字控制延迟、死区效应,这个值往往偏大。我一般算出来后,先打七折再试。
1.3 手动整定的步骤(我常用的)
- Ki置零,Kp从小往大加。给一个阶跃电流指令(比如1A),看响应波形。
- 找到临界震荡点。当Kp大到让电流开始持续震荡,记下这个Kpcrit。
- Kp取Kpcrit的0.6~0.8倍。这时候响应应该没有超调,但上升时间还可以。
- 加入Ki。从Ki = Kp * (Rs / Ls) * 0.5开始,慢慢加,直到稳态误差消失。
- 验证。给一个方波电流指令,看跟踪效果。上升时间、超调量、稳态误差都要看。
二、电流采样偏置校准——小误差,大问题
电流采样偏置,说白了就是零漂。你想想看,电机没转的时候,ADC读回来的电流值应该是0,但实际总有那么几个mA甚至几十mA的偏差。这个偏差在低速时会被积分器放大,导致电机抖动甚至爬行。
2.1 为什么会有偏置?
- 运放输入偏置电压——硬件天生的,没法完全消除。
- ADC参考电压误差——参考源不准,采样值就偏。
- 采样电阻温漂——温度变了,电阻值变,偏置也跟着变。
所以,校准不是做一次就完事的。我建议每次上电都做一次静态校准。
2.2 静态校准方法
电机静止、不给电流指令时,采集N次电流值,取平均,作为偏置量。代码很简单:
// 电流采样偏置校准函数
// 采集1000次,取平均
#define CALIB_SAMPLES 1000
void current_offset_calibration(void)
{
int32_t sum_iu = 0, sum_iv = 0, sum_iw = 0;
uint16_t i;
// 确保电机静止,PWM输出关闭或占空比为0
pwm_disable();
delay_ms(10); // 等待电流稳定
for(i = 0; i < CALIB_SAMPLES; i++)
{
sum_iu += adc_read_u();
sum_iv += adc_read_v();
sum_iw += adc_read_w();
}
offset_u = sum_iu / CALIB_SAMPLES;
offset_v = sum_iv / CALIB_SAMPLES;
offset_w = sum_iw / CALIB_SAMPLES;
// 校准后的电流值 = 原始ADC值 - 偏置
pwm_enable();
}
2.3 动态偏置补偿(进阶)
静态校准只能解决零电流时的偏置。实际运行时,采样电阻会发热,偏置会漂。如果你做的是高性能伺服,建议加入动态补偿:
- 在每个PWM周期的空闲时刻,采集一次零电流状态(比如下桥臂全部导通时)。
- 用滑动平均滤波,实时更新偏置值。
- 注意:这个方法对硬件时序要求高,不是所有平台都支持。
三、电流环带宽测试方法——别光看仿真,动手测
带宽是衡量电流环性能的核心指标。说白了,就是电流环能跟踪多快的指令变化。你调了半天PI,到底带宽够不够?得测。
3.1 扫频法(最准确)
给电流指令叠加一个正弦波,频率从低到高扫,记录实际电流的幅值和相位。当幅值衰减到-3dB(约0.707倍),或者相位滞后90°时,对应的频率就是带宽。
步骤:
- 设定一个直流工作点(比如Id=0, Iq=1A)。
- 在Iq指令上叠加一个正弦扰动,幅值取工作点的10%~20%(太大非线性,太小信噪比差)。
- 从低频(比如10Hz)开始,逐步增加频率,记录每个频率点的幅值和相位。
- 画出伯德图,找到-3dB点。
3.2 阶跃响应法(快速评估)
不想扫频?那就用阶跃响应法。给一个阶跃电流指令,看上升时间。对于一阶系统,带宽和上升时间有个近似关系:
带宽(Hz) ≈ 0.35 / 上升时间(s)
// 举例:上升时间测得0.5ms
// 带宽 ≈ 0.35 / 0.0005 = 700Hz
这个公式只适用于过阻尼或临界阻尼系统。如果你的电流响应有超调,那带宽会比这个估算值高一些,但公式就不准了。
3.3 测试时的注意事项
- 负载要恒定。带载测试时,负载变化会影响带宽测量结果。我建议先空载测,再带载测,对比看。
- 采样率要够。电流环带宽如果是1kHz,那你的电流采样率至少得10kHz以上,否则测出来的数据是混叠的。
- 别忘了死区。死区时间会引入相位滞后,降低实际带宽。如果你的带宽一直上不去,检查一下死区补偿有没有做好。
小结一下
今天咱们聊了电流环调试的三个基本功:
- PI整定——从电机参数出发,手动摸临界点,再细调。
- 偏置校准——静态校准是基础,动态补偿是进阶,别忽视。
- 带宽测试——扫频法最准,阶跃法最快,选你合适的。
下一节,咱们会继续聊电流环的下半部分:解耦控制、死区补偿、以及电流环的限幅策略。这些东西在实际调试中同样关键,到时候见。
嗯,今天就到这儿。有什么问题,欢迎交流。
公众号:蓝海资料掘金营,微信deep3321