foc滑膜观测器(SMO+PLL)matlab模型,仿真里面是闭环启动的效果,当然这是仿真,应用到硬件肯定要加开环启动,目前已经在硬件中实现了,效果还不错,现在出这个模型,matlab 的版本是2014以上 滑膜加锁相环 滑膜加pll

最近在搞无感FOC的滑膜观测器方案,发现SMO+PLL的结构在低速段表现挺有意思。这个组合有点像玩跷跷板——滑膜负责怼噪声,锁相环负责稳住相位。手头这个Matlab模型用的是2016a版本写的,闭环启动仿真效果能跑到50rpm不抖,不过真上硬件还得改开环启动策略。

先上段核心代码:

% SMO部分
function [e_alpha, e_beta] = smo_core(v_alpha, v_beta, i_alpha, i_beta)
    persistent z_alpha_prev z_beta_prev;
    if isempty(z_alpha_prev)
        z_alpha_prev = 0; z_beta_prev = 0;
    end
    
    k = 500; % 滑膜增益
    Rs = 2.3; % 定子电阻
    Ls = 0.005; % 电感
    
    e_alpha = v_alpha - Rs*i_alpha - Ls*(i_alpha - z_alpha_prev)/Ts;
    e_beta = v_beta - Rs*i_beta - Ls*(i_beta - z_beta_prev)/Ts;
    
    % 符号函数处理
    z_alpha = k * sign(e_alpha);
    z_beta = k * sign(e_beta);
    
    z_alpha_prev = z_alpha;
    z_beta_prev = z_beta;
end

这段滑膜观测器的精髓在符号函数处理,用k值硬刚反电动势的噪声。不过实际调试时会发现k值太大容易引发高频振荡,太小又跟踪不上。有个野路子——把k设成速度的函数,低速时给个1.5倍系数,高速回归正常值。

foc滑膜观测器(SMO+PLL)matlab模型,仿真里面是闭环启动的效果,当然这是仿真,应用到硬件肯定要加开环启动,目前已经在硬件中实现了,效果还不错,现在出这个模型,matlab 的版本是2014以上 滑膜加锁相环 滑膜加pll

锁相环部分更讲究相位补偿:

% PLL角度跟踪
function [theta_est, omega_est] = pll_tracking(e_alpha, e_beta)
    persistent theta_prev omega_prev;
    if isempty(theta_prev)
        theta_prev = 0; omega_prev = 0; 
    end
    
    kp_pll = 300;   % 比例系数
    ki_pll = 9000;  % 积分系数
    
    theta_error = atan2(e_beta, e_alpha) - theta_prev;
    omega_est = omega_prev + kp_pll * theta_error;
    theta_est = theta_prev + omega_est*Ts + ki_pll*theta_error*Ts;
    
    theta_prev = theta_est;
    omega_prev = omega_est;
end

这个PLL实现用了类二阶环结构,kp负责动态响应,ki抑制静差。注意atan2函数的相位跳变问题,硬件上要加个相位补偿器,不然在过零点会抽搐。仿真时把ki_pll设得比实际大3倍,因为真实环境有延迟补偿。

仿真模型里电机启动阶段直接闭环容易崩,所以硬件上加了个开环强拖策略——前0.2秒用固定频率斜坡给磁链,等反电动势起来再切滑膜观测。实测从零速拉到100rpm只要0.4秒,比纯闭环启动稳定多了。

最后分享个调参技巧:把观测器输出的反电动势波形放大到满屏,调整k值直到波形边缘出现均匀的"毛刺",这种状态说明滑膜增益刚好卡在临界点。再配合PLL的带宽调整,能让角度估计误差控制在±5度以内。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