4. 基于模型参考自适应系统的异步电机无速度传感器控制
任务目标
构建基于模型参考自适应系统(MRAS)的异步电机无速度传感器矢量控制系统。以转子磁链电压模型为参考模型,电流模型为可调模型,通过自适应律在线估计转子转速,并将估计转速用于磁场定向控制,实现无速度传感器运行。
系统结构与原理
MRAS转速估计的核心思想:利用电压模型(不含转速项)计算参考转子磁链,利用电流模型(含转速项)计算可调转子磁链,两者误差经自适应律收敛后输出转速估计值。电压模型在低速区存在纯积分问题,本案例采用一阶低通滤波器替代纯积分并做幅值补偿,保证估计精度。
核心实现
以下代码实现MRAS转速估计核心算法及无速度传感器矢量控制主循环。采用C语言结构,可直接嵌入DSP或MCU工程。
// mras_sensorless.c - 基于MRAS的异步电机无速度传感器控制
#include <math.h>
// 电机参数(以2.2kW异步电机为例)
#define RS 2.68 // 定子电阻 Ω
#define RR 2.13 // 转子电阻 Ω
#define LS 0.283 // 定子电感 H
#define LR 0.283 // 转子电感 H
#define LM 0.269 // 互感 H
#define NP 2 // 极对数
#define TS 1e-4 // 采样周期 100μs
// 派生参数
#define SIGMA (1.0 - LM*LM/(LS*LR)) // 漏感系数
#define TR (LR/RR) // 转子时间常数
#define K_P (LM/TR) // 电流模型增益
// MRAS自适应PI参数
#define KP_W 0.8
#define KI_W 20.0
// 低通滤波器截止频率(rad/s) - 替代纯积分
#define WC 30.0
typedef struct {
// 状态变量
float is_alpha, is_beta; // 定子电流 αβ轴
float us_alpha, us_beta; // 定子电压 αβ轴
float psi_r_alpha_ref, psi_r_beta_ref; // 参考磁链(电压模型)
float psi_r_alpha_adj, psi_r_beta_adj; // 可调磁链(电流模型)
float psi_r_alpha_lpf, psi_r_beta_lpf; // 低通滤波后磁链
float emf_alpha, emf_beta; // 反电动势(电压模型输入)
float omega_hat; // 转速估计值
float omega_hat_int; // 自适应积分项
float error; // 磁链误差
} MRAS_Handle;
// 初始化
void MRAS_Init(MRAS_Handle *h) {
h->is_alpha = h->is_beta = 0;
h->us_alpha = h->us_beta = 0;
h->psi_r_alpha_ref = h->psi_r_beta_ref = 0;
h->psi_r_alpha_adj = h->psi_r_beta_adj = 0;
h->psi_r_alpha_lpf = h->psi_r_beta_lpf = 0;
h->emf_alpha = h->emf_beta = 0;
h->omega_hat = 0;
h->omega_hat_int = 0;
h->error = 0;
}
// MRAS转速估计核心函数 - 每个采样周期调用一次
void MRAS_Update(MRAS_Handle *h, float is_a, float is_b, float is_c,
float us_a, float us_b, float us_c) {
// === 1. Clarke变换: abc → αβ ===
h->is_alpha = (2.0f/3.0f) * (is_a - 0.5f*is_b - 0.5f*is_c);
h->is_beta = (2.0f/3.0f) * (0.866f*is_b - 0.866f*is_c);
h->us_alpha = (2.0f/3.0f) * (us_a - 0.5f*us_b - 0.5f*us_c);
h->us_beta = (2.0f/3.0f) * (0.866f*us_b - 0.866f*us_c);
// === 2. 电压模型(参考模型) - 带低通滤波的磁链估计 ===
// 反电动势: e = u_s - R_s * i_s
h->emf_alpha = h->us_alpha - RS * h->is_alpha;
h->emf_beta = h->us_beta - RS * h->is_beta;
// 一阶低通滤波替代纯积分: ψ = e / (s + ωc)
float alpha_lpf = WC * TS;
h->psi_r_alpha_lpf += alpha_lpf * (h->emf_alpha - h->psi_r_alpha_lpf);
h->psi_r_beta_lpf += alpha_lpf * (h->emf_beta - h->psi_r_beta_lpf);
// 幅值补偿: 乘以 sqrt(1 + (ω/ωc)^2) 近似, 此处用估计转速
float w_est = h->omega_hat * NP;
float comp = sqrtf(1.0f + (w_est/WC)*(w_est/WC));
h->psi_r_alpha_ref = h->psi_r_alpha_lpf * comp;
h->psi_r_beta_ref = h->psi_r_beta_lpf * comp;
// === 3. 电流模型(可调模型) ===
// dψ_r/dt = (LM/Tr)*i_s - (1/Tr)*ψ_r + j*ω_r*ψ_r
float inv_tr = 1.0f / TR;
float w_r = h->omega_hat * NP; // 电角速度
float dpsi_alpha = K_P * h->is_alpha - inv_tr * h->psi_r_alpha_adj - w_r * h->psi_r_beta_adj;
float dpsi_beta = K_P * h->is_beta - inv_tr * h->psi_r_beta_adj + w_r * h->psi_r_alpha_adj;
h->psi_r_alpha_adj += TS * dpsi_alpha;
h->psi_r_beta_adj += TS * dpsi_beta;
// === 4. 自适应律 - PI调节器 ===
// 误差: ε = ψ_rβ_ref * ψ_rα_adj - ψ_rα_ref * ψ_rβ_adj
h->error = h->psi_r_beta_ref * h->psi_r_alpha_adj - h->psi_r_alpha_ref * h->psi_r_beta_adj;
// PI调节
float delta_w = KP_W * h->error;
h->omega_hat_int += KI_W * TS * h->error;
h->omega_hat = delta_w + h->omega_hat_int;
// 限幅
if (h->omega_hat > 300.0f) h->omega_hat = 300.0f;
if (h->omega_hat < -300.0f) h->omega_hat = -300.0f;
}
// 磁场定向角计算(用于Park变换)
float MRAS_GetTheta(MRAS_Handle *h) {
return atan2f(h->psi_r_beta_adj, h->psi_r_alpha_adj);
}
// 主控制循环示例
void ControlLoop(MRAS_Handle *mras, float is_a, float is_b, float is_c,
float us_a, float us_b, float us_c, float speed_ref) {
// 1. MRAS转速估计
MRAS_Update(mras, is_a, is_b, is_c, us_a, us_b, us_c);
// 2. 转速PI控制(使用估计转速)
float speed_error = speed_ref - mras->omega_hat;
// ... 转速PI输出 i_sq_ref ...
// 3. 磁场定向角
float theta = MRAS_GetTheta(mras);
// 4. 电流PI控制、Park变换、SVPWM调制
// ... 标准FOC流程 ...
}
运行与验证
环境依赖:需要支持C99的编译器(如GCC、CCS、Keil),无额外第三方库。若在MATLAB/Simulink中验证,可将上述C代码封装为S-Function或Embedded MATLAB Function。
验证方法:
- 将上述代码集成到FOC控制主循环中,采样周期设为100μs;
- 给定转速指令(如1000rpm),电机带载启动;
- 通过调试器或DAC观测以下信号:
通过条件:
- 估计转速ω̂稳态误差小于±5rpm(额定转速1500rpm时);
- 磁场定向角θ连续无跳变,磁链幅值稳定在额定值附近;
- 电机在100rpm以上能稳定运行,突加负载时转速跌落小于50rpm且2s内恢复;
- 对比实际编码器反馈,估计转速与实际转速动态跟随误差小于3%。
预期输出(给定输入:额定励磁电流4A,转速指令1000rpm):
稳态时: ω̂ ≈ 104.7 rad/s (1000rpm)
磁链幅值: |ψ_r| ≈ 0.95 Wb (额定值)
定向角θ: 连续递增, 频率约16.7Hz
常见问题:低速(<50rpm)时电压模型信噪比低导致估计不准,属正常现象;可通过提高低通截止频率或切换至电流模型开环运行改善。启动前需预励磁建立磁链,否则MRAS无法收敛。