STM32 电机教程 6 - 步进电机转动控制

2023-11-02

前言

      上一讲给大家介绍了步进电机的基础知识,相信大家对步进电机的基本工作原理有了一定的了解(如果没看上一节内容,可以先看一下,https://blog.csdn.net/zhanglifu3601881/article/details/102844594或学习下面网页的内容:

https://www.orientalmotor.com.cn/web_seminar/stkiso2-1-1/),如果你手头有步进电机及相应的驱动板,学习完本节的内容后也你可以轻松地实现对步进电机的控制。

 

      本节演示步进电机实物图如下,因没有找到电机的详细参数,只能从型号中大致猜测一些(电机工作电压4V,电流4A),结合万用表实测,得知该步进电机为两相四线电机,具体接线关系如下图所示。

 

示例详解

本节用到ST官方推出的NUCLEO-F103RB和MPS的EV8049S-U-00A 电机控制评估板 ,EV8049S-U-00A评估板使用MP8049双通道全桥芯片,可同时控制两个有刷直流电机或两个喇叭或一个步进电机,本节将用它来控制一个步进电机,手头没有EV8049S-U-00A评估板的可以用专门的步进电机驱动板(tb6560等)代替,也可以用L298N电机驱动板来控制

 

 

NUCLEO-F103RB对应的大致原理接线图:

EV8049S-U-00A 电机控制评估板原理图:

 

 

 

    1. 准备操作
      1. MP8049驱动芯片工作电压是5-26V,因不太确定步进电机工作电压具体是多少,本示例以该驱动支持的最低电压5V控制步进电机(电压越低,电机电流越小,电机越不容易烧坏,但出力也越小),关于EV8049S-U-00A评估板及MP8049双通道全桥芯片的详细数据手册可在mps官网下载),连接好NUCLEO-F103RB与EV8049S-U-00A及电机:

 

需要用到的信号

对应MCU引脚

PWM1A

PA0

PWM1B

PA1

PWM2A

PA4

PWM1B

PB0

GND

GND

本节将直接使能PA0,PA1,PA4,PB0引却配置成通用输出模式 ,直接以接高或拉低方式控制步进电机的各相通电状态。

 

关于两相步进电机的控制节拍:

正转:

(1)四拍:A 1000,A- 0010,   B 0100,  B- 0001.

(2)八拍:A 1000,AA- 1010,A- 0010,A-B 0110,B 0100,BB- 0101,B- 0001,B-A 1001.

反转为正转的逆序,本节将演示以上两种控制方式的步进电机正反控制。

 

 

 

 

 

 

 

 

 

      1. 在STM32CubeMX中,有专门的NUCLEO-F103RB工程模板,新建一个Cube工程,芯片型号为st32f103rb:

生成一个简单的工程模板实现了RCC,SYS,USART2接口的配置,同时还实现了LD2(LED)引脚的配置。接下来手动配置PA0,PA1,PA4,PB0为普通输出功能:

 

生成工程:

 

 

      1. 打开工程,在main.c中加入如下代码:

经过测试,示例使用四拍方式刚好是400步走完一圈,故步距角是 360/400 = 0.9 度,又因

步距角 = 180/(相数*转子极对数),前面已实测出该步进电机相数为2 ,可知,转子极对数为100。八拍驱动方式为四拍驱动方式的1/2细分驱动,在该驱动方式下,步时电机每拍转动 1/2 步距角即0.45度故需要800个节拍才能起完一圈。

设置工程下载后自动运行:

编译代码,下载程序运行可直以看到步时电机成功转动起来,先是快速正一圈(4拍),然后慢速反转一圈(8拍),然后是快慢速正反各两圈,依次循环运动。程序中可以修改HAL_Delay(1)的延时时间来实现步时电机的速度控制,需要注意的是延时时间不能过短,不然步时电机可能会跟不上节拍导致丢步,延时时间太长也有可能导致动作不连贯。在步进电机转动时,可以看到如下的驱动波形图,四拍波驱动波形:

八拍驱动波形:

 

通过本节内容,学习了步进电机的基本节拍控制,对步进电机的控制原理有了更加具体及深刻的认识。其实现在市面上已经有了很多完整的步进电机驱动方案(芯片或控制板),这些驱动方案往往都已经完整地实现了步进电机的节拍控制,在使用时,用户往往只需给定简单的脉冲(一个脉冲走一步或一个细分步)信号及方向信号就可以实现步进电机的控制,使得控制步进电机变得更加简单。OK,本期实验完成!下一期将给大家介绍步进电机的开环速度控制,如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

 

文中源码及资料下载,关注十三公众号:

在公众号里给十三发送 “下载|STM32 电机教程6” :

 

 

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

STM32 电机教程 6 - 步进电机转动控制 的相关文章

  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 在没有 IDE 的情况下如何使用 CMSIS?

    我正在使用 STM32F103C8T6 并想使用 CMSIS 这本质上只是寄存器定义 没有代码 让我的生活更轻松 同时仍保持在较低水平 问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用 所有文档似乎都与特定于供应商的 I
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re

