步进电机(STM32+28BYJ-48)
一、简介
步进电动机(stepping motor)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备,以及打印机、绘图机和磁盘等装置。
二、工作原理
步进电机通过一系列离散的步进动作来实现旋转。每个电脉冲信号驱动电机转动一个固定的角度,称为步距角。步进电机的控制通常通过一个驱动器(步进驱动器)来完成,该驱动器接受来自控制器的脉冲信号,并将其转换为步进电机的相位信号,从而驱动电机按预定的步进角度转动。
这里以28BYJ-48为例说明其工作原理:

当对步进电机施加一系 列连续不断的控制脉冲时,它可以连续不断的转动。每一个脉冲信号对应步进电机的某一组 或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状 态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行, 常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A 循环),双(双相绕组通电)四拍 (AB-BC-CD-DA-AB-循环),八拍(A-AB-B-BC-C-CD-D-DA-A-循环)。 下面为驱动方式四相八拍的通电方式 。

橙色对应的是 A 相,黄色对应的是 B 相,粉色对应的是 C 相,蓝色对应的 是 D 相。
三、原理图


对照原理图,A 相对应 STM32 的 PC7,B 相对应 STM32 的 PC6, C 相对应 STM32 的 PC5,D 相对应 STM32 的 PC4,注意他们都是通过 ULN2803A 来驱动 步进电机的,而 ULN2803A 是反相器。
ULN2803A 的输入为高电平时输出为低电平,输入为低电平时输出为高电平。那如果要 让 A 相通电,由表格可以看出是需要给橙色线低电平的,那么对应的 PC7 应该是高电平, 通过 ULN2803A 反向才能给橙色线低电平,其它的类似。
因此总结一下,使某相通电,则该相对应的 STM32 引脚需要输出高电平;某相不通电,则需要该相对应的 STM32 引脚输出低电平。 并且注意在电机处于停止状态时,所有的相都需要不通电的状态,以免过热烧毁电机!!!
四、代码实现
1.IO口宏定义
#define SM28BYJ48_A SM28BYJ48_A_FUN_OUT(SM28BYJ48_A_PIN_ID) //SM28BYJ48_A
#define SM28BYJ48_B SM28BYJ48_B_FUN_OUT(SM28BYJ48_B_PIN_ID) //SM28BYJ48_B
#define SM28BYJ48_C SM28BYJ48_C_FUN_OUT(SM28BYJ48_C_PIN_ID) //SM28BYJ48_C
#define SM28BYJ48_D SM28BYJ48_D_FUN_OUT(SM28BYJ48_D_PIN_ID) //SM28BYJ48_D
2.在步进电机头文件定义一个结构体去设置步进电机的状态,以及步进电机通电导通控 制的宏定义。
/* 定义结构体便于全局变量操作 */
typedef struct
{uint8_t ucSpeed; /* 电机速度 */uint8_t ucDir; /* 电机方向 0 正转, 1 反转 2 停止 */uint8_t ucStop; /* 0 运行, 1 停止 */
}MOTOR_T;
/* 步进电机导通控制定义 */
enum
{SM_OFF = 0, /* A B C D 相均不导通 */SM_A, /* A 相导通 */SM_B, /* B 相导通 */SM_C,SM_D,SM_AB, /* AB 相导通 */SM_BC,SM_CD,SM_DA
};
3.驱动文件要编写的内容
设置一个变量 MOTOR_T g_tMot; /* 定义全局变量 */
注意这个变量在头文件中用 extern 申明一下,以便被其它文件调用
void bsp_InitSM28BYJ48(void)
{设置 GPIO 端口的初始化,设置为推挽输出,特别注意,驱动引脚初始电平是要设置为低电平
}设置一下通电状态
static void motPowerOn(uint8_t _ucMode)
{if (_ucMode == SM_OFF){SM28BYJ48_A = 0;SM28BYJ48_B = 0;SM28BYJ48_C = 0;SM28BYJ48_D = 0;}else if (_ucMode == SM_A){SM28BYJ48_A = 1;SM28BYJ48_B = 0;SM28BYJ48_C = 0;SM28BYJ48_D = 0;}
//还有其它状态,自行补全,总共 9 个状态呢,对应头文件里步进电机导通控制定义
}
4.电机驱动函数
void motPower(uint8_t _mode,uint8_t _stop)
{ if(_stop){motPowerOn(0);}else{if(_mode==0){if(++g_tMot.ucSpeed==9)g_tMot.ucSpeed=1;motPowerOn(g_tMot.ucSpeed);}else if(_mode==1){if(--g_tMot.ucSpeed==1)g_tMot.ucSpeed=9;motPowerOn(g_tMot.ucSpeed);}else if(_mode==2){motPowerOn(0);} }}
5.主函数应用
int main(void)
{bsp_InitSM28BYJ48(); /* 电机初始化 */ bsp_StartAutoTimer(1,g_tMot.ucSpeed);while(1){bsp_Idle(); /* CPU 空闲时执行的函数,在 bsp.c */if (bsp_CheckTimer(0)) /* 判断定时器超时时间 */ {/* 每隔 300ms 进来一次 */ bsp_LedToggle(1); /* 翻转 DS0 的状态 */ }if (bsp_CheckTimer(1)) /* 判断定时器超时时间 */ {/* 每隔 300ms 进来一次 */ motPower(g_tMot.ucDir,g_tMot.ucStop); }}
}
文中代码只是简单demo,非完整代码,还请读者自行动脑子补全,有问题可随时交流。
相关文章:
步进电机(STM32+28BYJ-48)
一、简介 步进电动机(stepping motor)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备&…...
Node.js介绍 , 安装与使用
1.Node.js 1 什么是Node.js 官网:https://nodejs.org/zh-cn/ 中文学习网:http://nodejs.cn/learn1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 2.前端的底层 html…...
JavaEE初阶-网络原理1
文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言 学习一个网络协议,最主要就是学习的报文格式,对于UDP来说,应用层数据到达UDP之后,会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的…...
leetcode秋招冲刺 (专题16--18)
专题16:分治 题目169:多数元素(YES) 解题思路:使用哈希表可以统计出现次数的性质,直接统计就行。 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊…...
学懂C#编程:实用方法——string字符串指定连接符拼接之 string.Join 的详细用法
在C#中,string.Join 方法用于将一个字符串数组或集合中的元素连接成一个单一的字符串,并在每个元素之间插入指定的分隔符。这个方法非常有用,特别是在需要将多个字符串合并成一个字符串时。以下是 string.Join 方法的详细用法: 方…...
Javascript常见数据结构和设计模式
在JavaScript中,常见的数据结构包括两大类:原始数据类型(Primitive Types)和对象类型(Object Types)。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…...
【ChatGPT】全面解析 ChatGPT:从起源到未来
ChatGPT 是由 OpenAI 开发的一个基于 GPT(Generative Pre-training Transformer)架构的聊天机器人。通过自然语言处理(NLP)技术,ChatGPT 能够理解和生成语言,与人类进行对话。本文将深入探讨其起源、发展、…...
html+css+js贪吃蛇游戏
贪吃蛇游戏🕹四个按钮控制方向🎮 源代码在图片后面 点赞❤️关注🙏收藏⭐️ 互粉必回🙏🙏😍😍😍 源代码📟 <!DOCTYPE html> <html lang"en"&…...
新手必学:掌握Excel中这些常用公式,轻松提升数据处理能力
各位同学好,今天和大家来分享几个常用函数公式的典型用法。 1、提取指定条件的不重复名单 如下图所示,某公司课程比赛,同一员工有多个比赛项目。希望从左侧的列表中,提取出财务部的参赛人员名单。F2单元格输入以下公式࿰…...
经济寒冬:竞品凶猛,你的产品如何求生?
那些年曾被竞品干掉的产品 1997年到2010年左右是国内互联网行业的快速发展和多元化发展的时期,这一时期涌现出来一大批优秀的产品,市场竞争越来越激烈。苹果 在20 世纪 80 年代,乔布斯的苹果电脑,在当时可是PC行业的老大…...
信号量——Linux并发之魂
欢迎来到 破晓的历程的 博客 引言 今天,我们继续学习Linux线程本分,在Linux条件变量中,我们对条件变量的做了详细的说明,今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…...
自动驾驶中的逆透视变换(Inverse Perspective Mapping,IPM)详解
前言 IPM(Inverse Perspective Mapping,逆透视变换)图的历史可以追溯到计算机视觉和图像处理领域的发展。逆透视变换是一种用于消除图像中透视效应的技术,使得原本由于透视产生的形变得以纠正,进而更准确地描述和理解图像中的场景。比如在行车中的车道线检测,泊车中的常见…...
Python地震波逆问题解构算法复杂信号分析
🎯要点 🎯时域、时频域以及时间和频率相关联偏振特性分析三种算法 | 🎯时域波参数估计算法 | 🎯机器学习模型波形指纹分析算法 | 🎯色散曲线和频率相关波分析算法 | 🎯动态倾斜校正算法 | 🎯声…...
C语言 -- 深入理解指针(二)
C语言 -- 深入理解指针(二) 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组8. 字符指针变量9. 数组指针变量2.1数组指针变量是什么?2.2 数组指针变量怎么初始化 10. 二维…...
HTTP协议详解
HTTP协议详解 一、HTTP协议概述二、网络基础与HTTP2.1 TCP/IP协议2.2 发送HTTP请求过程2.3 HTTP请求的组成部分 三、HTTP报文HTTP请求报文HTTP响应报文 结语 一、HTTP协议概述 HTTP,即超文本传输协议(Hypertext Transfer Protocol)ÿ…...
一年时间业绩增长2倍,茅台保健酒业公司在川销售的“三板斧”
执笔 | 尼 奥 编辑 | 扬 灵 作为土地面积全国第5、人口总数全国第3、GDP全国第6的产酒、销酒大省,四川酒类消费总额已达800亿元,其中白酒市场规模达到500亿元。 近年来,随着省外名酒提升对四川市场重视,其市场份额也从20年前的3%…...
土豆炒肉做法
菜单:土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程: 洗土豆,削皮,擦成条,用凉水过滤两遍淀粉,顺便放个燥里洗肉,切成条,按照生抽、酱油、淀粉、…...
VPS拨号服务器:独享的高效与安全
在当今互联网高速发展的时代,虚拟私人服务器(VPS)已成为许多企业和个人用户托管网站、应用程序的首选。特别是带有拨号功能的VPS服务器,以其独特的优势受到广泛关注。本文将深入探讨VPS拨号服务器的独享特性,以及它如何…...
网络安全设备——防火墙
网络安全设备防火墙是一种用来加强网络之间访问控制的特殊网络互联设备。以下是对防火墙的详细解释: 一、定义与基本概念 定义:防火墙是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的…...
Redis 管道技术
Redis 管道技术 引言 Redis,作为一个高性能的键值存储系统,被广泛应用于各种场景,如缓存、消息队列等。为了进一步提高Redis的处理能力和效率,Redis管道技术应运而生。本文将深入探讨Redis管道技术的原理、应用及其优势。 什么是Redis管道技术 Redis管道技术是一种允许…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
