28BYJ-48步进电机详解(五线四相 STM32)

news2024/11/13 10:30:07

目录

一、介绍

二、模块原理

1.工作原理介绍

2.ULN2003驱动模块原理图

3.引脚描述

三、程序设计

main.c文件

stepmotor.h文件

stepmotor.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

       步进电机(STEP MOTOR)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备,以及打印机、绘图机和磁盘等装置。

以下是28BYJ48步进电机的参数:

型号

28BYJ48

工作电压

5V

直径

28mm

减速比

1:64

驱动方式

ULN2003

相电阻

50±10%

步进角度

5.625°/64

型号代表含义:

28——最大外径是28毫米

B——表示是步进电机

Y——表示是永磁式

J——表示是减速型

48——表示四相八拍

哔哩哔哩视频演示:

28BYJ-48步进电机详解(五线四相 STM32)

(资料分享见文末) 

二、模块原理

1.工作原理介绍

    步进电机通过一系列离散的步进动作来实现旋转。每个电脉冲信号驱动电机转动一个固定的角度,称为步距角。步进电机的控制通常通过一个驱动器(步进驱动器)来完成,该驱动器接受来自控制器的脉冲信号,并将其转换为步进电机的相位信号,从而驱动电机按预定的步进角度转动。

2.ULN2003驱动模块原理图

3.引脚描述

引脚名称

描述

VCC

供给电压DC 5V

IN1

驱动信号1

IN2

驱动信号2

IN3

驱动信号3

IN4

驱动信号4

三、程序设计

使用STM32F103C8T6通过ULN2003驱动板驱动步进电机使其完成正反转动作。

IN1

PA1

IN2

PA2

IN3

PA3

IN4

PA4

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "stepmotor.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	28BYJ-48步进电机实验                     
 * 版本			: V1.0
 * 日期			: 2024.8.31
 * MCU			:	STM32F103C8T6
 * 接口			:	参看stepmotor.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

float co2;
u8 buff[30];//参数显示缓存数组


int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	MOTOR_Init();
	USART1_Config();//串口初始化
	
	OLED_Init();
	printf("Start \n");
	delay_ms(1000);
	
	OLED_Clear();


  while (1)
  {
		MOTOR_Direction_Angle(1,0,90,1);
		delay_ms(1000);
		MOTOR_Direction_Angle(0,0,90,1);
		delay_ms(1000);

  }
}

stepmotor.h文件

#ifndef __STEPMOTOR_H
#define	__STEPMOTOR_H
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"

/*****************辰哥单片机设计******************
											STM32
 * 文件			:	28BYJ-48步进电机h文件                   
 * 版本			: V1.0
 * 日期			: 2024.8.31
 * MCU			:	STM32F103C8T6
 * 接口			:	见代码							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥

**********************BEGIN***********************/


/***************根据自己需求更改****************/
// 步进电机 GPIO宏定义

#define	MOTOR_CLK				RCC_APB2Periph_GPIOA

#define MOTOR_A 				GPIO_Pin_1
#define MOTOR_B 				GPIO_Pin_2
#define MOTOR_C 				GPIO_Pin_3
#define MOTOR_D 				GPIO_Pin_4
#define MOTOR_PROT 			GPIOA

#define MOTOR_A_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_A)
#define MOTOR_A_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_A)

#define MOTOR_B_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_B)
#define MOTOR_B_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_B)

#define MOTOR_C_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_C)
#define MOTOR_C_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_C)

#define MOTOR_D_HIGH GPIO_SetBits(MOTOR_PROT,MOTOR_D)
#define MOTOR_D_LOW GPIO_ResetBits(MOTOR_PROT,MOTOR_D)

/*********************END**********************/

void MOTOR_Init(void);
void MOTOR_Rhythm_4_1_4(u8 step,u8 dly);
void MOTOR_Direction(u8 dir,u8 num,u8 dly);
void MOTOR_Direction_Angle(u8 dir,u8 num,u16 angle,u8 dly);
void MOTOR_STOP(void);
#endif

stepmotor.c文件

#include "stepmotor.h"

