一、三环控制基础:什么是三环控制
大家好,我是老张。搞自动化控制这么多年,三环控制可以说是最基础、也最核心的内容。今天咱们就来聊聊这个。
三环控制,说白了就是三个闭环控制回路叠在一起。哪三环?电流环、速度环、位置环。你想想看,就像三个嵌套的圆圈,最里面是电流环,中间是速度环,最外面是位置环。
1.1 三环分别是什么
电流环:这是最内层的环。它控制电机的电流,说白了就是控制力矩。我习惯叫它"力气环"——电机有没有劲,全靠它。
速度环:中间这层。它控制电机的转速。你让电机转多快,它说了算。
位置环:最外层。控制电机最终停在哪个位置。精度要求高的场合,就看这环调得好不好。
重要概念:三环是嵌套关系。外环的输出,是内环的输入。位置环输出速度指令,速度环输出电流指令,电流环直接控制电机。
1.2 三环控制的应用场景
说到应用场景,我第一个想到的就是伺服电机。搞过伺服驱动器的朋友都知道,伺服驱动器内部就是典型的三环结构。我在项目中遇到过一台伺服电机,位置精度老是达不到要求,查来查去,原来是速度环的PI参数没调好。
另一个典型场景是机器人关节。机器人每个关节都是一个伺服系统。你想想看,机器人要精准地抓取物体,位置环必须准;运动过程中速度要平滑,速度环必须稳;遇到负载变化,电流环必须快。
其他常见应用还包括:
- 数控机床的进给轴
- 印刷机械的套准控制
- 包装机械的定长裁切
- AGV小车的行走驱动
1.3 三环控制的基本原理与信号流
咱们来看信号是怎么流的。我画了一张图,帮你理解这个嵌套结构。
信号流是这样的:
- 位置环接收目标位置指令,与编码器反馈的实际位置比较,算出位置误差。位置环控制器输出一个速度指令。
- 速度环拿到这个速度指令,与实测速度比较,算出速度误差。速度环控制器输出一个电流指令。
- 电流环拿到电流指令,与实测电流比较,算出电流误差。电流环控制器输出PWM占空比,驱动电机。
我的经验:调试三环时,一定要从内往外调。先调好电流环,再调速度环,最后调位置环。我曾经见过有人一上来就调位置环,结果电流环都没稳住,折腾了两天没搞定。
1.4 三环各自的响应速度
三环的响应速度是不一样的。电流环最快,速度环次之,位置环最慢。为什么?
你想想看:电流变化是毫秒级的,速度变化是几十毫秒级的,位置变化可能是百毫秒级的。如果位置环比电流环还快,系统就会振荡。
| 控制环 | 典型带宽 | 响应时间 | 主要影响因素 |
|---|---|---|---|
| 电流环 | 1-5 kHz | 0.2-1 ms | 电机电感、PWM频率 |
| 速度环 | 50-500 Hz | 2-20 ms | 转动惯量、负载 |
| 位置环 | 10-100 Hz | 10-100 ms | 机械刚度、传动间隙 |
注意:三环的采样频率也要匹配。电流环采样频率最高,速度环次之,位置环最低。如果采样频率设置不当,会出现奇怪的振荡问题。我调试一个六轴机器人时,就是采样频率没匹配好,导致第五轴在低速时抖动。
1.5 三环控制的典型代码结构
在实际的嵌入式系统中,三环控制通常放在定时器中断里执行。我给大家看一个简化的代码框架:
// 三环控制主循环(定时器中断,例如10kHz)
void ControlLoop(void)
{
// 1. 读取编码器位置
int32_t position = ReadEncoder();
// 2. 计算速度(位置微分)
int32_t speed = (position - last_position) * speed_scale;
last_position = position;
// 3. 读取电流
int16_t current = ReadCurrentADC();
// 4. 位置环(1kHz执行)
if(position_loop_counter++ >= 10)
{
position_loop_counter = 0;
int32_t pos_error = target_position - position;
speed_ref = pos_error * Kp_pos; // P控制
}
// 5. 速度环(2kHz执行)
if(speed_loop_counter++ >= 5)
{
speed_loop_counter = 0;
int32_t spd_error = speed_ref - speed;
current_ref = spd_error * Kp_spd + integral_spd; // PI控制
}
// 6. 电流环(10kHz执行)
int16_t cur_error = current_ref - current;
pwm_duty = cur_error * Kp_cur + integral_cur; // PI控制
// 7. 输出PWM
SetPWM(pwm_duty);
}
这段代码里,位置环每10个周期执行一次,速度环每5个周期执行一次,电流环每个周期都执行。这样保证了电流环的快速响应。
核心要点:三环控制就是"分层治理"。每一层只管自己的事,外环给内环发指令,内环负责执行。这种结构让系统既稳定又灵活。
好了,三环控制的基础就讲到这里。记住:电流环管力,速度环管快慢,位置环管准不准。这三者配合好了,你的系统才能指哪打哪。