
STM32G431 ESC无感FOC算法资料:含非线性磁链观测器、速度环、电流环及双闭环启
动等完整算法与配置文件
最近在玩STM32G431做无感FOC驱动,尝试实现零速带载启动和堵转力矩保持功能。实测这套非线性
磁链观测器方案在零速工况下确实能稳住,分享一下实现过程中的关键点。
先说磁链观测器的实现核心,这个非线性观测器不需要传统PLL结构,直接通过电流和电压重构磁
链。核心代码截取:
```c
//非线性观测器核心运算
void FluxObserver_Update(FluxObserver* f, float u_alpha, float u_beta, float i_alpha
, float i_beta)
{
//磁链微分方程
float d_psi_alpha = u_alpha - RS * i_alpha - cross * f->psi_beta;
float d_psi_beta = u_beta - RS * i_beta + cross * f->psi_alpha;
//非线性反馈项
float e_alpha = i_alpha - f->i_alpha_hat;
float e_beta = i_beta - f->i_beta_hat;
float k = 2.0f * FO_GAIN * (e_alpha * f->psi_alpha + e_beta * f->psi_beta);
//状态更新
f->psi_alpha += (d_psi_alpha + k * f->psi_alpha) * DT;
f->psi_beta += (d_psi_beta + k * f->psi_beta) * DT;
//电流观测
f->i_alpha_hat = (f->psi_alpha - LS * i_alpha) / LM;
f->i_beta_hat = (f->psi_beta - LS * i_beta) / LM;
}
```
这里的关键在于非线性反馈项的设计,通过电流误差与磁链的乘积构建增益项,有效增强系统阻尼
。调试中发现增益系数FO_GAIN取值在0.5-2之间效果最佳,过大会引起高频振荡。
零速启动阶段采用电流环+速度环双闭环结构,这里有个坑点:速度环积分器初始值必须预置为负
载力矩对应的电流值。启动流程代码框架: