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

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


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

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

在这里插入图片描述

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

eα=ω^rψrcos⁡θ^r,eβ=ω^rψrsin⁡θ^re_{\alpha} = \hat{\omega}_r \psi_r \cos\hat{\theta}_r,\quad e_{\beta} = \hat{\omega}_r \psi_r \sin\hat{\theta}_reα=ω^rψrcosθ^r,eβ=ω^rψrsinθ^r

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


二、滑模观测器本体方程

在这里插入图片描述

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

三、转速 / 磁链角解调

从反电动势估计值取角:

θ^r=arctan⁡ ⁣(−e^βe^α),ω^r=dθ^rdt\hat{\theta}_r = \arctan\!\left(\frac{-\hat{e}_{\beta}}{\hat{e}_{\alpha}}\right), \qquad \hat{\omega}_r = \frac{d\hat{\theta}_r}{dt}θ^r=arctan(e^αe^β),ω^r=dtdθ^r

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

ω^r=Kp(e⊥)+Ki∫e⊥,e⊥=e^αcos⁡θ^r+e^βsin⁡θ^r\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ω^r=Kp(e)+Kie,e=e^αcosθ^r+e^βsinθ^r

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


四、MATLAB 函数版 SMO(可嵌 Simulink MATLAB Function)

%% 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αβ 解耦好)

六、Simulink 版本(工程更常用)

如果要在 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/contentcsw/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极低速/零速 OKIPM 更适合

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值