Модуль двигателя MX1508, рассмотренный в этой статье, рекламируется на Aliexpress как «Двухканальная плата драйвера двигателя постоянного тока L298N, PWM Speed Dual H Bridge Stepper Module», однако присутствует микросхема MX1508 китайского производства. Также отличаются характеристики драйвера MX1508 от L298N. Давайте рассмотрим подробней данный драйвер и разберемся, как его подключить к Arduino и управлять моторами постоянного тока.
При управлении, например, с платой Arduino UNO, можно управлять двумя двигателями, при этом вращать в любом направлении каждый двигатель. Драйвер представляет из себя Н-мост с рабочим током 800 мА и пиковым током 2,5 А, а также, со встроенной системой контроля температуры.
Характеристики драйвера MX1508:
- Напряжение питания модуля 2 - 9,6 В.
- Диаметр монтажного отверстия: 2 мм.
- Входное напряжение сигнала: 1,8- 7 В.
- Ток для одного канала: 0,8 А.
- Пиковый ток: до 2,5 А.
- Ток в режиме ожидания: менее 0,1 мкА.
- Схема защиты от перегрева: встроенная (TSD) с эффектом гистерезиса.
- Размер: 24,7 х 21 х 7 мм.
Общие сведения о драйвере MX1508.
Основной чип модуля - это микросхема MX1508, состоящая из двух H-мостов (H-Bridge), один для выхода A, второй для выхода B, каждый канал рассчитан на 0,8 А с пиком 2,5 А. H-мост широко используется в электронике и служит для изменения вращения двигателя, схема H-моста содержит четыре транзистора (ключа) с двигателем в центре, образуя H-подобную компоновку. Принцип работы прост, при одновременном закрытии двух отдельных транзисторов, изменяется полярность напряжения, приложенного к двигателю. Это позволяет изменять направление вращения двигателя. На рисунке ниже, показана работа H-мостовой схемы.
Управлять двигателем можно низковольтным напряжением, ниже, чем напряжение на плате Arduino. Для управления скоростью используется широтно-импульсная модуляция (PWM).
Модуль MX1508 содержит разъем для подключения питания, два выхода A и B, и разъем управления, с назначением каждого можно ознакомиться ниже:
- Вывод «+» и «-» — питание модуля и двигателей, от 2 до 9,6 В;
- Выводы A1 и A2 — используются для управления направлением вращения двигателя A;
- Выводы B1 и B2 — используются для управления направлением вращения двигателя B;
- Выходы MOTOR A — разъем для двигателя A;
- Выходы MOTOR B — разъем для двигателя B;
Подключение MX1508 к Arduino (коллекторный двигатель).
Для урока понадодиться:
Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.
Первым делом, необходимо подключить источник питания от 2 до 9,6 B к модулю (в примере используется 5 В. от Arduino). Далее, подключаем управляющие провода A1, A2, B1, B2 (встречается маркировка, как на L298: IN1, IN2, IN3, IN1) к цифровым выводам Arduino 10, 11, 5 и 6. Теперь, подключаем двигатели, один к клеммам MOTOR A , а другой к клеммам MOTOR B. Схема подключения приведена ниже.
Теперь подключаем Arduino к компьютеру и загружаем скетч ниже.
const int PinA1 = 5; // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = 6; // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = 11; //(ШИМ) вывод 11 соединен с выводом (pin)B2
byte speed = 250; // измените это значение (0-255),
//чтобы управлять скоростью вращения двигателей
void setup() {
pinMode(PinA1, OUTPUT); // установите контакты на выход
pinMode(PinA2, OUTPUT);
pinMode(PinB1, OUTPUT);
pinMode(PinB2, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println("Avanti");
forward();
delay(2000);
STOP();
Serial.println("Indietro");
backward();
delay(2000);
STOP();
Serial.println("Sinistra");
left();
delay(2000);
STOP();
Serial.println("Destra");
right();
delay(2000);
STOP();
}
void backward() // Вперед.
{
analogWrite(PinA1, 0);
analogWrite(PinA2, speed);
analogWrite(PinB1, 0);
analogWrite(PinB2, speed);
}
void forward() //Назад...
{
analogWrite(PinA1, speed);
analogWrite(PinA2, 0);
analogWrite(PinB1, speed);
analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
analogWrite(PinA1, speed);
analogWrite(PinA2, 0);
analogWrite(PinB1, 0);
analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
analogWrite(PinA1, 0);
analogWrite(PinA2, speed);
analogWrite(PinB1, speed);
analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
analogWrite(PinA1, 0);
analogWrite(PinA2, 0);
analogWrite(PinB1, 0);
analogWrite(PinB2, 0);
delay (2000);
}
Описание скетча:
Скетч простой, не требует дополнительных библиотек. Первым делом, указываем, к каким выводам подключен модуль.
const int PinA1 = 5; // (ШИМ) вывод 5 соединен с выводом А1
const int PinA2 = 6; // (ШИМ) вывод 6 соединен с выводом А2
const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1
const int PinB2 = 11; //(ШИМ) вывод 11 соединен с выводом (pin)B2
Управление скоростью осуществляется с помощью ШИМ, для удобства используем переменную speed, в которой указываем скорость двигателя. Значение «0» - значит остановка, а «255» равносильно напряжению питания, и двигатели крутятся на максимальной скорости.
byte speed = 250; // измените это значение (0-255),
//чтобы управлять скоростью вращения двигателей
Далее, мы указываем, что данные выводы используем как выход.
pinMode(PinA1, OUTPUT); // установите контакты на выход
pinMode(PinA2, OUTPUT);
pinMode(PinB1, OUTPUT);
pinMode(PinB2, OUTPUT);
Направление вращения двигателя осуществляется с помощью выводов A1 и A2 - для первого двигателя, B1 и B2 - для второго двигателя, то есть, если подать на вывод A1 — 0B (LOW), а на A2 — 5B (HIGH), двигатель A будет вращаться вперед (так же и для двигателя B). Для вращения назад, необходимо подать на A1 — 5B (HIGH), а на A2 — 0B (LOW), двигатель A будет вращаться назад (так же и для двигателя B). На основании этого напишем небольшие функции, которые позволят вращать оба двигателя вперед, назад, в противоположном направлении, и останавливать вращение обоих двигателей.
void backward() // Вперед.
{
analogWrite(PinA1, 0);
analogWrite(PinA2, speed);
analogWrite(PinB1, 0);
analogWrite(PinB2, speed);
}
void forward() //Назад...
{
analogWrite(PinA1, speed);
analogWrite(PinA2, 0);
analogWrite(PinB1, speed);
analogWrite(PinB2, 0);
}
void left() // В левую сторону
{
analogWrite(PinA1, speed);
analogWrite(PinA2, 0);
analogWrite(PinB1, 0);
analogWrite(PinB2, speed);
}
void right() //В правую сторону
{
analogWrite(PinA1, 0);
analogWrite(PinA2, speed);
analogWrite(PinB1, speed);
analogWrite(PinB2, 0);
}
void STOP() //Стоп
{
analogWrite(PinA1, 0);
analogWrite(PinA2, 0);
analogWrite(PinB1, 0);
analogWrite(PinB2, 0);
delay (2000);
}
Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.
Serial.println("Avanti");
forward();
delay(2000);
Это поможет определить, правильно ли мы всё подключили, или нет. Если двигатели будут вращаться не в том направлении, как выводится в мониторе порта, то необходимо поменять местами провода подключения двигателей, и повторить проверку. Эта информация позволит настроить минимальный код для создания радиоуправляемой машины. Вот такие
машинки я делал на
Arduino и ESP8266 с использованием
драйвера L298:
Используя драйвер MX1508, собрать данные проекты не составит труда, так как код из проектов выше совместим с драйвером MX1508.
Появились вопросы или предложения, не стесняйся, пиши в комментарии!
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока.
И до встречи в следующем уроке.
Понравилась статья? Поделитесь ею с друзьями:
Файлы для скачивания
|
Скетч подключения MX1508 к Arduino.ino | 2 Kb | 816 |
Скачать
Вы можете скачать файл.
|
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.