Драйвер шагового двигателя EasyDriver V44 A3967 для Arduino
EasyDriver представляет собой простой в использовании драйвер шагового двигателя, совместимы со всеми двигателями, которые работают с логикой от 0 до 5 вольта (или от 0 до 3,3 вольта , если закрыть вывод SJ2 на драйвере EasyDriver). EasyDriver работает с питанием шаговых двигателей от 7Вольт до 30 Вольт. EasyDriver имеет стабилизатор напряжения для цифрового интерфейса, который может быть установлен на 5V или 3.3V.
EasyDriver подключается как к шаговым двигателям (4,6 или 8 проводным шаговым двигателям) та и биполярным.
![]() |
![]() |
![]() |
A3967 микрошаговый драйвер.
MS1 и MS2 контакты изменяют микрошаг (Microstepping) на полный, половина, четверть и одну восьмую шагов (по умолчанию восьмой).
Совместимость с 4, 6 и 8 проводными шаговыми двигателями любого напряжения.
Регулируемый ток от 150 мА / фазы до 750 мА / фазы.
Диапазон напряжения питания от 7В до 30В. Чем выше напряжение, тем выше крутящий момент при высоких скоростях.
Включение (ВКЛ). При включении активный низкий вход сохраняется на всех выводах .
Спящий режим (SLEEP). Активным низким уровнем входного сигнала используется для минимизации энергопотребления, когда двигатель не используется. Отключает большую часть внутренней схемы в том числе выходов. Высокий логический вывод обеспечивает нормальное функционирование и запуск устройства с исходногого положение.
![]() |
Схема подключения к L298N Подключение к L298N увеличивает мощность. |
![]() |
Схема подключения с использование биполярных транзисторов TIP120 |
![]() |
Пример подключнения 3 осей |
![]() |
Пример подключения |
С помощью программы можно продемонстрировать работу шагового двигателя. Выполняются две функции, поворот на 90 градусов (отрицательное вращение вращение в противоположном направлении), микрошаг (8)
Обе функции со скоростью .01 и 1. Скорость .01 медлено но большое усилие, и 1 с быстрой скорость но малым усилием.
![]() |
Sketch code
//Released under the MIT License - Please reuse change and share
//Using the easy stepper with your arduino
//use rotate and/or rotateDeg to controll stepper motor
//speed is any number from .01 -> 1 with 1 being fastest -
//Slower Speed == Stronger movement
#define DIR_PIN 2
#define STEP_PIN 3
void setup() {
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
}
void loop(){
//rotate a specific number of degrees
rotateDeg(360, 1);
delay(1000);
rotateDeg(-360, .1); //reverse
delay(1000);
//rotate a specific number of microsteps (8 microsteps per step)
//a 200 step stepper would take 1600 micro steps for one full revolution
rotate(1600, .5);
delay(1000);
rotate(-1600, .25); //reverse
delay(1000);
}
void rotate(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);
digitalWrite(DIR_PIN,dir);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR_PIN,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
Sketch code
/*Пример программы
Table 1. Microstep Resolution Truth Table
MS1 MS2 Resolution
L L Full step (2 phase)
H L Half step
L H Quarter step
H H Eighth step
DIR = D6
Step = D5 // LOW to HIGH
SLEEP = D7 // active LOW
MS1 = D8
MS2 = D9
Enable = D10 // active LOW
*/
#define DIR_PIN 6
#define STEP_PIN 5
#define SLEEP 7
#define MS1 8
#define MS2 9
#define ENABLE 10
void setup()
{
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
pinMode(SLEEP, OUTPUT);
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(ENABLE, OUTPUT);
digitalWrite(DIR_PIN, LOW);
digitalWrite(STEP_PIN, LOW);
digitalWrite(SLEEP, HIGH);
digitalWrite(MS1, LOW); // set for single step
digitalWrite(MS2, LOW);
digitalWrite(ENABLE, HIGH); // motor off
} // end setup
void loop()
{
int i;
motorOff();
delay(2000); // wait for 3 seconds
digitalWrite(DIR_PIN, LOW); // Set the direction.
fullStep();
motorOn();
for (i = 0; i< 200; i++) // Iterate for 200 microsteps.
{
pulseOut(STEP_PIN);
delay(5);
}
motorOff();
delay(2000); // wait for 3 seconds
digitalWrite(DIR_PIN, HIGH); // Set the direction.
halfStep();
motorOn();
for (i = 0; i< 400; i++) // Iterate for 400 microsteps.
{
pulseOut(STEP_PIN);
delay(2);
}
motorOff();
delay(2000); // wait for 3 seconds
digitalWrite(DIR_PIN, LOW); // Set the direction.
quarterStep();
motorOn();
for (i = 0; i< 800; i++) // Iterate for 800 microsteps.
{
pulseOut(STEP_PIN);
delay(1);
}
motorOff();
delay(2000); // wait for 3 seconds
digitalWrite(DIR_PIN, HIGH); // Set the direction.
eighthStep();
motorOn();
for (i = 0; i< 1600; i++) // Iterate for 1600 microsteps.
{
pulseOut(STEP_PIN);
delay(2);
}
} // end loop
// inverts state of pin, delays, then reverts state back
void pulseOut(byte x) {
byte z = digitalRead(x);
delayMicroseconds(10);
z = !z; // reverse state
digitalWrite(x, z);
z = !z; // return to original state
digitalWrite(x, z);
} // end pulsout()
void fullStep(void) {
digitalWrite(MS1, LOW);
digitalWrite(MS2, LOW);
}
void halfStep(void) {
digitalWrite(MS1, HIGH);
digitalWrite(MS2, LOW);
}
void quarterStep(void) {
digitalWrite(MS1, LOW);
digitalWrite(MS2, HIGH);
}
void eighthStep(void) {
digitalWrite(MS1, HIGH);
digitalWrite(MS2, HIGH);
}
void motorOff(void) {
digitalWrite(ENABLE, HIGH);
}
void motorOn(void) {
digitalWrite(ENABLE, LOW);
}
Sketch code
//Пример программы управления двигателем с помощью джойстика
#define step_pin 3 // Pin 3 connected to Steps pin on EasyDriver
#define dir_pin 2 // Pin 2 connected to Direction pin
#define MS1 5 // Pin 5 connected to MS1 pin
#define MS2 4 // Pin 4 connected to MS2 pin
#define SLEEP 7 // Pin 7 connected to SLEEP pin
#define X_pin A0 // Pin A0 connected to joystick x axis
int direction; // Variable to set Rotation (CW-CCW) of the motor
int steps = 1025; // Assumes the belt clip is in the Middle
void setup() {
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(dir_pin, OUTPUT);
pinMode(step_pin, OUTPUT);
pinMode(SLEEP, OUTPUT);
digitalWrite(SLEEP, HIGH); // Wake up EasyDriver
delay(5); // Wait for EasyDriver wake up
/* Configure type of Steps on EasyDriver:
// MS1 MS2
//
// LOW LOW = Full Step //
// HIGH LOW = Half Step //
// LOW HIGH = A quarter of Step //
// HIGH HIGH = An eighth of Step //
*/
digitalWrite(MS1, LOW); // Configures to Full Steps
digitalWrite(MS2, LOW); // Configures to Full Steps
}
void loop() {
while (analogRead(X_pin) >= 0 && analogRead(X_pin) <= 100) {
if (steps > 0) {
digitalWrite(dir_pin, HIGH); // (HIGH = anti-clockwise / LOW = clockwise)
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 100 && analogRead(X_pin) <= 400) {
if (steps < 512) {
digitalWrite(dir_pin, LOW); // (HIGH = anti-clockwise / LOW = clockwise)
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
if (steps > 512) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 401 && analogRead(X_pin) <= 600) {
if (steps < 1025) {
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
if (steps > 1025) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 601 && analogRead(X_pin) <= 900) {
if (steps < 1535) {
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
if (steps > 1535) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 900 && analogRead(X_pin) <= 1024) {
if (steps < 2050) {
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
}
}
Рекомендуем:
Как подключить и управлять шаговым двигателем с ИК-пульта дистанционного управления
Отображения результатов на LCD-дисплее
Управление шаговым двигателем с помощью джойстика
Подключение и использование модуля реле с инфракрасным датчиком движения HC-SR501
Запись с Arduino времени и даты события на MicroSD
Использование модуля DS1307 RTC
Использование пульта дистанционного управления в Arduino проекте