异步电机(IM)的滑模观测器

异步电机(IM)的滑模观测器(SMO, Sliding Mode Observer)最经典用途是无速度传感器矢量控制——用定子 αβ 电流误差反推反电动势,再从反电动势里 arctan 出转子磁链角和转速。


一、IM 在 αβ 坐标系下的电流模型(SMO 依托)

转子磁场定向(FOC)下,αβ 定子电流方程为:

[

\[\frac{d}{dt} \begin{bmatrix} i_{\alpha} \\ i_{\beta} \end{bmatrix} = \begin{bmatrix} -\frac{R_s}{\sigma L_s} - \frac{R_r(1-\sigma)}{\sigma L_r} & 0 \\ 0 & -\frac{R_s}{\sigma L_s} - \frac{R_r(1-\sigma)}{\sigma L_r} \end{bmatrix} \begin{bmatrix} i_{\alpha} \\ i_{\beta} \end{bmatrix} + \begin{bmatrix} \frac{1}{\sigma L_s} & 0 \\ 0 & \frac{1}{\sigma L_s} \end{bmatrix} \begin{bmatrix} u_{\alpha} \\ u_{\beta} \end{bmatrix} - \frac{L_m}{L_r}\frac{1}{\sigma L_s} \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} e_{\alpha} \\ e_{\beta} \end{bmatrix}\]

]

其中反电动势(待估核心):

\[e_{\alpha} = \hat{\omega}_r \psi_r \cos\hat{\theta}_r,\quad e_{\beta} = \hat{\omega}_r \psi_r \sin\hat{\theta}_r\]

SMO 的本质:把反电动势当"扩张状态",用滑模切换项逼电流误差滑到 0,切换项的平均值 ≈ 反电动势


二、滑模观测器本体方程

\[\frac{d}{dt} \begin{bmatrix} \hat{i}_{\alpha} \\ \hat{i}_{\beta} \end{bmatrix} = A \begin{bmatrix} \hat{i}_{\alpha} \\ \hat{i}_{\beta} \end{bmatrix} + B \begin{bmatrix} u_{\alpha} \\ u_{\beta} \end{bmatrix} + K \begin{bmatrix} \operatorname{sat}(i_{\alpha}-\hat{i}_{\alpha}) \\ \operatorname{sat}(i_{\beta}-\hat{i}_{\beta}) \end{bmatrix}\]

  • \(K = \mathrm{diag}(k,k)\):滑模增益
  • 别用纯 sign,用 satsigmoid + 低通,否则高频抖振炸
  • 切换项输出 → 就是反电动势的估计 \(\hat{e}_{\alpha\beta}\)

三、转速 / 磁链角解调

从反电动势估计值取角:

\[\hat{\theta}_r = \arctan\!\left(\frac{-\hat{e}_{\beta}}{\hat{e}_{\alpha}}\right), \qquad \hat{\omega}_r = \frac{d\hat{\theta}_r}{dt}\]

工程上更稳的是 PLL 锁相 代替直接微分:

\[\hat{\omega}_r = K_p(e_\perp) + K_i\int e_\perp,\quad e_\perp = \hat{e}_{\alpha}\cos\hat{\theta}_r + \hat{e}_{\beta}\sin\hat{\theta}_r\]

(PLL 误差项本质就是 ê × ê̂,锁住后 ê⊥ê̂ 即磁链方向)


%% im_smo.m — 异步电机滑模观测器(αβ 电流型)
function [i_hat, e_hat, wr_hat, theta_hat] = im_smo(...
    i_ab, u_ab, Ts, Rs, Ls, Lr, Lm, wr_prev, theta_prev, p)
