matlab simulink电机foc观测器模型,采用龙贝格观测器+PLL进行无传感器控制,其利用 PMSM 数学模型构造观测器模型,根据输出的偏差反馈信号来修正状态变量。 当观测的电流实现与实际电流跟随时,利用估算的反电势进行pll计算转子位置信息。 龙伯格观测器采用线性控制策略代替了 SMO 的变结构控制,有效避免了系统抖振,动态响快、估算精度高的优点。
无传感器FOC玩得溜的老司机都知道,观测器才是整套算法的灵魂所在。今天咱们扒一扒这个龙贝格观测器+PLL的组合拳,看看它怎么在Simulink里把电机转子位置给"算"出来。
先甩个核心代码镇楼,这是观测器的核心迭代方程:
function [i_alpha_hat, i_beta_hat, e_alpha, e_beta] = Luenberger_Observer(u_alpha, u_beta, i_alpha, i_beta) persistent x_hat; if isempty(x_hat) x_hat = zeros(4,1); end Ld = 0.0012; % d轴电感 Lq = 0.0025; % q轴电感 Rs = 0.5; % 定子电阻 Ts = 1e-4; % 采样时间 A = [-Rs/Ld, 0, 1/Ld, 0; 0, -Rs/Lq, 0, 1/Lq; 0, 0, 0, -we; % we是电角速度估算值 0, 0, we, 0]; B = [1/Ld 0; 0 1/Lq; 0 0; 0 0]; C = [1 0 0 0; 0 1 0 0]; % 状态预测 x_hat = x_hat + Ts*(A*x_hat + B*[u_alpha; u_beta] + L*( [i_alpha; i_beta] - C*x_hat )); i_alpha_hat = x_hat(1); i_beta_hat = x_hat(2); e_alpha = x_hat(3); e_beta = x_hat(4); end这个观测器模型在玩一个"大家来找茬"的游戏——通过对比实际电流和估算电流的差值,反向修正反电动势的估算值。重点看那个增益矩阵L,这货相当于观测器的调音旋钮,调得好能让系统响应既快又稳。
matlab simulink电机foc观测器模型,采用龙贝格观测器+PLL进行无传感器控制,其利用 PMSM 数学模型构造观测器模型,根据输出的偏差反馈信号来修正状态变量。 当观测的电流实现与实际电流跟随时,利用估算的反电势进行pll计算转子位置信息。 龙伯格观测器采用线性控制策略代替了 SMO 的变结构控制,有效避免了系统抖振,动态响快、估算精度高的优点。
在Simulink里搭模型时,PLL模块的搭建有讲究。看这个相位锁相环的实现:
function [theta_est, we_est] = PLL_Estimator(e_alpha, e_beta) persistent integ; if isempty(integ) integ = 0; end Kp = 150; % 比例增益 Ki = 8000; % 积分增益 % 反正切计算位置误差 theta_error = atan2(e_beta, e_alpha) - integ; % PI调节更新转速估算 we_est = Kp * theta_error + Ki * integ; % 积分项累加 integ = integ + we_est * Ts; % 输出位置估算 theta_est = integ; end这里的骚操作在于用反电势的正交分量直接算角度差,比传统SMO的符号函数处理优雅多了。PI参数设置要注意带宽匹配,一般取1/5~1/10的开关频率,调的时候盯着阶跃响应波形,别让转速估算抖成帕金森就行。
实测中发现几个坑点:
- 电感参数不准会导致反电势估算出现相位偏差,这时候在PLL前加个低通滤波反而会坏事
- 低速时反电势信噪比太低,解决方法是在观测器里注入高频信号(不过这就不是纯无感方案了)
- 突加负载时位置估算容易失步,需要配合电流环做动态补偿
模型验证时推荐用Simulink的Real-Time模式,接个淘宝买的拆机电机实测。波形正常的话应该能看到估算位置(虚线)紧紧咬着编码器信号(实线),误差控制在±3度以内算合格。
最后说下这个方案的装逼姿势:当别人还在折腾滑模观测器的抖振问题时,你可以轻飘飘来句"用龙贝格+PLL,这些问题早解决了",然后深藏功与名。不过说实话,这套方案对参数敏感度还是有的,真要量产还得配合在线参数辨识才稳妥。