ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Arduino 项目笔记 | 基于 Arduino 单片机的 A4988 和 L298N电机驱动模块实验记录

2021-11-22 22:30:44  阅读:1279  来源: 互联网

标签:Step1pin 电机 digitalWrite Arduino 引脚 L298N 单片机 步进 define


目录


1. A4988 简介

A4988 内置了 译码器,我们可以可以通过控制器的 2 个引脚来控制步进电机,一个控制旋转方向,另一个控制步数。

A4988 提供了五种不同的微步控制:

  • 全步(full-step)
  • 半步(haft-step)
  • 四分一步(quarter-step)
  • 八分之一步(eight-step)
  • 十六分之一步(sixteenth-step)

在这里插入图片描述

此外,它还配备了一个调节电流输出、过热保护和过流保护的 电位计。A4988 的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达 2A,在没有配备散热器的情况下,每相连续电流最好控制在 1A 范围内。

2. A4988 引脚定义图及功能说明

  • VMOTGND外部供电引脚,目的是能给电机提供足够的动力输出,供电范围:8-35V,此处使用一个47uf电解电容来保护驱动板免受瞬时电压的冲击。

  • VDDGND:连接到Arduino控制板5V电源GND引脚上。

  • 1A1B : 连接到步进电机的一相,2A2B引脚连接到步进电机的另一相。

  • STEPDIR : 连接至Arduino控制板P3P4引脚,这两个针脚主要用于控制电机的运动。Direction引脚控制转动方向,STEP针脚用于控制电机旋转的步数控制。

  • SLEEP低电平使能使模块处于休眠模式,当电机不工作时,它可以最大程度地降低功耗,默认为高电平

  • RESET : 如果这个针脚的输入是低电平,那么所有的微步设置都将被忽略掉。

注意: 将SLEEP和RESET针脚连接起来,目的是将RESET针脚设置为高电平,以便模块可控。

  • ENABLE:用于打开和关闭场效应管的输出,低电平打开高电平关闭
    在这里插入图片描述

  • MS1 , MS2MS3 针脚用于微步设置。

    • 全步(full-step)
    • 半步(haft-step)
    • 四分一步(quarter-step)
    • 八分之一步(eight-step)
    • 十六分之一步(sixteenth-step)

    如下图所示:

步进电机全步模式走 1 步是 1.8 度,一圈360° 就是 200 步;若使用 1/16 步进,1 步是 0.1125 度,一圈360° 则需要走 3200 步。

在这里插入图片描述

实际电路设计中,Arduino 引脚设置如下:

1、 电路中通过跳帽(连接器 J1)将 MS1 , MS2MS3 针脚拉高,微步设置为 1/16步进( HIGH HIGH HIGH)。

2、将SLEEPRESET针脚连接起来,目的是将RESET针脚设置为高电平,以便模块可控

3、200Ω 电阻将A1引脚拉低

在这里插入图片描述

四相步进电机

对于两相双极混合型步进电机它有四根引出线,通过用万用表测量会得出,其中红色线和蓝色线是阻值较小,它们是同一个绕组;同样绿色线和黑色线阻值较小,它们俩也是同一绕组。接线时,只要把同一绕组的步进电机的驱动器上相应输出端子上,比如上图中的A+和A-接在同一个绕组上,B+和B-接在另一个绕组上即可。接好后开机试车,如果转向与我们的要求不一样,只要把A+、A-和B+、B-对调就可以了。

在这里插入图片描述

在示意图上用A-B-C-D来标注。因此这种步进电机就叫“四相”步进电机。

假设先B相绕组闭合导通,这样就会在所对应的定子绕组齿上产生磁极,此时转子的“0”号和“3”号离它们最近,这样就会产生最强的吸引力。

如果按照B相-C相-D相-A相的顺序给步进电机的绕组通电的话,这样步进电机的转子就会按照逆时针的方向不停地运转。

通过分析可以知道,只要给步进电机的电子绕组输入一序列的电脉冲信号,那么步进电机的转子就会不停地转动一个角度,这就是步进电机名称的由来。

