一、三环控制基础:什么是三环控制

大家好,我是老张。搞自动化控制这么多年,三环控制可以说是最基础、也最核心的内容。今天咱们就来聊聊这个。

三环控制,说白了就是三个闭环控制回路叠在一起。哪三环?电流环、速度环、位置环。你想想看,就像三个嵌套的圆圈,最里面是电流环,中间是速度环,最外面是位置环。

1.1 三环分别是什么

电流环:这是最内层的环。它控制电机的电流,说白了就是控制力矩。我习惯叫它"力气环"——电机有没有劲,全靠它。

速度环:中间这层。它控制电机的转速。你让电机转多快,它说了算。

位置环:最外层。控制电机最终停在哪个位置。精度要求高的场合,就看这环调得好不好。

重要概念:三环是嵌套关系。外环的输出,是内环的输入。位置环输出速度指令,速度环输出电流指令,电流环直接控制电机。

1.2 三环控制的应用场景

说到应用场景,我第一个想到的就是伺服电机。搞过伺服驱动器的朋友都知道,伺服驱动器内部就是典型的三环结构。我在项目中遇到过一台伺服电机,位置精度老是达不到要求,查来查去,原来是速度环的PI参数没调好。

另一个典型场景是机器人关节。机器人每个关节都是一个伺服系统。你想想看,机器人要精准地抓取物体,位置环必须准;运动过程中速度要平滑,速度环必须稳;遇到负载变化,电流环必须快。

其他常见应用还包括:

  • 数控机床的进给轴
  • 印刷机械的套准控制
  • 包装机械的定长裁切
  • AGV小车的行走驱动

1.3 三环控制的基本原理与信号流

咱们来看信号是怎么流的。我画了一张图,帮你理解这个嵌套结构。

三环控制信号流图 位置环(最外层) 输入:目标位置 → 输出:速度指令 常用控制:P控制 或 PI控制 速度环(中间层) 输入:速度指令 → 输出:电流指令 常用控制:PI控制 电流环(最内层) 输入:电流指令 → 输出:PWM占空比 常用控制:PI控制,响应最快 ← 位置反馈(编码器) ← 速度反馈(编码器/测速机) ← 电流反馈(采样电阻/霍尔)

信号流是这样的:

  1. 位置环接收目标位置指令,与编码器反馈的实际位置比较,算出位置误差。位置环控制器输出一个速度指令。
  2. 速度环拿到这个速度指令,与实测速度比较,算出速度误差。速度环控制器输出一个电流指令。
  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个周期执行一次,电流环每个周期都执行。这样保证了电流环的快速响应。

核心要点:三环控制就是"分层治理"。每一层只管自己的事,外环给内环发指令,内环负责执行。这种结构让系统既稳定又灵活。

好了,三环控制的基础就讲到这里。记住:电流环管力,速度环管快慢,位置环管准不准。这三者配合好了,你的系统才能指哪打哪。

公众号:蓝海资料掘金营,微信deep3321