首页 » 互联网 » Note-15.运用A4988控制步进电机_电机_引脚

Note-15.运用A4988控制步进电机_电机_引脚

admin 2024-09-06 22:58:19 0

扫一扫用手机浏览

文章目录 [+]

A4988只需两个引脚就可以掌握双极步进电机(如NEMA 17)的速率和旋转方向。

步进电机利用一个齿轮和电磁铁旋转,通过脉冲掌握电机的行为,一次“一步”。

Note-15.运用A4988控制步进电机_电机_引脚 Note-15.运用A4988控制步进电机_电机_引脚 互联网

脉冲的顺序决定了电机的旋转方向。
脉冲的频率决定了电机的速率。
脉冲的数量决定了电机转多远。

A4988步进电机驱动芯片

Note-15.运用A4988控制步进电机_电机_引脚 Note-15.运用A4988控制步进电机_电机_引脚 互联网
(图片来自网络侵删)

该模块的核心是来自Allegro - A4988的微步驱动器,其体型只有0.8″× 0.6″。

A4988步进电机驱动器的输出驱动能力高达35V和±2A。
这可以掌握双极步进电机(NEMA 17)每个线圈高达2A的输出电流。

A4988驱动自带掌握程序,能简化操作,只需2个引脚就能完成掌握

一个是掌握步数另一个用来掌握旋转方向。

A4988驱动供应五种不同的步进细分

全步、半步、四分之一步、八分之一步十六分之一步。

技能规格

A4988驱动引脚图

A4988实际上须要两个电源连接。

VDD和GND用于驱动内部逻辑电路,范围从3V到5.5 V。
VMOT和GND为电机供应电源,范围从8V到35V。
根据数据表,电机电源须要一个得当的去耦电容,以能够坚持4A电流。
该驱动板上有low-ESR陶瓷电容器,这使它随意马虎受到电压峰值的影响。
在某些情形下,这些峰值可能超过35V (A4988的最大电压额定值),这有可能永久破坏电路板乃至电机。
保护驱动器不受这种峰值影响的一种方法是在电机电源引脚上放置一个大的100μF(至少47μF)电解电容。
微步选择引脚A4988驱动许可通过将单个步进划分为更小的步进来实现微步。
这是通过利用中间值电流勉励线圈来实现的。
例如,如果选择驱动NEMA 17(1.8°步进角度或200步/转)事情在四分之一步模式,电机每转一圈将须要800微步。

A4988驱动有三个步长(分辨率)设置引脚,即MS1, MS2和MS3。
通过将这些引脚设置为适当的逻辑电平,可以将电机设置为五种不通的细分模式。

这三个微步选择引脚被内部下拉电阻拉低,以是如果三个引脚都悬空则将在全步进模式下运行。
掌握输入引脚:A4988有两个掌握输入- STEP和DIR

STEP步进输入掌握电机的微步。
每个发送到该引脚的HIGH脉冲根据由微步选择引脚决定的微步数驱动电机。
脉冲越快,电机转得越快。
DIR输入掌握电机的旋转方向。
高电平驱动电机顺时针方向,低电平驱动电机逆时针方向。
如果希望电机只在一个方向上旋转,可以将DIR直接连接到VCC或GND。
STEP和DIR引脚在内部不会被拉到任何特定的电压,以是运用中不应该让悬空。
用于掌握电源状态的引脚A4988有三个独立的输入掌握其电源状态:EN, RST和SLP。

EN是低电平触发引脚。
当这个引脚被拉低时,A4988驱动被启用。
默认情形下,这个引脚被拉低,以是驱动总是启用的,除非拉高则禁用。
SLP是低电平触发引脚。
把这个引脚拉低,驱动器进入就寝模式,最大限度地降落功耗。
当电机不该用的时候可以利用这个,以节省电力。
RST是低电平触发引脚。
当这个引脚被拉为LOW时,所有的STEP输入都被忽略。
它还通过将内部转换器设置为预定义的home状态来重置驱动。
home状态是电机启动的初始位置,它取决于微步分辨率设定。
如果不该用RST这个引脚,可以把它连接到相邻的SLP/SLEEP引脚上,使它为高电平并启用驱动。
输出引脚A4988电机驱动器的输出通道在模块的一侧,包括1B, 1A, 2A和2B。

可以连接任何中小型双极步进电机(如NEMA 17)。
模块上的每个输出引脚可以向电机输出高达2A的电流。
然而,供应给电机的电流取决于系统的电源、冷却系统和限流设置。
冷却系统-散热器A4988驱动IC的过度功耗会导致温度升高,如果超过其容量可能会破坏IC。
只管A4988驱动IC每线圈的最大额定电流为2A,但在没有散热器的情形下,该芯片每线圈只能供应大约1A电流而不会过热。
如果每个线圈要得到超过1A电流,散热器或其他冷却方法是必需的。

