4. 基于模型参考自适应系统的异步电机无速度传感器控制

任务目标

构建基于模型参考自适应系统(MRAS)的异步电机无速度传感器矢量控制系统。以转子磁链电压模型为参考模型,电流模型为可调模型,通过自适应律在线估计转子转速,并将估计转速用于磁场定向控制,实现无速度传感器运行。

系统结构与原理

MRAS转速估计的核心思想:利用电压模型(不含转速项)计算参考转子磁链,利用电流模型(含转速项)计算可调转子磁链,两者误差经自适应律收敛后输出转速估计值。电压模型在低速区存在纯积分问题,本案例采用一阶低通滤波器替代纯积分并做幅值补偿,保证估计精度。

异步 电机 逆变器 +SVPWM 电流 采样 3s/2s 2s/2r MRAS转速估计 电压模型(参考) 电流模型(可调) PI自适应律 → ω̂ 转速PI控制器 (使用ω̂反馈) i_sαβ i_sq反馈 ω̂ i_sq* u_sαβ* ω*

核心实现

以下代码实现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。

验证方法:

  1. 将上述代码集成到FOC控制主循环中,采样周期设为100μs;
  2. 给定转速指令(如1000rpm),电机带载启动;
  3. 通过调试器或DAC观测以下信号:

通过条件:

  • 估计转速ω̂稳态误差小于±5rpm(额定转速1500rpm时);
  • 磁场定向角θ连续无跳变,磁链幅值稳定在额定值附近;
  • 电机在100rpm以上能稳定运行,突加负载时转速跌落小于50rpm且2s内恢复;
  • 对比实际编码器反馈,估计转速与实际转速动态跟随误差小于3%。

预期输出(给定输入:额定励磁电流4A,转速指令1000rpm):

稳态时: ω̂ ≈ 104.7 rad/s (1000rpm)
磁链幅值: |ψ_r| ≈ 0.95 Wb (额定值)
定向角θ: 连续递增, 频率约16.7Hz

常见问题:低速(<50rpm)时电压模型信噪比低导致估计不准,属正常现象;可通过提高低通截止频率或切换至电流模型开环运行改善。启动前需预励磁建立磁链,否则MRAS无法收敛。