今天来简单测试一下用STM32驱动步进电机。

方法是通过STM32控制A4988模块来驱动步进电机。A4988 是一款带转换器和过流保护的 DMOS 微步进电机驱动器,它用于操作双极步进 电机,在步进模式,输出驱动的能力 35V 和±2A。该 A4988 包括一个固定关断时间电流调 节它有能力在慢或混合衰减模式运作。 转换器是 A4988 易于实施的关键。只要在“步进”输入中输入一个脉冲,即可驱动电动机产生微步。

首先,先描述一下用到的A4988和A4988模块扩展板。

如下图为tb上可买的常见的步进电机驱动板,多用于3D打印,CNC雕刻机等的控制。

当我们将A4988安装到 CNC扩展板以后,它就变成了下面的样子。注意,安装A4988驱动板的时候请注意驱动板安装方向不要搞反。

如下图所示,CNC扩展板的步进模式设置插针是用来设置电机步进模式的。通过向插针安装跳线帽,我们可以改变电机的步进模式。

步进模式设置可参考下表的内容。

测试中选择型号为 17HS5413(42BYGH)的两相四线步进电机,步距角为 1.8°,200 个 脉冲转动一圈。

A4988模块中:STEP、DIR 分别连接单片机的两个控制端口,EN 可以使用单片机端口控制,也可以直接连接 GND 使能,EN=0时成功被使能;MS1、MS2、MS3 按照上表“步进模式设置”,接高低电平,设置步进模式,来选择不同的步距角。例如全模式时,一个脉冲,步进电机旋转角度 1.8°;在 1/4 模式时,一个脉冲,步进电机旋转角度为 0.45°。设置脉冲的频率,来控制旋转速度。 2B、2A、1A、1B 分别接步进电机红、蓝、黑、绿线。 VMOT、GND 接 12V 左右直流电源。 VDD、GND 接 3.3V 或 5V。A4988模块的引脚图如下。1A、1B、2A、2B引脚接步进电机的四条引线,其中1A1B为一组,2A2B为一组,可以用万用表测试一下,互相导通的两个端口是一组,本次测试用到的步进电机黑线与绿线是一组,红线与蓝线是一组。如果你的电机线是标准的红蓝绿黑的颜色,可以按照颜色连接为:红-蓝-绿-黑,或相反:黑-绿-蓝-红。本次接线为:A1——绿线、B1——黑线、A2——红线、B2——蓝线。

步进电机控制插针如下图所示,步进电机控制插针共有两排。

在插针旁印有各个引脚的名称标识。每行插针标识都使用”/”作为分割。”/”左侧的文字是图中蓝色插针的引脚标识。”/”右侧的文字是图中黄色插针的引脚标识。

以下是这组引脚的功能。

EN: 所有电机驱动板使能引脚/低电平有效。(此引脚与各端口上的A4988 EN引脚联通)
GND:接地
X.STEP: X端口步进控制引脚
X.DIR: X端口方向控制引脚
Y.STEP: Y端口步进控制引脚
Y.DIR: Y端口方向控制引脚
Z.STEP: Z端口步进控制引脚
Z.DIR: Z端口方向控制引脚
A.STEP: A端口步进控制引脚
A.DIR: A端口方向控制引脚
5V: 所有电机驱动板供电引脚(此引脚与各端口上的A4988 VDD引脚联通)

如下图所示,CNC扩展板上还配有两排很长的引脚插针。

这两排引脚中,一排是黑色的而另一排是白色的。其中黑色的引脚全都是GND引脚。白色引脚插针旁的文字标识是这些引脚的名称。下面列出这些引脚的名称。

CNC 扩展板 Z+ 引脚 
CNC 扩展板 Z- 引脚 
CNC 扩展板 Y+ 引脚
CNC 扩展板 Y- 引脚
CNC 扩展板 X+ 引脚
CNC 扩展板 X- 引脚
CNC 扩展板 SpnEN 引脚
CNC 扩展板 SpnDir引脚 
CNC 扩展板 CoolEn引脚 
CNC 扩展板 Abort 引脚
CNC 扩展板 Hold 引脚 
CNC 扩展板 Resume引脚
CNC 扩展板 E-STOP引脚

上引脚的名称看起来十分奇怪,事实上这些名字是来自CNC扩展板的最初设计。最早CNC扩展板主要用于驱动小型数控机床。上面列表中的引脚在机床中各自承担不同的作用。比如X+/X-这两个引脚用于工件台X向限位,再比如CoolEn用于冷却液的开关控制。因此这些引脚才会有了这些”奇奇怪怪”的名字。不过如今CNC扩展板的应用已经远远超越了数控车床而成为了3D打印机,机器人等项目的热门选择。但是这些引脚的名字还是保留了下来。

如下图所示,我们可以用小改锥顺时针旋转外接电源接口上的螺钉来固定电源引线。若想移除引线,只要逆时针旋转螺钉就可以了。我这里用了12V电源适配器的转接头接到了这个部分。

本次测试用到了正点原子的STM32F103精英板。

下面讲解一下接线。

A4988驱动板5V————————STM32   5V

A4988驱动板GND———————STM32   GND

A4988驱动板EN————————STM32   PF0

A4988驱动板XSTEP——————STM32   PF1

A4988驱动板XDIR———————STM32   PF2

A4988驱动板YSTEP——————STM32   PF3

A4988驱动板YDIR———————STM32   PF4

随便找一份正点原子的例程复制下来,然后添加以下文件,并修改主函数。下面是STM32用到的程序,下面是HARDWARE中nema.c和nema.h的内容。

---------------------------------nema.c----------------------------------------------

#include "nema.h"
#include "timer.h"
#include "led.h"
#include "usart.h"//初始化步进电机控制端口
//STEP PFout(0)
//DIR PFout(1)
//--------------A4988驱动电路设置初始化函数-----------------------
void STEP_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);  //使能PF端口时钟//----------------------EN初始化--------------------------------------------GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;               //EN-->PF.0 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOF, &GPIO_InitStructure);                     //根据设定参数初始化GPIOF.2GPIO_ResetBits(GPIOF,GPIO_Pin_0);    //驱动电路EN=0,使能//-------------------------------------------------------------------------//-----------------------XSTEP、XDIR初始化-------------------------------------GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                //XSTEP-->PF.1 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOF, &GPIO_InitStructure);                     //根据设定参数初始化GPIOF.1GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                //XDIR-->PF.2 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOF, &GPIO_InitStructure);                     //根据设定参数初始化GPIOF.2
//-----------------------------------------------------------------------------//-----------------------YSTEP、YDIR初始化-------------------------------------GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                 //YSTEP-->PF.3 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOF, &GPIO_InitStructure);                     //根据设定参数初始化GPIOF.3GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                //YDIR-->PF.4 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOF, &GPIO_InitStructure);                     //根据设定参数初始化GPIOF.4
//-----------------------------------------------------------------------------
}//dir:为方向控制,TRUE:正转 FALSE:反转
//period 为周期
//steps:脉冲个数void XStep_Control(u8 dir,u16 period,u32 steps)
{u32 i;for(i=0; i <= steps; i++){XDIR = dir;XSTEP = 1;delay_us(1);XSTEP = 0;delay_us(period);}
}void YStep_Control(u8 dir,u16 period,u32 steps)
{u32 i;for(i=0; i <= steps; i++){YDIR = dir;YSTEP = 1;delay_us(1);YSTEP = 0;delay_us(period);}
}

---------------------------------nema.h----------------------------------------------

#ifndef __NEMA_H
#define __NEMA_H
#include "sys.h"void STEP_Init(void);//step端口初始化//dir:为方向控制,TRUE:正转 FALSE:反转
//period 为周期
//steps:脉冲个数void XStep_Control(u8 dir,u16 period,u32 steps);//X方向步进电机控制函数
void YStep_Control(u8 dir,u16 period,u32 steps);//Y方向步进电机控制函数#define XSTEP PFout(1)
#define XDIR PFout(2)
#define YSTEP PFout(3)
#define YDIR PFout(4)#endif

下面是主函数中的内容。实现结果是X电机反转 1 圈,Y电机正转1圈,X电机正转 2 圈,Y电机反转两圈,Y电机的转动速度是X电机的两倍。

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "nema.h"#define TRUE 1
#define FALSE 0
int main(void)
{u8 dir=1;delay_init(); //延时初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级STEP_Init(); //步进电机驱动端口初始化LED_Init(); //初始化与 LED 连接的硬件接while(1){LED0 = !LED0;XStep_Control(FALSE,1600,200);delay_ms(1000);YStep_Control(TRUE,800,200);delay_ms(1000);XStep_Control(TRUE,1600,400);delay_ms(1000);YStep_Control(FALSE,800,400);delay_ms(1000);}
}

下面附上调试的照片。。。。。。如果有问题欢迎讨论,希望能够帮到您。。。。。。。

STM32驱动步进电机测试相关推荐

  1. DRV8825驱动步进电机测试经验(抖动不转问题)

    1. 概述: DRV8825驱动步进电机,一直抖动不转的问题 DRV8825简介及引脚接线: 2·.试接线: RESET与SLEEP接高电平: STEP:接单片机引脚.单片机引脚产生脉冲信号,频率需根 ...

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

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

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

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

  4. TB6600+stm32+42步进电机测试

    最近半年忙的一塌糊涂,最近做一体机微诊室心情很烦躁啊,赶紧过来安安静静打会字调整一下. 手头正好在调TB6600+stm32+42的控制,以前都是调5相四线,但现在需要用42电机调控制台的盖板起降,那 ...

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

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

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

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

  7. STM32驱动十个步进电机

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

  8. STM32+ULN2003驱动步进电机

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

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

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

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

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

最新文章

  1. delphi 只允许运行一个实例的三种方法《转》
  2. shell 数组排序
  3. Ruby/Rails 生态环境、社区、资料 Ecosystem
  4. linux加密格式化吗,linux环境下给文件加密/解密的方法
  5. python if后面要不要加括号_Python装饰器兼容加括号与不加括号的写法
  6. 7000更换控制器电源步骤_开关电源控制环路(初级篇:上)
  7. Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题
  8. python ide是什么意思_初学Python使用什么IDE会更好?
  9. 删除mysql主键语句_MySQL主键添加/删除
  10. c++fabs函数_C语言中常用的标准库函数有哪些?
  11. CListCtrl使用指南
  12. avascript 运动中Offset的bug解决方案
  13. 诹图系列(2): 堆积条形图
  14. APP安全防护基本方法(混淆/签名验证/反调试)
  15. Brinson归因模型
  16. nginx connect() to (13: Permission denied) while connecting
  17. Android:GPS卫星定位
  18. 五款实用的微信小程序(免费证件照)
  19. 解决yum安装gcc报错:Error: Package: glibc-headers-2.17-317.el7.x86_64
  20. BoBo买了一箱酸奶,里面有n盒未打开的酸奶,KiKi喜欢喝酸奶,第一时间发现了酸奶。KiKi每h分钟能喝光一盒酸奶,并且KiKi在喝光一盒酸奶之前不会喝另一个,那么经过m分钟后还有多少盒未打开的酸奶

热门文章

  1. 关于CSS居中显示的总结
  2. 第二次打卡 数据处理
  3. 微信小程序点击文字变色
  4. 微信小程序文本溢出设置
  5. Element el-cascader 级联选择器详解
  6. 去水印小程序源码_图片去水印|去水印喵小程序
  7. 20210928 | Python案例:构建税费计算函数
  8. 批量更改PPT文件中的内容(修改大量PPT)
  9. 职场领导想逼你走时,他会用哪些奇招逼你走?
  10. 走好数据中台最后一公里,为什么说数据服务API是数据中台的标配?