← blog/
STM32 FOC 电机控制入门
STM32FOC电机控制嵌入式C
从零理解磁场定向控制(FOC)的基本原理,以及如何在 STM32 上实现 Clark/Park 变换与 PI 调速器。
STM32 FOC 电机控制入门
磁场定向控制(Field-Oriented Control,FOC)是控制永磁同步电机最精准的方式之一。本文介绍基本原理和 STM32 实现思路。
什么是 FOC?
传统 PWM 直接控制相电压,而 FOC 将三相电流投影到旋转坐标系,独立控制产生转矩的电流分量()和产生磁通的电流分量(),从而实现精准力矩控制。
坐标变换
Clarke 变换(三相 → 两相静止)
void Clarke_Transform(float ia, float ib, float *alpha, float *beta)
{
*alpha = ia;
*beta = (ia + 2.0f * ib) / 1.732051f;
}
Park 变换(静止 → 旋转)
void Park_Transform(float alpha, float beta, float theta, float *id, float *iq)
{
float cos_t = arm_cos_f32(theta);
float sin_t = arm_sin_f32(theta);
*id = alpha * cos_t + beta * sin_t;
*iq = -alpha * sin_t + beta * cos_t;
}
PI 控制器
typedef struct {
float Kp, Ki;
float integral;
float out_max;
} PI_Controller;
float PI_Update(PI_Controller *pi, float error, float dt)
{
pi->integral += pi->Ki * error * dt;
pi->integral = CLAMP(pi->integral, -pi->out_max, pi->out_max);
float out = pi->Kp * error + pi->integral;
return CLAMP(out, -pi->out_max, pi->out_max);
}
控制环路
FOC 通常有三个嵌套控制环:
- 电流环(最内层,最快):控制 、,带宽约 1~5 kHz
- 速度环:控制转速,带宽约 50~200 Hz
- 位置环(最外层):控制角度,带宽约 10~50 Hz
总结
FOC 的关键是坐标变换 + PI 调节 + 精准角度测量。掌握这三点,就能在 STM32 上实现高性能电机控制。
下一篇将介绍如何对 PI 参数进行整定。