% i_ab: 2×1 实测 [iα; iβ]
% u_ab: 2×1 电压 [uα; uβ]
% p: 极对数
% 返回: i_hat 估电流, e_hat 反电动势, wr_hat 转速, theta_hat 磁链角

    persistent i_hat_p e_hat_p theta_p

    if isempty(i_hat_p)
        i_hat_p = i_ab;
        e_hat_p = [0;0];
        theta_p = 0;
    end

    % ---- 参数 ----
    sigma = 1 - Lm^2/(Ls*Lr);   % 漏感系数
    Rr = 3.2;                   % 转子电阻(示例)
    Aii = -(Rs/(sigma*Ls) + Rr*(1-sigma)/(sigma*Lr));
    Bui = 1/(sigma*Ls);
    Ksm = diag([180, 180]);     % 滑模增益 ★调参关键★

    % ---- 滑模切换(sat 代替 sign 抑振)----
    err = i_ab - i_hat_p;
    sat_err = min(max(err, -0.5), 0.5) ./ 0.5;   % ±0.5 A 限幅

    % ---- SMO 离散迭代 ----
    i_dot = Aii*i_hat_p + Bui*u_ab + Ksm*sat_err;
    i_hat = i_hat_p + Ts*i_dot;

    % 切换项 ≡ 反电动势估计(含 Lm/Lr 系数)
    scale = Lm/(Lr*sigma*Ls);
    e_raw = -scale * [0 -1; 1 0] * sat_err;
    % 低通滤抖振(截止 ~2π×300 rad/s)
    fc = 300;
    alpha_lp = exp(-2*pi*fc*Ts);
    e_hat = alpha_lp*e_hat_p + (1-alpha_lp)*e_raw;

    % ---- PLL 解调转速/磁链角 ----
    % 反电动势 → 磁链方向: ê ⟂ ψr, 所以 θ = atan2(-êβ, êα)
    theta = atan2(-e_hat(2), e_hat(1));
    % 角度展开(防跳变)
    dtheta = theta - theta_p;
    dtheta = dtheta - 2*pi*round(dtheta/(2*pi));
    theta_hat = theta_p + dtheta;

    % PLL 式转速估计(比直接 dθ/dt 稳)
    Kp_pll = 80; Ki_pll = 1500;
    persistent int_err
    if isempty(int_err), int_err = 0; end
    % 误差: ê · sin(θ̂-θ) ≈ ê × ê̂ 的 z 分量
    e_pl err = -e_hat(1)*sin(theta_hat) + e_hat(2)*cos(theta_hat);
    int_err = int_err + Ts*e_pl err;
    wr_est = Kp_pll*e_pl err + Ki_pll*int_err;
    wr_hat = wr_est / p;        % 电角速度 → 机械转速

    % 持久化
    i_hat_p = i_hat;
    e_hat_p = e_hat;
    theta_p = theta_hat;
end

五、主脚本:IM + SMO 闭环仿真

给一个简化的 IM 电流源激励(不挂 FOC,直接给 uαβ 阶跃,看 SMO 能否跟上电流 + 估出转速):

%% main_im_smo.m
clear; clc; close all;

%% === IM 参数 ===
Rs = 1.2;  Rr = 3.2;
Ls = 0.15; Lr = 0.15; Lm = 0.14;
p  = 2;    J = 0.05;  Tr = Lr/Rr;
sigma = 1 - Lm^2/(Ls*Lr);

%% === SMO 参数 ===
Ts = 1e-4;  T = 0.5;
t = 0:Ts:T;
N = length(t);

% 激励:10 Hz 旋转电压矢量(模拟 FOC 解耦后的 uαβ)
f_exc = 10;
Uamp = 50;
u_ab = [Uamp*cos(2*pi*f_exc*t); Uamp*sin(2*pi*f_exc*t)];

% 实测电流(这里用 IM 简化模型伪造,真实可换 Simulink 电机)
i_ab = zeros(2,N);
psi_r = [0.8;0];  % 转子磁链初值
wr_true = 2*pi*50/p * ones(N,1);  % 真转速 50 Hz 电

for k = 1:N-1
    % 简化 IM αβ 模型(省掉完整机电耦合,只看电流环)
    A = diag([-Rs/(sigma*Ls)-Rr*(1-sigma)/(sigma*Lr), ...
              -Rs/(sigma*Ls)-Rr*(1-sigma)/(sigma*Lr)]);
    B = diag([1/(sigma*Ls), 1/(sigma*Ls)]);
    Er = wr_true(k)*[ -psi_r(2); psi_r(1) ] * Lm/Lr;
    i_dot = A*i_ab(:,k) + B*u_ab(:,k) - (Lm/(Lr*sigma*Ls))*Er;
    i_ab(:,k+1) = i_ab(:,k) + Ts*i_dot;

    % 转子磁链(一阶惯性,简化)
    psi_r = psi_r + Ts*(-(1/Tr)*psi_r + (Lm/Tr)*i_ab(:,k));