1B-1A-2A-2B

红-蓝-绿-黑

黑-绿-红-蓝

问题1:步进电机老振动

原因1:线接错了,

原因2:高速振动,低速振动

在这里插入图片描述

3. Arduino使用A4988控制电机代码

// Arduino使用A4988控制电机代码

#define Dir1pin   A0
#define Step1pin  A1
#define Enablepin 12
#define MSmodoule 3200

int x;   

void setup()  
{  
  pinMode(Enablepin,OUTPUT); // Enable  
  pinMode(Step1pin,OUTPUT); // Step  
  pinMode(Dir1pin,OUTPUT); // Dir  
  digitalWrite(Enablepin,LOW); // Set Enable low  
}  
void loop()  
{      
  digitalWrite(Dir1pin,HIGH); // Set Dir high  
   
  for(x = 0; x < MSmodoule; x++) // Loop 200 times  
  {  
      digitalWrite(Step1pin,HIGH); // Output high  
      delayMicroseconds(800); // Wait 1/2 a ms  
      digitalWrite(Step1pin,LOW); // Output low  
      delayMicroseconds(800); // Wait 1/2 a ms  
    }  
  delay(1000); // pause one second  
    
  digitalWrite(Dir1pin,LOW); // Set Dir low  
    
  for(x = 0; x < MSmodoule; x++) // Loop 2000 times  
  {  
      digitalWrite(Step1pin,HIGH); // Output high  
      delayMicroseconds(800); // Wait 1/2 a ms  
      digitalWrite(Step1pin,LOW); // Output low  
      delayMicroseconds(800); // Wait 1/2 a ms  
    }  
    delay(1000); // pause one second  
}  

总 结:

1、D12 (-en) 低电平启动电机(enable),貌似也可以不接,试过一样能运行(但如果要控制电机的启动关闭还是要用上);

2、A0(-dir) 用高低电平控制方向

3、A1(-step) 用高低电平 驱动电机转动,注意中间间隔等待的微秒值,如果太快会导致电机有声响不转动。


1. L298N 简介

L298N 是专用驱动集成电路,属于H桥集成电路,与 L293D 的差别是起输出电流增大,功率增强。

其输出电流为 2A ,最高电流 4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁阀等等,特别是其输入端可以与单片机直接相连,从而很方便地受单片机控制。

当驱动直流电机时,可以直接控制步进电机,并可以实现电机的正转和反转,实现此功能只需要改变输入端的逻辑电平。为了避免电机对单片机的干扰,本模块加入光耦,进行光电隔离 (光耦合器以光为媒介传输电信号,它对输入、输出电信号有良好的隔离作用)、整流二极管电机保护、从而使系统能够稳定可靠的工作。

4 通道控制、钽(tǎn)电容稳压、光耦隔离、整流二极管电机保护、过流保护、合金散热片、数模电路线路分离、电机电流反馈和PWM调速,电机双闭环控制。

在这里插入图片描述

2. L298N 外观尺寸和针脚定义

在这里插入图片描述

  • Output A:接DC 电机 1 或步进电机的 A+和 A-;

  • Output B:接DC 电机 2 或步进电机的 B+和 B-;

  • 5V Enable:输入电源小于12V时短接可以提供5V电源输出,如果使用输入电源大于12V的电源,请将跳线帽移除;

  • +5V Power:当输入电源小于12V时且5V Enable处于短接状态,可以提供+5V电源输出(实际位置请参考驱动板上的标注);

  • Power Gnd:电源

  • +12V Power:连接电机电源,最大35V。输入电压大于12V时,为确保安全,请去除 5V Enble 针脚上的跳线帽(实际位置请参考驱动板上的标注);

  • A/B Enble:可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)

实现电机正反转功能:

电机M1正转,输入信号端IN1接高电平输入端IN2接低电平。(如果信号端IN1接低电平, IN2接高电平,电机M1反转。)

电机M2正转,输入信号端IN3接高电平,输入端IN4接低电平。(反之则反转)

PWM信号端A控制M1调速,PWM信号端B控制M2调速。可参考下图表:
在这里插入图片描述

