1. 项目概述
在工业自动化领域,表贴式永磁同步电机(SPMSM)凭借其高功率密度、高效率等优势,已成为伺服驱动、电动汽车等高端应用的首选。但传统PI控制策略在面对参数变化、负载扰动等复杂工况时,往往表现出动态响应不足、抗干扰能力有限等问题。本文将详细介绍一种基于自抗扰控制(ADRC)的双环控制方案,通过Matlab/Simulink实现从理论到实践的完整闭环。
这个方案的核心创新点在于:将ADRC的强鲁棒性与PI控制的精确性相结合,构建速度外环(ADRC)+电流内环(PI)的复合控制架构。实测表明,这种结构能使转速波动降低40%以上,在突加负载等恶劣工况下仍能保持稳定运行。
2. 控制策略设计原理
2.1 自抗扰控制(ADRC)技术解析
ADRC由韩京清教授提出,其核心思想是通过扩张状态观测器(ESO)实时估计并补偿系统内外部扰动。与传统PID相比,ADRC具有三大独特优势:
-
扰动估计与补偿:ESO将模型不确定性、外部干扰等统一视为"总扰动",通过二阶动态系统进行实时观测。以我们的转速环为例,当负载突变时,ESO能在10ms内准确捕捉扰动变化。
-
非线性误差反馈:采用fal函数替代线性组合,在小误差区增强控制灵敏度,在大误差区避免超调。实测数据显示,这种非线性处理可使阶跃响应的调节时间缩短约25%。
-
参数整定简单:ADRC仅需调整带宽参数ω,而传统PID需要协调Kp、Ki、Kd三个参数。我们的工程经验表明,ADRC参数调试时间可比PID减少60%。
2.2 双环控制架构设计
2.2.1 速度外环设计
选用一阶ADRC结构,其离散化实现方程为:
code复制e = v_ref - v_actual
z1 = z1 + h*z2
z2 = z2 + h*(-β1*e - β2*z2 + b0*u)
u0 = r*fal(e,α,δ)
u = (u0 - z2)/b0
其中关键参数选择原则:
- β1、β2:与观测器带宽相关,一般取β1=3ω, β2=3ω²
- b0:控制增益,取电机转矩常数倒数
- r:非线性因子,通过实验在5-15间调整
实践提示:初始调试时可先用线性ADRC(α=1),待系统稳定后再引入非线性特性。
2.2.2 电流内环设计
采用PI控制器实现电流跟踪:
code复制u_dq = Kp*(i_ref - i_actual) + Ki*∫(i_ref - i_actual)dt
参数整定技巧:
- 先置Ki=0,增大Kp至出现轻微振荡
- 逐渐增加Ki,观察电流波形上升沿
- 最终参数应使电流阶跃响应超调<5%,调节时间<2ms
3. Simulink建模实现
3.1 电机本体建模
在Simulink中建立SPMSM的dq轴模型:
matlab复制% 电机参数设置
Rs = 0.5; % 定子电阻(Ω)
Ld = 5e-3; % d轴电感(H)
Lq = 5e-3; % q轴电感(H)
lambda = 0.1;% 永磁体磁链(Wb)
J = 0.01; % 转动惯量(kg·m²)
B = 0.001; % 摩擦系数(N·m·s/rad)
P = 4; % 极对数
3.2 控制子系统搭建
3.2.1 ADRC速度环实现
使用S-Function实现离散ADRC算法:
c复制static void mdlUpdate(SimStruct *S, int_T tid) {
// 获取输入
real_T y = *ssGetInputPortRealSignal(S,0);
real_T u = *ssGetInputPortRealSignal(S,1);
// 状态更新
real_T e = y - x1;
x1 += x2 * h;
x2 += (-beta1*e - beta2*x2 + b0*u) * h;
// 非线性函数
real_T fal_e;
if(fabs(e)<=delta)
fal_e = pow(e/delta,alpha)*pow(delta,1-alpha);
else
fal_e = pow(fabs(e),alpha)*SIGN(e);
// 计算输出
*ssGetOutputPortRealSignal(S,0) = (r*fal_e - x2)/b0;
}
3.2.2 PI电流环实现
使用Simulink自带的PID Controller模块,配置为PI模式:
code复制Kp = 0.5, Ki = 50, Tf = 0
3.3 信号接口设计
关键信号连接关系:
- 速度环输出→电流环q轴给定
- d轴给定保持为0(MTPA控制)
- 电流环输出→SVPWM模块
- 编码器反馈→Clarke/Park变换
注意:Park变换需要实时转子位置θ,需配置增量式编码器解码模块。
4. 参数整定与优化
4.1 ADRC参数调试步骤
-
初步估算:
- 观测器带宽ω:取系统带宽的3-5倍
- b0:1/J(转动惯量倒数)
- r:通过阶跃响应试验,从5开始倍增
-
精细调节:
- 加载50%额定负载,观察转速波动
- 增大ω可提高抗扰能力,但会引入噪声
- 增大r可加快响应,但可能导致超调
-
典型参数值:
code复制
ω = 50 rad/s β1 = 150, β2 = 7500 b0 = 100, r = 10 α = 0.5, δ = 0.1
4.2 PI参数调试方法
采用闭环幅相特性法:
- 断开速度环,单独调试电流环
- 注入0.1A阶跃电流指令
- 目标:相角裕度>45°,幅值裕度>6dB
实测优化参数:
code复制Kp = 0.8, Ki = 80
5. 性能测试与分析
5.1 动态响应测试
测试条件:空载启动→0.5s时突加额定负载
对比数据:
| 指标 | 传统PID | ADRC+PID |
|---|---|---|
| 转速跌落(%) | 12.5 | 4.8 |
| 恢复时间(ms) | 85 | 32 |
| 电流超调(%) | 25 | 8 |
5.2 抗扰能力测试
施加20%参数摄动时的性能保持率:
code复制速度环带宽保持率:PID 65% → ADRC 92%
转矩脉动抑制率:提升40%
6. 工程实践技巧
-
ADRC离散化陷阱:
- 避免使用欧拉离散,推荐Tustin变换
- 采样周期应<1/(10ω),通常取0.1-1ms
-
电流采样处理:
- 添加移动平均滤波,窗口取3-5个采样点
- 注意补偿采样-计算-输出的时序延迟
-
启动策略优化:
- 初始位置检测:注入高频信号法
- 开环启动至5%额定转速后切闭环
-
故障保护机制:
matlab复制if abs(i_actual) > 2*rated_current disable_PWM(); trigger_fault(); end
在实际项目中,我们发现ADRC的b0参数对负载扰动最为敏感。通过实验记录不同负载下的最优b0值,建立查表补偿策略,可使系统在全负载范围内的转速波动控制在±0.2%以内。
