位置环

← 返回 FOC MOC | ← 返回主页


一、位置环的作用与地位

在无刷电机FOC(磁场定向控制)的三环控制结构中,位置环处于最外层,是 伺服系统 实现精确位置控制的核心。

  • 核心作用 :根据给定的目标位置(指令)与实际反馈位置(编码器、旋变等)的偏差,计算出电机应该达到的目标速度。
  • 控制目标 :使电机的实际位置快速、准确、平稳地跟踪指令位置,无静差、超调小、抗干扰能力强。
  • 系统地位 :位置环的输出,作为速度环的输入指令,构成了“位置外环-速度中环-电流内环”的经典伺服控制架构。

图1:FOC三环控制架构图(位置环为最外层)

二、位置环控制器类型

常用的位置环控制器主要有比例(P)控制器和比例-积分-微分(PID)控制器。

控制器类型传递函数特点适用场景
比例控制器 (P)G p (s) = K pp结构简单,响应快;存在静差;参数整定容易。对静态误差要求不高,追求快速响应的场合,如云台、扫描。
比例积分控制器 (PI)G pi (s) = K pp + K ip /s积分消除静差;可能引起超调和积分饱和。需要消除位置静态误差的伺服系统。
比例积分微分控制器 (PID)G pid (s) = K pp + K ip /s + K dp s综合改善动态性能(超前调节,抑制超调);微分对噪声敏感。对动态性能(响应速度、超调、稳定时间)要求高的精密伺服,如机器人关节。

三、P/PID参数整定方法与步骤

3.1 整定前准备

  1. 确保速度环和电流环已稳定调校,其带宽远高于位置环(通常>5倍)。
  2. 准备好测试指令:如阶跃位置指令、低速正弦扫描指令。
  3. 连接好观测工具(示波器、上位机监控软件),能实时查看位置指令、反馈、误差及输出速度指令。

3.2 试凑法/工程整定法(逐步调试)

步骤操作观察与目标
1. 初始化将K pp , K ip , K dp 设为0。系统无位置控制,仅手动或开环。
2. 调比例K pp逐步增大K pp ,给一个小阶跃位置指令。系统开始响应。目标:响应迅速,但无剧烈振荡或持续振荡。若有振荡,则略微减小K pp 。
3. 调积分K ip若存在静差,加入很小的K ip 。静差逐渐消除。目标:静差在可接受时间内归零,不引起明显超调或低频振荡。K ip 通常远小于K pp 。
4. 调微分K dp若系统超调大或收敛慢,加入很小的K dp 。超调减小,响应更平稳。目标:抑制超调,加快稳定。注意观察对噪声的放大效应。
5. 微调与验证在不同指令(大小、速度)下测试,微调参数。系统在各种工况下均稳定、准确、快速。
**💡 专家提示:**位置环带宽应显著低于速度环带宽,以保证系统稳定性。通常,位置环带宽设计在速度环带宽的1/5到1/10。例如,速度环带宽为100Hz,位置环带宽可设定在10-20Hz。

3.3 位置环PID代码示例(C语言)

/**
 * 位置环PID控制器结构体
 */
typedef struct {
    float Kp;          // 比例系数
    float Ki;          // 积分系数
    float Kd;          // 微分系数
    float target_pos;  // 目标位置 (单位:弧度或编码器计数)
    float feedback_pos;// 反馈位置
    float error;       // 当前误差
    float error_last;  // 上一次误差
    float integral;    // 积分项
    float output;      // 控制器输出 (即目标速度)
    float output_max;  // 输出限幅 (最大速度)
    float integral_max;// 积分限幅 (抗饱和)
} Position_PID_t;
 
/**
 * 位置环PID计算函数
 * @param pid PID结构体指针
 * @param target 目标位置
 * @param feedback 反馈位置
 * @param dt 控制周期 (单位:秒)
 * @return 计算出的目标速度
 */
float Position_PID_Calculate(Position_PID_t *pid, float target, float feedback, float dt) {
    // 1. 更新目标与反馈
    pid->target_pos = target;
    pid->feedback_pos = feedback;
 
    // 2. 计算误差
    pid->error_last = pid->error;
    pid->error = pid->target_pos - pid->feedback_pos;
 
    // 3. 比例项
    float proportional = pid->Kp * pid->error;
 
    // 4. 积分项 (带限幅抗饱和)
    pid->integral += pid->error * dt;
    // 积分限幅
    if (pid->integral > pid->integral_max) pid->integral = pid->integral_max;
    if (pid->integral < -pid->integral_max) pid->integral = -pid->integral_max;
    float integral = pid->Ki * pid->integral;
 
    // 5. 微分项 (常用不完全微分或滤波以抑制噪声)
    float derivative = pid->Kd * (pid->error - pid->error_last) / dt;
    // 在实际应用中,微分项通常需要低通滤波,此处简化
 
    // 6. 合成输出
    pid->output = proportional + integral + derivative;
 
    // 7. 输出限幅 (保护速度环)
    if (pid->output > pid->output_max) pid->output = pid->output_max;
    if (pid->output < -pid->output_max) pid->output = -pid->output_max;
 
    return pid->output;
}
 
// 初始化示例
void Position_PID_Init(Position_PID_t *pid) {
    pid->Kp = 5.0f;          // 需根据实际系统调试
    pid->Ki = 0.1f;          // 通常很小
    pid->Kd = 0.05f;         // 谨慎添加
    pid->integral = 0.0f;
    pid->error_last = 0.0f;
    pid->output_max = 100.0f; // 最大速度指令
    pid->integral_max = 50.0f;
}

四、在伺服系统中的应用要点

  • 前馈控制 :在高动态响应要求的场合,可在位置环中加入速度前馈和加速度前馈,提前补偿,大幅减小跟踪误差。
  • 梯形/ S曲线规划 :位置指令不应是突变的阶跃信号,应经过轨迹规划(如梯形速度曲线、S型加减速),生成平滑的位置、速度、加速度指令,减轻对控制器的压力。
  • 抗积分饱和 (Anti-windup) :当输出长时间限幅时(如电机堵转),积分项会不断累积,需采用 clamping 或 back-calculation 等抗饱和策略。
  • 与上位机配合 :伺服系统通常接受上位机(如PLC、运动控制卡)发出的位置指令(脉冲、通讯),需处理好指令接口、电子齿轮比、位置模式/速度模式切换等功能。

图2:伺服系统位置控制流程与信号流图

五、总结与练习

本章核心: 位置环是伺服系统的“大脑”,负责最终的位置精度。其设计关键在于根据内环(速度、电流)的性能,合理选择控制器类型(P/PID),并通过严谨的整定方法找到一组能使系统稳定、快速、准确的参数。

课后练习:

  1. 在仿真软件(如MATLAB/Simulink)中搭建一个包含三环的FOC伺服模型,重点调试位置环PID参数,观察不同参数下系统对阶跃和正弦位置指令的响应。
  2. 思考:如果位置反馈信号存在较大的噪声或周期性误差(如编码器安装偏心),对位置环,尤其是微分项,会有什么影响?应如何应对?
  3. 尝试在位置环代码中加入简单的梯形轨迹规划算法,比较有无规划时,控制器输出的平滑性和系统的跟踪性能。