实际电路设计中,Arduino 引脚设置如下:

在这里插入图片描述
在这里插入图片描述

3. Arduino使用L298N 控制电机代码

// Arduino使用L298N 控制电机代码
/*
项目名称:直流/步进电机驱动程序
功能:
作者:Naiva
日期:2021/11/19
版本:V1.0
*/

#define In1pin 7
#define In2pin 8
#define Speed_Motor  9
#define asingle A6


void setup() {
  Serial.begin(9600);
  pinMode(In1pin, OUTPUT);
  pinMode(In2pin, OUTPUT);
  pinMode(Speed_Motor, OUTPUT);
  pinMode(asingle, INPUT);
}

void loop() {

  int val = analogRead(asingle);
  val = map(val,0,1023,0,255);
  Serial.print("A6类比信号为:");
  Serial.println(val);
  
  analogWrite(Speed_Motor,val);
  digitalWrite(In1pin, HIGH);  
  digitalWrite(In2pin, LOW);    
  delay(10);                      
}

参考资料

在这里插入图片描述
在这里插入图片描述


附源码:

/***************************************
项目名称:直流/步进电机驱动程序
功能:
作者:Naiva
日期:2021/11/19
版本:V1.0
*******************************************/
#define In1pin 7
#define In2pin 8
#define Speed_Motor  9
#define asingle A6

#define Dir1pin   A0
#define Step1pin  A1
#define Enablepin 12
#define MSmodoule 3200

void DC_motor1(){
  int val = analogRead(asingle);
  val = map(val,0,1023,0,255);
  Serial.print("A6类比信号为:");
  Serial.println(val);
  
  analogWrite(Speed_Motor,val);
  digitalWrite(In1pin, HIGH);  
  digitalWrite(In2pin, LOW);    
  delay(10);   
  }
void Step_stepper1_forward(int delaytime){
  digitalWrite(Dir1pin,HIGH);     // 设置方向 high     
  for(int i = 0; i < MSmodoule; i++)  // 循环MSmodoule次数
  {  
      digitalWrite(Step1pin,HIGH); 
      delayMicroseconds(800);     //延时800微秒
      digitalWrite(Step1pin,LOW); 
      delayMicroseconds(800); 
    }  
  delay(delaytime);               //延时1秒
    
  }
void Step_stepper1_backward(int delaytime){
  digitalWrite(Dir1pin,LOW);      // 设置方向    
  for(int j = 0; j < MSmodoule; j++)  // 循环3200次
  {  
      digitalWrite(Step1pin,HIGH); 
      delayMicroseconds(800); 
      digitalWrite(Step1pin,LOW); 
      delayMicroseconds(800); 
    }  
    delay(delaytime);             // 延时 
  }
void Stop_DC_motor1(){
  digitalWrite(In1pin, LOW);  
  digitalWrite(In2pin, LOW);    
  delay(10);  
  }
void Stop_stepper1(){
  digitalWrite(Step1pin,LOW); 
  delayMicroseconds(800); 
  digitalWrite(Step1pin,LOW); 
  delayMicroseconds(800);
  }
void setup() {
  Serial.begin(9600);
  pinMode(In1pin, OUTPUT);
  pinMode(In2pin, OUTPUT);
  pinMode(Speed_Motor, OUTPUT);
  pinMode(asingle, INPUT);

  pinMode(Enablepin,OUTPUT); // Enable场效应管的输出
  pinMode(Step1pin,OUTPUT); // 转动  
  pinMode(Dir1pin,OUTPUT); // 方向
  digitalWrite(Enablepin,LOW); // 低电平打开
  delayMicroseconds(800);
}

void loop() {
  DC_motor1(); 
  Stop_DC_motor1();
  Step_stepper1_forward(1000);   
  Step_stepper1_backward(1000); 
  Stop_stepper1();              
}

标签:Step1pin,电机,digitalWrite,Arduino,引脚,L298N,单片机,步进,define
来源: https://blog.csdn.net/Naiva/article/details/121376364

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有