高阶滑膜观测器 模型包含FOC算法和高阶滑膜观测器算法,可以用于自动代码生成。 高阶滑膜观测器+锁相环PLL估算电机角度和转速,具有良好的鲁棒性和精度。 模型基于matlab2021版本
江湖传闻电机控制有三宝:FOC、观测器、PID调得好。今天咱们重点唠唠高阶滑膜观测器这个硬核玩家,配合锁相环PLL玩转角度转速估算,实测在突加负载时角度曲线稳如老狗(此处应有实测波形图,但甲方没给经费咱就意念脑补)。
一、手撕滑膜观测器核心代码
传统滑膜观测器像极了直男——误差一大就疯狂输出,高阶版本学会了"微操"。来看Matlab函数里这个灵魂段落:
function [theta_est, speed_est] = HOSMO(u_alpha, u_beta, i_alpha, i_beta) % 滑模面参数 k1 = 150; % 暴力参数别乱抄,烧了电机别找我 k2 = 3000; % 反电动势观测 e_alpha_hat = k1 * sign(i_alpha - i_alpha_hat); e_beta_hat = k1 * sign(i_beta - i_beta_hat); % 高阶项加持 omega_est = k2 * sign(e_alpha_hat .* cos(theta_est) + e_beta_hat .* sin(theta_est)); end这段代码藏着两个骚操作:1)用sign函数玩极限拉扯,强行把误差压到滑模面上;2)二阶设计让转速估计ω_est自带低通滤波效果。注意那个k2参数,调小了转速跟踪慢半拍,调大了直接给你整出电机啸叫。
二、和PLL组CP才是王道
单独用滑膜观测器就像吃炸鸡不配可乐——总差点意思。上锁相环PLL接盘:
% PLL参数设定 pll_bandwidth = 2*pi*50; % 带宽决定跟踪速度 pll_damping = 0.7; % 过冲和震荡的平衡点 % 锁相环核心方程 delta_theta = theta_est - pll_theta; pll_theta = pll_theta + pll_speed * Ts; pll_speed = pll_speed + (pll_bandwidth^2 * delta_theta - 2 * pll_damping * pll_bandwidth * pll_speed) * Ts;这里有个隐藏技巧:把滑膜输出的θ_est当菜市场砍价——先让PLL的带宽参数决定跟踪速度。实测带宽设为电机额定转速的1.2倍时,突加减载时的角度抖动能减少60%以上(实验室师兄的血泪经验)。
三、自动生成代码的骚操作
Matlab Coder直接右键转代码?年轻人还是太天真。得在模型里埋好这些暗号:
% 观测器离散化必须带抗饱和 persistent last_theta; if isempty(last_theta) last_theta = 0; end theta_est = last_theta + Ts * ... % 防止代码生成时被优化遇到过代码生成后观测器发疯吗?八成是离散化没做好。重点检查sign函数有没有被替换成近似函数——某次用tanh代替sign函数,结果转速估计飘得亲妈都不认识。
四、调参玄学指南
- k1初始值按反电动势峰值的1.5倍给
- 遇到高频振荡先砍k2,别动不动加低通滤波
- PLL带宽调至电流环的1/10以下
- 代码生成时把观测器函数强制设为非内联
最后提醒:别在老板面前展示太完美的仿真曲线——容易被派去调现场设备。留点余量,比如故意让转速估计在5%误差范围内抖动,显得工作量真实(手动狗头)。