基于stm32f103ZET6开发板驱动28BYJ-48步进电机

  • 这里使用ULN2003驱动步进电机,所以只需要找到合适的IO口连接到驱动芯片的IN1~4脚即可,再通过IO口依次输出高电平再拉低即可完成驱动
  • BSP_GPIO.h头文件(名字随便取的,不要在意)

这里使用ULN2003驱动步进电机,所以只需要找到合适的IO口连接到驱动芯片的IN1~4脚即可,再通过IO口依次输出高电平再拉低即可完成驱动

本代码使用的是PA0~3,依次连接的是IN1-4,如果更改成其他IO口则只需要修改对应的IO初始化函数。

BSP_GPIO.h头文件(名字随便取的,不要在意)

#ifndef __BSP_GPIO_H
#define __BSP_GPIO_H
#include "sys.h"
#include "delay.h"void Motor_GPIOInit (void); //GPIO初始化函数
void Motor_CW(void);                //步进电机测试函数,逆时针转动
void SysTick_Delay_Ms(__IO uint32_t );  //滴答定时器
void Motor_SW(void);                //步进电机测试函数,顺时针转动
void Motor_ctrl_angle(int dire ,int angle); //dire:0:顺时针,1:逆时针;angle:控制转动角度
void Motor_ctrl_motor(int dire,float cycle);    //这里只是把上一个函数的转动角度转化成转动周期
void MotorStop(void);   //停止转动#endif

头文件里定义了有关步进电机使用的所有驱动函数申明

下面是BSP_GPIO.c文件
. 在这里实现所有函数

