Найти тему
Лампа Электрика

Как регулировать обороты двигателя постоянного тока через Arduino

Оглавление

Наверное, каждый пацан в своём детстве разбирал игрушки и нередко находил в них небольшие моторчики. Кто их подключал напрямую к батарейке помнит, что они начинали вращаться, а направление вращения зависело от того какую подать полярность на его клеммы. В простоте регулировки и реверсирования и состоит прелесть электродвигателей постоянного тока (ДПТ).

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

Регулировка оборотов

Известно, что при подключении такого двигателя к источнику питания он сразу начинает вращаться, а направление его вращения зависит от полярности подключенного напряжения.

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

Балластные резисторы греются, выделяют энергию в виде тепла в воздух – это не эффективно и бесполезно.

Смысл ШИМ-регулирования состоит в подаче импульсов с фиксированной частотой, но изменяющейся шириной. От ширины импульса зависит действующее напряжение на подключенной нагрузке и вычисляется по формуле:

Uнагр=Uпит×k,

где Uнагр – напряжение на нагрузке, Uпит – напряжение источника питания, k – коэффициент заполнения.

Коэффицент заполнения – то отношение ширины импульса (tимп) к периоду (T), то есть:

k=tимп/T.

На рисунке ниже вы видите, как выглядит питание нагрузки через ШИМ-регулятор при разных коэффициентах заполнения.

Так выглядит ШИМ-сигнал
Так выглядит ШИМ-сигнал

Короче говоря,при ШИМ-регулировании питание очень быстро включается и отключается, то есть подаётся импульсами. И чем уже эти импульсы – тем меньшее напряжение доходит до нагрузки.

Для ШИМ-регулирования можно собрать схему на таймере NE555 и других микросхемах либо использовать микроконтроллер.

Схема ШИМ-регулятора на NE555, ёмкость C можно рассчитать по формулам из даташита, либо подобрать, от неё зависит частота ШИМ, можете использовать 1, 0.47, 0.22 мкФ.
Схема ШИМ-регулятора на NE555, ёмкость C можно рассчитать по формулам из даташита, либо подобрать, от неё зависит частота ШИМ, можете использовать 1, 0.47, 0.22 мкФ.

Семейство плат с микроконтроллером ардуино также способно выдавать ШИМ сигнал, стандартная частота ШИМ у них 500Гц, а если быть точным, то 488,28 Гц. Если вам не принципиальная частота – то можно использовать как есть без сторонних библиотек. Отмечу, что для большинства применений этого достаточно. Не очень хорошо это подходит для регулирования яркости осветительных приборов из-за повышения коэффициента пульсаций светильника и вреда для зрения в итоге.

Назначение выводов на плате (распиновка)
Назначение выводов на плате (распиновка)

Обратите внимание на иллюстрацию, приведенную выше. Из неё мы видим микроконтроллер Atmega328, который лежит в основе этих плат выдаёт ШИМ-сигнал только на выходах 3, 5, 6, 9, 10, 11, которые обычно помечены знаком «~» плате, а на картинках с распиновками сокращением «PWM».

Подключение к Arduino

Напрямую к порту ардуино подключать нагрузку для диммирования нельзя, так как он может выдать всего 20 мА. То есть напрямую к порту можно подключать отдельные маломощные 5-мм светодиоды, во всех остальных случаях – используйте транзистор. В последнем случае максимальная нагрузка зависит от типа транзистора.

Что мы сегодня будем использовать
Что мы сегодня будем использовать

Как мы уже определились ШИМ у нас выдают только пины с номерами 3, 5, 6, 9, 10, 11. Значит, к ним и будем подключать нагрузку. В качестве транзистора предлагаю использовать полевой транзистор (MOSFET) IRF840 – он N-канальный со встроенным обратным диодом для защиты от всплесков противо-ЭДС, его характеристики:

  • Предельно допустимое напряжение сток-исток (Uds): 500 V
  • Предельно допустимое напряжение затвор-исток (Ugs): 20 V
  • Пороговое напряжение включения Ugs(th): 4 V
  • Максимально допустимый постоянный ток стока (Id): 8 A

Можно использовать и другие транзисторы с логическим уровнем включения затвора ( Ugs(th) до 5В), в противном случае придется использовать драйвер или промежуточный транзистор для его открытия.

Кроме транзистора нам нужно 2 резистора — первый между выходом платы и затвором на 240 Ом (если его у вас нет – возьмите соседние номиналы) для ограничения тока заряда затворной ёмкости, так мы снизим вероятность выхода из строя порта и просадок по питанию. Второй резистор на 10-12 кОм подключим между затвором и землёй. Он нужен для того, чтобы затвор не висел в воздухе, а также разряда затворной ёмкости и ускорения закрытия полевика. Схему подключения вы видите ниже.

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

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

Подключение  потенциометра к Arduino
Подключение потенциометра к Arduino

Соберем эту схему.

Схема в сборе
Схема в сборе

Для ШИМ в родной библиотеке Arduino IDE есть специальная функция — analogWrite (pin, value), в ней pin – номер порта, на который нужно выдавать сигнал, а value – его величина от 0 до 255. То есть при значении value равном 255 коэффициент заполнения на выходе будет равен 1, т.е. будет непрерывный сигнал на входе, а при 127 — почти 50%.

Для нашего эксперимента достаточно простенького кода, который вы видите далее.

int pot = A1; // назначаем вход А1 для чтения сигнала с потенциометра
int motor = 5; // к этому выходу подключаем затвор полевого тразнистора
void setup() {
pinMode(motor, OUTPUT);
}
void loop() {
analogWrite(motor, map (analogRead(pot), 0, 1023, 0, 255));
}

Функция map, которая используется в качестве второго аргумента функции analogWrite позволяет сократить код на несколько строчек. Её назначение преобразовать одни размерности в другие. Чтобы понять, как она работает рассмотрим её синтаксис:

map(value, fromLow, fromHigh, toLow, toHigh),
где: value – откуда брать величину, в приведенном выше примере мы её считываем функцией analogRead с пина, объявленного в переменной pot (это А1), fromLow – минимальное значение, которое будет участвовать в преобразовании (у нас это 0), fromHigh – максимальное значение для преобразования (у нас это 1023, потому что это максимальное значение, которое «видит» ардуина при чтении аналогового сигнала), toLow – в какое значение преобразовывать минимальное значение со входа, toHigh – в какое значение преобразовывать максимальное значение со входа (у нас это 255, потому что это максимальное число, которое можно записать в analogWrite).

То есть мы получаем любое число от 0 до 1023, а функция возвращает число от 0 до 255. Таким образом, у нас происходит преобразование, в общем-то, с сохранением величины в процентах (комментаторов прошу подсказать, как правильно назвать такое преобразование).

Заключение

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

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

Ну и прилагаем видео, в котором иллюстрируется работа схемы рассмотренной в статье