原文:https://blog.csdn.net/zhanglifu3601881/article/details/105189844
前言
上一节《STM32 电机教程 32 - 基于ST X-CUBE-SPN7 无刷无感电机库的电机驱动实现》给大家分享了ST的官方的无刷电机无感控制实现方案(基于NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH开发板),并给大家简要地介绍了ST官方源码工程结构和电机关键参数据的配置,给大家演示了基于ST无刷无感电机控制库实现的电机控制效果。
说实话,个人对于ST官方库的控制效果还是有些不满意的,主要有1,电机启动时有较明显的停顿,2,启动成功机率也不是很好(当然这也有可能是个人的一些关键参数没设置好),3,个人觉得ST的官方库把无刷无感控制方案实现地过于复杂,也不容易看懂,移植起来也很不方便,加上个人并未找到ST无刷无感控制方案官方库的原理说明文档。
基于上述因素,本人还是决定自己动手实现无刷电机无感控制方案源码。该源码基于《STM32 电机教程 29 - 无刷无感入门1》进行补充实现。开始之前先给大家简要介绍一下本节无感无刷电机无感控制的大致原理:
在X-NUCLEO-IHM07M1 3SH开发板上,有如下可检测三相反电动势的电路图:
直接使用《STM32 电机教程 29 - 无刷无感入门1》一节的程序以控制步进电机的方式驱动无刷电机,其相电压OUTX及与之对应的BEMFX的波形如下:
而使用带hall传感方式控制无刷电机,程序可以用之前的《STM32 电机教程 11 - BLDC 6 步方波开环速度控制》一节的程序,其相电压OUTX及与之对应的BEMFX的波形如下:
通过上面的对对,使用hall位置传感方式下,BEMFX上的反电机势波形(图中红色粗线部分)在6步对应的OUTX关闭时(高阻态)时前后两个波形大体是对称,且反电动势过零点并不对是在所在步的中间位置,电机电流也小了很多。
即然我们有电机可以检测到反电动势,那么就可以通过程序调整电机6步换相时间,以实现反电动势波形表示出来的特征与带HALL位置传感控制时相似,从而实现相近的控制效果。这也是本节核心思想,类似的控制思想在SILICON LABS的《SENSORLESS BRUSHLESS DC MOTOR REFERENCE DESIGN》也有提到,在本系列教程的第32讲附件包含该文档。
接下来就是实现环节,本节所用电机为2836无刷电机,电机有两组线(hall传感器线和电机三相线),工作电压24V,最大转速12000rpm:
示例详解
本节用到ST官方推出的NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH 开发板。
-
准备操作
按下图连接好 NUCLEO-F103RB、X-NUCLEO-IHM07M1和电机根据电机的工作电压提供正确的电源,如我所演示电机工作电压是24V,即需给X-NUCLEO-IHM07M1的J1接口提供24V电源,同时X-NUCLEO-IHM07M1一些跳帽设置为:J5,J6选择1sh, 两个FOC跳帽都不接。
先简要介绍本节项目工程所用到的硬件资源,及其参数配置:
上面这个详细配置可以看附件中的.IOC文件,也可以直接查看对应源代码的对应模块文件,关于无感无刷电机实现,核心是BLDC.C 和 stm32f1xx_it.c文件:
BldcMove函数简单地实现了对电机从空闲到对齐-》启动-》运行控制状态机,因本人经历有限,这里只是实现了简单的运动功能,关于更多的如异常保护,出错检测等功能还需自行去实现:
在bldc.h文件中定义了一些工程电机控制相关的宏及结构体,代码量较少,一看便知。
OK,代码就差不对介绍到这,更多的细节还需同学位自行去阅读代码(因个人经历有限,代码较为粗糙,还请大家将就着看!!),同时大家手头的电机可能各不相同,如果该程序不能直接驱动您的电机,记得适当修改Bldc.H中电机参数中的相关参数。
编译工程后下载到开发板后即可成功驱动电机,按STM32F103RB-Nucleo开发板上的蓝色按键可以启动或停止电机,调节X-NUCLEO-IHM07M1 3SH上蓝色电位器可以对电机进行调速!
下面给出一些电机成功驱动后的效果图:
最后,本节完!同时我们的 《STM32 电机教程》第一期系列教程先更新到此,谢谢大家的一路支持。接下来我们将会推出更多的技术教程,也希望大家能一如既往地支持我们,谢谢大家。
老规矩,在公众号里给十三发送 “下载|STM32 电机教程33” 即可下载文中资料及程序源码。
微信关注图中张十三的博客公众号: