第08章 三环控制原理
目录
什么是三环控制
三环控制是电机控制中常见的串级控制结构,从内到外依次为:
位置环(外环)
↓ 目标速度
速度环(中环)
↓ 目标电流
电流环(内环)
↓ PWM 输出
电机三环功能与特点
| 环 | 输入 | 输出 | 采样频率 | 控制目标 | 带宽 |
|---|---|---|---|---|---|
| 电流环 | 目标电流 | PWM 占空比 | 10-50 kHz | 精确跟踪电流 | 最高(最快) |
| 速度环 | 目标速度 | 目标电流 | 1-5 kHz | 精确跟踪速度 | 中等 |
| 位置环 | 目标位置 | 目标速度 | 100-1 kHz | 精确定位 | 最低(最慢) |
带宽比例:电流环 > 速度环 > 位置环(约 10:1)
为什么需要三环
单环控制的局限
图表
代码
mindmap
root(只用电流控制)
无法精确控制速度
无位置反馈
只适合转矩模式mindmap
root(只用电流控制)
无法精确控制速度
无位置反馈
只适合转矩模式mindmap
root(只用电流控制)
无法精确控制速度
无位置反馈
只适合转矩模式mindmap
root(只用电流控制)
无法精确控制速度
无位置反馈
只适合转矩模式双环控制的局限
图表
代码
mindmap
root(电流 + 速度控制)
速度稳定
无位置控制
适合速度模式mindmap
root(电流 + 速度控制)
速度稳定
无位置控制
适合速度模式mindmap
root(电流 + 速度控制)
速度稳定
无位置控制
适合速度模式mindmap
root(电流 + 速度控制)
速度稳定
无位置控制
适合速度模式三环控制的优势
图表
代码
mindmap
root(电流 + 速度 + 位置)
三级协同控制
响应快且稳定
抗干扰能力强
适合伺服应用mindmap
root(电流 + 速度 + 位置)
三级协同控制
响应快且稳定
抗干扰能力强
适合伺服应用mindmap
root(电流 + 速度 + 位置)
三级协同控制
响应快且稳定
抗干扰能力强
适合伺服应用mindmap
root(电流 + 速度 + 位置)
三级协同控制
响应快且稳定
抗干扰能力强
适合伺服应用三环控制框图
图表
代码
flowchart TD
A[目标位置 (Pos_ref)] --> B[位置环 (PID)]
B --> C[目标速度]
C --> D[速度环 (PID)]
D --> E[目标电流]
E --> F[SVPWM/PWM 调制器]
F --> G[PWM 输出]
G --> H[电机]
I[位置传感器] --> B
J[速度传感器] --> D
K[电流传感器] --> F
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e1f5fe
style D fill:#f3e5f5
style E fill:#e1f5fe
style F fill:#fff3e0
style G fill:#fce4ec
style H fill:#e8f5e8
style I fill:#f1f8e9
style J fill:#f1f8e9
style K fill:#f1f8e9flowchart TD
A[目标位置 (Pos_ref)] --> B[位置环 (PID)]
B --> C[目标速度]
C --> D[速度环 (PID)]
D --> E[目标电流]
E --> F[SVPWM/PWM 调制器]
F --> G[PWM 输出]
G --> H[电机]
I[位置传感器] --> B
J[速度传感器] --> D
K[电流传感器] --> F
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e1f5fe
style D fill:#f3e5f5
style E fill:#e1f5fe
style F fill:#fff3e0
style G fill:#fce4ec
style H fill:#e8f5e8
style I fill:#f1f8e9
style J fill:#f1f8e9
style K fill:#f1f8e9flowchart TD
A[目标位置 (Pos_ref)] --> B[位置环 (PID)]
B --> C[目标速度]
C --> D[速度环 (PID)]
D --> E[目标电流]
E --> F[SVPWM/PWM 调制器]
F --> G[PWM 输出]
G --> H[电机]
I[位置传感器] --> B
J[速度传感器] --> D
K[电流传感器] --> F
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e1f5fe
style D fill:#f3e5f5
style E fill:#e1f5fe
style F fill:#fff3e0
style G fill:#fce4ec
style H fill:#e8f5e8
style I fill:#f1f8e9
style J fill:#f1f8e9
style K fill:#f1f8e9flowchart TD
A[目标位置 (Pos_ref)] --> B[位置环 (PID)]
B --> C[目标速度]
C --> D[速度环 (PID)]
D --> E[目标电流]
E --> F[SVPWM/PWM 调制器]
F --> G[PWM 输出]
G --> H[电机]
I[位置传感器] --> B
J[速度传感器] --> D
K[电流传感器] --> F
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e1f5fe
style D fill:#f3e5f5
style E fill:#e1f5fe
style F fill:#fff3e0
style G fill:#fce4ec
style H fill:#e8f5e8
style I fill:#f1f8e9
style J fill:#f1f8e9
style K fill:#f1f8e9电流环(内环)
功能
精确控制电机相电流,实现期望的转矩。
为什么电流环最重要?
- 直接控制转矩:τ = k_t × i_q
- 响应最快:决定系统动态性能
- 限制电流:保护电机和驱动器
- 基础稳定:外环依赖电流环
电流环控制框图
i_ref ───→[PI 控制器]───→ u_ref ──→[SVPWM]───→ PWM
↓
┌─────────┐
│三相逆变器│
└─────────┘
↓
电机
↓
i_measured ──→
↑
┌─────────┤
│电流采样 │
└─────────┘电流环设计要点
- 采样频率高:≥20kHz(电流变化快)
- PI 参数整定:
- Kp:决定带宽
- Ki:消除稳态误差
- 带宽最大化:响应越快越好
- 电流限幅:保护硬件
速度环(中环)
功能
控制电机转速,达到期望的速度。
为什么需要速度环?
- 速度控制需求:许多应用需要精确速度
- 减少负载影响:自动调整应对负载变化
- 位置环基础:为位置环提供速度指令
速度环控制框图
ω_ref ───→[PID 控制器]───→ i_q_ref ──→[电流环]
↓
ω_measured ──→
↑
┌─────────┤
│速度估计 │
└─────────┘速度环设计要点
- 采样频率中:1-5kHz
- PID 整定:
- Kp:响应速度
- Ki:消除稳态误差
- Kd:减少超调(可选)
- 速度估计:
- 编码器差分
- 低通滤波
- 积分抗饱和:防止积分累积
位置环(外环)
功能
控制电机转子位置,实现精确的角位移。
为什么需要位置环?
- 精确定位:机器人、CNC 等需要
- 轨迹跟踪:实现复杂运动轨迹
- 伺服控制:快速响应位置指令
位置环控制框图
θ_ref ───→[PID 控制器]───→ ω_ref ──→[速度环]
↓
θ_measured ──→
↑
┌─────────┤
│位置传感器 │
└─────────┘位置环设计要点
- 采样频率低:100-1kHz(位置变化慢)
- PID 整定:
- Kp:响应速度(主要)
- Ki:消除稳态误差(小)
- Kd:预测控制(常用)
- 轨迹规划:平滑的位置指令
- 前馈控制:提高响应速度
三环整定顺序
原则:从内到外,先快后慢
1. 电流环整定(最重要)
└── 断开外环,直接给电流指令
└── 观察电流响应,调整 PI 参数
└── 目标:快速、无超调、无振荡
2. 速度环整定
└── 电流环工作正常
└── 给速度阶跃,调整 PID 参数
└── 目标:快速跟踪,无明显超调
3. 位置环整定
└── 速度环工作正常
└── 给位置阶跃,调整 PID 参数
└── 目标:精确定位,无振荡整定方法
电流环:极点配置法
时间常数:τ = L / R
极点频率:ω_p = 1 / τ
目标带宽:ω_c = 2π × f_c(f_c 为期望截止频率)
Kp = L × ω_c
Ki = R × ω_c速度环:Ziegler-Nichols 法
1. 设 Ki = 0, Kd = 0
2. 增加 Kp 直到等幅振荡
3. 记录临界 Kp_u 和振荡周期 T_u
4. 计算 PID 参数:
Kp = 0.6 × Kp_u
Ki = 1.2 × Kp_u / T_u
Kd = 0.075 × Kp_u × T_u位置环:试错法
1. 小 Kp,观察响应
2. 逐渐增大 Kp 到超调
3. 添加 Kd 减少超调
4. 小 Ki 消除稳态误差三环代码框架 (C++)
// PI 控制器
class PIController {
private:
float kp, ki, output_min, output_max;
float integrator;
public:
PIController(float kp, float ki, float min, float max)
: kp(kp), ki(ki), output_min(min), output_max(max), integrator(0) {}
float update(float error, float dt) {
integrator += error * dt;
// 抗饱和
float output = kp * error + ki * integrator;
if (output > output_max) {
output = output_max;
integrator -= error * dt; // 防止积分饱和
} else if (output < output_min) {
output = output_min;
integrator -= error * dt;
}
return output;
}
};
// PID 控制器
class PIDController {
private:
float kp, ki, kd, output_min, output_max;
float integrator, last_error;
public:
PIDController(float kp, float ki, float kd, float min, float max)
: kp(kp), ki(ki), kd(kd), output_min(min), output_max(max),
integrator(0), last_error(0) {}
float update(float error, float dt) {
integrator += error * dt;
float derivative = (error - last_error) / dt;
last_error = error;
float output = kp * error + ki * integrator + kd * derivative;
// 抗饱和
if (output > output_max) {
output = output_max;
integrator -= error * dt;
} else if (output < output_min) {
output = output_min;
integrator -= error * dt;
}
return output;
}
};
// 三环控制器
class ThreeLoopController {
private:
PIController current_loop;
PIController speed_loop;
PIDController position_loop;
float position_ref, speed_ref, current_ref;
float position_measured, speed_measured, current_measured;
public:
ThreeLoopController()
: current_loop(1.0f, 100.0f, -10.0f, 10.0f),
speed_loop(0.5f, 10.0f, -5.0f, 5.0f),
position_loop(2.0f, 0.01f, 0.1f, -3.0f, 3.0f) {}
// 外环:位置控制
void update_position(float dt) {
float position_error = position_ref - position_measured;
speed_ref = position_loop.update(position_error, dt);
}
// 中环:速度控制
void update_speed(float dt) {
float speed_error = speed_ref - speed_measured;
current_ref = speed_loop.update(speed_error, dt);
}
// 内环:电流控制
float update_current(float dt) {
float current_error = current_ref - current_measured;
return current_loop.update(current_error, dt);
}
// 完整更新(三环)
float update(float dt) {
update_position(dt); // 外环
update_speed(dt); // 中环
return update_current(dt); // 内环
}
};常见问题
Q1: 为什么电流环带宽要最高?
答:
- 电流变化最快(电感时间常数小)
- 内环响应越快,外环控制越稳定
- 电流环决定系统最大动态性能
Q2: 积分饱和怎么处理?
答:两种方法
- 条件积分:限幅时不积分
- 回减法:超限时将积分减去
Q3: 速度环用 PI 还是 PID?
答:
- PI:常用,速度变化慢,D 不需要
- PID:需要快速响应时使用 D
- 推荐先 PI,有需求再加 D
Q4: 位置环的 Kd 有什么作用?
答:
- 预测控制:根据误差变化率调整
- 减少超调:提前制动
- 提高阻尼:类似于弹簧-阻尼系统
参考资源
相关内容
- 第01章 AI/深度学习增强控制
- 第02章 Clarke 变换(三相静止 → 两相静止)
- 第03章 FOC(磁场定向控制)原理
- 第04章 STM32 FOC SDK 入门指南
- 第05章 SVPWM(空间矢量脉宽调制)
如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
支付宝
微信