A4988驱动常日带有散热器。
建议在利用前先安装。
电流限定在驱动电动机之前,须要调度A4988限定通过步进线圈的最大电流量,防止超过电机的额定电流。

为了设置电流限定,A4988驱动器上供应了一个小型微调电位器。
方法1:通过丈量“ref”引脚上的电压(Vref)来确定电流限定。
查看步进电机的数据表。
记下它的额定电流。
如NEMA 17 200 steps/rev, 12V 350mA。
断开三个微步选择引脚,将驱动置于全步模式。
保持电机在一个固定的位置,不考虑STEP输入。
丈量可调电阻电压(Vref),并调度它。
参考电压打算公式

比如电机额定电流350mA,则参考电压=0.35/2.5=0.14V。

一种大略的方法是利用鳄鱼夹夹在金属螺丝刀柄上,并将其连接到万用表上,这样就可以同时丈量和调度电压。
方法2:通过丈量流过线圈的电流来确定电流限定。
步骤同方法1

如果变动了逻辑电压(VDD),则须要重新进行此调度。

将A4988步进电机驱动器连接到Arduino

将VDD和GND (VDD阁下)连接到Arduino上的5V和接地引脚。
将DIR和STEP输入引脚连接到Arduino上的#2和#3数字输出引脚。
将步进电机连接到2B, 2A, 1A和1B引脚上把稳:在驱动器运行时连接或断开步进电机可能破坏驱动器。
将RST引脚连接到相邻的SLP/SLEEP引脚,以保持驱动器为启用状态。
要在全步进模式下操作电机,请保持三个微步选择引脚断开连接。
将电机电源连接到VMOT和GND引脚上。
电机电源接入100μF去耦电解电容,以避免大的电压峰值。

Arduino代码--不该用库

// Define pin connections & motor's steps per revolution

const int dirPin = 2;

const int stepPin = 3;

const int stepsPerRevolution = 200;

void setup()

{

// Declare pins as Outputs

pinMode(stepPin, OUTPUT);

pinMode(dirPin, OUTPUT);

}

void loop()

{

// Set motor direction clockwise

digitalWrite(dirPin, HIGH);

// Spin motor slowly

for(int x = 0; x < stepsPerRevolution; x++)

{

digitalWrite(stepPin, HIGH);

delayMicroseconds(2000);

digitalWrite(stepPin, LOW);

delayMicroseconds(2000);

}

delay(1000); // Wait a second

// Set motor direction counterclockwise

digitalWrite(dirPin, LOW);

// Spin motor quickly

for(int x = 0; x < stepsPerRevolution; x++)

{

digitalWrite(stepPin, HIGH);

delayMicroseconds(1000);

digitalWrite(stepPin, LOW);

delayMicroseconds(1000);

}

delay(1000); // Wait a second

}

在loop中,电机先缓慢顺时针旋转,间隔1秒后再快速逆时针旋转。
掌握电机方向:DIR引脚设置为HIGH或LOW,以掌握电机的旋转方向。
HIGH高电平将使电机顺时针方向迁徙改变,LOW低电平将使电机逆时针方向迁徙改变。
掌握速率:电机的速率是由发送到STEP引脚的脉冲频率决定的。
脉冲频率越高,电机运行越快。
脉冲便是把输出拉高,等待一小会儿,然后拉低,再等待。
通过改变两个脉冲之间的延迟,可以改变了这些脉冲的频率以及电机的速率。

Arduino代码:利用accelstepper库

对付大略的、单一的电机运用来说,掌握步进器不须要库是完备没问题的。
但是当想要掌握多个步进时,就须要一个库。

accelerstepper步进电机库

加减速多个同步步进器,每个步进器都有独立的同步步进。

安装accelerstepper库

arduino代码

// Include the AccelStepper Library

#include <AccelStepper.h>

// Define pin connections

const int dirPin = 2;

const int stepPin = 3;

// Define motor interface type

#define motorInterfaceType 1

// Creates an instance

AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {

// set the maximum speed, acceleration factor,

// initial speed and the target position

myStepper.setMaxSpeed(1000);

myStepper.setAcceleration(50);

myStepper.setSpeed(200);

myStepper.moveTo(200);

}

void loop() {

// Change direction once the motor reaches target position

if (myStepper.distanceToGo() == 0)

myStepper.moveTo(-myStepper.currentPosition());

// Move the motor one step

myStepper.run();

}

motorInterfaceType设置为1,1表示带有步进和方向引脚的外部步进驱动器。
由于NEMA 17每转200步,电机的步数也被设置为200步。
在loop函数中,利用If语句检讨电机须要移动多远(通过读取distanceToGo属性),直到它到达目标位置(通过moveTo设置)。
一旦distanceToGo达到零,通过改变moveTo位置为其当前位置的负数,电机向相反的方向旋转。
run()函数启动电机运转。
标签:

相关文章