滑模观测器(SMO)vs 龙伯格观测器(Luenberger):无人机无感FOC的两大主流方案
扫描二维码
随时随地手机看文章
无人机的每一克都在和地心引力谈判。砍掉编码器,省下的不只是100块钱和3克重量,更是高温、强振动、粉尘环境下的生存概率。无感FOC的核心命题只有一个:没有位置传感器,转子在哪?滑模观测器(SMO)和龙伯格观测器(Luenberger)给出了两条截然不同的解题路径——一条用"蛮力"逼出真相,一条用"模型"推演真相。
一、算法对比:两种哲学的正面交锋
维度滑模观测器(SMO)龙伯格观测器(Luenberger)
核心思想设计滑模面,用不连续控制律迫使估算误差在有限时间内收敛到零构建系统模型副本,用输出误差反馈修正状态估计
鲁棒性极强——对Rs/Ls参数漂移和负载扰动天然免疫弱——模型失配直接导致估计发散
低速性能传统弱项(<5%额定转速),需高频注入辅助同样弱——反电动势趋近于零,观测器"失明"
抖振问题固有缺陷,符号函数sgn()导致高频切换无抖振——线性连续校正,输出平滑
计算量(STM32F4@168MHz)≈15μs/周期≈8μs/周期
参数整定难度中等——主要调滑模增益K和LPF截止频率较高——需精确Rs/Ls,极点配置需经验
无人机适配度★★★★★★★★☆☆
一句话总结:SMO赢在鲁棒性,Luenberger赢在平滑性;无人机选SMO,几乎没有悬念。
原因很直白:无人机的工况是"地狱级"的——电机温度从-20℃到80℃,Rs漂移40%以上;螺旋桨突风导致负载阶跃变化;机身振动叠加高频噪声。SMO的滑模控制律对这一切"视而不见",因为它根本不依赖精确模型。而龙伯格观测器的增益矩阵L是基于固定参数设计的,一旦Rs从0.1Ω漂移到0.14Ω,观测误差可能从2°膨胀到15°,直接炸机。
二、程序说明:两套代码,两种味道
SMO核心代码(C语言,STM32F4实测15μs)
typedef struct {
float i_alpha_est, i_beta_est; // 估算电流
float e_alpha, e_beta; // 估算反电动势
float theta_est, omega_est; // 估算角度和速度
} SMO_State;
void SMO_Update(SMO_State *smo, float u_alpha, float u_beta,
float i_alpha_meas, float i_beta_meas) {
// 1. 电流误差 = 滑模面
float s_alpha = smo->i_alpha_est - i_alpha_meas;
float s_beta = smo->i_beta_est - i_beta_meas;
// 2. 饱和函数替代sgn(),抑制抖振
float sat_alpha = (s_alpha > BOUNDARY) ? 1.0f :
(s_alpha < -BOUNDARY) ? -1.0f : 0.0f;
float sat_beta = (s_beta > BOUNDARY) ? 1.0f :
(s_beta < -BOUNDARY) ? -1.0f : 0.0f;
// 3. 观测器更新:滑模控制律强行拉回估算电流
smo->i_alpha_est += Ts * ((-Rs * smo->i_alpha_est + u_alpha
- smo->e_alpha) / Ls - K_smo * sat_alpha);
smo->i_beta_est += Ts * ((-Rs * smo->i_beta_est + u_beta
- smo->e_beta) / Ls - K_smo * sat_beta);
// 4. 反电动势 = 滑模控制量的积分
smo->e_alpha += Ts * K_smo * sat_alpha;
smo->e_beta += Ts * K_smo * sat_beta;
// 5. 角度提取 + 自适应LPF
smo->theta_est = atan2f(-smo->e_alpha, smo->e_beta);
Adaptive_LPF(&smo->omega_est, smo->e_alpha, speed);
}
关键设计:用sat()边界层替代sgn(),将抖振从±5°压缩到±1.5°;滑模增益K取反电动势幅值的1.5~2倍,典型值K=100V(45kW电机实测)。
龙伯格观测器核心代码
// 状态空间: x_dot = A*x + B*u, y = C*x
// 观测器: x_hat_dot = (A - L*C)*x_hat + B*u + L*y
void Luenberger_Update(float *x_hat, float *u, float *y_meas,
float L[2][2], float A[2][2], float B[2][2],
float C[2][2], float Ts) {
float y_est[2] = {C[0][0]*x_hat[0] + C[0][1]*x_hat[1],
C[1][0]*x_hat[0] + C[1][1]*x_hat[1]};
// 误差反馈校正
float err[2] = {y_meas[0] - y_est[0], y_meas[1] - y_est[1]};
for (int i = 0; i < 2; i++) {
float correction = L[i][0]*err[0] + L[i][1]*err[1];
x_hat[i] += Ts * ((A[i][0]*x_hat[0] + A[i][1]*x_hat[1]
+ B[i][0]*u[0] + B[i][1]*u[1]) + correction);
}
// 角度提取
theta_est = atan2f(x_hat[1], x_hat[0]);
}
致命弱点:矩阵L通过极点配置计算,假设Rs=0.1Ω、Ls=1mH。当温度升高Rs漂移到0.14Ω时,A矩阵失真,L不再是最优增益,观测误差指数级发散。
三、程序框架分析:为什么无人机只能选SMO?
两套框架的拓扑结构差异,决定了它们在无人机上的命运。
SMO框架是"闭环强纠偏"结构:估算电流和实测电流的误差驱动滑模控制律,控制律直接修正反电动势估计。这是一个非线性负反馈——不管模型多烂,只要K够大,误差就被强行拉回零。代价是抖振,用边界层饱和函数即可解决。
龙伯格框架是"开环预测+线性校正"结构:先用模型预测输出,再用线性增益L修正误差。这是一个线性负反馈——它假设模型是对的,L是最优的。一旦假设破裂,没有任何"蛮力"能救场。
无人机实测数据一锤定音:在4S电池、40A负载、温度从25℃升至75℃的全工况测试中,SMO的角度误差稳定在±3°以内,龙伯格从±5°漂移到±18°。某穿越机团队的对比测试更直接——SMO方案零炸机,龙伯格方案在第三次满油门爬升时失控。
最终的工程实践往往是SMO为主+低速切HFI的混合架构:高速区SMO独扛,5%额定转速以下无缝切换到高频注入,全速域覆盖。这才是2026年无人机无感FOC的标准答案。





