Подписаться YouTube

Управляйте двигателем постоянного тока с помощью Arduino, ESP8266 или ESP32 без IC

Цель этой статьи - показать вам, как управлять двигателем постоянного тока с помощью платы микроконтроллера Arduino, ESP8266 или ESP32, но без использования драйвера двигателя IC.
Мы спроектируем схему двигателя постоянного тока, которая содержит микроконтроллер Arduino, ESP8266 или ESP32, сам двигатель постоянного тока, полевой МОП-транзистор, один диод и два резистора.

После обсуждения всех элементов схемы я покажу вам базовый сценарий программы для включения и выключения двигателя постоянного тока и второй сценарий для управления скоростью двигателя постоянного тока.

Управление двигателем постоянного тока без эскиза IC

Схема двигателя постоянного тока для Arduino, ESP8266 и ESP32

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

Подключение двигателя постоянного тока без микросхемы Arduino Uno Schaltplan

Подключение двигателя постоянного тока без микросхемы ESP8266 NodeMCU

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

Подключение двигателя постоянного тока без микросхемы Arduino Nano

Подключение двигателя постоянного тока без микросхемы Arduino Pro Mini

Подключите двигатель постоянного тока без IC Arduino Uno

Подключение двигателя постоянного тока без микросхемы Arduino Mega

Подключите двигатель постоянного тока без IC ESP8266 NodeMCU

Подключение двигателя постоянного тока без микросхемы ESP8266 WeMos D1 Mini

Подключение двигателя постоянного тока без IC ESP32 ESP-WROOM-32

Мне иногда трудно вспомнить названия контактов транзистора или полевого МОП-транзистора. Поэтому я создал следующую картинку, на которой показаны научные названия, которые мы также используем в этой статье. Поскольку я использую MOSEFT для своей схемы, я буду использовать только условное обозначение MOFET с правой стороны изображения до конца этого урока.

Различные терминалы BJT и MOSFET

Микроконтроллер Arduino, ESP8266 или ESP32 обеспечивает питание двигателя постоянного тока. Мы используем MOSFET IRLZ44 NPN как переключатель нижнего уровня для управления двигателем постоянного тока.

  • NPN транзистор: Потому что мы хотим включить двигатель постоянного тока, установив на цифровом выводе микроконтроллера ВЫСОКОЕ значение.
  • Переключатель низкого уровня: Транзистор находится на стороне низкого (заземления) цепи, а двигатель подключен к стороне высокого (5 В или 3,3 В). В противном случае мы не смогли бы отключить нагрузку, которая имеет напряжение выше управляющего напряжения (V_DS> V_GS).

Зачем нужно использовать транзистор, а не запускать двигатель постоянного тока напрямую от цифровых выводов ввода/вывода микроконтроллера?

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

В следующей таблице показан максимальный ток цифровых входов/выходов для наиболее часто используемых платах микроконтроллеров, который намного ниже 100 мА, необходимых для управления двигателем постоянного тока.

МикроконтроллерДоскиМаксимальный ток вывода цифрового ввода/вывода
ATmega328PАрдуино Нано, Ардуино Уно, Ардуино Про Мини40 мА
ATmega2560Ардуино Мега20 мА
ESP8266ESP-01, NodeMCU, WeMos D1 Mini12 мА
ESP32DevKitC, Adafruit HUZZAH32, Sparkfun ESP32 Thing Plus, FireBeetle ESP3220 мА

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

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

  • Мы можем включать и выключать двигатель постоянного тока, переключая цифровой вывод HIGH и LOW.
  • Используя широтно-импульсную модуляцию на цифровом выводе, мы также можем управлять скоростью двигателя, см. Главу: Как управлять скоростью двигателя постоянного тока

При использовании внешнего источника питания для двигателя постоянного тока?

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

Вы можете запитать микроконтроллер через регулятор напряжения также от этого внешнего источника питания.

Как выбрать правильный МОП-транзистор для управления двигателем постоянного тока?

