STM32单片机+28BYJ-48步进电机+ULN2003驱动板+OLED屏幕+步进电机角度数据发送到串口调试助手+源代码

目录

一、步进电机模块介绍

二、步进电机模块接线说明

三、测试说明、步进电机驱动代码 

四、串口调试助手把采集的旋转角度数据发送出来

五、源代码 

六、串口调试助手软件

七、步进电机原理图资料 


一、步进电机模块介绍

        步进电机是一种特殊的电机,它按照一定步距进行旋转,每个步距都对应一个特定的转角,因此可以精确地控制电机的位置和运动。与直流电机相比,步进电机具有较高的位置精度、较低的噪音、较低的功耗等优点,因此在自动化、机器人、电子设备等领域中得到了广泛应用。
步进电机通常由定子和转子两部分组成。定子包括一个或多个线圈,转子包括一个或多个磁性极对。通过控制定子线圈的电流,可以使磁性极对依次被吸引和排斥,从而实现电机的旋转。步进电机根据线圈数目、旋转角度、旋转精度等特点可以分为不同类型,如单相步进电机、两相步进电机、三相步进电机等。
        通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

        ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。
简单地说,ULN2003其实就是用来放大电流的,增加驱动能力。比如说单片机输出引脚一般输出就几mA,是无法驱动电机、继电器或者电磁阀的,像要让直流电机转需要500mA,而用ULN2003放大后,可以通过单片机的输出引脚直接控制这些设备。
由于单片机的引脚输出电流太低了,无法驱动大部分的设备。而ULN2003只相当于是一个开关,设备(负载)的供电是在外围电路上,而它能够通过微弱的单片机输出电流来控制外围电路的开闭。这某种程度上也可以说是,放大电流,增加驱动能力。

        采用STM32驱动28BYJ4步进电机,实现正转反转,完成角度调整。步进电机是一种将电脉冲转化为角位移的执行机构。

二、步进电机模块接线说明

1 VCC 外接5V

2 GND 外接GND

3 IN1-IN4 分别接到stm32单片机上的PA3,PA4,PA5,PA6引脚。

4 电机四线接头 插入ULN2003驱动板。该连接器是带键的,因此只能以一种方式进入。

三、测试说明、步进电机驱动代码 

编译环境:keil5

测试单片机: STM32F103C8T6

功能:按键按下步进电机逆时针旋转360度。OLED屏幕显示旋转的角度变化。

Motor.c文件编写步进电机驱动代码如下:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
void Motor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4|GPIO_Pin_5 | GPIO_Pin_6;    //PA3,PA4,PA5,PA6¿ØÖƲ½½øÇý¶¯Òý½Å
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
}



//A-B-C-D    

void Motor_One(uint16_t speed)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_3);
	GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5 | GPIO_Pin_6);	
	Delay_ms(speed);

	
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_5 | GPIO_Pin_6);	
	Delay_ms(speed);

	
	GPIO_SetBits(GPIOA,GPIO_Pin_5);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4 | GPIO_Pin_6);	
	Delay_ms(speed);

	
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4 | GPIO_Pin_5);	
	Delay_ms(speed);

}



//   AB-BC-CD-DA

void Motor_two(uint16_t speed)
{	
	GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4);
	GPIO_ResetBits(GPIOA,GPIO_Pin_5 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3 | GPIO_Pin_4);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_3);
	GPIO_ResetBits(GPIOA,GPIO_Pin_4 | GPIO_Pin_5);	
	Delay_ms(speed);

	
}


//  A-AB-B-BC-C-CD-D-DA

void Motor_one_two(uint16_t speed)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_3);
	GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4);
	GPIO_ResetBits(GPIOA,GPIO_Pin_5 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_5 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_5);
	GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4 | GPIO_Pin_6);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3 | GPIO_Pin_4);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	GPIO_ResetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4 | GPIO_Pin_5);	
	Delay_ms(speed);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_3);
	GPIO_ResetBits(GPIOA,GPIO_Pin_4 | GPIO_Pin_5);	
	Delay_ms(speed);
}

 Motor.h文件,对步进电机驱动函数经行了声明:

#ifndef __MOTOR_H
#define __MOTOR_H

void Motor_Init(void);

void Motor_One(uint16_t speed);
void Motor_two(uint16_t speed);
void Motor_one_two(uint16_t speed);
#endif

四、串口调试助手把采集的旋转角度数据发送出来

printf("步进电机旋转角度 = %d° \r\n",0);

五、源代码 

《STM32单片机+28BYJ-48步进电机+ULN2003驱动板+OLED屏幕+步进电机角度数据发送到串口调试助手》源代码_步进电机28BYJ48+ULN2003驱动板器资源-CSDN文库

六、串口调试助手软件

串口调试助手-keil5调试工具资源-CSDN文库

七、步进电机原理图资料 

28BYJ-48步进电机传感器原理图、模块资料资源-CSDN文库

  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

STM32单片机定制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值