目录
1. A4988 简介
A4988 内置了 译码器,我们可以可以通过控制器的 2 个引脚来控制步进电机,一个控制旋转方向,另一个控制步数。
A4988 提供了五种不同的微步控制:
- 全步(full-step)
- 半步(haft-step)
- 四分一步(quarter-step)
- 八分之一步(eight-step)
- 十六分之一步(sixteenth-step)
此外,它还配备了一个调节电流输出、过热保护和过流保护的 电位计。A4988 的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达 2A,在没有配备散热器的情况下,每相连续电流最好控制在 1A 范围内。
2. A4988 引脚定义图及功能说明
-
VMOT
、GND
:外部供电引脚,目的是能给电机提供足够的动力输出,供电范围:8-35V,此处使用一个47uf
的电解电容来保护驱动板免受瞬时电压的冲击。 -
VDD
和GND
:连接到Arduino控制板的5V电源
和GND
引脚上。 -
1A
和1B
: 连接到步进电机的一相,2A
和2B
引脚连接到步进电机的另一相。 -
STEP
和DIR
: 连接至Arduino控制板的P3
和P4
引脚,这两个针脚主要用于控制电机的运动。Direction引脚控制转动方向,STEP针脚用于控制电机旋转的步数控制。 -
SLEEP
: 低电平使能使模块处于休眠模式,当电机不工作时,它可以最大程度地降低功耗,默认为高电平。 -
RESET
: 如果这个针脚的输入是低电平,那么所有的微步设置都将被忽略掉。
注意: 将SLEEP和RESET针脚连接起来,目的是将RESET针脚设置为高电平,以便模块可控。
-
ENABLE
:用于打开和关闭场效应管的输出,低电平打开,高电平关闭。 -
MS1
,MS2
和MS3
针脚用于微步设置。- 全步(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
, MS2
和 MS3
针脚拉高,微步设置为 1/16步进( HIGHHIGHHIGH)。
2、将SLEEP
和RESET
针脚连接起来,目的是将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);
}
参考资料
-
[1] 三端稳压集成电路 LM7805/LM7809 (LM78xx正电压LM79xx负电压系列)
-
[2] L298N 电机驱动 (电机驱动板L298N的针脚定义)
-
[3] FR207 损耗二极管
-
[4] A4988 步进电机驱动模块 (A4988的引脚图及运用)(Arduino+A4988+步进电机)
-
电路原理图如下:
附源码:
/***************************************
项目名称:直流/步进电机驱动程序
功能:
作者: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();
}