速度环
一、速度环在FOC控制系统中的作用
速度环是FOC(磁场定向控制)控制系统的外层闭环,位于电流环(内环)之外。其主要作用如下:
- 精确速度控制 :使电机转速精确跟踪给定参考速度,克服负载扰动和参数变化的影响。
- 动态响应调节 :根据系统需求(如快速启停、平稳运行)调节速度响应特性。
- 生成电流环参考 :速度控制器的输出作为电流环(通常是q轴电流环)的参考输入,将速度误差转化为转矩电流指令。
- 能量优化 :在满足速度要求的前提下,通过合理的控制减少能量消耗。
图1:FOC控制系统中的速度环位置
二、速度环带宽选择原则
速度环带宽是衡量速度环动态响应速度的关键指标,选择时需要综合考虑以下因素:
| 考虑因素 | 影响 | 推荐原则 |
|---|---|---|
| 系统稳定性 | 带宽过高可能导致系统不稳定,特别是存在未建模动态时 | 通常为电流环带宽的1/5 ~ 1/10 |
| 抗干扰能力 | 带宽越高,抑制高频干扰能力越差 | 根据主要干扰频率选择,带宽应低于干扰频率 |
| 响应速度 | 带宽越高,动态响应越快 | 满足应用需求的最小带宽,避免过度设计 |
| 测量噪声 | 速度反馈中的噪声会被放大 | 带宽应远低于速度采样频率(通常≤1/20采样频率) |
| 机械谐振 | 可能激发机械谐振 | 带宽应避开机械谐振频率 |
| **经验法则:**对于大多数工业应用,速度环带宽选择在5-50Hz范围内。高性能伺服系统可达100Hz以上,但需要仔细考虑机械谐振和测量噪声问题。 | ||
| 图2:速度环带宽选择示意图 |
三、PI参数整定方法
速度环PI控制器传递函数为:
其中: 为比例增益, 为积分增益, 为积分时间常数。
3.1 工程整定法(齐格勒-尼科尔斯法)
- 第一步 :将积分增益K i 设为0,逐渐增大K p 直到系统出现等幅振荡
- 第二步 :记录此时的临界增益K u 和振荡周期T u
- 第三步 :根据下表计算PI参数
| 控制器类型 | K p | T i | K i |
|---|---|---|---|
| PI控制器 | 0.45K u | T u /1.2 | K p /T i |
3.2 基于模型的设计法
当已知被控对象模型时,可采用解析法设计:
- 建立速度环被控对象模型(含电流环闭环传递函数)
- 根据期望带宽ω c 和相位裕度φ m 设计PI参数
- 验证闭环系统性能,必要时进行微调
其中: 为转动惯量, 为转矩常数。
3.3 嵌入式代码实现示例
/**
* 速度环PI控制器结构体
*/
typedef struct {
float Kp; // 比例增益
float Ki; // 积分增益
float integral; // 积分项累加值
float out_max; // 输出上限(对应Iq_max)
float out_min; // 输出下限(对应-Iq_max)
float integral_max; // 积分抗饱和限幅
float integral_min;
} SpeedPI_Controller;
/**
* 速度环PI控制器计算函数
* @param ctrl PI控制器结构体指针
* @param error 速度误差 (参考速度 - 实际速度)
* @param dt 采样时间 (秒)
* @return PI控制器输出 (Iq_ref)
*/
float SpeedPI_Calculate(SpeedPI_Controller *ctrl, float error, float dt) {
float proportional; // 比例项
float output; // 控制器输出
// 计算比例项
proportional = ctrl->Kp * error;
// 计算积分项(带抗饱和处理)
ctrl->integral += ctrl->Ki * error * dt;
// 积分项限幅(抗积分饱和)
if (ctrl->integral > ctrl->integral_max) {
ctrl->integral = ctrl->integral_max;
} else if (ctrl->integral < ctrl->integral_min) {
ctrl->integral = ctrl->integral_min;
}
// 计算总输出
output = proportional + ctrl->integral;
// 输出限幅
if (output > ctrl->out_max) {
output = ctrl->out_max;
} else if (output < ctrl->out_min) {
output = ctrl->out_min;
}
// 条件积分抗饱和:当输出饱和时,停止积分累加
if ((output >= ctrl->out_max && error > 0) ||
(output <= ctrl->out_min && error < 0)) {
// 回退本次积分累加
ctrl->integral -= ctrl->Ki * error * dt;
}
return output;
}
/**
* 初始化速度环PI控制器
*/
void SpeedPI_Init(SpeedPI_Controller *ctrl, float Kp, float Ki,
float out_max, float out_min) {
ctrl->Kp = Kp;
ctrl->Ki = Ki;
ctrl->integral = 0.0f;
ctrl->out_max = out_max;
ctrl->out_min = out_min;
// 设置积分限幅为输出限幅的1.2倍
ctrl->integral_max = out_max * 1.2f;
ctrl->integral_min = out_min * 1.2f;
}四、抗积分饱和处理技术
积分饱和是PI控制器在实际应用中常见的问题,当控制器输出达到执行器限幅值时,积分项会继续累积,导致系统出现超调大、恢复慢等问题。 **积分饱和现象:**当电机需要从高速快速制动或从静止快速加速时,速度误差大且持续时间长,积分项快速累积。当实际速度接近目标值时,由于积分项已经很大,控制器输出仍保持饱和状态,导致严重超调。
4.1 常用抗积分饱和方法
| 方法 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 积分限幅法 | 直接限制积分项的最大最小值 | 实现简单,计算量小 | 可能影响稳态精度 | 一般性能要求场合 |
| 条件积分法 | 输出饱和时停止积分 | 有效防止饱和累积 | 需要检测饱和状态 | 快速响应系统 |
| 反计算抗饱和法 | 根据饱和深度反向计算积分项 | 动态性能好,超调小 | 实现较复杂 | 高性能伺服系统 |
| 变积分增益法 | 根据误差大小调整积分增益 | 兼顾动态和稳态性能 | 参数整定复杂 | 宽范围调速系统 |
4.2 改进型抗积分饱和算法实现
/**
* 改进型速度环PI控制器(带反计算抗饱和)
*/
float AdvancedSpeedPI_Calculate(SpeedPI_Controller *ctrl, float error, float dt) {
static float last_output = 0.0f;
float proportional;
float output;
float unsaturated_output;
float anti_windup_gain = 0.5f; // 反计算抗饱和增益
// 计算比例项
proportional = ctrl->Kp * error;
// 计算积分项
ctrl->integral += ctrl->Ki * error * dt;
// 计算未限幅的输出
unsaturated_output = proportional + ctrl->integral;
// 输出限幅
if (unsaturated_output > ctrl->out_max) {
output = ctrl->out_max;
} else if (unsaturated_output < ctrl->out_min) {
output = ctrl->out_min;
} else {
output = unsaturated_output;
}
// 反计算抗饱和:根据饱和程度调整积分项
if (unsaturated_output != output) {
// 计算饱和深度
float saturation_depth;
if (unsaturated_output > ctrl->out_max) {
saturation_depth = unsaturated_output - ctrl->out_max;
} else {
saturation_depth = unsaturated_output - ctrl->out_min;
}
// 反向调整积分项
ctrl->integral -= anti_windup_gain * saturation_depth * dt;
}
last_output = output;
return output;
}
/**
* 变积分增益PI控制器
* 误差大时减小积分作用,误差小时增强积分作用
*/
float VariableGainSpeedPI_Calculate(SpeedPI_Controller *ctrl, float error, float dt) {
float proportional;
float effective_Ki; // 有效积分增益
float output;
// 计算比例项
proportional = ctrl->Kp * error;
// 根据误差大小调整积分增益
float abs_error = fabs(error);
if (abs_error > 100.0f) { // 误差很大时
effective_Ki = ctrl->Ki * 0.1f; // 大幅减小积分作用
} else if (abs_error > 10.0f) { // 误差较大时
effective_Ki = ctrl->Ki * 0.5f; // 适当减小积分作用
} else { // 误差较小时
effective_Ki = ctrl->Ki * 1.5f; // 增强积分作用,提高稳态精度
}
// 计算积分项
ctrl->integral += effective_Ki * error * dt;
// 积分限幅
if (ctrl->integral > ctrl->integral_max) {
ctrl->integral = ctrl->integral_max;
} else if (ctrl->integral < ctrl->integral_min) {
ctrl->integral = ctrl->integral_min;
}
// 计算总输出
output = proportional + ctrl->integral;
// 输出限幅
if (output > ctrl->out_max) {
output = ctrl->out_max;
} else if (output < ctrl->out_min) {
output = ctrl->out_min;
}
return output;
}**调试建议:**在实际调试中,建议先使用简单的积分限幅法,待系统基本稳定后,再根据实际需求考虑是否采用更复杂的抗饱和算法。对于大多数应用,条件积分法结合积分限幅已经足够。
五、总结与最佳实践
5.1 速度环PI设计流程总结
- 确定性能指标 :根据应用需求确定速度环带宽、超调量、稳态误差等指标
- 选择带宽 :遵循”速度环带宽 ≤ 电流环带宽/5”的原则,避开机械谐振频率
- 参数整定 :先使用工程整定法获得初始参数,再根据实际响应微调
- 抗饱和设计 :必须加入抗积分饱和措施,优先考虑条件积分法
- 验证与优化 :在不同工况下测试,优化参数以获得最佳性能
5.2 常见问题与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 速度响应振荡 | 比例增益过大或积分增益过大 | 减小K p 或K i ,检查速度反馈信号质量 |
| 响应速度慢 | 比例增益过小或带宽过低 | 适当增大K p ,检查电流环是否已饱和 |
| 稳态误差大 | 积分增益过小或积分饱和 | 增大K i ,检查抗饱和措施是否有效 |
| 启动时超调大 | 积分饱和严重 | 加强抗饱和处理,考虑使用变积分增益 |
| 负载突变时恢复慢 | 积分作用不足或饱和 | 优化抗饱和算法,适当增加积分限幅 |
| **关键要点:**速度环设计需要在响应速度、稳定性和抗干扰能力之间取得平衡。在实际工程中,往往需要根据具体应用场景进行多次调试和优化。记住”没有最好的参数,只有最合适的参数”。 |