0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32+ULN2003驱动28BYJ4步进电机(正反转)

1126626497 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-03-21 09:26 次阅读

一、环境介绍

MCU: STM32F103ZET6

编程软件: Keil5

二、硬件介绍

开发板采用STM32F103ZET6 最小系统板

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

电机驱动板采用的是ULN2003

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

步进电机采用的是28BYJ4 (5V 4相5线步进电机)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

三、驱动代码

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.1 motor.c

#include "motor.h"


//步进电机正反转数组1
u16 PositiveSequence[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A   
u16 ReverseOrder[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D.


void motor_delay_ms(u32 ms)
{
 u32 i,j;
	for(i=0;iAPB2ENR|=1<<4;
    GPIOC->CRL&=0x00FFFFFF;
    GPIOC->CRL|=0x33000000;
    GPIOC->CRH&=0xFFFFFF00;
    GPIOC->CRH|=0x00000033;
	
// IN4: PC9   d
// IN3: PC8   c
// IN2: PC7   b
// IN1: PC6   a
}

void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
{
  GPIOx->ODR = PortVal;
}


void motor_just(int speed)  //一个脉冲
{  
    uint8_t i;  
  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOC,PositiveSequence[i]);
        motor_delay_ms(speed);  
    }
}


void motor_back(int speed)  
{  
    uint8_t i;  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOC,ReverseOrder[i]);  
        motor_delay_ms(speed);  
    } 

}


