前言

上一节《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 开发板。

  1. 准备操作

按下图连接好 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” 即可下载文中资料及程序源码。

微信关注图中张十三的博客公众号:

STM32 电机教程 33 - 无刷电机无感控制快速实现相关推荐

  1. 无刷电机无感控制,速度电流双闭环

    无刷电机无感控制,速度电流双闭环. 程序加配套仿真和实验图 ID:69700614767543439

  2. STM32 电机教程 2 - 直流有刷电机转动控制

    前言 有刷电机是大家最早接触的一类电机,中学时物理课堂上介绍电动机也是以它为模型来展示的.有刷电机的主要结构就是定子+转子+电刷,通过旋转磁场获得转动力矩,从而输出动能.电刷与换向器不断接触摩擦,在转 ...

  3. STM32 电机教程 31 - 无刷无感控制原理

    前言 前面<STM32 电机教程 29 - 无刷无感入门1>和<STM32 电机教程 30 - 无刷无感入门2>我们通过两种方式有BLDC电机无HAL传感器的情况下成功地让电机 ...

  4. STM32 电机教程 32 - 基于ST X-CUBE-SPN7 无刷无感电机库的电机驱动实现

    前言 上一节给大家分享几篇比较好的介绍无刷电机无传感控制的文章,不知大家学习得怎么样,其实很多芯片公司(比如TI,ST,MICROCHIP,SILICON)都有推出针对他们家控制或驱动芯片的无感无刷电 ...

  5. STM32 电机教程 30 - 无刷无感入门2

    前言 无刷直流 (Brushless Direct Current, BLDC)电机是一种正快速普及的电机类型,它可在家用电器.汽车.航空航天.消费品.医疗.工业自动化设备和仪器等行业中使用.正如名称 ...

  6. STM32 电机教程 29 - 无刷无感入门1

    前言 无刷直流 (Brushless Direct Current, BLDC)电机是一种正快速普及的电机类型,它可在家用电器.汽车.航空航天.消费品.医疗.工业自动化设备和仪器等行业中使用.正如名称 ...

  7. STM32 电机教程 20 - 基于ST MC Workbench 无感FOC

    前言 磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示: 第19讲成功实现了基于NUCL ...

  8. STM32 电机教程 22 - 基于ST MCLIB无感FOC算法变有感(HALL)FOC算法

    前言 磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示: 第21讲对比分析了基于ST M ...

  9. STM32 电机教程 21 - 基于ST MCLIB无感FOC 与 有感FOC 代码差异分析

    前言 磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示: 第19.20讲分别实现了基于N ...

最新文章

  1. 我的机器学习入门清单及路线!
  2. 掌握生信技术,玩转生态与地理领域的科研套路
  3. mac远程桌面Microsoft Remote Desktop for Mac的安装与使用
  4. opencv在pycharm上没有函数提示?(需要安装opencv-contrib-python)
  5. 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】
  6. SAP CRM Fiori应用My Opportunity的点阵外观
  7. 下载anaconda时出现“Please make sure you are connected to the internet”警告
  8. 这些新技术你们都知道吗?看这一篇就够了!
  9. php 的html文件怎么打开,什么是html文件?html格式如何打开?(图)
  10. bin code led_-/bin/sh: ./led: not found的解决办法
  11. 微软开始测试自己的Google Base
  12. Linux安装卸载Mysql数据库
  13. Spark 云计算 ML 机器学习教程 以及 SPARK使用教程
  14. QT--编写自己的TCP/IP上位机软件--demo
  15. 身份证号校验、身份证照片解析(百度API)
  16. 【转】“中国网游死亡档案”出炉:网游淘汰率达1比1
  17. H5唤起 uniapp 版的app 端
  18. python读matlab.fig_从fig文件中读取数据
  19. python 复选框_每日一练:Python复选框的运用
  20. 纯前端 HTML+JS版, Vue.js版 二维码:生成、扫描、识别、解析、扫一扫

热门文章

  1. 我国法定报告的传染病分为几类?包括哪些传染病?
  2. pymysql.err.IntegrityError: (1062, Duplicate entry 'roxml-ROXML' for key 'PRIMARY')
  3. 内存动态分配之realloc(),malloc(),calloc()与new运算符
  4. 17、任务十六——事件委托机制、简单表单验证
  5. 关于TxQBService报的错,腾讯你真牛B啊
  6. 动态变量和静态变量的区别,堆和栈的区别
  7. Python (2) 除法
  8. 修改Thickbox,预加载图片和点击图片前后浏览
  9. python3: 数字日期和时间(1)
  10. 移动端调用电话、短信、唤起QQ和使用百度地图