Для электронщиков и радиолюбителей

Как управлять двигателем постоянного тока с помощью Arduino без использования драйвера

Как управлять двигателем постоянного тока с помощью Arduino без использования драйвера

Цель этой статьи – показать вам, как управлять маломощным двигателем постоянного тока с помощью микроконтроллерной платы Arduino (а также ESP8266 или ESP32), но без использования драйвера двигателя на основе специализированной микросхемы.

На самом деле для управления мотором постоянного тока, мощность которого довольно мала, не обязательно использовать драйвер, достаточно лишь полевого МОП-транзистора (MOSFET), например, IRLZ44. На следующем рисунке показана схема, которую мы будем использовать для запуска и управления двигателем постоянного тока без какого-либо драйвера двигателя.

Как управлять двигателем постоянного тока с помощью Arduino без использования драйвера

Поскольку используемый двигатель постоянного тока имеет рабочее напряжение от 3 В до 6 В, мы используем напряжение питания 5 В от платы Arduino (в случае с ESP8266 и ESP32 напряжение питания составит 3,3 В). На макетной плате сборка будет выглядеть следующим образом.

Как управлять двигателем постоянного тока с помощью Arduino без использования драйвера

Для простого управления двигателем в Arduino можно загрузить следующий простой код, который включает и отключает двигатель с задержкой 2 секунды.

int motorPin = 6;

void setup() {
}

void loop() {
  digitalWrite(motorPin, HIGH);
  delay(2000);
  digitalWrite(motorPin, LOW);
  delay(2000);
}

Но зачем использовать транзистор, а не запускать двигатель постоянного тока напрямую от цифровых линий ввода/вывода микроконтроллера? Действительно, вы можете задаться вопросом, можно ли подключить двигатель постоянного тока напрямую к цифровому выводу микроконтроллера и управлять двигателем через цифровой вывод, чтобы включать и выключать двигатель. Проблема с этой схемой заключается в том, что небольшие двигатели постоянного тока, вероятно, будут потреблять больше энергии, чем могут обеспечить цифровые контакты Arduino, ESP8266 или ESP32. Двигатель постоянного тока, который мы используем в этом примере, потребляет в среднем 100 мА. Если двигатель постоянного тока потребляет больше тока, чем максимальный ток линии ввода/вывода, ваш микроконтроллер может быть поврежден. Arduino же на выходе может обеспечить не более 40 мА.

Теперь мы знаем, что линии ввода/вывода нельзя использовать в качестве источника питания для двигателя постоянного тока. Как насчет линии питания 5 В или 3,3 В микроконтроллера? Хороший выбор, потому что эти контакты подключены к общему источнику питания платы микроконтроллера, который использует соединение USB с максимальным током 250 мА. Вывод 5 В, а также вывод 3,3 В являются идеальным источником питания для двигателя постоянного тока, который потребляет менее 200 мА (потому что нашему микроконтроллеру также требуется некоторое питание). С другой стороны, мы не можем управлять линией питания 5 В или 3,3 В для включения, выключения двигателя постоянного тока или изменения скорости.

Поэтому мы используем транзистор между 5В/3,3В и землей для управления схемой двигателя постоянного тока. Затвор транзистора подключен к цифровому выводу микроконтроллера через делитель напряжения из двух резисторов. Мы можем включать и выключать двигатель постоянного тока, переключая цифровой вывод между состояниями HIGH и LOW. Используя широтно-импульсную модуляцию на цифровом выводе, мы также можем управлять скоростью двигателя.

Если вы хотите использовать большие двигатели постоянного тока, которые потребляют более 200 мА, например 1 А, вы не сможете использовать напряжение питания микроконтроллера. В этом случае вам понадобится внешний источник питания для двигателя постоянного тока, такой как лабораторный блок питания, батареи или сетевой адаптер.

Также посмотрев на схему, некоторые могут задаться вопросом – зачем нужен диод параллельно двигателю постоянного тока? Двигатель постоянного тока имеет внутри катушки, которые создают магнитное поле. Когда двигатель постоянного тока выключен, ток в статоре равен 0 А, а ротор вращается свободно из-за момента инерции. Это вращение вызывает самоиндукцию в катушках двигателя и, следовательно, скачки напряжения. На следующем рисунке показано поведение напряжения во время выключения.

Как управлять двигателем постоянного тока с помощью Arduino без использования драйвера

На рисунке видно, что напряжение сток-исток Vds выходит за пределы допустимого из-за отключения MOSFET-транзистора и индуктивности двигателя, сбрасывающего свой ток обратно в сток MOSFET-транзистора. Диод, также называемый обратным диодом, который мы установили параллельно двигателю постоянного тока, обеспечивает безопасный путь для индуктивного тока, чтобы напряжение сток-исток не повышалось и потенциально не повреждало цепь.

А зачем нужен резистор последовательно к затвору транзистора и как рассчитать его величину? Резистор R1 предназначен для ограничения тока для микроконтроллера, потому что затвор MOSFET-транзистора представляет собой небольшой конденсатор, который начинает заряжаться, если на затвор подается напряжение. Начальное потребление тока может быть слишком большим для линии ввода/вывода микроконтроллера. Когда ток превышает максимальный ток микроконтроллера, микроконтроллер может выйти из строя. Поэтому мы используем резистор R1 для защиты цифрового вывода и выравнивания кривой зарядки затвора MOSFET-транзистора. Пока нам не нужна высокая частота переключения выше 100 кГц, мы можем использовать резистор R1 на 220 Ом.

А зачем нужен резистор между затвором транзистора и землей? Если цифровой вывод ввода-вывода микроконтроллера Arduino, ESP8266 или ESP32 установлен в состояние LOW, но напряжение питания двигателя постоянного тока на эмиттере все еще активно, существует вероятность того, что транзистор ошибочно переключился. Это также может произойти в начале программы, когда цифровой вывод микроконтроллера еще не определен как выход. Резистором R2 мы устанавливаем заданное состояние, в этом случае притягиваем затвор к земле. Величина этого резистора R2 между затвором и землей создает делитель напряжения с резистором R1. Выход делителя напряжения является напряжением затвора MOSFET-транзистора. Цель состоит в том, чтобы напряжение затвора не слишком сильно уменьшалось резистором R2. В противном случае может случиться так, что пороговое напряжение не будет превышено для переключения MOSFET-транзистора.