因为工作的关系,接触到一些电机的驱动。最早是BLDC,跟着老工程师后面,从懵懵懂懂,到稍微有了一点儿概念。之后自己憋出一个能走微步的步进电机驱动。满满的成就感记忆犹新。
后面的项目,用集成驱动芯片独立完成了一些其它的电机驱动。
前二年的学习过程中,听说了FOC这个词,似乎各种厉害各种邪乎。
于是各种买书,各种懵逼。心潮澎湃想自己从零实现一整套,搞了一段时间,越搞坑越深,最后FOC没搞出来,传统六步方波式的驱动器倒是攒出来。不甘心啊。
也有一些优秀的厂家提供了不错的集成方案,套片解决问题,不过因为项目使用限制,虽然已经调通了demo但是并没有实际使用上。
9102年就要过去,年初制定的年度计划眼看着又有一项要完不成(为什么说”又”呢。。。淡淡的忧伤……)
突然得知ST的电机驱动库发布了重要的更新,并且全部开源(有一定限制)。抓着最后几周,调通demo。并且有继续深入下去的可能了。
////
本番废话略多,下面进入正题。
////
相比六步方波,FOC驱动中包含诸如Park/Clark变换等带有大量三角函数的矩阵计算,以前的8/16单片机就有些捉襟见肘(XMEGA系列处于勉强够用的边缘)。
因此这里选择了STM32F303REt6作为主控。72Mhz 带硬件数学单元的Cortex M4算力够强,此外它内建了为高阶电机驱动优化过的定时器,特别是还集成了大量的模拟比较器,运算放大器和ADC。将来自己做PCB的话,只要配合桥驱动器和mosfet就可以。
ST 提供的MCSDK提供了FOC的底层库,以及一些实用程序。ST官网给出了两个版本,MCSDK,以及MCSDK-FULL,二者的区别是MCSDK中的部分高阶算法(比如状态观测器、前馈控制等)只以二进制库的方式提供,而full的版本则包含全部的源代码。
可能是刚刚出新的原因,目前MCSDK仅提供了m$ windows版本,只能在虚拟机里搞搞,不过ST承诺会在2020年推出重构的MCSDK,将全平台支持。
装好后,得到一些新图标
使用Keil/IAR等其它ide的,STM32CUBEIDE就不再需要。重要的是左边上下的两个。Motor Profiler和 MotorControl Workbench
Motor Profiler是一套很好玩儿的实用程序。它使用内置的固件(因此目前只能支持官方开发板)自动侦测电机的各种参数,以待后用。
打开它,界面如下
选择好手上的控制板和驱动后,需要填写电机极对数,不知道的话可以用下面的方法测定:
使用恒流源接入电机的任意两相,然后手动转动电机转子一圈,边转边计数有几次咯噔咯噔(术语:掣子),如果是4次,那么电机就是4对磁极。
如果使用的驱动板能力远远大过电机或者电源的额定电流,需要正确填写电机的最大电流,否则驱动板会尝试使用很大的电流测试电机。
剩下的参数,可填可不填。
完了就可以点击connect和Start Profile。
程序会先后测定电机的
- 相 电阻
- 相 电感
- 反电动势常数
- 转动惯量
- 机械摩擦系数
将测定参数命名后保存待用。
接下来打开Motor Control Workbench这个程序, 并选择新建一个项目
与Motor Profiler不同,workbench是支持自定义板级的,这里还是先用开发板
配置核心在此。
这里可以选择底层驱动相关的各种参数,包括:
- 母线电压相关
- 温度监控相关
- 制动器相关
- 电机选择(这里可以使用刚刚用Motor Profiler测量的参数,也可以- 根据电机厂商的datasheet直接填写)
- 驱动桥相关
- 电流检测配置
- 速度、位置检测配置
- IO/模拟电路配置
- 等等
根据硬件配置好后,就可以电机生成按钮,生成配置好的初始化框架。然后点击Run Cube。进一步配置和MCSDK无关的其它CUBE配置。
常规的cube配置完成后,再点击gennerate code就完成的所有外设,和库的初始化代码, 以及一个空的 main() (如果没有配置freeRTOS的话)
我一开始下载的版本是 5.4.1, 配合cube的常规固件库 stm32f303 1.10.0,经常会出现一些奇奇怪怪的问题,这个不能编译,那个少个依赖什么的。
后来更新到了 5.4.3似乎好了一点儿。。但是总是很悬的感觉。因为就算是5.4.3生成出来的代码,我也是修改了一点点东西才能编译……还是期望Linux版本早点儿出来吧。。。
ST还提供了测试界面, 如果代码生产正常,就可以简单驱动起来。
能够正确编译以后,就可以把代码拷出虚拟机,转到Linux真机后续开发,只要不动mcsdk的结构配置,倒也不再需要虚拟机。
后续将结合FOC一起介绍MCSDK的结构和开发过程。
本番结束。
to be continued