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

2023-11-12

前言

上一节《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” 即可下载文中资料及程序源码。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 电机教程 33 - 无刷电机无感控制快速实现 的相关文章

随机推荐

  • Unity使用mesh绘制模型

    基本概念 首先要知道模型是如何产生的 比如说我们在一个3 3的空间创建这样9个点 vector3 这9个点构成了我们模型的范围 三点成三角 三角呈面 然后由面绘制出体 用这种方法可以绘制我们想要的图形 理论转为实践 第一步 绘制点 先将刚才
  • Vue 路由守卫详细介绍与演示

    Vue 路由守卫是一种在 Vue js 应用程序中控制路由导航的机制 它允许你在路由变化前 后或在特定路由上执行代码 以便实现诸如权限控制 数据加载 页面切换动画等功能 在下面的介绍中 我将首先提供官方定义和通俗解释 然后详细介绍全局前置路
  • python练习题(十九):有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和

    题目 有一分数序列 2 1 3 2 5 3 8 5 13 8 21 13 求出这个数列的前n项之和 n int input 请输入求和项数 n sum 0 记录前n项和 a 1 分母 b 2 分子 for i in range n n su
  • MinStack 和MaxStack

    leetcode链接 包含min函数的stack 分析 利用一个LinkedList 链表存储数据 类似于链stack 还有数组stack 采用ArrayList存储 关于如何查找最小元素的情况 思路一 双stack stack 保存正常的
  • git stash的用法

    首先 git stash的含义是将修改的代码先暂存起来 让本地仓库回到最后一次提交时的状态 便于代码的更新管理 主要避免修改文件与最新代码的冲突 最近项目中遇到一些文件修改了 暂时不想提交 就想到了使用stash命令 首先 可以将自己想提交
  • 学习笔记整理:网络应用技术-运输层(1)

    以下内容为个人的学习笔记整理 如有错误 请指出 谢谢 一 课前预习 1 数据交换有哪几种方式 电路交换 报文交换 分组交换 2 运输层实现的通信是什么之间的通信 两个网络应用程序之间的通信 3 运输层所说的端口有什么作用 什么是套接字 端口
  • 详解基于tensorflow实现对cifar100的识别,准确率达到65%附完整代码(涉及vggnet,resnet,,loss图像处理,图像增强,BN)

    文章目录 一 介绍cifar 数据集 二 resnet网络简介 a 网络结构图 b 使用resnet进行炼丹 c 第一次炼丹 d 第二次炼丹 完整代码 jupyter notebook 三 vggnet网络简介 a vggnet结构图 b
  • vue-cli+express前后端分离项目跨域问题解决

    1 express后端项目中使用命令npm i cors S安装cors 并在app js文件中引入cors 写下如下几行代码 var cors require cors 跨域 app use cors origin http localh
  • Java集合-HashMap1.8也会发生死循环

    在网上搜资料时候然后发现网上都说1 7版本的HashMap会发生死链也就是死循环 但是在HashMap中也会产生死循环 接下来直接看代码吧 代码 类名字我忘记改了这是我以前看park时候弄的但是这不重要 当你运行 public class
  • [第16课]统计:诸方差公式

    Start 观看可汗视频 本节课 可汗老师对原始方差公式进行推导 得出如下更简洁的公式 2 i
  • MapReduce基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 Writable类型 Java类型 Hadoop Writable类
  • 构建无服务器 ChatGPT 支持的简历助手 - 基础(二)

    之前我们制作了一个简洁的小命令行工具 可以用来帮助我们构建更好的简历 现在我们将该应用程序部署到云中 我将使用 AWS CDK 因为我喜欢它 而且它使此类事情变得相对简单 如果愿意 您当然可以将这些说明改编为 Terraform 首先让我们
  • CDH6.3修改主机IP

    这里写自定义目录标题 修改ip 停服务 进入mysql修改元数据ip 修改各主机的ip 分别修改各主机的ip 修改所有hadoop集群机器中的cloudera scm agent的配置文件 重启服务 修改ip 开始是在公司使用桥接模式 回到
  • 根据XML文件在原始图片上画矩形框

    根据XML文件在原始图片上画矩形框 输入参数 xml src XML文件路径 img src 原始图片路径 代码 def markImage xml src img src root ET parse xml src getroot cou
  • Eclipse 下载与安装(2022超详细)

    一 下载jdk 去官网可以下载 小编把64位已下载好的放网盘 自行下载 链接 https pan baidu com s 1A0 iWtdvYfwepTXzqXWfMA 提取码 cnqz 1 下载好之后自己选择安装目录安装即可 2 配置环境
  • 留学申请计算机硕士个人陈述,计算机专业“个人陈述”样本

    Computer Science Personal Statement Computing and its applications have always fascinated me and for this reason I have
  • iText官方教程

    如果要导出PDF文件 首选当然是iText 从网上也找了些资料 有很多 也有些乱 自己做了个例子 感觉还是很浅 深入的内容还是研究不透 下载了官方的jar包 本来想看看 里面的Demo 结果只有api文档 资料还真是不好找 今天发现官方还是
  • 第1章 Python概述 课后习题参考答案

    一 单选题 1 以下选项中说法不正确的是 答案为D A 解释是将源代码逐条转换成目标代码并同时运行的过程 B 编译是将源代码转换成目标代码的过程 C Python语言是解释型语言 兼有编译功能 D 静态语言采用解释方式执行 脚本语言采用编译
  • jenkins自动化脚本整理

    发布jar文件 规范化Jenkins 编译服务器编译目录设定为 编译脚本目录 bin 发布脚本目录 deploy 编译代码目录 source 1 项目代码目录 创建source dmmclist txt文件 kc tmplt tmpltsv
  • STM32 电机教程 33 - 无刷电机无感控制快速实现

    前言 上一节 STM32 电机教程 32 基于ST X CUBE SPN7 无刷无感电机库的电机驱动实现 给大家分享了ST的官方的无刷电机无感控制实现方案 基于NUCLEO F103RB和X NUCLEO IHM07M1 3SH开发板 并给