?
一、代码移植说明
??多年前第一次听说“开源”这个事儿的时候非常不理解,自己辛苦写的代码让别人随意下载研究多吃亏呀,后来见的多了,发现开源也有它自身的一套商业逻辑。但是无论如何开源促进了技术的进步,避免大家重复造轮子,所以这是一件好事!
??网上很多文章讲FOC都是以无感电机为例,讲一堆诸如观测器,磁链方程,滑模观测器,FAST观测器,反正切等等深奥的理论,导致大家觉得FOC非常难。实际对于有感电机来说,通过编码器直接读取角度θ,所有跟位置相关的算法全都不用,甚至电机的电感电阻这些参数也可以不用。创作者从有感电机入手,避开了无感电机复杂的算法,我觉得这个项目是学习FOC的最佳切入点。
??原版代码要兼容多平台,所以在结构上会有更多的抽象层,移植后的代码只针对STM32,所以一些不必要的中间层会被省略掉,这是结构上的优化,但在程序上尽可能的保留了原版风貌,只对严重影响性能和功能的部分代码做了优化,方便大家学习对比。本次只移植了磁编码器云台电机的对应代码,其它类型的电机(比如步进电机、hall电机和ABZ编码器)本次没有移植,请知悉!
??在上一个系列文章中,一直没有演示电流采集部分的功能,本次移植把这部分的功能也添加了上来。另外创作者的代码还在不断更新中,本次代码是在Simple FOC V2.1.1的基础上移植。 ?
二、控制原理
2.1、有感FOC控制原理
??本次移植对应如下原理框图,其中核心函数的功能对应图中方框部分,输入的三个参数也在图中标记,setPhaseVoltage(float Uq, float Ud, float angle_el)。 ?
2.2、有感FOC(不带电流采样)控制原理
??去掉电流采样及变换公式,这样看起来是不是更加简单了。实际上这样做也可以控制电机,simpleFOC(一)——(八)系列就是对应下图原理,本系列的前几节也都围绕这个原理图来讲,请大家认真看图。 ?
2.3、FOC heart function
??原版代码包含了FOC的四种模式:Trapezoid_120、Trapezoid_150、SPWM和SVPWM,本次只移植了大家最关心的SVPWM部分。掌握核心函数的应用意义重大(你可以不了解算法,只要知道大概原理,会用即可),可以帮你快速理解整个程序。(原版代码路径:此电脑\文档\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp) ??下图为移植后的代码, ?
三、适配硬件
3.1、Bluepill
??本系列代码支持Bluepill,单电机控制和双电机控制,按照教程接线,编译后下载运行。 ?
3.2、SimpleMotor
??为了减少跳线,让大家能够更专注于代码学习,本人开发了SimpleMotor驱动板,STM32F103C8T6单片机,支持大功率双电机驱动,兼容《SimpleFOC(七)——STM32(Bluepill)的应用》演示的所有代码,本次移植的所有代码都将在这个驱动器上运行。 ?
四、程序架构
??原版代码中几乎不用中断(必须赞叹下创作者高超的软件写作能力),我猜测是为了提高跨平台时的兼容性,本次移植只用了一个中断,TIMER4的1ms中断,通过中断累加计时,在主循环中控制LED指示灯或者打印需要的数据,主要为调试方便。 ?
五、演示功能
??总体与SimpleFOC(一)——(八)系列教程的示例一致,增加了电流采样和更多大电机的控制演示。 ??1、SimpleFOC移植STM32(一)—— 简介 ??2、SimpleFOC移植STM32(二)—— 开环控制 ??3、SimpleFOC移植STM32(三)—— 角度读取 ??4、SimpleFOC移植STM32(四)—— 闭环控制 ??5、SimpleFOC移植STM32(五)—— 电流采样及其变换 ??6、SimpleFOC移植STM32(六)—— 双电机控制
|