/*****************辰哥单片机设计******************
											STM32
 * 文件			:	28BYJ-48步进电机c文件                   
 * 版本			: V1.0
 * 日期			: 2024.8.31
 * MCU			:	STM32F103C8T6
 * 接口			:	见代码							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥

**********************BEGIN***********************/


void MOTOR_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(MOTOR_CLK, ENABLE ); //配置复用时钟
	
	GPIO_InitStructure.GPIO_Pin = MOTOR_A|MOTOR_B|MOTOR_C|MOTOR_D;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(MOTOR_PROT,&GPIO_InitStructure);

	GPIO_ResetBits(GPIOA, MOTOR_A|MOTOR_D|MOTOR_B|MOTOR_C);
}

void MOTOR_Rhythm_4_1_4(uint8_t step,uint8_t dly)
{
	switch(step)
	{
		case 0 :
			;;
		break;
		
		case 1 :
			MOTOR_A_LOW;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_HIGH;	//1
		break;
		
		case 2 :
			MOTOR_A_HIGH;MOTOR_B_LOW;MOTOR_C_HIGH;MOTOR_D_HIGH;	//2
		break;
		
		case 3 :
			MOTOR_A_HIGH;MOTOR_B_HIGH;MOTOR_C_LOW;MOTOR_D_HIGH;	//3
		break;
		
		case 4 :
			MOTOR_A_HIGH;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_LOW;	//4
		break;		
	}
	delay_ms(dly);
}

void MOTOR_Rhythm_4_2_4(uint8_t step,uint8_t dly)
{
	switch(step)
	{
		case 0 :
			;;
		break;
		
		case 1 :
			MOTOR_A_LOW;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_LOW;	//1
		break;
		
		case 2 :
			MOTOR_A_LOW;MOTOR_B_LOW;MOTOR_C_HIGH;MOTOR_D_HIGH;	//2
		break;
		
		case 3 :
			MOTOR_A_HIGH;MOTOR_B_LOW;MOTOR_C_LOW;MOTOR_D_HIGH;	//3
		break;
		
		case 4 :
			MOTOR_A_HIGH;MOTOR_B_HIGH;MOTOR_C_LOW;MOTOR_D_LOW;	//4
		break;		
	}
	
	delay_ms(dly);
}

void MOTOR_Rhythm_4_1_8(uint8_t step,uint8_t dly)
{
	switch(step)
	{
		case 0 :
			;;
		break;
		
		case 1 :
			MOTOR_A_LOW;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_HIGH;	//1
		break;
		
		case 2 :
			MOTOR_A_LOW;MOTOR_B_LOW;MOTOR_C_HIGH;MOTOR_D_HIGH;	//2
		break;
		
		case 3 :
			MOTOR_A_HIGH;MOTOR_B_LOW;MOTOR_C_HIGH;MOTOR_D_HIGH;	//3
		break;
		
		case 4 :
			MOTOR_A_HIGH;MOTOR_B_LOW;MOTOR_C_LOW;MOTOR_D_HIGH;	//4
		break;	
		
		case 5 :
			MOTOR_A_HIGH;MOTOR_B_HIGH;MOTOR_C_LOW;MOTOR_D_HIGH;	//5
		break;
		
		case 6 :
			MOTOR_A_HIGH;MOTOR_B_HIGH;MOTOR_C_LOW;MOTOR_D_LOW;	//6
		break;
		
		case 7 :
			MOTOR_A_HIGH;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_LOW;	//7
		break;
		
		case 8 :
			MOTOR_A_LOW;MOTOR_B_HIGH;MOTOR_C_HIGH;MOTOR_D_LOW;	//8
		break;			
	}
	
	delay_ms(dly);
}

