4. 直流电机PI转速闭环控制实现
PI转速闭环的控制结构与信号流
开环调速时,给定占空比 D 与稳态转速之间没有强绑定关系:负载转矩一变,转速就漂移。加入PI控制器后,控制器以“转速误差”为输入,输出占空比修正量,使稳态误差趋于零。整定前先明确各环节的物理量与量纲,避免积分项因单位混乱而饱和。
离散PI控制器的实现
控制器在定时中断中以固定周期 Ts 执行。积分项采用累加形式,必须做输出限幅与积分抗饱和处理,否则给定突变或电机堵转时积分会持续累积,恢复时产生大幅超调。
/* 直流电机 PI 转速闭环控制 —— 离散实现 */
#define TS 0.005f /* 控制周期 5ms */
#define KP 0.85f /* 比例增益,先整定 */
#define KI 12.0f /* 积分增益,后整定 */
#define DUTY_MAX 0.95f /* 占空比上限,留死区余量 */
#define DUTY_MIN 0.0f
#define N_REF 1500.0f /* 目标转速 rpm */
static float integral = 0.0f; /* 积分累加器 */
/* 每 Ts 调用一次,n_fb 由编码器M法测速得到 */
float pi_speed_control(float n_ref, float n_fb)
{
float e, u, u_unsat;
e = n_ref - n_fb; /* 转速误差 */
u_unsat = KP * e + KI * integral; /* 未限幅输出 */
/* 条件积分抗饱和:仅在未饱和时累加 */
if ((u_unsat < DUTY_MAX) && (u_unsat > DUTY_MIN)) {
integral += e * TS;
}
u = KP * e + KI * integral; /* 重新计算输出 */
/* 输出限幅 */
if (u > DUTY_MAX) u = DUTY_MAX;
if (u < DUTY_MIN) u = DUTY_MIN;
return u; /* 返回占空比指令 */
}
积分抗饱和要点:当输出已到达限幅值时停止积分累加,避免“积分饱和—退饱和延迟—超调”的连锁反应。若电机堵转导致 n_fb 长时间为零,该机制可防止积分项无限增长。
参数整定步骤与判据
采用“先比例后积分”的试凑法,在阶跃给定下观察转速响应曲线。整定过程中每次只改一个参数,记录超调量、上升时间和稳态误差。
| 步骤 | 操作 | 观察现象 | 调整方向 |
|---|---|---|---|
| 1 | Ki=0,Kp从0.2逐步增大 | 响应加快,出现振荡 | 取振荡前Kp的60%~70%作为初值 |
| 2 | 固定Kp,Ki从0逐步增大 | 静差减小,超调增大 | 静差消除且超调≤5%时停止 |
| 3 | 施加负载扰动 | 转速跌落及恢复时间 | 恢复慢则适当增大Ki |
| 4 | 给定阶跃反向 | 反向超调是否对称 | 不对称时检查限幅与死区 |
阶跃响应验证与结果判读
将 n_ref 从 0 阶跃至 1500 rpm,通过串口或上位机记录 n_fb 随时间的变化。以下为教学示例的预期响应特征(非实测数据):
| 指标 | 目标值 | 判读方法 |
|---|---|---|
| 稳态误差 | ≈ 0 rpm | 稳定后 n_fb 与 n_ref 之差 |
| 超调量 | ≤ 5%(≤75 rpm) | 峰值转速 − 1500 |
| 上升时间 | 0.3~0.8 s | 10%→90% 目标值的时间 |
| 调节时间 | ≤ 1.5 s | 进入 ±2% 误差带并不再超出 |
常见问题:若转速持续振荡且幅度不衰减,通常是 Kp 过大或控制周期 Ts 与测速更新周期不匹配;若稳态始终有静差,检查积分项是否因限幅逻辑被永久冻结,或 Ki 过小。
快速整定与复查清单
- 确认编码器测速方向与给定方向一致,否则误差符号相反导致正反馈。
- 确认 Ts 与测速采样周期关系:测速更新慢于控制周期时,同一 n_fb 会被重复使用,等效降低反馈带宽。
- Kp 初值取“临界振荡值”的 60%~70%,Ki 从 0 开始逐步增加。
- 积分抗饱和条件必须与输出限幅一致,避免限幅值改变后忘记同步修改。
- 验证时先空载阶跃,再加额定负载阶跃,最后做反向阶跃。
- 记录每组 (Kp, Ki) 下的超调量与调节时间,选取满足指标且裕量最大的一组。