Для нашей схемы мы выбрали МОП-транзистор IRLZ44. Но как я узнал, что могу использовать этот полевой МОП-транзистор? Решение основано на микроконтроллере и электрических характеристиках двигателя постоянного тока. Следующие шаги показывают процесс выбора подходящего транзистора для вашей схемы:

  1. Пороговое напряжение затвора (V_GS) ниже рабочего напряжения микроконтроллера.. IRLZ44 имеет пороговое напряжение затвор-исток от 1 В до 2 В. Наши Arduino с рабочим напряжением 5 В и ESP32 и ESP8266 с рабочим напряжением 3,3 В имеют более высокое напряжение, чем пороговое напряжение затвор-исток IRLZ44.
  2. Напряжение пробоя сток-исток не превышено.. Поскольку мы используем микроконтроллер в качестве источника питания двигателя постоянного тока, наше напряжение сток-исток не будет превышать 5 В. Напряжение пробоя сток-исток IRLZ44 намного выше - 55 В.
  3. Постоянный ток стока не превышен. Двигатель постоянного тока, который мы используем в этом примере, потребляет в среднем 100 мА, а абсолютный максимальный ток непрерывного стока IRLZ44 составляет 35 А.

Следовательно IRLZ44 MOSFET - хороший выбор для нашей схемы. Если вы являетесь экспертом в области транзисторов и полевых МОП-транзисторов и думаете, что я упускаю важный момент, используйте раздел комментариев в конце этой статьи, чтобы поделиться с нами своими знаниями.

Зачем нужен диод параллельно двигателю постоянного тока?

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

Схема двигателя постоянного тока MOSFET отключает скачок напряжения

На картинке вы видите, что напряжение сток-исток резко увеличивается из-за отключения полевого МОП-транзистора и индуктивности двигателя, сбрасывающего ток обратно на сток полевого МОП-транзистора.

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

Зачем нужен резистор, подключенный последовательно к затвору транзистора и как рассчитать его размер?

Резистор R1 предназначен для ограничения тока микроконтроллера, потому что затвор полевого МОП-транзистора представляет собой небольшой конденсатор, который начинает заряжаться, если на затвор подается напряжение. Первоначальное потребление тока могло быть слишком большим для вывода цифрового ввода/вывода микроконтроллера, как показано на следующем рисунке.

Ток зарядки конденсатора

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

Зачем нужен резистор между затвором транзистора и землей?

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

Размер этого резистора R2 между затвором и землей образует делитель напряжения с резистором R1. Выход делителя напряжения - это напряжение затвора полевого МОП-транзистора. Цель состоит в том, чтобы напряжение затвора не слишком сильно уменьшалось резистором R2. В противном случае может случиться так, что пороговое напряжение не будет превышено для переключения MOSFET.

На следующих рисунках показано напряжение затвор-исток для различных резисторов R2 и без резистора для измерений Arduino и ESP8266, поскольку рабочее напряжение также влияет на напряжение затвор-исток.

Максимальное напряжение 1,512 В

ПикоСкоп Arduino без диода 22010k

Максимальное напряжение 1,814 В

ПикоСкоп Arduino без диода 22022k

Максимальное напряжение 2,695 В

ПикоСкоп Arduino без диода 22047k

Максимальное напряжение 4,767 В

ПикоСкоп Arduino без диода 2200

Максимальное напряжение 3,23 В

PicoScope ESP8266 без диода 22010k

Максимальное напряжение 3,23 В

PicoScope ESP8266 без диода 22022k

Максимальное напряжение 3,23 В

PicoScope ESP8266 без диода 22022k

Максимальное напряжение 3,287 В

PicoScope ESP8266 без диода 22047k

Из изображений осциллографа видно, что чем выше резистор R2, тем выше напряжение затвора. Следовательно, резистор R2 должен быть намного больше, чем резистор R1. Значения от 47 кОм до 100 кОм являются обычной практикой. В нашей схеме мы используем резистор 47 кОм для схем Arduino, ESP8266 и ESP32.

