【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转
资料下载:待更新。。。。
先驱动起来再说,干中学!!!
1、实现功能
STM32同时驱动4个步进电机,支持单独调速与正反转控制
需要资源:16个任意IO口+1ms定时器中断

目录
- 资料下载:待更新。。。。
- 先驱动起来再说,干中学!!!
- 1、实现功能
- 一、28BYJ-48 步进电机
- 二、ULN2003 驱动模块
- 三、STM32 驱动代码实现
- 3、修改引脚
【28BYJ-48】STM32同4个步进电机正反转与调速
一、28BYJ-48 步进电机
28BYJ-48 是一款常见的四相八拍式步进电机,它由定子和转子两部分组成。定子上有四组绕组,按照一定的顺序通电,就能产生旋转磁场,吸引转子转动。
其步距角通常为 5.625°/64(约 0.08789°,这里的 64 是八拍驱动方式下细分后的步数),这意味着电机每接收到一个脉冲信号,转子就会精确地转动一个微小的角度,通过连续不断地给脉冲,实现电机的连续旋转。
电机参数
工作电压:一般为 5V - 12V,常见的是 5V 供电,这使得它可以方便地与微控制器(如 STM32)直接配合使用,无需复杂的电压转换电路。
相电阻:每相绕组的电阻值在几十欧姆到上百欧姆不等,例如典型值约为 200Ω 左右,这个参数影响电机的电流和驱动电路的设计。
扭矩:它的扭矩相对较小,适用于一些对驱动力要求不高的轻载场合,如小型自动化设备的指针转动、简易机器人关节的微调等,一般启动力矩在 30 - 40gf.cm 左右。
二、ULN2003 驱动模块
功能概述
ULN2003 是一个高耐压、大电流达林顿阵列集成电路,主要用于驱动感性负载,如步进电机、继电器等。它内部集成了 7 个 NPN 达林顿复合晶体管,在驱动 28BYJ-48 步进电机时,通常只用其中 4 个通道对应电机的四相绕组。
工作原理
当微控制器(如 STM32)的引脚输出高电平信号给 ULN2003 的输入端时,对应的达林顿管导通,将电机绕组与电源接通;当输入低电平时,达林顿管截止,绕组断电。通过控制 4 个输入引脚的电平序列,按照特定的时序给电机绕组通电,就能驱动电机旋转。
它还具有续流二极管,当电机绕组断电时,为绕组产生的感应电动势提供泄放回路,保护驱动芯片和其他电路元件,防止反向电压击穿。
电气特性
输出电流能力:每路输出可承受最大 500mA 的电流,足以驱动 28BYJ-48 电机,因为该电机在正常运行时每相电流一般在几十毫安。
耐压值:集电极 - 发射极耐压可达 50V,这为电机在不同电压供电情况下提供了足够的电压裕量,确保可靠工作。
三、STM32 驱动代码实现
#include "stm32f10x.h" //STM32库函数的头文件
#include "timer.h" //STM32定时器
#include "step_motor.h" //步进电机驱动
int main(void) //主函数
{ SystemInit();delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2组中断分RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE); //打开GPIO口时钟,先打开复用才能修改是否停用复用功能GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试 TIM2_Int_Init(99,719); //72000000HZ/(99+1)/(719+1)=1000HZ 1ms中断Step_Motor_Init1();stepmotor_speed1 = 4; //5ms一个脉冲 stepmotor_set1 = -4096; //4096为一圈,设置电机反转一圈Step_Motor_Init2();stepmotor_speed2 = 3; //4ms一个脉冲stepmotor_set2 = 4096;Step_Motor_Init3();stepmotor_speed3 = 2; //3ms一个脉冲stepmotor_set3 = 4096;Step_Motor_Init4();stepmotor_speed4 = 1; //2ms一个脉冲//速度 360*1000/(1+1)*4096 = 43.965°/sstepmotor_set4 = 4096;while(1){ }
}
void TIM2_IRQHandler(void) //TIM2中断
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查TIM2更新中断发生与否{TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中断标志stepmotor_run1();stepmotor_run2();stepmotor_run3();stepmotor_run4();}
}
3、修改引脚
通过宏定义快速修改引脚
/* 步进电机1参数宏 */
/* A相 */
#define LA_GPIO_PORT1 GPIOA
#define LA_GPIO_PIN1 GPIO_Pin_9
#define LA_GPIO_CLK1 RCC_APB2Periph_GPIOA
/* B相 */
#define LB_GPIO_PORT1 GPIOA
#define LB_GPIO_PIN1 GPIO_Pin_10
#define LB_GPIO_CLK1 RCC_APB2Periph_GPIOA
/* C相 */
#define LC_GPIO_PORT1 GPIOA
#define LC_GPIO_PIN1 GPIO_Pin_11
#define LC_GPIO_CLK1 RCC_APB2Periph_GPIOA
/* D相 */
#define LD_GPIO_PORT1 GPIOA
#define LD_GPIO_PIN1 GPIO_Pin_12
#define LD_GPIO_CLK1 RCC_APB2Periph_GPIOA
相关文章:
【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转
资料下载:待更新。。。。 先驱动起来再说,干中学!!! 1、实现功能 STM32同时驱动4个步进电机,支持单独调速与正反转控制 需要资源:16个任意IO口1ms定时器中断 目录 资料下载:待更…...
手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer
自己训练一个tokenizertokenizer需要的模块SentencePiece 库tokenizer类中的初始化函数tokenizer类中的encode函数tokenizer类中的decode函数完整代码训练函数数据分片临时文件SentencePiece 训练参数 自己训练一个tokenizer tokenizer需要的模块 encode: 将句子转换为tokend…...
【超详细】讲解Ubuntu上如何配置分区方案
Ubuntu 的分区方案 一、通用分区方案(200G为例) EFI系统分区(仅UEFI启动模式需要,) 大小:512MB–1GB类型:主分区(FAT32格式)挂载点:/boot/efi说明࿱…...
Gradle-基础
一.安装 1. 2.配置环境变量 GRADLE_HOME D:\gradle\gradle-5.6.4 GRADLE_USER_HOME D:\gradle\localRepository 3.下载源配置 安装目录下的init.d文件夹里创建一个init.gradle文件,下载顺序从上到下,内容࿱…...
Anolis系统下安装Jenkins
1.安装java、maven yum install -y java-17-openjdk-devel maven git wget 2.配置环境变量 1.查看java和maven所在目录 [rootlocalhost ~]# which java /usr/bin/java [rootlocalhost bin]# ll /usr/bin/java lrwxrwxrwx 1 root root 22 4月 1 17:20 /usr/bin/java ->…...
Python网络爬虫:从入门到实践
目录 什么是网络爬虫? 网络爬虫的工作原理 常用Python爬虫库 编写爬虫的步骤 实战示例 注意事项与道德规范 未来趋势 1. 什么是网络爬虫? 网络爬虫(Web Crawler)是一种自动化程序,通过模拟人类浏览行为&#x…...
LabVIEW 调用 Python 函数
此程序是 LabVIEW 调用 Python 函数实现双精度数相加的典型示例。通过 LabVIEW 搭建交互框架,借助 “Open Python Session” 创建 Python 代码运行环境,定位 Python 模块路径后调用 “Add” 函数,最终实现数据处理并关闭会话。整个流程展现了…...
视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网
一、背景分析 近年来,学校考试的舞弊现象屡禁不止,严重破坏考试的公平性,不仅损害广大考生的切身利益,也在社会上造成恶劣的影响。为有效制止舞弊行为,收集确凿的舞弊证据,在考场部署一套可靠的视频监控…...
AWS用Glue读取S3文件上传数据到Redshift,再导出到Quicksight完整版,含VPC配置
1. 项目背景 AWS的官方文档,关于Glue和Vpc配置部分已经比较旧了,按照官方文档配置的流程始终跑不通,花了一番时间和波折后,才终于完整的跑通了。 在数据分析和商业智能(BI)领域,我们常需要将存…...
Qt WebSockets使用
Qt WebSockets 是 Qt 官方提供的 WebSocket 协议 实现库,支持全双工通信(客户端/服务端),适用于实时交互应用(如聊天、游戏、实时数据监控)。 1. 核心功能 完整的 WebSocket 协议支持 符合 RFC 6455 标准,支持 ws:// 和 wss://(加密)。 自动处理握手、帧拆分、Ping/…...
Docker学习--容器生命周期管理相关命令--start/stop/restart命令
docker start 命令作用: 启动一个或多个已经创建的容器。 语法: docker start [参数] CONTAINER [CONTAINER…](要操作的容器的名称,可以同时操作多个) 参数解释: -a:附加到容器的标准输入输出…...
dom操作笔记、xml和document等
文章目录 mybatis dom部分 dom(Document Object Model文档对象模型)。 xml和html都属于dom,每天都会用到,一直以为很简单,直到有一天,操作mybatis的xml时候惨不忍睹,被上了一课,做个笔记整理下吧。 xml和ht…...
Python爬虫第3节-会话、Cookies及代理的基本原理
目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中,肯定经常遇到需要登录的场景。有些…...
OkHttpHttpClient
学习链接 okhttp github okhttp官方使用文档 SpringBoot 整合okHttp okhttp3用法 Java中常用的HTTP客户端库:OkHttp和HttpClient(包含请求示例代码) 深入浅出 OkHttp 源码解析及应用实践 httpcomponents-client github apache httpclie…...
android设备出厂前 按键测试 快速实现-屏蔽Home,Power等键
android整机测试,需要测试按键。 一般的键好按,好测试。如:音量加 ,音量- 。 但是,有些按键就不好测了。譬如:电源键(Power),Home键,Menu键,Bac…...
Spring Boot3使用Spring AI通过Ollama集成deepseek
文章目录 项目地址版本信息集成步骤 项目地址 DeepSeekSpringAI实战AI家庭医生应用 版本信息 版本Spring Boot3.4.4JDK21spring-ai1.0.0-M6ollama0.6.3LLMdeepseek:14b 集成步骤 引入依赖 <dependency><groupId>org.springframework.ai</groupId><a…...
c++柔性数组、友元、类模版
目录 1、柔性数组: 2、友元函数: 3、静态成员 注意事项 面试题:c/c static的作用? C语言: C: 为什么可以创建出 objx 4、对象与对象之间的关系 5、类模版 1、柔性数组: #define _CRT_SECURE_NO_WARNINGS #…...
win10 快速搭建 lnmp+swoole 环境 ,部署laravel6 与 swoole框架laravel-s项目1
参考文献 1.dnmp环境 https://github.com/yeszao/dnmp 2.laravel6.0文档 https://learnku.com/docs/laravel/6.x 3.laravels 文档 https://github.com/hhxsv5/laravel-s/blob/master/README-CN.md 安装前准备 1.确认已经安装且配置好docker,能在cmd 中运行 docker …...
【Kafka基础】基础概念解析与消息队列对比
1 Kafka 是什么? Kafka是一个 分布式流处理平台,主要用于 高吞吐量、低延迟的实时数据流处理,最初由LinkedIn开发。 核心特点: 高吞吐量:支持每秒百万级消息处理持久化存储:消息可持久化到磁盘,…...
vue将组件中template转为js
在 Vue 中,组件的 template 需要被转换为 JavaScript 渲染函数(Render Function)才能在浏览器中运行。Vue 2 和 Vue 3 的转换机制有所不同,主要体现在编译时机、编译工具和输出结果上。 1. Vue 2 的 Template 转换 转换方式 Vue…...
Centos 8 安装教程(新手版)
1.需要在阿里开源镜像站下载对应的镜像,如下:https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/ 2.打开VM虚拟机,创建新的虚拟机,选择自定义 如图所示点击进行: 选择下载好的镜像 选择“Linux”,版…...
Vue2函数式组件实战:手写可调用的动态组件,适用于toast轻提示、tip提示、dialog弹窗等
Vue2函数式组件实战:手写可调用的动态组件 一、需求场景分析 在开发中常遇到需要动态调用的组件场景: 全局弹窗提示即时消息通知动态表单验证需要脱离当前DOM树的悬浮组件 传统组件调用方式的痛点:必须预先写入模板,可能还要用…...
ESLint语法报错
ESLint语法报错 运行报错 You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.解决方案 关闭eslint的语法检测,在eslintrc.js文件中…...
大象如何学会太空漫步?美的:科技领先、To B和全球化
中国企业正处在转型的十字路口。一边是全新的技术、全新的市场机遇;一边是转型要面临的沉重负累和巨大投入,无数中国制造、中国品牌仍在寻路,而有的人已经走至半途。 近日,美的集团交出了一份十分亮眼的2024年财报。数据显示&…...
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays 1. 解题思路2. 代码实现 题目链接:3500. Minimum Cost to Divide Array Into Subarrays 1. 解题思路 这一题非常惭愧,没有自己搞定,基本是抄的大佬们的代码,甚至抄…...
已经使用中的clickhouse更改数据目录
在更换的目录操作,这里更换的目录为home目录,原先安装的目录在/soft/clickhouse/ ,在该目录下有data目录和log目录 更改前目录 更改后目录 1、停止clickhouse服务 sudo systemctl stop clickhouse-server 2、在home目录创建clickhouse目录,在clickho…...
PHP的相关配置和优化
进入etc下面 去掉注释 pid run/php-fpm.pid #指定pid文件存放位置 生成一下子配置文件 这些都是生成的fastcgi的配置文件 进入php中,然后复制模版,生成配置文件 然后编辑文件更改时区 改完之后可以生成启动脚本 这时候刷新之后,再启动会报…...
体重秤PCBA电路方案组成结构
体重秤PCBA电路主要由以下几个部分组成: 主控芯片电路 芯片选择:通常采用低功耗、高性能的单片机作为主控芯片,如前面提到的SIC8833等。这类芯片具备丰富的外设接口,可方便地与其他模块进行通信和控制。 电路连接:主控…...
android 加载本地.svg资源的几种引入方式
在 Android 中,可以在 XML 布局文件中引入本地 .svg 资源,但需要先转换为 Android 可识别的格式。主要有以下几种方式: 方式 1:使用 Vector Asset(官方推荐) Android 不支持直接加载 .svg,但可…...
fio磁盘测试工具使用笔记
本文介绍磁盘性能测试工具fio在某国产操作系统(内核4.19,gcc为7.3.0)上的编译和使用。 背景 某项目使用物理机安装某数据库,相关人员提到磁盘性能方面的要求,用fio测试32k的随机读写,性能要达到1万 IOPS。…...
