Двигатель постоянного тока (DC Motor)
Поработаем с двигателем постоянного тока, который обычно входит в состав стартового набора с пропеллером.
Двигатели весьма часто применяются в Arduino-проектах. Они приводят в действие колеса, крутят пропеллеры, вращают манипуляторы промышленного робота и перемещают каретку 3D-принтера.
Каждый начинающий робототехник сталкивается с проблемой подключения двигателя к микроконтроллеру. У мотора всего два вывода, и кажется, что двигатель можно подключить к цифровым выводам Arduino, а затем включать и выключать по программе. Но не тут-то было. Даже небольшой двигатель, часто используемый в разного рода игрушках, для своей работы требует ток силой от 200 мА до 1 Ампера. А цифровой выход Arduino может дать нам только 20мА. Большинству мощных двигателей требуется напряжение более 5 Вольт, привычных для Arduino. Распространены двигатели на 12, на 24 и на 48 Вольт. Другими словами, Arduino очень слаба для прямого управления двигателями. Нужен какой-то мощный посредник!
Самый простой посредник — это транзистор. Подойдут и полевые транзисторы, и биполярные, работающие в режиме ключа.
Управляем через транзистор 2N2222/P2N2222
Для сборки схемы понадобятся транзистор 2N2222 (как вариант P2N2222, BC547, 2N3904, N2222A, TIP120), диод 1N4001 (как вариант 1N4148, 1N4007).
Собираем по схеме. Будьте внимательные при соединении транзистора и диода, соблюдайте их стороны.
Скетч. Возможно, питания от USB будет недостаточно для работы мотора, используйте питание от сети.
int motorPin = 3; void setup() < pinMode(motorPin, OUTPUT); Serial.begin(9600); while (!Serial); Serial.println("Speed 0 to 255"); >void loop() < if (Serial.available()) < int speed = Serial.parseInt(); if (speed >= 0 && speed > >
В Serial Monitor нужно ввести значение от 0 до 255, чтобы задать скорость мотора. В моём случае мотор начинал нормально вращаться от значения 30 и выше.
Есть урок с использованием транзистора IRF530N.
Драйвер L293D
Существует множество готовых микросхем, которые позволяют управлять разными типами двигателей. Мы рассмотри драйвер L293D.
Микросхема представляет собой два H-моста, а значит можно управлять сразу двумя двигателями. Каждый мост снабжён четырьмя защитными диодами и защитой от перегрева. Максимальный ток, который может передать L293D на двигатель — 1.2А. Рабочий ток — 600мА. Максимальное напряжение — 36 В.
Микросхема L293D имеет DIP-корпус с 16-ю выводами. Схема выводов ниже. Отсчёт выводов ведётся против часовой стрелки и начинается от выемки в корпусе микросхемы.
+V — питание микросхема, 5В;
+Vmotor — питание двигателей, до 36В;
0V — земля;
En1, En2 — выводы включения/выключения H-мостов;
In1, In2 — управляющие выводы первого H-моста;
Out1, Out2 — выводы для подключения первого двигателя;
In3, In4 — управляющие выводы второго H-моста;
Out3, Out4 — выводы для подключения второго двигателя.
Выводы En1 и En2 служат для отключения или включения мостов. Если мы подаём 0 на En, соответствующий мост полностью выключается и двигатель перестаёт вращаться. Эти сигналы пригодятся нам для управления тягой двигателя при помощи ШИМ-сигнала.
Схема подключения двух двигателей:
L293D | Arduino ----------------- In1 | 7 In2 | 8 In3 | 2 In4 | 3 En1 | 6 En2 | 5 V+ | 5V Vmotor+ | 5V 0v | GND
Подключим один двигатель по схеме.
Скетч для вращения двигателя, меняя направление каждую секунду. Функция analogWrite() с помощью ШИМ-сигнала управляет мощностью двигателя. Мы командуем драйверу вращать двигатель с максимальной скоростью, что соответствует ШИМ-сигналу — 255. Здесь следует отметить, что уменьшение ШИМ-сигнала в два раза не даст в два раза меньшую скорость. Скорость и тяга двигателей постоянного тока зависят от входного напряжения нелинейно.
const int in3 = 2; const int in4 = 3; const int en2 = 5; void setup() < pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(en2, OUTPUT); analogWrite(en2, 255); >void loop()
Усложним программу. Будем кроме направления менять ещё и мощность.
const int in3 = 2; const int in4 = 3; const int en2 = 5; void setup() < pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(en2, OUTPUT); >void loop()
Вот что получится в итоге. Сначала мотор вращается с небольшой скоростью, затем выходит на максимальные обороты, и повторяет всё в обратном направлении. На видео используется двигатель постоянного тока CH1 с колесом. Такие часто применяют в учебных роботах.
Подключение и управление мотором Ардуино
Подключение двигателя постоянного тока к Arduino необходимо для создания автомобиля или лодки с дистанционным управлением на микроконтроллере Ардуино. Рассмотрим различные варианты подключения двигателей постоянного тока через биполярный или мосфет транзистор и использование модуля L298N. В этом обзоре вы найдете схемы подключения и программы для Arduino для всех вариантов управления двигателем.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- мотор постоянного тока fa 130
- motor shield L298N
- MOSFET транзистор
- резистор и конденсатор
- макетная плата
- коннекторы
- Блютуз Машинка с двумя моторами на Ардуино
- Motor Control Shield L293D для Ардуино
- Подключение мотора к Ардуино через mosfet
Щеточные двигатели для Ардуино (DC motor) могут быть рассчитан на различные напряжения питания. Если коллекторный мотор работает от 3 до 5 Вольт, его можно подключить к портам питания Ардуино через транзистор. Двигатели fa 130, поставляемые в корпусе вместе с редукторами и колесами, рассчитаны на напряжение от 6 Вольт, поэтому ими управляют с помощью полевого транзистора или драйвера L298N Arduino.
Щеточный мотор Ардуино схема, принцип работы
Мотор с редуктором fa 130 характеристики
- Номинальное напряжение: 6 В
- Диапазон напряжения: 2.4 – 13.8 В
- Обороты без нагрузки: 2800 об/мин
- Ток без нагрузки: 0.025 А
- Номинальные обороты: 2007 об/мин
- Номинальный ток: 0.063 А
- Номинальный крутящий момент: 7.08 г-см
На схеме показана конструкция двигателя постоянного тока и принцип его работы. Как вы можете видеть, чтобы ротор начал вращаться, к двигателю должно быть подключено постоянное напряжение. При изменении полярности ротор будет вращаться в противоположном направлении. Драйвер двигателя L298N позволяет изменить направление вращения двигателя DC, что облегчает его использование в DIY проектах.
Как подключить моторчик через MOSFET к Ардуино
Чтобы подключить щеточный двигатель через транзистор, необходимо использовать 5-вольтовый порт Ардуино или внешний источник питания. Конденсатор в схеме используется для уменьшения помех в цепи. Транзистор будет действовать как ключ, замыкая/размыкая электрическую цепь. Сам мосфет транзистор управляется любым цифровым портом на Arduino. Соберите схему, как на рисунке, и загрузите программу.
Скетч для управления моторчиком Ардуино от мосфет
#define MTR 12 void setup() < pinMode(MTR, OUTPUT); >void loop()
Как подключить мотор к драйверу L298N Ардуино
Подключение двигателя к Arduino через драйвер L298N или L293D Motor Shield позволяет изменять направление вращения ротора моторчика. Но чтобы использовать эти модули, необходимо установить соответствующие библиотеки для Arduino. В следующем примере мы использовали схему подключения двигателя с модулем L298N. Соберите схему, как показано на рисунке выше, и загрузите в микроконтроллер следующий код.
Скетч для управления мотором Ардуино от L298N
#define IN1 4 #define IN2 5 #define IN3 6 #define IN4 7 void setup() < pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); >void loop()
Заключение. Прежде чем выбрать способ управления двигателем от Arduino Uno, определите номинальное напряжение мотора. Если требуется напряжение более 5 вольт, необходимо использовать внешний источник питания. Распиновка транзисторов может отличаться от данного примера (проверьте распиновку перед подключением). Драйвер L298N не только включает двигатель, но и меняет направление вращения.
#29. Подключаем драйвер мотора MX1508 к Arduino.
Модуль двигателя 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 (коллекторный двигатель).
Для урока понадодиться:
- Arduino UNO R3. Купить можно на AliExpress или в России.
- Драйвер мотора MX1508. Купить можно на AliExpress или в России.
- Мотор-редуктор с колесами. Купить можно на AliExpress или в России.
- Провод DuPont. Купить можно на AliExpress или в России.
- Плата макетная беспаечная 55х82х8.5 мм. Купить можно на AliExpress или в России.
Схема подключения 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() //Стоп
Описание скетча:
Скетч простой, не требует дополнительных библиотек. Первым делом, указываем, к каким выводам подключен модуль.
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() //Стоп
Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.
Serial.println("Avanti"); forward(); delay(2000);
- Собираем Arduino машинку на Motor Shield L293D и ИК пульте.
- Машинка на радиоуправлении. Arduino + nrf24l01 + пульт.
- Самодельная Wifi машинка на NodeMCU. Машина делает дрифт.
Используя драйвер MX1508, собрать данные проекты не составит труда, так как код из проектов выше совместим с драйвером MX1508.
Появились вопросы или предложения, не стесняйся, пиши в комментарии!
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока.
И до встречи в следующем уроке.
Понравилась статья? Поделитесь ею с друзьями:
Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.
Управление маленьким двигателем может осуществляться довольно просто. Если двигатель достаточно маленький, он может быть непосредственно соединен с выводом Arduino, и просто изменяя уровень управляющего сигнала от логической единицы до нуля будем контролировать моторчик. Этот проект раскроет вам основную логику в управлении электродвигателем; однако, это не является стандартным способом подключения двигателей к Arduino. Мы рекомендуем, вам изучить данный способ, а затем перейти на следующую ступень — заняться управлением двигателями при помощи транзисторов.
Подключим миниатюрный вибромоторчик к нашему Arduino.
- обычный Ардуино, подключенный к USB-порту компьютера
- Резистор на 220 Ом
Миниатюрный вибромоторчик (можно найти в старой ненужной мобилке, или в магазине электроники)
Подсоединение моторчика:
1. У вибромоторчика есть два провода питания. Соедините один его провод с нулевым выводом (GND) питания контроллера. Не имеет значения какой из двух проводов.
2. Подключите резистор между выбранным дискретным выходом контроллера и оставшимся неподключенным проводом моторчика. Подключение резистора ограничит ток и гарантирует нам целостность и сохранность Ардуины, так как она не проектировалась для прямого контроля электродвигателями без преобразователей.
Приводим схему, где для мотора выбран второй дискретный вывод платы контроллера:
А вот примеры, как всё можно соединить при помощи макетной платы:
Текст программы Arduino
Следующий скетч запустит моторчик на 1 секунду, и остановит его на такое же время и так далее по кругу:
// Декларируем номер дискретного выхода
int motorPin = 2;
void setup() <
//Назначаем второй дискретный вывод как выход
pinMode(motorPin, OUTPUT);
// Включить мотор
digitalWrite(motorPin, HIGH);
// Подождать 1000 мс
// Выключить мотор
digitalWrite(motorPin, LOW);
// Подождать 1000 мс
Как это работает
Всякий раз, когда программа будет подавать логическую единицу на наш выход, ток будет течь через резистор, через мотор (М), и на землю. Если М действительно маломощный, он начнет вращаться, если это стандартный двигатель постоянного тока; иначе он начнет вибрировать, если это вибромоторчик. Резистор очень важен для этой схемы. Каждый дискретный выход Arduino рассчитан на ток только до 40 мА, при чем рекомендуется не превышать 20 мА. Выбранное значение резистора 220 Ом ограничит ток до 22 мА, и потому, что М включен с ним последовательно, ток будет даже меньше. Если общее сопротивление движка выше, чем 200 Ом, то можно с уверенностью убрать резистор и напрямую подключить моторчик к цифровому выводу и GND.
В этом проекте мы напрямую к контроллеру подключили один вибромоторчик, но никто нам не запрещает подключить их несколько.
Несколько двигателей могут быть подключены на разные цифровые выводы платы контроллера. Например, выходы 2, 3, и 4 могут независимо управлять различными тремя электродвигателями. Каждый дискретный вывод, на Arduino может управлять отдельным движком. Хотя вообщето, так делать не рекомендуется, так как это увеличит ток, проходящий через Arduino. Давайте пока ограничимся одним двигателем в данной реализации.
Каждый электродвигатель постоянного тока является катушкой индуктивности. Когда мы снимаем с него ток, или когда мы вращаем М вручную, он будет генерировать обратное напряжение. Что может подпалить подключенный к нему электронный компонент. Чтобы избежать этого, мы можем подключить диод между дискретным выходом и выводом питания 5В. Всякий раз, когда М будет отдавать паразитное обратное напряжение, диод будет соединять его с плюсом питания. К счастью, Ардуино имеет встроенный защитный диод на каждом выводе. И нам нет необходимости его дублировать внешним диодом.
2. Управляем электродвигателем при помощи транзисторов.
Мы конечно можем управлять миниатюрным электродвигателем непосредственно подключив его к выходу Arduino; однако, дискретный выход не потянет двигатели, потребляющие больше 40 мА. Выход заключается в использовании простого усиливающего устройства, транзистора, чтобы иметь возможность управлять электродвигателями постоянного тока любой мощности. Рассмотрим на примере, как управлять большими электродвигателями, используя два транзистора npn и pnp структуры.
Для этого проекта нам понадобятся следующие электронные компонеты:
- Плата Arduino, подключенная к USB-порту компьютера
- Моторчик постоянного тока
- Резистор сопротивлением между 220 Ом и 10 кОм
- npn транзистор(BC547, 2N3904, N2222A, TIP120)
- Диод (1N4148, 1N4001, 1N4007 )
Ниже приведены шаги, при подключении двигателей с помощью транзистора:
- Подключите ноль питания Arduino GND к минусовой шине макетной платы.
- Подключите один из проводов двигателя к плюсу питания +5В платы контроллера. Мы будем использовать 5В питания USB-порта. Если нужна большая мощность, то нужно использовать внешний источник питания, такой как например батарея. Пока рассмотрим питание именно от USB.
- Другой провод двигателя соединяем с коллектором транзистора npn. По спецификации на ваш транзистор определите какой из трех его выводов коллектор, какой база и какой эмиттер.
- Подключите эмиттер транзистора к минусу питания GND, используя минусовую шину питания макетной платы.
- Установите резистор между базой транзистора и дискретным выходом платы Arduino.
- Включите защитный диод параллельно с движком. Минус диода должен быть подключен к плюсу питания 5В.
Схема для Arduino Uno
Это одна из возможных реализаций с использованием девятого цифрового выхода. Arduino может быть запитан от внешнего источника питания. А если нет, мы можем подключить движок отдельно к внешнему питанию 5В, а Ардуино к своему питанию. Но ноль питания у них должен быть объединен.
А вот один из способов соединения элементов схемы на макетной плате:
Код программы Arduino
Этот скетч ничем не отличается от предыдущего. Всё так же программа запускает движок на секунду, потом останавливает его на секунду и так далее: