用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度

这篇具有很好参考价值的文章主要介绍了用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在我们平时做一些小项目的时候,需要用到步进电机驱动某一部件转动某一固定角度或者是走过固定长度。

比如自制一个具有扫风功能的小风扇,由于风扇自身尺寸偏小,使用如图1所示传统的复杂机械结还构去实现扫风功能偏难,反而会影响风扇的运行效果和产生噪音。

用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度
图1

还比如用超声波制作一个类似于雷达扫描的装置感知周围环境轮廓,需要使用某种旋转机构驱动超声波探头匀速旋转固定角度。

针对以上需求,有两种解决方案,一种是选择扭力合适的舵机,另一种就是选用如图2所示的4相5线步进电机,其型号为28BYJ-48,驱动电压为5V,需要使用ULN2003驱动板进行驱动,如图3所示。

用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度
图2
用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度
图3

 下面就具体介绍如何使用STM32单片机驱动它转动固定角度吧,亲测有效好用。

一、STM32和ULN2003驱动板接线

STM32F103C8T6 ULN2003驱动板
PB6 IN1
PB7 IN2
PB8 IN3
PB9 IN4

驱动板供电需单独供电,电压范围5-12V,不建议用单片机进行供电,因为单片机是微控制器,不是驱动器。

然后接线的实物图如图4所示。

用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度
图4

 二、STM32F103C8T6程序编写

1、在工程里面新建step.h文件,在里面定义电机所用端口

/* 定义步进电机连接的GPIO端口*/
#define IN1_PORT		GPIOB
#define IN1_CLK			RCC_APB2Periph_GPIOB
#define IN1_PIN			GPIO_Pin_6

#define IN2_PORT		GPIOB
#define IN2_CLK			RCC_APB2Periph_GPIOB
#define IN2_PIN			GPIO_Pin_7

#define IN3_PORT		GPIOB
#define IN3_CLK			RCC_APB2Periph_GPIOB
#define IN3_PIN			GPIO_Pin_8

#define IN4_PORT		GPIOB
#define IN4_CLK			RCC_APB2Periph_GPIOB
#define IN4_PIN			GPIO_Pin_9

2、新建step.c文件,编写step引脚初始化函数:

void STEP_GPIO_Config(void)
{
		/*定义一个GPIO_InitTypeDef类型的结构体*/
		GPIO_InitTypeDef GPIO_InitStructure;

		/*开启STEP相关的GPIO外设时钟*/
		RCC_APB2PeriphClockCmd( IN1_CLK | IN2_CLK | IN3_CLK | IN4_CLK, ENABLE);
		/*选择要控制STEP的GPIO引脚*/
		GPIO_InitStructure.GPIO_Pin = IN1_PIN;	

		/*设置引脚模式为通用推挽输出*/
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

		/*设置引脚速率为50MHz */   
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

		/*调用库函数,初始化GPIO*/
		GPIO_Init(IN1_PORT, &GPIO_InitStructure);	
		
		GPIO_InitStructure.GPIO_Pin = IN2_PIN;
		GPIO_Init(IN2_PORT, &GPIO_InitStructure);
		
		GPIO_InitStructure.GPIO_Pin = IN3_PIN;
		GPIO_Init(IN3_PORT, &GPIO_InitStructure);

		GPIO_InitStructure.GPIO_Pin = IN4_PIN;
		GPIO_Init(IN4_PORT, &GPIO_InitStructure);

		/* 初始化电机引脚	*/
		GPIO_ResetBits(IN1_PORT, IN1_PIN);
		GPIO_ResetBits(IN2_PORT, IN2_PIN);	 
		GPIO_ResetBits(IN3_PORT, IN3_PIN);
		GPIO_ResetBits(IN4_PORT, IN4_PIN);
}

3、编写正反转、停止函数

 先定义使电机正反转的编码数组

unsigned short phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A   反转
unsigned short phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D   正转

 然后编写正转、反转、停止函数,里面的SysTick_Delay_Ms(3);函数是在系统时钟配置函数里面编写的进准延时函数,单位是ms,这里使用延时3ms。

void MotoRccw(void)  //正转
{  
    int i;  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOB,phaseccw[i]);  
        SysTick_Delay_Ms(3); 
    }  
}

void MotoRcw(void)  //反转
{  
    int i;  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOB,phasecw[i]);  
        SysTick_Delay_Ms(3);
    }  
}

void MotorStop(void) //停止
{  
    GPIO_Write(GPIOB,0x0000);  
}

 4、编写电机正/反转特定角度函数

//控制电机正转还是反转某个角度
//direction方向,1为正转,0为反转
//angle角度,0-360度
void Motor_Ctrl_Direction_Angle(int direction, int angle)
{
	u16 j;
	if(direction == 1)
	{
		for(j=0;j<64*angle/45;j++) 
		{
			MotoRccw();//正转
		}
		MotorStop();//停止
  }
	else
	{
		for(j=0;j<64*angle/45;j++) 
		{
			MotoRcw();//反转
		}
		MotorStop();//停止
	}
}

最后别忘了将.c文件编写的函数在.h文件里面申明

void STEP_GPIO_Config(void);
void MotorStop(void);				
void MotoRccw(void);
void MotoRcw(void);
void Motor_Ctrl_Direction_Angle(int direction, int angle);

 5、编写主函数程序

通过死循环让电机往复循环转动360度。

while(1)
	{
		Motor_Ctrl_Direction_Angle(1,360);//正转180度
		SysTick_Delay_Ms(500);
		Motor_Ctrl_Direction_Angle(0,360);//反转90度
		SysTick_Delay_Ms(500);
	}

然后,这样就可以在此基础上修改主程序代码,实现自己想要的效果啦!

完整工程代码连接:https://gitee.com/liangshuzhi/stm32-project-engineering.git文章来源地址https://www.toymoban.com/news/detail-418430.html

到了这里,关于用STM32和ULN2003控制28BYJ-48步进电机正反转固定角度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 步进电机28BYJ-48

    1. 步进电机原理 步进电机:是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度。 步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB),后两种常用。 步进电机控制特点: 它是通过输入

    2024年02月17日
    浏览(35)
  • 51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

    步进电机28BYJ-48(12V)介绍:       首先,我们看下步进电机28BYJ-48(12V)外观图,如下:         28BYJ-48(12V)含义如下:28表示电机直径28毫米,B表示电机 ,Y表示永磁,J表示带减速箱,48表示四相八拍。       下面解释下“4 相永磁式”的概念,28BYJ-48 的构造如下图所示

    2023年04月17日
    浏览(46)
  • 设计分享 | STM32F103RCT6利用ULN2003驱动步进电机正反转

    https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a86e13f421741aefd08cedb169708309c79566ab1ftoken=1923877603lang=zh_CN#rd https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a8

    2023年04月17日
    浏览(58)
  • ULN2003步进电机驱动电路详解

    一.ULN2003芯片介绍         ULN2003 是高耐压、大电流达林顿陈列,由七个硅 NPN 达林顿管组成。该电路的特点如下: ULN2003 的每一对达林顿都串联一个 2.7K 的基极电阻,在 5V 的工作电压下它能与 TTL 和 CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理

    2024年01月18日
    浏览(52)
  • 51单片机双轴太阳能追光追日系统ULN2003步进电机

    功能介绍:    

    2023年04月09日
    浏览(55)
  • STM32控制42步进电机

    首先采用TB6600驱动外接12VDC电源。 STM32选c8t6最小系统板 接线TB6600跟32接线有共阴级接法(把ENA-,DIR-,PUL-与32共地)也有共阳接法(把ENA+,DIR+,PUL+与32共地)。这里选共阴级接法。 判断42步进电机的4根线哪两根是A相(A-和A+),哪两根是B相(B-和B+),方法:将任意两根线短接起来

    2024年02月16日
    浏览(74)
  • STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    该篇文章中用到的步进电机闭环驱动器为Emm42_V4.0步进电机闭环驱动器。该闭环驱动器自带FOC矢量闭环控制算法,能实现力矩、速度、位置三环控制。 如下图所示,该42步进闭环电机驱动器的A+、A-、B+、B-连接步进电机,通过右侧的使能、脉冲、方向端对步进电机进行驱动控制

    2024年02月01日
    浏览(56)
  • STM32基于CAN总线协议控制步进电机

    如上图所示,实现了以下功能: 1.两块stm32单片机通过CAN控制器与收发器进行半双工通信; 2.stm32主机通过检测按键,切换不同的模式,将不同模式的case值发送给stm32从机; 3.stm32从机根据收到的case值,控制步进电机进行不同的运动操作; 4.OLED用于显示收发内容与按键状态等

    2024年01月19日
    浏览(51)
  • 基于STM32闭环步进电机控制系统设计

    ** 单片机设计介绍,1654基于STM32闭环步进电机控制系统设计(仿真,程序,说明)   基于STM32的闭环步进电机控制系统设计是一种利用STM32微控制器开发的系统,用于实现对步进电机的精确控制。以下是该系统的一般设计概述: STM32微控制器:作为主控芯片,STM32具备高性能

    2024年02月08日
    浏览(46)
  • STM32控制四个步进电机(包含运行程序)

    软件: keil 5(其他版本也ok) 硬件: 步进电机(我用的是42)×4;单片机开发板(本例使用STM32F407ZGT6);电机驱动器×4;外部按键;杜邦线。 实验效果: 四个步进电机对应四个外部按键,按下对应的外部按键选择需要控制的电机。 在开发板上按下KEYO,步进电机以500HZ的频率

    2024年04月29日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包