在工业自动化和机器人控制领域,直流电机调速系统一直扮演着关键角色。传统PID控制虽然简单易用,但在面对系统参数变化、负载扰动等不确定因素时,其控制效果往往大打折扣。线性自抗扰控制(LADRC)技术通过独特的扩张状态观测器(ESO)设计,能够实时估计并补偿系统内外部扰动,显著提升了控制系统的鲁棒性。
本项目基于STM32F103C8T6微控制器,实现了带有跟踪微分器(TD)的LADRC算法对直流有刷电机的精确调速控制。系统采用增量式光电编码器作为速度反馈元件,通过定时器捕获模式实时获取转速信息,形成完整的闭环控制系统。与常规方案相比,本设计具有三大技术亮点:
主控芯片:STM32F103C8T6(72MHz主频,64KB Flash,20KB SRAM)满足实时控制需求。其丰富的外设资源包括:
电机驱动模块:采用TB6612FNG双H桥驱动器,相比传统L298N具有:
编码器选型:欧姆龙E6B2-CWZ6C(500线增量式),通过4倍频技术实现2000PPR分辨率,对应转速测量精度:
code复制转速精度 = (60 × 定时器频率) / (编码器线数 × 倍频数 × 定时器分频)
= (60 × 72MHz) / (500 × 4 × 1024) ≈ 2.1 RPM
编码器接口电路:
c复制// 定时器编码器模式配置
TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,
TIM_ICPolarity_Rising,
TIM_ICPolarity_Rising);
TIM_SetAutoreload(TIM3, 65535); // 16位计数器最大值
PWM生成电路:
注意:电机驱动电路必须加入0.1μF陶瓷电容进行电源去耦,避免高频开关噪声影响控制器ADC采样精度。
本系统采用的二阶LADRC+TD控制器包含三个核心部分:
跟踪微分器(TD):
扩张状态观测器(ESO):
状态反馈控制律:
TD模块实现:
c复制float fhan(float x1, float x2, float r, float h0) {
float d = r * h0 * h0;
float a0 = h0 * x2;
float y = x1 + a0;
float a1 = sqrt(d * (d + 8 * fabs(y)));
float a2 = a0 + (y>0?1:-1) * (a1 - d)/2;
float sy = (y>0?1:-1);
float a = (a0 + y - a2) * sy + d;
return -r * (a/d) * sy - r * sy;
}
ESO更新方程:
c复制void ESO_Update(LADRC_State *s, LADRC_Params *p, float y, float u) {
float e = s->z1 - y;
s->z1 += p->h * (s->z2 - p->beta1 * e);
s->z2 += p->h * (s->z3 - p->beta2 * e + p->b0 * u);
s->z3 += p->h * (-p->beta3 * e);
}
控制律计算:
c复制float ControlLaw(LADRC_State *s, LADRC_Params *p, float v1, float v2) {
float e1 = v1 - s->z1;
float e2 = v2 - s->z2;
return p->kp * e1 + p->kd * e2 - s->z3 / p->b0;
}
LADRC参数整定遵循带宽参数化原则,将多个参数关联到两个核心带宽:
ESO带宽ωo:
code复制β1 = 3ωo, β2 = 3ωo², β3 = ωo³
通常取ωo = (3~10)ωc,本系统取ωo=50rad/s
控制器带宽ωc:
code复制kp = ωc², kd = 2ωc
根据电机响应特性,初始值设为ωc=20rad/s
TD参数调试:
ESO参数调试:
控制律调试:
调试技巧:使用STM32的DAC输出关键变量(如转速误差、控制量),通过示波器观察动态过程,比单纯看串口数据更直观。
在空载条件下,对系统进行阶跃响应测试:
| 目标转速 (RPM) | 上升时间 (ms) | 超调量 (%) | 稳态误差 (RPM) |
|---|---|---|---|
| 500 | 120 | 2.1 | ±3 |
| 1000 | 150 | 3.5 | ±5 |
| 1500 | 180 | 4.2 | ±8 |
在电机运行于1000RPM时,突然施加0.5Nm负载:
| 控制方法 | 最大速降 (RPM) | 恢复时间 (ms) |
|---|---|---|
| 传统PID | 210 | 450 |
| 基本LADRC | 150 | 300 |
| 本方案(LADRC+TD) | 90 | 200 |
速度测量优化:
参数自整定:
c复制void AutoTune(LADRC_Params *p) {
// 基于极限环法的自动整定
float Ku = 0, Tu = 0;
// ...自动获取临界增益和周期
p->kp = 0.6 * Ku;
p->kd = 0.5 * p->kp * Tu;
}
多电机协同:
实际部署中发现,电机绕组温度升高会导致参数漂移,建议在长时间运行时加入在线参数微调机制。我在某工业输送带项目中,通过增加简单的梯度下降算法,使速度波动降低了40%。