cart

Продуктов в корзине: 0

Поиск товаров

Новинки



В этом материале мы подробно изучим работу со щитом драйвера двигателей (Motor Shield'а) L293D, созданного компанией Adafruit, а также подключим и поуправляем с его помощью различными видами двигателей.

Данный драйвер позволяет одновременно подключить до четырех коллекторных DC двигателей, или до двух биполярных шаговых двигателей. Кроме того на шилде имеются выходы для подключения двух сервоприводов.

L293D

Характеристики

На борту данной платы расположено две микросхемы L293D (1). Они позволяют подключать слаботочные моторы мощностью до 600 мА на канал. На двух пятиконтактных разьемах (2) расположены 4 контакта для подключения двигателей (M1, M2, M3, M4),средние контакты на пятиконтактных разьемах посажены на землю для удобства подключения пятипроводных шаговых моторов. Наличие двух интегральных схем L293D допускает одновременное подключение 4 двигателей постоянного тока или 2 шаговых двигателя, либо два моторчика и 1 шаговый двигатель. Для прямого управления контактами L293D (IN1, IN2, IN3, IN4),предназначенные для задания направления вращения, необходимо 4 вывода, соответсвенно для двух L293D целых 8. Для снижения занятых контактов на плате расположен сдвиговый регистр 74НС595 (3). Благодаря чему количество управляющих контактов снижается до четырех.Кроме того, на щите расположены 2 пина для подключения сервоприводов (4). Работа с сервоприводами как обычно осуществляется через библиотеку Servo.h рассмотреть которую вы сможете в других обзорах. Здесь же мы изучим другую бибилиотеку AFmotor.h .Питание платы осуществляется либо от внешнего источника на клемму (6) либо замкнув перемычку (5) ( питание от разьема двигателей +M подключается к контакту Vin Arduino). При замкнутой перемычке напряжение питания должно быть от 6 до 12Вольт.

L293D 1

Недостатком этого драйвера является то, что он использует большое количество цифровых выходов Arduino


Выходы задающие обороты моторов

D11- DC двигатель №1 / Шаговый мотор №1
D3- DC двигатель №2 / Шаговый мотор №1
D5- DC двигатель №3 / Шаговый мотор №2
D6- DC двигатель №4 / Шаговый мотор №2

Выводы задающие направление вращения двигателей:

Цифровые выводы 4, 7, 8 и 12 соответсвенно


Выводы для управления сервоприводами (штырьки на драйвере):

D9- Сервопривод №1
D10- Сервопривод №2

Подключение к Arduino

Библиотека используемая для работы с драйвером AFMotor.h

Добавление библиотек в среду разработки IDE, а также установка самой среды, драйверов Arduino подробно описано в этой статье 

Втыкаем драйвер в Arduino, подключаем двигатели и пробуем тестовый скетч.


Подключение четырех коллекторных DC двигателей

L293D

Пример программного кода

#include <AFMotor.h> // Подключаем библиотеку для работы с шилдом
#include <Servo.h> // Подключаем библиотеку для работы с сервоприводами, можно не подключать

// Подключаем двигатели к клеммникам M1, M2, M3, M4
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
// Задаем скорость вращения двигателей (аналог работы PWM или ШИМ)
motor1.setSpeed(255);
motor1.run(RELEASE);
motor2.setSpeed(255);
motor2.run(RELEASE);
motor3.setSpeed(255);
motor3.run(RELEASE);
motor4.setSpeed(255);
motor4.run(RELEASE);
}

int i;

void loop() {
// вращение вперед в течении 1 секунды
motor1.run(FORWARD); // Вращение вперед
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
motor1.setSpeed(255); // Указываем скорость вращения
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
delay(1000);

/* Настоятельно советую сразу не менять направление вращения моторов. Необходим небольшой промежуток времени для переключения направления движения*/

motor1.run(RELEASE); // тормозим двигатели
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
delay(500);

// вращение Назад в течении 1 секунды
motor1.run(BACKWARD); // Вращение назад
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
motor1.setSpeed(255); // Указываем скорость вращения
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
delay(1000);


motor1.run(RELEASE); // тормозим двигатели
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
delay(500);

// Постепенно ускоряем моторы в одном направлении
motor1.run(FORWARD); // Вращение вперед
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
for (i=0; i<255; i++) {
motor1.setSpeed(i); // Указываем скорость вращения
motor2.setSpeed(i);
motor3.setSpeed(i);
motor4.setSpeed(i);
delay(10);
}

motor1.run(RELEASE); // тормозим двигатели
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
delay(500);

// Постепенно ускоряем моторы в одном направлении
motor1.run(BACKWARD); // Вращение вперед
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
for (i=255; i>=0; i--) {
motor1.setSpeed(i); // Указываем скорость вращения
motor2.setSpeed(i);
motor3.setSpeed(i);
motor4.setSpeed(i);
delay(10);
}

motor1.run(RELEASE); // тормозим двигатели
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
delay(500);
}


Используем шаговый двигатель

L293D 2

Тестовый скетч

#include <AFMotor.h>
#include <Servo.h>

// Подключаем шаговый двигатель к порту 1
// порт 1 - M1, M2
// порт 2 - M3, M4
// 48 - количество шагов для полного оборота
AF_Stepper stepper(48, 1);

void setup() {
}

int i;

void loop() {
// делаем 48 шагов в одном направлении (FORWARD)
// DOUBLE - тип шага
for (i=0; i<48; i++) {
stepper.step(1, FORWARD, DOUBLE);
delay(50);
}
// и 48 шагов в обратном направлении (BACKWARD)
for (i=50; i!=0; i--) {
stepper.step(1, BACKWARD, DOUBLE);
delay(50);
}
}

Добавить комментарий


Защитный код
Обновить

Недавно смотрели

Go to top