1. 永磁同步电机无感FOC控制概述
永磁同步电机(PMSM)因其高效率、高功率密度等优点,在工业驱动、电动汽车等领域得到广泛应用。传统的磁场定向控制(FOC)需要依赖编码器等位置传感器获取转子位置信息,这不仅增加了系统成本,还降低了可靠性。无传感器FOC技术通过算法估算转子位置和速度,成为当前研究的热点方向。
在实际工程应用中,我们常遇到两个核心挑战:
- 如何在中高速范围内准确估算转子位置
- 如何在无传感器条件下实现转速的快速、稳定控制
本文将详细介绍基于非线性扩张状态观测器(ESO)和线性自抗扰控制(LADRC)的解决方案。这种组合方案在我参与的多个工业项目中表现出色,特别是在动态响应和抗干扰性能方面,相比传统PI控制有显著提升。
2. 系统整体设计与参数选择
2.1 电机参数基准
我们选用袁磊教授《永磁同步电机控制技术》中的电机参数作为基准,具体参数如下:
| 参数名称 | 符号 | 数值 | 单位 |
|---|---|---|---|
| 定子电阻 | Rs | 0.958 | Ω |
| d轴电感 | Ld | 5.25 | mH |
| q轴电感 | Lq | 5.25 | mH |
| 永磁体磁链 | ψf | 0.1827 | Wb |
| 极对数 | p | 4 | - |
选择权威参考书中的参数有两个好处:一是参数经过验证,可靠性高;二是便于同行复现和比较结果。在实际项目中,建议先用这些标准参数进行算法验证,再移植到具体电机上。
2.2 控制系统架构
整个控制系统采用典型的双闭环结构,但有以下创新点:
- 位置观测环节:采用非线性ESO替代传统滑模观测器
- 速度环控制:用LADRC替代传统PI控制器
- 信号处理:对锁相环输出进行标幺化处理
系统框图如下(文字描述):
code复制[速度给定] → [LADRC控制器] → [电流环] → [PWM生成]
↑ ↓
[电机] ← [非线性ESO] ← [电压/电流采样]
3. 非线性ESO设计与实现
3.1 ESO基本原理
扩张状态观测器的核心思想是将系统的不确定性和外部扰动视为一个"总和扰动",并将其作为新的状态变量进行观测。对于PMSM系统,我们建立如下数学模型:
code复制ẋ1 = x2
ẋ2 = x3 + b·u
ẋ3 = f(x1,x2,x3)
y = x1
其中:
- x1:可测量输出(如电流)
- x2:系统状态(如反电动势)
- x3:总和扰动
- u:控制输入
- b:系统参数
3.2 非线性ESO实现
以下是基于Python的ESO实现代码(工程中常用C语言实现):
python复制class NonlinearESO:
def __init__(self, b0, beta01, beta02, beta03, gamma1, gamma2, gamma3):
self.b0 = b0 # 系统参数估计值
self.beta = [beta01, beta02, beta03] # 观测器增益
self.gamma = [gamma1, gamma2, gamma3] # 非线性参数
self.x_hat = [0, 0, 0] # 状态估计
def fal(self, e, alpha, delta):
"""非线性函数"""
if abs(e) <= delta:
return e / (delta ** (1 - alpha))
return np.sign(e) * abs(e) ** alpha
def update(self, y, u, dt=0.001):
"""更新状态估计"""
e = y - self.x_hat[0]
# 状态更新
self.x_hat[0] += dt * (self.x_hat[1] - self.beta[0] * self.fal(e, self.gamma[0], 0.1))
self.x_hat[1] += dt * (self.x_hat[2] - self.beta[1] * self.fal(e, self.gamma[1], 0.1) + self.b0*u)
self.x_hat[2] += dt * (-self.beta[2] * self.fal(e, self.gamma[2], 0.1))
return self.x_hat
3.3 参数整定经验
通过多个项目实践,我总结出以下参数整定经验:
- b0选择:取名义模型参数值,通常为1/b,b是系统输入增益
- beta参数:
- beta01 ≈ 3ω0
- beta02 ≈ 3ω0²
- beta03 ≈ ω0³
- 其中ω0为观测器带宽,一般取系统带宽的3-5倍
- gamma参数:
- 通常取gamma1=0.5, gamma2=0.25, gamma3=0.125
- delta取0.05-0.2之间
实际调试时,建议先用仿真确定大致范围,再在实物上微调。观测器带宽过高会导致对噪声敏感,过低则动态响应慢。
4. 锁相环设计与标幺化处理
4.1 改进锁相环设计
传统锁相环在转速变化较大时性能下降,我们采用以下改进措施:
- 在鉴相器前加入自适应滤波器
- 采用变带宽设计,根据转速自动调整
- 对输出进行标幺化处理
标幺化处理的实现方法:
python复制def normalize_pll_output(theta_est, omega_base):
"""标幺化处理"""
theta_norm = theta_est % (2*np.pi) # 归一化到0-2π
omega_norm = omega_est / omega_base # 转速标幺值
return theta_norm, omega_norm
4.2 锁相环参数选择
| 参数 | 选择原则 | 典型值 |
|---|---|---|
| 比例增益Kp | 决定动态响应 | 50-200 |
| 积分增益Ki | 决定稳态精度 | 1000-5000 |
| 截止频率 | 系统带宽的1/10 | 10-50Hz |
5. LADRC转速控制器设计
5.1 LADRC基本原理
线性自抗扰控制器将系统的不确定性视为总扰动,并通过ESO实时估计和补偿。其结构包含三个部分:
- 跟踪微分器(TD,本方案未采用)
- 线性ESO
- 状态反馈控制律
5.2 转速环LADRC实现
python复制class LADRC_Speed:
def __init__(self, b0, wc, wo, dt):
"""
b0: 系统参数估计
wc: 控制器带宽
wo: 观测器带宽
dt: 采样周期
"""
self.b0 = b0
self.wc = wc
self.wo = wo
self.dt = dt
# 控制器参数
self.kp = wc**2
self.kd = 2*wc
# ESO参数
self.beta1 = 3*wo
self.beta2 = 3*wo**2
self.beta3 = wo**3
self.z = [0, 0, 0] # ESO状态
def eso_update(self, y, u):
e = y - self.z[0]
self.z[0] += self.dt * (self.z[1] + self.beta1*e)
self.z[1] += self.dt * (self.z[2] + self.b0*u + self.beta2*e)
self.z[2] += self.dt * (self.beta3*e)
return self.z
def control(self, r, y):
# ESO更新
self.eso_update(y, 0) # 假设控制量在外部应用
# 控制律
u0 = self.kp*(r - self.z[0]) - self.kd*self.z[1]
u = (u0 - self.z[2]) / self.b0
return u
5.3 参数整定指南
- 带宽关系:通常取wo=3~5wc
- wc选择:从系统带宽的1/2开始,逐步提高
- b0选择:取系统增益的倒数,可通过阶跃响应测试估算
在实际调试中发现,LADRC对b0的准确性要求不高,有±30%的偏差仍能工作良好,这是相比传统PI的一大优势。
6. 系统实现与调试经验
6.1 硬件平台搭建
推荐使用以下硬件配置:
- 主控:STM32H743(高性能浮点运算)
- 驱动:三相IGBT模块(如Infineon的FP75R12KT4)
- 采样:16位ADC,采样率至少10kHz
- 保护电路:过流、过压、欠压保护必须完备
6.2 软件实现要点
-
中断优先级设置:
- PWM中断(控制算法):最高优先级
- ADC采样中断:次高优先级
- 通信接口:最低优先级
-
代码优化技巧:
c复制// 使用查表法加速三角函数计算
#define SIN_TABLE_SIZE 1024
const float sin_table[SIN_TABLE_SIZE];
float fast_sin(float theta) {
int index = (int)(theta * SIN_TABLE_SIZE / (2*PI)) % SIN_TABLE_SIZE;
return sin_table[index];
}
6.3 调试步骤建议
- 先开环运行,验证PWM和ADC工作正常
- 加入电流环,调试PI参数
- 加入ESO,在低速下验证位置观测
- 最后调试LADRC转速环
重要提示:务必在安全转速下(<10%额定转速)开始调试,逐步提高转速。建议准备紧急停止按钮。
7. 常见问题与解决方案
7.1 ESO观测误差大
现象:位置观测值与实际值偏差大,尤其在低速时
可能原因:
- ESO带宽过低
- 电机参数不准确
- 采样噪声大
解决方案:
- 逐步提高wo,观察效果
- 重新测量电机参数(Rs、Ld、Lq)
- 增加ADC采样滤波
7.2 转速波动大
现象:转速稳态时有明显波动
可能原因:
- LADRC带宽过高
- 机械共振
- 死区补偿不足
解决方案:
- 降低wc,增加阻尼
- 在转速反馈中加入陷波滤波器
- 检查并优化死区补偿参数
7.3 高速时失步
现象:转速超过某值后控制失效
可能原因:
- ESO带宽不足
- 电流环响应慢
- 电压饱和
解决方案:
- 提高ESO带宽(需注意噪声影响)
- 优化电流环PI参数
- 加入电压前馈补偿
8. 性能对比测试
我们在同一台电机上对比了三种控制方案:
| 指标 | 传统PI | 滑模观测器+PI | LADRC+非线性ESO |
|---|---|---|---|
| 转速响应时间(ms) | 120 | 90 | 60 |
| 负载突变恢复时间(ms) | 150 | 100 | 70 |
| 低速平稳性(rpm) | ±5 | ±3 | ±2 |
| 参数敏感性 | 高 | 中 | 低 |
测试条件:
- 电机:750W PMSM
- 负载:惯量0.02kg·m²
- 测试转速:1000rpm
从实测数据看,LADRC+非线性ESO方案在动态性能和鲁棒性方面表现最优,特别是在负载突变时,转速恢复时间缩短了50%以上。