//由于   *一个脉冲*   *输出轴*  转0.08789度(电机实转0.08789*64=5.625度),即步进角为5.625度。则转完A-B-C-D为  *8个脉冲*  
//,即0.08789*8=0.70312度。若称A-B-C-D为一个周期,则j为需要的转完angle角度所需的周期数。
//步进电机正转角度函数
void motor_just_angle(int angle,int speed)
{
	int i,j;
	j=(int)(angle/0.70312);
	for(i=0;i;i++)>;i++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.2 motor.h

#ifndef _MOTOR_H
#define _MOTOR_H
#include "sys.h"

void motor_delay_ms(u32 x);//延时函数
void motor_init(void);  //步进电机初始化
void motor_just(int speed);    //步进电机正转函数
void motor_back(int speed);   //步进电机反转函数
void motor_just_angle(int angle,int speed);  //步进电机正转角度函数
void motor_back_angle(int angle,int speed); //步进电机反转角度函数
void motor_stop(void);  //步进电机停止函数
void motor_just_circle(int ring ,int speed); //步进电机正转圈函数
void motor_back_circle(int ring ,int speed);//步进电机反转圈函数

//IN
#define MOTOR_1  PCout(6)
#define MOTOR_2  PCout(7)
#define MOTOR_3  PCout(8)
#define MOTOR_4  PCout(9)

#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 main.c

/*
ULN2003控制28BYJ-48步进电机接线:

ULN2003接线:
IN4: PC9   d
IN3: PC8   c
IN2: PC7   b
IN1: PC6   a
+  : 5V
-  : GND
*/

int main()
{
    u8 time_cnt=0;
    u8 key;
    LED_Init();
    KEY_Init();
    USART1_Init(115200);
    motor_init();  //步进电机初始化
    USART1_Printf("程序初始化.....\r\n");
    
	 while(1)
	 {
         //按键可以测试开锁和关锁
        key=KEY_Scan(0);
        if(key==1)
        {
            LED1=0;  //亮灯--表示开锁
            motor_just_circle(1,300);   //电机正转1圈
        }
        else if(key==2)
        {
            LED1=1;  //灭灯--表示关锁
            motor_back_circle(1,300);  //电机反转1圈
        } 

        DelayMs(10);
        time_cnt++;
        if(time_cnt>=50)
        {
            time_cnt=0;
            LED2=!LED2;
        }
	 }
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10903

    浏览量

    356276
  • 硬件
    +关注

    关注

    11

    文章

    3341

    浏览量

    66253
  • 步进电机
    +关注

    关注

    150

    文章

    3112

    浏览量

    147537
收藏 人收藏

    评论

    相关推荐

    STM32+ULN2003驱动28BYJ4步进电机驱动代码是什么?

    STM32+ULN2003驱动28BYJ4步进电机的硬件有哪些?STM32+ULN2003
    发表于 06-29 08:53

    STM32+ULN2003驱动28BYJ4步进电机相关资料分享

    一、环境介绍MCU: STM32F103ZET6编程软件: Keil5二、硬件介绍开发板采用STM32F103ZET6 最小系统板电机驱动板采用的是
    发表于 06-29 06:15

    STM8S103F3P6+步进电机28BYJ-48+ULN2003实现简单的正反转demo

    STM32F103+步进电机28BYJ-48+ULN2003 实现简单的正反转demo这篇文章的拓展,针对此文章的程序
    发表于 06-29 07:16

    Arduino,ULN200328YJ-48步进电机执行控制 相关资料下载

    使用ULN2003驱动板和Arduino控制28BYJ-48步进电机的所有信息。我提供了数据表,接线图和许多示例代码!在每个示例之后,我都会
    发表于 07-08 09:26

    28BYJ-48步进电机+ULN2003驱动程序是什么

    28BYJ-48步进电机+ULN2003驱动程序(STM32
    发表于 07-08 07:13

    28BYJ-48步进电机是什么?

    基于STM32单片机的28BYJ-48步进电机驱动一、ULN2003这是
    发表于 07-08 06:33

    如何根据STM32F103+步进电机28BYJ-48+ULN2003实现简单的正反转

    如何根据STM32F103+步进电机28BYJ-48+ULN2003实现简单的正反转
    发表于 10-15 07:57

    STM32F103+步进电机28BYJ-48+ULN2003如何实现简单的正反转

    STM32F103+步进电机28BYJ-48+ULN2003如何实现简单的正反转
    发表于 10-15 09:15

    如何使用ULN2003驱动28BYJ-48步进电机

    如何使用ULN2003驱动28BYJ-48步进电机
    发表于 10-18 06:24

    分享一个不错的28BYJ-48步进电机+ULN2003驱动程序

    分享一个不错的28BYJ-48步进电机+ULN2003驱动程序
    发表于 12-21 06:31

    ULN2003APG芯片是如何驱动28BYJ-48步进电机

    ULN2003APG芯片是如何驱动28BYJ-48步进电机的?
    发表于 12-21 07:11

    ULN2003驱动28BYJ48步进电机STM32F103版库函数合集免费下载

    ULN2003驱动28BYJ48步进电机STM32F103版库函数合集免费下载
    发表于 03-10 08:00 0次下载
    <b class='flag-5'>ULN2003</b><b class='flag-5'>驱动</b><b class='flag-5'>28BYJ</b>48<b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>STM32</b>F103版库函数合集免费下载

    STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)

    一、环境介绍MCU: STM32F103ZET6编程软件: Keil5二、硬件介绍开发板采用STM32F103ZET6 最小系统板电机驱动板采用的是
    发表于 12-05 19:21 47次下载
    <b class='flag-5'>STM32+ULN2003</b><b class='flag-5'>驱动</b><b class='flag-5'>28BYJ4</b><b class='flag-5'>步进</b><b class='flag-5'>电机</b>(根据圈数正转、<b class='flag-5'>反转</b>)

    STM8S103F3P6+步进电机28BYJ-48+ULN2003 实现简单的正反转demo

    STM32F103+步进电机28BYJ-48+ULN2003 实现简单的正反转demo这篇文章的拓展,针对此文章的程序
    发表于 12-27 18:28 24次下载
    STM8S103F3P6+<b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>28BYJ-48+ULN2003</b> 实现简单的<b class='flag-5'>正反转</b>demo

    STM32F103RCT6利用ULN2003驱动步进电机正反转

    接通电源后,电机开始正转,转够一圈后,电机开始反转,同时在OLED上会显示forward和reverse分别表示正反转 器件 :STM32
    发表于 03-24 09:55 13次下载
    <b class='flag-5'>STM32</b>F103RCT6利用<b class='flag-5'>ULN2003</b><b class='flag-5'>驱动</b><b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>正反转</b>