void MOTOR_Direction(uint8_t dir,uint8_t num,uint8_t dly)	//方向 节拍 频率
{
	if(dir)
	{
		switch(num)
		{
			case 0:for(uint8_t i=1;i<9;i++){MOTOR_Rhythm_4_1_8(i,dly);}break;
			case 1:for(uint8_t i=1;i<5;i++){MOTOR_Rhythm_4_1_4(i,dly);}break;
			case 2:for(uint8_t i=1;i<5;i++){MOTOR_Rhythm_4_2_4(i,dly);}break;
			default:break;
		}
	}
	else
	{
		switch(num)
		{
			case 0:for(uint8_t i=8;i>0;i--){MOTOR_Rhythm_4_1_8(i,dly);}break;
			case 1:for(uint8_t i=4;i>0;i--){MOTOR_Rhythm_4_1_4(i,dly);}break;
			case 2:for(uint8_t i=4;i>0;i--){MOTOR_Rhythm_4_2_4(i,dly);}break;
			default:break;
		}	
	}
}

void MOTOR_Direction_Angle(uint8_t dir,uint8_t num,u16 angle,uint8_t dly) //方向 节拍  角度 频率
{
		for(u16 i=0;i<(64*angle/45);i++)	//64*64=4096 64*180=256 //512
		{
			MOTOR_Direction(dir,num,dly);	
		}
}

void MOTOR_STOP(void)
{
	GPIO_ResetBits(GPIOA, MOTOR_A|MOTOR_B|MOTOR_C|MOTOR_D);
}

四、实验效果 

五、资料获取

项目分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

socket编程详解

目录 1.认识socket编程 网络通信的本质 什么是socket编程&#xff1f; 如何进行socket编程&#xff1f; 2.基于UDP的socket编程 服务器端程序编写步骤 1.创建socket 2.将本地信息和网络信息进行绑定 3.接收数据 4.发送数据 客户端程序编写步骤 1.创建socket 2.发送…

再次进阶 舞台王者 第八季完美童模全球赛品牌大使【韩嘉滢】赛场秀场超燃合集!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——韩嘉滢&#xff0c;迎来了她舞台生涯的璀璨时刻。 品牌大使——韩嘉滢&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&am…

第二百二十七节 JPA教程 - JPA日期列定义示例

JPA教程 - JPA日期列定义示例 时间类型是可以在持久状态映射中使用的基于时间的类型集合。 支持的时间类型的列表包括三个java.sql类型&#xff0c;java.sql.Date java.sql.Time和java.sql.Timestamp&#xff0c;以及两个java.util类型&#xff0c;java.util.Date和java.util.…

一家公司给1000个AI代理接入了《我的世界》——他们居然建造了一个社会

当世界上最伟大的沙盒游戏与几乎无限的AI力量结合时会发生什么&#xff1f;你会得到Project Sid&#xff0c;这是前麻省理工学院教授和神经科学家罗伯特杨博士构想出的一个精彩实验。 这位优秀的教授和他在专注于构建最先进自主代理的初创公司Altera.ai的团队决定看看他们是否…

Windows操作系统sid系统唯一标识符查看和修改

1、sid介绍 sid 作为windows系统唯一的标识&#xff0c;对某些集群业务有依赖关系&#xff0c;如果重复可能导致集群部署异常。 如&#xff1a;域控AD 就依赖 sid 功能。 但是某个云主机或虚拟机使用同一个ghost进行操作系统部署&#xff0c;就可能会导致重复的情况&#xf…

【二叉树的性质与存储结构】

1.特殊的二叉树 1.1满二叉树 特点&#xff1a; 每一层上的结点数都是最大结点数(即每层都满)叶子结点全部在最底层满二叉树在同样深度的二叉树中结点个数最多满二叉树在同样深度的二又树中叶子结点个数最多 编号原则&#xff1a; 每一结点位置都有元素从根结点开始&#xf…

探索SVG的奥秘:Python中的svgwrite库

文章目录 探索SVG的奥秘&#xff1a;Python中的svgwrite库背景&#xff1a;为何选择svgwrite&#xff1f;什么是svgwrite&#xff1f;如何安装svgwrite&#xff1f;五个简单的库函数使用方法场景应用&#xff1a;svgwrite在实际中的使用常见问题与解决方案总结 探索SVG的奥秘&a…

表面缺陷检测系统源码分享

表面缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的

1.Ubuntu服务器环境安装 1.1 增加微软包安装源 wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb1.2 Install the .NET SDK # 更新本地软件包列表。原理&am…

