位置环
一、位置环的作用与地位
在无刷电机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 整定前准备
- 确保速度环和电流环已稳定调校,其带宽远高于位置环(通常>5倍)。
- 准备好测试指令:如阶跃位置指令、低速正弦扫描指令。
- 连接好观测工具(示波器、上位机监控软件),能实时查看位置指令、反馈、误差及输出速度指令。
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),并通过严谨的整定方法找到一组能使系统稳定、快速、准确的参数。
课后练习:
- 在仿真软件(如MATLAB/Simulink)中搭建一个包含三环的FOC伺服模型,重点调试位置环PID参数,观察不同参数下系统对阶跃和正弦位置指令的响应。
- 思考:如果位置反馈信号存在较大的噪声或周期性误差(如编码器安装偏心),对位置环,尤其是微分项,会有什么影响?应如何应对?
- 尝试在位置环代码中加入简单的梯形轨迹规划算法,比较有无规划时,控制器输出的平滑性和系统的跟踪性能。