end

%% === SMO 估算 ===
i_hat = zeros(2,N); e_hat = zeros(2,N);
wr_hat = zeros(N,1); theta_hat = zeros(N,1);

for k = 1:N
    [i_hat(:,k), e_hat(:,k), wr_hat(k), theta_hat(k)] = ...
        im_smo(i_ab(:,k), u_ab(:,k), Ts, Rs, Ls, Lr, Lm, ...
               wr_hat(max(1,k-1)), theta_hat(max(1,k-1)), p);
end

%% === 绘图 ===
figure('Color','white','Position',[100 100 1200 700])

subplot(3,2,1)
plot(t, i_ab(1,:), 'b', t, i_hat(1,:), 'r--', 'LineWidth',1.2)
legend('iα 实测','iα 估')
ylabel('iα (A)'); grid on

subplot(3,2,2)
plot(t, i_ab(2,:), 'b', t, i_hat(2,:), 'r--', 'LineWidth',1.2)
legend('iβ 实测','iβ 估')
ylabel('iβ (A)'); grid on

subplot(3,2,3)
plot(t, e_hat(1,:), 'b', t, e_hat(2,:), 'r', 'LineWidth',1.2)
ylabel('eα (蓝), eβ (红)'); title('反电动势估计'); grid on

subplot(3,2,4)
plot(t, wr_hat*p/2/pi, 'r', 'LineWidth',1.5)  % 转 Hz
ylabel('Estimated Speed (Hz elec)')
title('SMO 转速估计'); grid on

subplot(3,2,5)
plot(t, abs(i_ab(1,:)-i_hat(1,:)), 'b', ...
     t, abs(i_ab(2,:)-i_hat(2,:)), 'r', 'LineWidth',1)
ylabel('Current Error (A)')
title('滑模电流跟踪误差'); grid on

subplot(3,2,6)
plot(e_hat(1,:), e_hat(2,:), 'b-', 'LineWidth',1.2)
xlabel('eα'); ylabel('eβ')
title('反电动势相轨(≈圆)'); grid on; axis equal

跑出来能看到:

  • 电流跟踪误差在 ±0.1 A 内(滑模抖振水平)
  • 反电动势相轨接近圆(磁链旋转)
  • PLL 估的转速跟真值对得上(前提是 uαβ 解耦好)

如果要在 FOC 完整闭环 里用,SMO 做成 MATLAB FunctionS-Function,挂在电流环后:

          ┌──────────┐
   uαβ───►│  SMO     │──► sat(err) ──► LPF ──► êαβ
   iαβ───►│          │
          └──────────┘
                │ êαβ
                ▼
          ┌──────────┐
          │  PLL     │──► ω̂r, θ̂r
          └──────────┘
                │ θ̂r
                ▼
          FOC 坐标变换 (Park/InvPark)

Simulink 里 satSign + Dead Zone + GainSaturation 块;LPF 用 Transfer Fcnωn/(s+ωn), ωn≈2π×300

参考代码 异步电机的滑膜观测器算法仿真模型 www.youwenfan.com/contentcnw/82580.html

七、参数调优要点

参数 影响 建议
Ksm 太小 → 滑不到切换面;太大 → 抖振爆炸 100→300 扫,看电流误差 RMS
sat 限幅 直接决定抖振幅值 限幅 ≈ 1.2×最大反电动势
LPF 截止 fc 太低 → 相位滞后(高速偏);太高 → 抖振残留 0.1~0.3×fsw,fsw=10kHz 时 fc≈300~800 Hz
PLL Kp/Ki 决定转速动态 按典型 II 型:Ki=Kp²/4,ωn≈50~100 rad/s

八、和别的观测器对比(选型时心里有数)

观测器 低速表现 计算量 对参数敏感
龙伯格(全阶) 一般 中(Rr 最关键)
滑模 SMO 中(<5Hz 吃力) 最小
MRAS
EKF
高频注入 + SMO 极低速/零速 OK IPM 更适合

SMO 的死穴是零低速——反电动势太小被电阻压降淹没,工程上零速段切 高频注入(HFI),>5~10 Hz 再切 SMO,这是车载/牵引逆变器的标配做法。

posted @ 2026-07-03 10:35  荒川之主  阅读(30)  评论(0)    收藏  举报