Управление двигателем постоянного тока с помощью Arduino и ИМС L298
Подключив к Arduino микросхему моста L298, вы сможете управлять двигателем постоянного тока.
Двигатель постоянного тока (DC) является наиболее распространенным типом электродвигателей. Двигатели постоянного тока обычно имеют только два вывода, один положительный и один отрицательный. Если вы подключите эти два вывода напрямую к аккумулятору, двигатель начнет крутиться. Если же поменять полярность подаваемого напряжения, двигатель будет вращаться в противоположном направлении.
Чтобы управлять направлением вращения двигателя постоянного тока без переподключения питания к его выводам, вы можете использовать схему, называемую Н-мостом. Н-мост – это электронная схема, которая может управлять вращением двигателя в обоих направлениях. Н-мосты используются во множестве различных приложений, самым распространенным из которых является управление двигателями в роботах. Эта схема называется Н-мостом потому, что она использует четыре транзистора, подключенных таким образом, что схема выглядит как буква "Н".
Для сборки данной схемы вы можете использовать дискретные транзисторы, но в этом руководстве мы будем использовать микросхему Н-моста L298. L298 может управлять скоростью и направлением вращения двигателей постоянного тока и шаговых двигателей и может управлять двумя двигателями одновременно. Допустимый ток для каждого из двигателей составляет 2 ампера. Однако при таких токах вам будет необходимо использовать радиаторы.
Распиновка микросхемы L298 показана на рисунке ниже. Техническое описание L298 можно скачать здесь.
Распиновка микросхемы L298 (вид сверху)
Необходимые комплектующие
- 1 x микросхема моста L298
- 1 x двигатель постоянного тока
- 1 x Arduino Mega 2560
- 1 x макетная плата
- 10 x перемычка
Схема выше показывает, как подключить микросхему L298 для управления двумя электродвигателями. Для управления каждым двигателем у микросхемы есть по три вывода: вход 1 (IN1), вход 2 (IN2) и включение A (EN A) для двигателя 1, и вход 3 (IN3), вход 4 (IN4) и включение B (EN B) для двигателя 2.
Поскольку в данном руководстве мы будем управлять только одним электродвигателем, то мы подключим Arduino к выводам IN1 (вывод 5), IN2 (вывод 7) и EN A (вывод 6) микросхемы L298. Выводы 5 и 7 цифровые, то есть для вращения двигателя в заданную сторону на эти выводы необходимо подавать неизменяющиеся в времени сигналы логического нуля или единицы. В то время, как на вывод 6 необходимо подавать широтно-импульсно-модулированный (ШИМ) сигнал, который управляет скоростью вращения двигателя.
Следующая таблица показывает, в каком направлении будет вращаться электродвигатель в зависимости от логических уровней на входах IN1 и IN2.
IN1 | IN2 | Двигатель |
---|---|---|
остановлен | ||
1 | вращение вперед | |
1 | вращение назад | |
1 | 1 | остановлен |
В таблице ниже приведено описание подключения микросхемы L298 к нашей плате Arduino Mega 2560.
Выводы L298 | Выводы Arduino | Назначение |
---|---|---|
IN1 | вывод 8 | выбор направления вращения двигателя |
IN2 | вывод 9 | |
EN A | ШИМ вывод 2 | управление скоростью вращения двигателя |
Для установки значений на выводах 8 и 9 платы Arduino мы будем использовать функцию digitalWrite()
, а для установки занчений на выводе 2 – функцию analogWrite()
.
Ниже показана фотография стенда, собранного для проведения эксперимента.
Код
const int pwm = 2; // вывод 2 настраивается, как ШИМ
// выводы для выбора направления вращения двигателя
const int in_1 = 8;
const int in_2 = 9;
void setup()
{
pinMode(pwm,OUTPUT); // Мы должны настроить ШИМ вывод на выход
pinMode(in_1,OUTPUT); // Логические выводы так же настраиваются на выход
pinMode(in_2,OUTPUT);
}
void loop()
{
// Для вращения по часовой стрелке необходимо установить in_1 = High , in_2 = Low
digitalWrite(in_1,HIGH);
digitalWrite(in_2,LOW);
analogWrite(pwm,255); // установка pwm в значение 255
// Мы можем изменить скорость вращения, изменив выходное значение pwm.
// Вращение двигателя по часовой стрелке 3 секунды.
delay(3000);
// Остановка
digitalWrite(in_1,HIGH);
digitalWrite(in_2,HIGH);
delay(1000) ;
// Для вращения против часовой стрелки необходимо установить IN_1 = LOW , IN_2 = HIGH
digitalWrite(in_1,LOW);
digitalWrite(in_2,HIGH);
delay(3000);
//Остановка
digitalWrite(in_1,HIGH);
digitalWrite(in_2,HIGH);
delay(1000);
}
Сборка
- Подключите выводы 5V и корпус микросхемы L298 к выводам 5V и корпус платы Arduino;
- Подключите двигатель к выводам 2 и 3 микросхемы L298;
- Подключите вывод IN1 микросхемы L298 к выводу 8 платы Arduino;
- Подключите вывод IN2 микросхемы L298 к выводу 9 платы Arduino;
- Подключите вывод EN A микросхемы L298 к выводу 2 платы Arduino;
- Подключите вывод SENS A микросхемы L298 к корпусу;
- Подключите Arduino к компьютеру, используя USB кабель, и загрузите программу на плату, используя Arduino IDE;
- Обеспечьте питание платы Arduino с помощью источника питания, аккумулятора или USB кабеля.
Теперь двигатель должен сначала вращаться по часовой стрелке в течение 3 секунд, а затем против часовой стрелки так же в течение 3 секунд.