
STM32电机库龙伯格观测器:开源无感FOC全功能版本(带前馈控制、弱磁控制及三段
式启动)
这个开源无感FOC项目把龙伯格观测器玩出了花,三电阻采样方案配合STM32的硬件特性直接起飞。
咱们先从观测器的核心代码扒起,看看怎么在无感状态下把电机转子位置算得明明白白。
先看观测器结构体定义,这堆增益参数看着头疼:
```c
typedef struct {
float angle; // 估算角度
float speed; // 转速估算值
float gain_b; // 反电动势增益
float gain_k; // 观测器增益系数
float i_alpha_prev; // 前次α轴电流
float i_beta_prev; // 前次β轴电流
} LuenbergerObserver;
```
重点在观测器迭代函数里,这波操作直接把电机模型和实际测量值给刚上了:
```c
void luenberger_update(LuenbergerObserver* obs, float i_alpha, float i_beta, float v
_alpha, float v_beta) {
// 反电动势计算
float e_alpha = v_alpha - R * i_alpha + Ld * (i_alpha - obs->i_alpha_prev) / DT;
float e_beta = v_beta - R * i_beta + Lq * (i_beta - obs->i_beta_prev) / DT;
// 观测器修正项
float correction = obs->gain_k * (e_beta * cos(obs->angle) - e_alpha * sin(obs->
angle));
// 状态更新
obs->speed += DT * correction; // 转速积分
obs->angle += DT * obs->speed; // 角度积分
// 历史值保存