多输入多输出 | Matlab实现SSA-BP麻雀搜索算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现SSA-BP麻雀搜索算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现SSA-BP麻雀搜索算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现SSA-BP麻雀搜索算法优化BP神经网络多输…

webpack5-手撸RemoveConsolePlugin插件

写在前面 其实呢&#xff0c;这个东西也就那样&#xff0c;主要是我们得清楚webpack构建过程中的生命周期钩子&#xff0c; 就拿这个插件来说&#xff0c;我们想要把输出的js文件里面的内容中的console语句去掉&#xff0c;那么我们就需要找到webpack处理完文件时的钩子&#…

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的&#xff1f; 事件组使用的场景 学校组织秋游&#xff0c;组长在等待&#xff1a; 张三&#xff1a;我到了 李四&#xff1a;我…

HTB-Vaccine(suid提权、sqlmap、john2zip)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天来为大家讲解Vaccine靶机 渗透过程 信息搜集 服务器开放了 21FTP服务、22SSH服务、80HTTP服务 通过匿名登录FTP服务器 通过匿名登录到服务器&#xff0c;发现backup.zip文件&#xff0c;可能存在账号密码 发现b…

centos上开启mysql远程访问功能

自从mysql8以后&#xff0c;mysql有些命令变了&#xff0c;例如授权需要分成好几行。如果想远程访问mysql&#xff0c;那么可以这样做&#xff1a; mysql -u root -p mysql //先登录mysql create user root% identified by 你自己的密码;//先建立一个root用户和密码 grant a…

大模型日报|16 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 清华团队提出歌曲生成模型 SongCreator 虽然此前研究已对歌曲生成的各个方面进行了探索&#xff0c;如歌唱发声、声乐创作和乐器编曲等&#xff0c;但要生成既有歌词又有人声和伴奏的歌曲仍是一项重大挑战&#xff0…

SpringMVC的初理解

1. SpringMVC是对表述层&#xff08;Controller&#xff09;解决方案 主要是 1.简化前端参数接收( 形参列表 ) 2.简化后端数据响应(返回值) 1.数据的接受 1.路径的匹配 使用RequestMapping(可以在类上或在方法上)&#xff0c;支持模糊查询&#xff0c;在内部有method附带…

【数据分析】利用Python+AI+工作流实现自动化数据分析-全流程讲解

文章目录 一、为什么要用AI进行自动化分析&#xff1f;二、AI自动化分析场景三、编写Python脚本示例1、用flask实现让AI分析数据内容使用说明&#xff1a;示例2、用定时任务的方式&#xff0c;定时处理AI数据&#x1f4cb; 代码说明 四、把AI分析的数据&#xff0c;放到AI工作流…

详聊LLaMa技术细节:LLaMA大模型是如何炼成的?

本文介绍来自 Meta AI 的 LLaMa 模型&#xff0c;类似于 OPT&#xff0c;也是一种完全开源的大语言模型。LLaMa 的参数量级从 7B 到 65B 大小不等&#xff0c;是在数万亿个 token 上面训练得到。值得一提的是&#xff0c;LLaMa 虽然只使用公共的数据集&#xff0c;依然取得了强…

从AI到大数据,数字技术服务平台全栈赋能企业升级

在当今科技迅猛发展的时代&#xff0c;从 AI&#xff08;人工智能&#xff09;到大数据&#xff0c;数字技术正以前所未有的速度重塑着各个行业。而数字技术服务平台&#xff0c;则如同一位强大的魔法师&#xff0c;全栈赋能企业升级&#xff0c;为企业开启崭新的发展篇章。 AI…

若依搭建vue3项目

搭建vue3后台管理系统页面&#xff0c;与vue2基本一致&#xff0c;方便以后可以快速搭建&#xff0c;现在将基础搭建以及若依框架搭建流程再次梳理一下 文章目录 环境准备1. Node.js环境安装2. 推荐包管理器&#xff1a;pnpm3. 安装create-vue工具 方式一&#xff1a;脚手架搭建…