
STM32电机控制器:Foc开源算法及单/三电阻采样代码
# STM32 FOC无感控制电机的实现
最近一直在研究如何用STM32F0系列的微控制器来控制一个无刷直流电机,具体来说,是想用磁场
定向控制(FOC)的方法来实现更高效的控制。这个过程有点复杂,但挺有意思的,想记录一下自己的理解和
一些代码的实现。
## 什么是FOC?
FOC的全称是Field-Oriented Control,也就是磁场定向控制。听起来挺高大上的,其实就是通过将
定子电流分解成两个分量——一个用来产生转矩,另一个用来产生磁场。这样一来,控制起来就比较方便,而
且效率也高。这个方法尤其适合永磁同步电机(PMSM)。
## 为什么要用STM32F0?
选STM32F0主要有两点:价格便宜,而且功能够用。F0系列的性能虽然不如F4,F7那些高端系列,但对
于控制电机来说,完全够用,而且成本低,适合大多数项目。
## 开源代码了解一下
代码部分主要参考了ST官方的开源代码,包括观测器和FOC算法。这里有个细节,代码并不是用的库
,而是直接写在项目里的,所以可移植性更好。
### 两种采样方式
代码里面提供了两种采样方式:单电阻采样和三电阻采样。
- **单电阻采样**:用一个电阻来采样电流,成本低,但精度差点。
- **三电阻采样**:用三个电阻分别采样三相电流,精度高,但成本也高点。
根据自己的项目需求,我是选择了三电阻采样,毕竟精度和稳定性更重要。
## 观察器是什么?
观察器,听起来挺专业的,其实就是用来估计电机的转速和位置的,在无感控制里非常关键。因为无
感嘛,就没有霍尔传感器,所以需要用算法来估计。
ST的这个观察器,应该是一个滑模观察器(SVO),在低速时也能有一定的估计精度。代码里面已经实
现好了,不用自己写,只需要调用相关的函数就行了。
## FOC的实现
FOC的主要算法包括Clarke变换和Park变换,把三相静止坐标系的电流转换到旋转坐标系下。具体
来说,就是把abc坐标系转换到dq坐标系。然后,用PI调节器来调节d轴和q轴的电流,最后反变换回来,得到
PWM信号。
### 算法细节
代码部分,这里有一些数学运算,主要是 Clarke和Park变换。不过这些都已经写好了,自己只需要
按流程调用就行。下面是一个伪代码: