步进电机驱动_步进电机驱动器 - CSDN
精华内容
参与话题
  • 步进电机的三种驱动方式:转自http://www.ing10bbs.com/forum.php?mod=viewthread&tid=1002&extra=page%3D2
    展开全文
  • 步进电机的控制 (驱动板为TB6560)

    万次阅读 2014-05-24 16:35:43
    本文主要讲述了利用单片机对42步进电机进行

    本文主要讲述了利用单片机对42步进电机进行控制的方法,包括硬件的搭建,软件的调试。


    步骤:


    1、了解步进电机的工作原理。本文选用的是42步进电机“42BYGH47-401A” ,是一种两相步进电机,额定电流1.5V。具体的步进电机工作原理不在这里阐述,可以百度谷歌。由于选用了TB6560驱动板(可以再淘宝上查看),控制较简单,简而言之就是通过一个I/O给一个指定频率的脉冲,由驱动板进行脉冲信号的放大和分配,只要脉冲的频率在步进电机能够承受的范围内即可。  

                                       

    2、阅读产品说明,搭建硬件电路。 硬件电路需要:42步进电机1个,TB6560驱动板1个,单片机1个,24V稳压电源1个,导线、杜邦线若干,当然还有相关的工具,如万用表等等。在安装前要阅读TB6560的产品说明。

    各引脚的意义:

    脉冲端:TB6560驱动板只需单片机给一个脉冲即可实现对步进电机的控制。要求脉冲频率适当,在1Khz以内应该没问题。

    方向端:控制方向,低电平或悬空时正转,高电平时反转。

    使能端:对工作状态进行控制,低电平或悬空为工作状态,高电平为脱机状态。

     


    接线方法:

    稳压电源正负对应着+24V,GND;

    步进电机的4条导线,是分为两组的,每组的导线短接后用手转步进电机会感到明显的阻力,电机的AB相分别对应一组导线即可;

    脉冲、方向、使能的正负有两种接法:共阴和共阳。共阴即为将负端接地,正端接输出脉冲的、控制方向的、控制使能的I/O;或正端接+5V的vcc,然后负端接对应的I/O口。   (这三个端口的控制是独立的,可以第一个共阴,第二个共阳,但建议还是规范一些比较好)


    3、软件调试:在调试时,建议循序渐进。可以先不接方向、使能端,仅控制脉冲实现步进电机的转动运动。然后再加入方向的控制。


    展开全文
  • 用stm32驱动步进电机(一) ——使用ULN2003芯片

    万次阅读 多人点赞 2019-07-28 20:31:35
    本教程以stm32为例,使用ULN2003,TB6600电机驱动板,A4988,DRV8825,介绍步进电机的常用驱动方式。 从ULN2003开始 首先从最简单的入手,用ULN2003芯片,来驱动这种淘宝单片机套件中经常见到(但其实并没有什么用处...

    概述

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

    从ULN2003开始

    首先从最简单的入手,用ULN2003芯片,来驱动这种淘宝单片机套件中经常见到(但其实并没有什么用处)的5V四相五线步进电机。

    长这个样子

    用了配套的驱动板,但其实可以直接把ULN2003芯片插面包板上使用

    (不知道我这么打广告这家淘宝店给不给钱)

    上面提到了四相五线,仔细看有一条红线,即为5V电源线,还有黄、橙、粉、蓝四线,即名字里的四相,每条线都连接了电机内部的一个线圈,转子可以看做是一个磁铁,给四个线圈依次通电,线圈通电产生磁性,使转子旋转。这里有几种信号的输入方法,参考了一个很不错的制作网站中的一个帖子,链接附在这里:howtomechatronics

    如上图所示,当给其中一个线圈通电时,对应线圈变为红色,产生磁性,那么怎么才能给线圈通电呢?之前我们提到了五线中还有一条5V的电源线,那么当把某一线圈接地时,电流便会流过线圈,这样,ULN2003的作用就很明显了
    ——将对应引脚接地。

    如下图所示,ULN2003的工作方式是这样的,正视芯片(缺口端朝上),左边最下面的引脚接地,当左边的引脚输入高电平时,右边与它平行的引脚接地,所以我们只要用stm32控制对应的引脚依次为高电平就可以让它转动起来了。

    接线如下图所示,用了野火的f103ZET6的核心板,PA5,PA6,PA7,PA8依次接IN1,IN2,IN3,IN4。用两节AA电池供电,在这里要注意,不能用板子直接供电,因为电机在启动瞬间会产生很大的感应电流而烧坏板子。为了使电平统一,还应该把板子的GND与电源负极连接。
    (这里有一点小问题,就是Fritzing中没有我们用到的步进电机类型,所以在用了四线的代替)

    实物图:

    一、开始———波驱动或者单个线圈激发(Wave Drive or Single-Coil Excitation)

    从上图我们可以看到,这个驱动方式是依次给线圈通电,然后在通电线圈断电的同时给下一个线圈通电,按照这个顺序循环往复。
    下面是程序:

    首先我们在user创建bsp_gpio.h与bsp_gpio.c,来初始化GPIO口,如接线所示,PA4-PA7依次接IN1-IN4

    //IN1-PA4
    #define IN1_GPIO_PORT     GPIOA
    #define IN1_GPIO_CLK      RCC_APB2Periph_GPIOA
    #define IN1_GPIO_PIN      GPIO_Pin_4
    
    //IN2-PA5
    #define IN2_GPIO_PORT     GPIOA
    #define IN2_GPIO_CLK      RCC_APB2Periph_GPIOA
    #define IN2_GPIO_PIN      GPIO_Pin_5
    
    //IN3-PA6
    #define IN3_GPIO_PORT     GPIOA
    #define IN3_GPIO_CLK      RCC_APB2Periph_GPIOA
    #define IN3_GPIO_PIN      GPIO_Pin_6
    
    //IN1-PA7
    #define IN4_GPIO_PORT     GPIOA
    #define IN4_GPIO_CLK      RCC_APB2Periph_GPIOA
    #define IN4_GPIO_PIN      GPIO_Pin_7
    

    之后我们使用直接操作BSRR与BRR寄存器的方式来控制IO

    /* 直接操作寄存器的方法控制IO */
    #define	digitalHi(p,i)		 {p->BSRR=i;}	 //输出为高电平		
    #define digitalLo(p,i)		 {p->BRR=i;}	 //输出低电平
    
    /* 定义控制IO的宏 */
    #define IN1_HIGH        digitalHi(IN1_GPIO_PORT,IN1_GPIO_PIN)
    #define IN1_LOW         digitalLo(IN1_GPIO_PORT,IN1_GPIO_PIN)
    
    #define IN2_HIGH        digitalHi(IN2_GPIO_PORT,IN2_GPIO_PIN)
    #define IN2_LOW         digitalLo(IN2_GPIO_PORT,IN2_GPIO_PIN)
    
    #define IN3_HIGH        digitalHi(IN3_GPIO_PORT,IN3_GPIO_PIN)
    #define IN3_LOW         digitalLo(IN3_GPIO_PORT,IN3_GPIO_PIN)
    
    #define IN4_HIGH        digitalHi(IN4_GPIO_PORT,IN4_GPIO_PIN)
    #define IN4_LOW         digitalLo(IN4_GPIO_PORT,IN4_GPIO_PIN)
    

    使用宏定义对IO口封装,使Main函数更加直观,编写更加简单
    之后在bsp_gpio.c中我们定义函数void GPIO_Config(void)来初始化IO口,全部设置为通用推挽输出,速度为50MHz。

    void GPIO_Config(void)
    {		
    		/*定义一个GPIO_InitTypeDef类型的结构体*/
    		GPIO_InitTypeDef GPIO_InitStructure;
    
    		/*开启引脚相关的GPIO外设时钟*/
    		RCC_APB2PeriphClockCmd( IN1_GPIO_CLK | IN2_GPIO_CLK | IN3_GPIO_CLK | IN4_GPIO_CLK , ENABLE);
    		
    	 /*选择要控制的GPIO引脚*/
    		GPIO_InitStructure.GPIO_Pin = IN1_GPIO_PIN;	
    		/*设置引脚模式为通用推挽输出*/
    		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
    		/*设置引脚速率为50MHz */   
    		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    		/*调用库函数,初始化GPIO*/
    		GPIO_Init(IN1_GPIO_PORT, &GPIO_InitStructure);	
    		
    		/*选择要控制的GPIO引脚*/
    		GPIO_InitStructure.GPIO_Pin = IN2_GPIO_PIN;
    		/*调用库函数,初始化GPIO*/
    		GPIO_Init(IN2_GPIO_PORT, &GPIO_InitStructure);
    		
    		/*选择要控制的GPIO引脚*/
    		GPIO_InitStructure.GPIO_Pin = IN3_GPIO_PIN;
    		/*调用库函数,初始化GPIOF*/
    		GPIO_Init(IN3_GPIO_PORT, &GPIO_InitStructure);
    		
    		/*选择要控制的GPIO引脚*/
    		GPIO_InitStructure.GPIO_Pin = IN4_GPIO_PIN;
    		/*调用库函数,初始化GPIOF*/
    		GPIO_Init(IN4_GPIO_PORT, &GPIO_InitStructure);
    		
    		//所有引脚初始化为低电平
        IN1_LOW;
        IN2_LOW;
        IN3_LOW;
        IN4_LOW;		
    }
    

    这样,对IO口的初始化配置完成,来到Main函数,首先调用GPIO_Config();来对GPIO口进行初始化,之后在while(1)这个死循环中,重复进行以下动作:

    1.给一个线圈通电;

    2.延时一定时间;

    3.将通电线圈断电,同时给下一个线圈通电;

    4.重复1,2,3步。

    (注:这里的通电指对应引脚输出高电平,断电指对应引脚输出低电平)
    为了实现延时功能,在这里使用了系统滴答计时器,可实现毫秒计时。

    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;
    }
     while函数:
    	while(1)
    	{
    		IN1_HIGH;
    		SysTick_Delay_Ms(DelayTime);
    		IN1_LOW;
    		IN2_HIGH;
    		SysTick_Delay_Ms(DelayTime);
    		IN2_LOW;
    		IN3_HIGH;
    		SysTick_Delay_Ms(DelayTime);
    		IN3_LOW;
    		IN4_HIGH;
    		SysTick_Delay_Ms(DelayTime);
    		IN4_LOW;
    	}
    

    到这里驱动程序就写好了,DelayTime在main.c数开头用宏定义,改变其大小,可以调节步进电机的转速,经过实验DelayTime的最小值为6500左右,如果数值过小,由于转换过快,步进电机只会抖动而不会转动。如果把驱动过程反过来,可以实现反向。
    如果顺序烧录后电机只是抖动而不转动,除了上面提到的问题之外,还可能是接线顺序的问题,可以调整线序来使电机线圈实现依次通电。

    实验成功后,继续完善程序,定义一个stepper(Dir,Speed)来实现控制电机转动方向与速度

    enum dir{Pos,Neg};
    
    void stepper(uint8_t dir,int speed)
    {
    	if(dir == Pos)
    	{
    		IN1_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN1_LOW;
    		IN2_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN2_LOW;
    		IN3_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN3_LOW;
    		IN4_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN4_LOW;
    	}
    	else
    	{
    		IN1_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN1_LOW;
    		IN4_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN4_LOW;
    		IN3_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN3_LOW;
    		IN2_HIGH;
    		SysTick_Delay_Ms(speed);
    		IN2_LOW;
    	}
    }
    

    新的main函数

    int main(void)
    {
    	enum dir{Pos,Neg};
    	
    	GPIO_Config();
    	
    	while(1)
    	{
    		int i;
    		for(i = 0;i < 1000;i++)      //电机正转
    			stepper(Pos,8000);     
    		SysTick_Delay_Ms(500000);    //延时
    		for(i = 0;i < 1000;i++)      //电机反转
    			stepper(Neg,8000); 
    		SysTick_Delay_Ms(500000);    //延时
    	}
    }
    
    


    成功了!电机转动起来,并且能够改变方向

    二、其它驱动方法

    在上面我们成功驱动电机使其转动起来,但是这样的方式效率很低,原文作者还提到了更好的几种驱动方法


    (上图)这种方法延长了线圈的通电时间,使得同时会有两个线圈通电,但是用这种方法一转仍然是四步。

    (上图)于是有了半步驱动这种方式,这其实是上面两种方式的结合,用这种方式控制,一转变成了八步。

    (上图)现在用的最多的是这种微步控制方式,可以看到结果调制的正弦波被输入到电机中,用这种方式,转子的转动更加平滑,同时电机各部分受到的力也随之减小,这样电机工作过程中的振动与丢步大大减小。这就是所谓的输入pwm波控制步进电机。
    但是问题在于,pwm波的调制不像输出高低电平那么简单,而且一般用到的步进电机驱动电流超过了板子的提供范围,所以在实际应用中,更多的是使用驱动板或者驱动芯片,这将在之后的文章中讲到。

    展开全文
  • 两相四线步进电机驱动

    万次阅读 多人点赞 2017-10-30 21:47:51
    说明:STM32、L298、TB6612、步进电机。 一:L298驱动步进电机 1.关于L298 原理:电机驱动模块内部有H桥的电路,包括4个三极管和1个电机,要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通...

    说明:STM32、L298、TB6612、步进电机。
    一:L298驱动步进电机
    1.关于L298
    原理:电机驱动模块内部有H桥的电路,包括4个三极管和1个电机,要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。

    L298
    内部电路
    电路框图

    内部电路旨在理解双h桥电路。
    由图可知,L298内部两个双H桥电路分别由4个NPN三极管、四个门电路组成,在驱动直流电机时分别控制两个电机的正反转,驱动步进电机时由给出的双绕组脉冲控制一个步进电机的正反转。

    2.驱动一个步进电机接线方式:
    IN1 IN2 IN3 IN4接开发板的四个管脚,用于给出脉冲;
    两相四线步进电机中的红绿黄蓝分别接L298的OUT1 OUT2 OUT3 OUT4;
    +5V接开发板的5V,12V接外接电源,GND接外接电源GND,用于给驱动模块以及电机供电,电压不够可能出现电机抖动但是不转动的情况;
    ENA ENB 板载5V等分别用跳接帽短接。
    至此完成接线工作。
    3.节拍部分,二相四线可使用4、8节拍
    正转:
    (1)四拍:A 1000,A- 0010,B 0100,B- 0001.
    (2)八拍:A 1000,AA- 1010,A- 0010,A-B 0110,B 0100,BB- 0101,B- 0001,B-A 1001.
    反转均逆序。
    4.电机固有步距角: 它表示控制系统每发一个步进脉冲信号,电机所转动的角度。
    步距角=360/(转子齿数*节拍数);
    5.步进电机有速度控制与角度控制
    速度控制:步进电机的转速取决于脉冲频率、转子齿数和拍数。其角速度与脉冲频率成正比,而且在时间上与脉冲同步。因而在转子齿数和运行拍数一定的情况下,只要控制脉冲频率即可获得所需速度。在设计代码时,可以通过设置了两个脉冲之间的延时从而改变速度。
    角度控制:通过控制脉冲可以转出想要的角度。
    6.代码部分:
    初始化,STM32开发板GPIOA,PIN0,PIN1,PIN2,PIN3.

    void MOTOR_Init(void)
    {
      RCC->APB2ENR|=1<<2;
      GPIOA->CRL&=0xffff0000;
      GPIOA->CRL|=0x00003333;
    }

    节拍(8):

    //第一拍
      AIN1_1=1;
      AIN1_2=0;
      BIN1_1=0;
      BIN1_2=0;
      delay_us(2500);
      //第二拍
      AIN1_1=1;
      AIN1_2=0;
      BIN1_1=1;
      BIN1_2=0;
      delay_us(2500);
      //第三拍
      AIN1_1=0;
      AIN1_2=0;
      BIN1_1=1;
      BIN1_2=0;
      delay_us(2500);
     //第四拍
      AIN1_1=0;
      AIN1_2=1;
      BIN1_1=1;
      BIN1_2=0;
      delay_us(500);
        //第五拍
      AIN1_1=0;
      AIN1_2=1;
      BIN1_1=0;
      BIN1_2=0;
      delay_us(2500);
      //第六拍
      AIN1_1=0;
      AIN1_2=1;
      BIN1_1=0;
      BIN1_2=1;
      delay_us(2500);
      //第七拍
      AIN1_1=0;
      AIN1_2=0;
      BIN1_1=0;
      BIN1_2=1;
      delay_us(2500);
     //第八拍
      AIN1_1=1;
      AIN1_2=0;
      BIN1_1=0;
      BIN1_2=1;
      delay_us(2500);

    针对于节拍的控制比起对一个周期的控制可以相对精确一些。


    TB6612驱动步进电机
    内容说明:其他部分参考上面的内容,主要注意使用TB6612时的接线方式。
    GND PWMA
    VCC AIN2
    AO1 AIN1
    AO2 NC
    BO2 BIN1
    BO1 BIN2
    VM PWMB
    GND GND

    GND接地;
    PWMA、PWMB接5V;
    AO1、AO2、BO1、BO2分别接步进电机的红绿黄蓝;
    AIN1、AIN2、BIN1、BIN2分别接开发板的相应管脚,一一对应;
    VM、GND接外接电源;
    NC可以悬空。

    对原理以及接线方式理解之后,主要是针对具体问题设计的算法,充分利用模块的相应功能设计出功能完整的代码对基础和经验的要求较高。

    展开全文
  • 步进电机之步进电机驱动器使用说明

    万次阅读 多人点赞 2017-12-31 19:00:35
    这一篇就介绍步进电机驱动器的简介以及使用方法。 这里我们以TB6600步进电机驱动器为例,进行介绍。其他型号的驱动器也大同小异。如图是我们使用的步进电机驱动器 一.输入输出端说明 1.信号输入端 PUL+:脉冲信号...
  • 步进电机驱动程序

    2020-07-30 23:30:10
    步进电机/减速电机驱动程序,让你了解步进电机/减速电机的驱动过程
  • 步进电机驱动的使用及程序

    千次阅读 2020-05-20 11:29:54
    步进电机驱动盒使用注意事项: signal端是信号输入控制端: 信号输入控制端在具体控制的时候有两种接法(注:均无需全部接入控制信号): 共阳极接法:将ENA+,DIR+,PIL+均接3.3V/5V,如果高于或者等于12V,需要...
  • 步进电机 28BYJ-48介绍和驱动及编程

    万次阅读 多人点赞 2017-08-11 22:35:53
    出处:... 28BYJ-48步进电机: 28BYJ-48介绍和驱动及编程" title="步进电机 28BYJ-48介绍和驱动及编程" style="margin:0px; padding:0px; border:0px; list-style:none"> 步进电机是一种将电
  • STM32步进电机驱动算法

    万次阅读 多人点赞 2019-04-28 17:27:49
    如要将此曲线应用在步进电机的加、减速过程中,需要将方程在XY坐标系进行平移,同时对曲线进行拉升变化: 其中的A分量在y方向进行平移,B分量在y方向进行拉伸,ax+b分量在x方向进行平移和拉伸。 项目中加速过程:...
  • 步进电机原理和驱动

    千次阅读 2014-06-25 01:49:02
    步进电机原理和驱动   步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行...
  • 很多用户误以为步进电机驱动器的细分越高,步进电机的精度就越高,其实这是一种错误的观念,比如步进电机驱动器细分较高的可以达到60000个脉冲一转,而步进电机实际是无法分辨这个精度的,当驱动器设置为60000个脉冲...
  • 用过的几款步进电机驱动IC

    万次阅读 2018-11-09 19:56:45
    使用专用集成步进电机驱动芯片有诸多优势,比如效率高、高精度(细分)的支持、过流保护、过热保护、丢步检测、内置减速曲线(可减轻处理器负荷)等;而且驱动起来也是非常简易,只需脉冲方波或者通过总线(spi、i2c...
  • 步进电机转速与脉冲频率的关系

    万次阅读 2017-08-08 00:09:37
    摘要: 1、何为步进电机和步进驱动器? 步进电机是一种与专门用于速度和位置精确控制的特种电机,它旋转是以固定的角度(称为“步距角”  )一步一步运行的,故称步进电机。其特点是没有累积误差,接收到控制器发来的...
  • Arduino基础入门篇26—步进电机

    万次阅读 多人点赞 2019-11-04 15:04:25
    本篇使用ULN2003驱动五线四相减速步进电机
  • PWM脉冲数控制步进电机

    万次阅读 多人点赞 2017-08-07 10:19:42
    最近在学步进电机,为了准备2017的暑假狄电赛,万一不小心用到尼。说起步进电机,我们就聊一聊步进电机的那些事,我想起在这之前...这次我可是借了一套步进电机和他的伴侣驱动步进电机和直流电机最大的不同就是人家要
  • 单片机控制步进电机-电路连接

    千次阅读 多人点赞 2019-02-22 21:26:14
    单片机控制步进电机-线路连接 说明:如何利用单片机去控制步进电机?本案例讲解的内容是硬件连接部分,采用常用的电子器件去实现单片机...4、步进电机驱动器(TB6600) 整体连接图: 原理图: 控制原...
  • 使用Arduino与A4988 驱动步进电机

    万次阅读 多人点赞 2019-10-20 16:47:00
    初识Arduino,有什么错漏的地方请指正. 学会使用A4988驱动电机对于DIY3D打印机,...实验目的:Arduino与A4988驱动42步进电机 材料如下: Arduino uno *1 A4988 *1 42步进电机 *1 面包板 *1 9V外接电源 *1 导线 若干 s...
  • 步进电机失步(丢步)的原因和对策步进电机可以根据脉冲数和脉冲频率来对电机实现开环控制位置和速度,是一种便宜、简单好用的控制类电机,在自动化控制领域得到越来越广泛的应用。但由于步进电机不是闭环控制,选型...
  • 树莓派通过GPIO控制步进电机(python)

    万次阅读 2015-01-03 11:00:56
    树莓派不建议直接使用舵机,使用步进电机和步进电机驱动板更为方便易用
  • 步进电机驱动芯片选型指南

    万次阅读 2015-09-04 21:19:32
    步进电机和步进电机驱动器构成步进电机驱动系统。步进电机驱动系统的性能,不但取决于步进电机自身的性能,也取决于步进电机驱动器的优劣。对步进电机驱动器的研究几乎是与步进电机的研究同步进行的。 2、系统概述...
1 2 3 4 5 ... 20
收藏数 4,702
精华内容 1,880
关键字:

步进电机驱动