随机推荐

  • Python + Selenium(二十六)模拟手机浏览器

    现在的 IT 以移动互联网为主 所以一般网站系统都会支持移动模式 移动设备与 PC 网页浏览区别最大的就是分辨率 大型网站为了体验使用移动设备访问时都会专门提供移动版本 而其他很多站点也是采用响应式设计 也可以支持移动设备以较好的访问 我们
  • Python项目:外星人入侵(一)

    1 安装Pygame 使用pip模块下载并安装Python包 要安装Pygame 在终端提示符下执行如下命令 下载完成 2 创建Pygame窗口及响应用户输入 新建文件夹 将其保存为alien invasion py 在其中输入以下代码 i
  • EC200U open方案环境搭建

    EC200U open方案环境搭建 1 资源 平台 UIS8910DM 500MHz Cortex A5 频段 LTE Cat 1 上行最大5M 下行最大10M LTE FDD B1 B3 B5 B8 LTE TDD B34 B38 B39
  • centOS 7下无法启动网络(service network start)错误解决办法

    问题描述 打开虚拟机 启动CentOS7 检查网络不通 重启service network restart 不行 报错 报错信息 Restarting network via systemctl Job for network servic
  • R极简教程:R语言和RStudio的安装

    R极简教程 R语言和RStudio的安装 R语言是一种广泛使用的统计分析和数据可视化编程语言 RStudio是一个强大的集成开发环境 IDE 提供了便捷的代码编辑 调试和数据可视化工具 本教程将详细介绍如何安装R语言和RStudio 并提供
  • ng: Can't bind to 'ngModel' since it isn't a known property of 'input'. - Angular 6

    出现的问题 ng Can t bind to ngModel since it isn t a known property of input 解决方法 导入 FormsModule 到 app module ts 如下代码粉色标记 imp
  • C++"char"类型的一些解释

    C char 类型的一些解释 char 类型 char 类型的cin和cout 说明 本文适合初学者阅读 为方便叙述和理解 本文牺牲部分严谨性 本文中的概念 数字 代表整数等日常意义上的数而并非书写符号 char 类型 C 中用char类型
  • DRAM 内存介绍(一)

    参考资料 http www anandtech com show 3851 everything you always wanted to know about sdram memory but were afraid to ask SDR
  • (称重问题)假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比

    问题描述 假设你有8个球 其中一个略微重一些 但是找出这个球的惟一方法是将两个球放在天平上对比 最少要称多少次才能找出这个较重的球 解答思路 至少要称2次 将8个球分成3份 其中2份每份有3个球 设为A B 剩下一份有2个球 设为C 第一次
  • CSS鼠标特效【动画跟随】

    JS CSS body background 111
  • 从 Twitter 运维技术经验可以学到什么

    没有一个网站的性能像 Twitter 这样这么令人牵肠挂肚 看见那条大鲸鱼总是让人感觉很无奈 Twitter 的运维专家 John Adams 在 Velocity 2009 上做了一篇题为 Fixing Twitter 的技术分享 PDF
  • QML Canvas 保存画布内容

    作者 一去 二三里 个人微信号 iwaleon 微信公众号 高效程序员 不知大家想过没有 我们好不容易在 Canvas 上绘制了各种图形 该如何把它保存起来呢 比如 我们实现了一个画板 当用户制作完成自己的作品之后 是不是要将其保存起来 以
  • 关于keil编译STM32例程出现错误的解决方法

    文章目录 错误示例 我的实际操作一 实际没有解决 我的实际操作二 真相大白 用户名没有修改 还是中文 用户名已经修改 乱码原因 学习经验 错误示例 错误如下所示 OBJ LED axf error L6002U Could not open
  • 基于python的股票客户流失数据分析模型

    目录 1 案例背景 2 2 读取数据 2 3 划分特征变量和目标变量 3 4 模型的搭建和使用 3 5 模型的使用 4 6 ROC曲线对模型的评估 7 7 总结 10 8 参考文献 10 9 致谢 10 1 案例背景 在进行一笔股票交易时候
  • 机器学习库--dlib

    dlib是什么呢 见面了 总要认识一下吧 dlib其实就是一个跨平台的用C 编写的代码库 这个库的机器学习算法和工具可以用来解决现实世界的很多工程问题 它在工业界和学术界有着广泛的应用 主要在机器人 嵌入式设备 手机以及高性能计算设备上有着
  • 当事务遇上分布式锁

    文章目录 1 分布式锁的几种实现方式 2 MySQL使用自带锁进行分布式同步控制 2 1 环境准备 2 2 可重复读下的for update的验证 3 Redis实现分布式锁进行同步控制 3 1 Redisson 3 2 Redisson实
  • Unity Input输入类 手指触摸检测

    在移动设备上 用户通常使用触摸屏来进行交互 Unity提供了Touch类来获取用户的触摸输入 以下代码是获取触摸的一些方法与参数 下面的代码演示了如何检测用户是否在屏幕上触摸了一个手指 在上面的代码中 我们使用了Input touchCou
  • visual studio——快速折叠所有代码和展开所有代码

    1 折叠所有代码 先ctrl m 再ctrl o 这是字母O 2 展开所有代码 先ctrl m 再ctrl l 这是字母L
  • ViewModel 源码设计思路分析

    前言 转眼一年又过去大半了 在2022年 初定了大多计划 搬家 换公司 很多事情都一托再拖 这里分享一篇我在公司内部做的分享文章吧 删除了部分对公司内部代码的探讨 公司中的项目运用到了大量的组件封装 有的是对第三方组件进行二次封装 有的是从
  • STM32 电机教程 6 - 步进电机转动控制

    前言 上一讲给大家介绍了步进电机的基础知识 相信大家对步进电机的基本工作原理有了一定的了解 如果没看上一节内容 可以先看一下 https blog csdn net zhanglifu3601881 article details 1028