#include "bsp_gpio.h"
#include "stm32f10x.h"
u32 DELAY_TIME =8500;      //控制转动速度void Motor_GPIOInit (void)
{GPIO_InitTypeDef GPIO_InitStructure;   //定义DPIO初始化结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //使能GPIOA的时钟GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //引脚用|运算将Pin0-4全部选中GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_Write(GPIOB,0x0000);          //默认电平拉低}void Motor_CW(void)            //逆时针转动,从IN1-4依次输出高电平再拉低,DELAY_TIME最低设置6500,太小步进电机只震动不转动
{GPIO_SetBits(GPIOA,GPIO_Pin_0);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_0);GPIO_SetBits(GPIOA,GPIO_Pin_1);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_2);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_3);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_3);
}void Motor_SW(void)            //顺时针转动
{GPIO_SetBits(GPIOA,GPIO_Pin_3);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_2);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_1);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_0);SysTick_Delay_Ms(DELAY_TIME);GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}void Motor_ctrl_angle(int dire ,int angle)     //dire控制转动方向,angle控制转动角度
{int j=0;if(dire==0)     {               //顺时针转动for(j=0;j<64*angle/45;j++) //将角度转化成循环次数,公式是网上CV的,精度不是很高。具体原理请查看步进电机资料,是根据步距角决定的{Motor_SW();}MotorStop();}else         {       //逆时针转for(j=0;j<64*angle/45;j++){Motor_CW();} MotorStop();}}void Motor_ctrl_motor(int dire,float cycle)           //dire控制转动方向;cycle控制转动周期,就是转几圈
{int angle=cycle*360;Motor_ctrl_angle(dire , angle);}void MotorStop(void) //转动停止
{  GPIO_Write(GPIOB,0x0000);
}void SysTick_Delay_Ms(__IO uint32_t ms)
{uint32_t i;SysTick_Config(72000);for(i=0; i<ms ; i++){while(!(SysTick->CTRL)&(1<<16));}SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;
}

**代码是我自己手动敲的,用的板子是正点原子stm32精英板,程序能跑,没有任何问题
**
关于IO口输出的电平时序我这里使用的是最简单的,如果有兴趣可以查看连接:https://howtomechatronics.com/how-it-works/electrical-engineering/stepper-motor/
这里面讲解了不同时序的驱动方式

人生第一篇文章,有不好的 或者说错了的欢迎指正

stm32 驱动步进电机相关推荐

  1. 用stm32驱动步进电机(一) ——使用ULN2003芯片

    概述 随着嵌入式系统的发展,步进电机的使用开始激增,只要涉及到把物体从一个地方移动到另外一个地方,都少不了步进电机的身影.本教程以stm32为例,使用ULN2003,TB6600电机驱动板,A4988 ...

  2. STM32驱动步进电机(最全的版本寄存器+HAL库实现)

    步进电机 1 简介 1.1 什么是步进电机 1.2 步进电机和直流电机区别 1.3 器材与配置 1.3.1 步进电机 1.3.2 驱动器 1.3.3 引脚 2 定时器的 3 驱动代码 3.1 初始化 ...

  3. 【常用芯片】ULN2003工作原理及中文资料(实例:STM32驱动28BYJ48步进电机)

    ULN2003的基本介绍 ULN2003的概述 ULN2003是高耐压.大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成.一般采用DIP-16 或SOP-16 塑料封装. ULN2003的主要特点 ...

  4. STM32驱动十个步进电机

    https://download.csdn.net/download/qq_36958104/12015084 程序链接 脉冲很正点   //stm32驱动步进电机 串口输出控制旋转角度 光电开关检测 ...

  5. 【STM32】步进电机及其驱动(ULN2003驱动28BYJ-48丨按键控制电机旋转)

    本篇文章包含的内容 一.步进电机的结构和工作原理 1.1 步进控制系统的组成 1.2 步进电机简介 1.3 步进电机的分类 1.4 步进电机的工作原理 1.4.1 单极性步进电机(5线4相) 1.4. ...

  6. STM32+ULN2003驱动步进电机

    选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下: 四相八拍:A->AB->B ->BC -& ...

  7. STM32控制ULN2003驱动步进电机28BYJ-48

    步进电机 步进电动机又称脉冲电动机,是一种将电脉冲信号转换成相应角位移或线位移的电动机.每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正 ...

  8. 【STM32篇】4988驱动步进电机

    本文介绍的步进电机驱动为毕设所用,学习时也借鉴了其他博主和商家的资料,介绍的都很详细.但对于刚入门的友友萌来说,可能还会存在的一些不解.而我就是被卡在驱动电源上.下文为我对4988驱动的一些理解,希望 ...

  9. STM32H743+CubeMX-SPI与DRV8889串行通讯,驱动步进电机

    文章目录 一.前言 二.硬件设计 2.1.PCB原理图设计 2.2.PCB Layout 三.CubeMX 3.1.RCC 3.2.DEBUG 3.3.Clock Configuration 3.4. ...

  10. arduino步进电机程序库_【MM32 eMiniBoard测评报告】+驱动步进电机

    1. 引言 先简单聊一下我与MM32的故事.在去年,我开始做BLDC的项目,于是开始学习了解各家的mcu及其解决方案.有幸获得了灵动微电子的MM32 SPIN系列开发板,给我的感觉是开发板做工精良,开 ...

最新文章

  1. php 设置断点,PHP xdebug安装配置(支持断点调试)
  2. Fragment之三:根据屏幕尺寸加载不同的Fragment
  3. VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”
  4. 锂价疯涨 马斯克说特斯拉可能不得不去开采和提炼锂
  5. 无法下载php怎办,php无法下载大文件怎么办
  6. c语言编译器苹果下载,c语言编译器ios下载
  7. 关于双网卡同时连接内外网
  8. iPhoneXS、XS Max与iPhoneXR 适配
  9. 如何分享带淘宝客的链接到新浪微博
  10. 谱密度 matlab,功率谱密度估计方法的matlab实现.doc
  11. go 通道 并发 顺序_并发Go中的锁定与通道
  12. 数码相机导入计算机软件,佳能相机照片导入电脑软件(Image Transfer Utility)
  13. Android 代码形式安装证书到手机内
  14. DataFrame按某种指定顺序排序
  15. 【文智背后的奥秘】系列篇——关键词智能提取
  16. 软件项目开发,交付文档(全)
  17. 力扣 345. 反转字符串中的元音字母
  18. 新手坐高铁怎么找车厢_新手坐高铁怎么找车厢 - TABUZHE
  19. 服装设计Marvelous Designer 11程序安装及注意事项
  20. 基于ibeacon的博物馆智能导览系统解决方案

热门文章

  1. 项目经理应该知道的五种项目管理工具
  2. 34 WebGL物体的点光源的效果(逐顶点处理光源光照效果)
  3. 强烈推荐10本程序员必读的书
  4. 在win10系统中批量修改文件名称
  5. 【转】什么是Online Learning
  6. 网络蛋白质组学在计算机中应用,蛋白质组学分析灵芝酸D的细胞毒性机制和计算机预测其可能的作用网络...
  7. 计算机学院转会,2020年英超冬窗转会汇总,你主队的操作让你满意吗?
  8. 加拿大大学计算机研究生专业排名,加拿大公立大学计算机专业研究生排名2013...
  9. 英文名字的昵称(亲切的叫法)
  10. php公众号模板消息重复3,如何利用微信公众号模板消息实现每天多次群发