速度环

← 返回 FOC MOC | ← 返回主页


一、速度环在FOC控制系统中的作用

速度环是FOC(磁场定向控制)控制系统的外层闭环,位于电流环(内环)之外。其主要作用如下:

  • 精确速度控制 :使电机转速精确跟踪给定参考速度,克服负载扰动和参数变化的影响。
  • 动态响应调节 :根据系统需求(如快速启停、平稳运行)调节速度响应特性。
  • 生成电流环参考 :速度控制器的输出作为电流环(通常是q轴电流环)的参考输入,将速度误差转化为转矩电流指令。
  • 能量优化 :在满足速度要求的前提下,通过合理的控制减少能量消耗。

图1:FOC控制系统中的速度环位置

二、速度环带宽选择原则

速度环带宽是衡量速度环动态响应速度的关键指标,选择时需要综合考虑以下因素:

考虑因素影响推荐原则
系统稳定性带宽过高可能导致系统不稳定,特别是存在未建模动态时通常为电流环带宽的1/5 ~ 1/10
抗干扰能力带宽越高,抑制高频干扰能力越差根据主要干扰频率选择,带宽应低于干扰频率
响应速度带宽越高,动态响应越快满足应用需求的最小带宽,避免过度设计
测量噪声速度反馈中的噪声会被放大带宽应远低于速度采样频率(通常≤1/20采样频率)
机械谐振可能激发机械谐振带宽应避开机械谐振频率
**经验法则:**对于大多数工业应用,速度环带宽选择在5-50Hz范围内。高性能伺服系统可达100Hz以上,但需要仔细考虑机械谐振和测量噪声问题。
图2:速度环带宽选择示意图

三、PI参数整定方法

速度环PI控制器传递函数为:

其中: 为比例增益, 为积分增益, 为积分时间常数。

3.1 工程整定法(齐格勒-尼科尔斯法)

  1. 第一步 :将积分增益K i 设为0,逐渐增大K p 直到系统出现等幅振荡
  2. 第二步 :记录此时的临界增益K u 和振荡周期T u
  3. 第三步 :根据下表计算PI参数
控制器类型K pT iK i
PI控制器0.45K uT u /1.2K p /T i

3.2 基于模型的设计法

当已知被控对象模型时,可采用解析法设计:

  1. 建立速度环被控对象模型(含电流环闭环传递函数)
  2. 根据期望带宽ω c 和相位裕度φ m 设计PI参数
  3. 验证闭环系统性能,必要时进行微调

其中: 为转动惯量, 为转矩常数。

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设计流程总结

  1. 确定性能指标 :根据应用需求确定速度环带宽、超调量、稳态误差等指标
  2. 选择带宽 :遵循”速度环带宽 ≤ 电流环带宽/5”的原则,避开机械谐振频率
  3. 参数整定 :先使用工程整定法获得初始参数,再根据实际响应微调
  4. 抗饱和设计 :必须加入抗积分饱和措施,优先考虑条件积分法
  5. 验证与优化 :在不同工况下测试,优化参数以获得最佳性能

5.2 常见问题与解决方案

问题现象可能原因解决方案
速度响应振荡比例增益过大或积分增益过大减小K p 或K i ,检查速度反馈信号质量
响应速度慢比例增益过小或带宽过低适当增大K p ,检查电流环是否已饱和
稳态误差大积分增益过小或积分饱和增大K i ,检查抗饱和措施是否有效
启动时超调大积分饱和严重加强抗饱和处理,考虑使用变积分增益
负载突变时恢复慢积分作用不足或饱和优化抗饱和算法,适当增加积分限幅
**关键要点:**速度环设计需要在响应速度、稳定性和抗干扰能力之间取得平衡。在实际工程中,往往需要根据具体应用场景进行多次调试和优化。记住”没有最好的参数,只有最合适的参数”。