Программный сценарий для цепи двигателя постоянного тока

Программный сценарий, который управляет двигателем постоянного тока без какого-либо драйвера двигателя IC, только с микроконтроллером Arduino, ESP8266 или ESP32 и MOSFET, показан в следующем разделе. Чтобы управлять двигателем постоянного тока, нам нужно только повернуть затвор полевого МОП-транзистора в ВЫСОКОЕ положение, чтобы двигатель постоянного тока вращался, или установить цифровой вывод микроконтроллера на НИЗКОЕ значение, чтобы выключить двигатель постоянного тока.

int motorPin = 6; // for Arduino microcontroller
//int motorPin = D6; // for ESP8266 microcontroller
//int motorPin = 4; // for ESP32 microcontroller
void setup() {
}
void loop() {
  digitalWrite(motorPin, HIGH);
  delay(2000);
  digitalWrite(motorPin, LOW);
  delay(2000);
}

В начале сценария Arduino мы определяем вывод цифрового ввода/вывода, который соединяет микроконтроллер с затвором полевого МОП-транзистора. Функция настройки остается пустой и не используется. В функции цикла мы устанавливаем цифровой вывод HIGH и LOW. Между каждым состоянием ждем 2 секунды.

На следующем рисунке показаны напряжения сток-исток и напряжение затвор-исток.

PicoScope Arduino Uno V_DS и V_GS

Если напряжение затвор-исток превышает пороговое напряжение полевого МОП-транзистора, напряжение сток-исток выходит из строя, потому что двигатель постоянного тока включается, что приводит к большому падению напряжения на двигателе постоянного тока.

Как контролировать скорость двигателя постоянного тока

Скорость двигателя постоянного тока пропорциональна току, протекающему через коллектор. Если мы посмотрим на характеристическую кривую транзистора, мы увидим, что мы можем управлять током коллектора через ток соединения базы.

Характеристическая кривая транзистора

Тот же принцип действует и для полевых МОП-транзисторов. Чтобы увеличить или уменьшить ток затвора, мы используем широтно-импульсную модуляцию (ШИМ) на подключенном цифровом выводе ввода/вывода микроконтроллера.

В следующем примере мы хотим увеличивать и уменьшать скорость двигателя постоянного тока.

Программный сценарий для управления скоростью двигателя постоянного тока

Следующий сценарий использует сигнал PWM от микроконтроллера для управления скоростью двигателя постоянного тока. Поскольку диапазон значений ШИМ между Arduino и ESP8266 и ESP32 различается, я создал два разных скрипта Arduino.

int motorPin = 6; // for Arduino microcontroller
void setup() {
  pinMode(motorPin, OUTPUT);
}
void loop() {
  for (int speed = 0; speed & lt; = 255; speed++) {
    analogWrite(motorPin, speed);
    delay(100);
  }
}
int motorPin = D6; // for ESP8266 microcontroller
//int motorPin = 4; // for ESP32 microcontroller
void setup() {
  pinMode(motorPin, OUTPUT);
}
void loop() {
  for (int speed = 0; speed & lt; = 1023; speed = speed + 10) {
    analogWrite(motorPin, speed);
    delay(100);
  }
}

Сценарий программы короткий и легкий для понимания. Вначале мы определяем вывод, который подключен к выводу базы транзистора. Поскольку мы используем функцию ШИМ на цифровом выводе, мы должны определить подключенный вывод как выход. В функции цикла мы увеличиваем скорость двигателя постоянного тока во время цикла for. Аналоговый сигнал идет от 0, когда двигатель неподвижен, до 255 для микроконтроллера Arduino и до 1023 для микроконтроллеров ESP8266 и ESP32, когда двигатель вращается с максимальной скоростью. Мы используем analogWrite функция для увеличения сигнала ШИМ.

Я надеюсь, что вы много узнали из моего руководства, как управлять двигателем постоянного тока с помощью Arduino, ESP8266 или ESP32 без IC.

Комментарии пользователей