Как подключить моторчик к ардуино

от admin

Управление электромотором

Электродвигатель (электромотор) постоянного тока является наиболее распространенным типом двигателя в проектах с Arduino Uno. Двигатели постоянного тока обычно имеют только два провода. Если подключить эти провода напрямую к источнику питания (красный — к плюсу, черный — к минусу), двигатель будет вращаться в одну сторону. Если переключить провода, двигатель будет вращаться в противоположном направлении.

Предупреждение. Запрещается приводить двигатель в движение непосредственно от выводов платы Arduino. Это может повредить плату Arduino. Используйте специальные драйвера.

Рис. 1 — Электродвигатель постоянного тока

Для включения и выключения электродвигателя постоянного тока с помощью Arduino Uno можно использовать схему представленную на рис. 2. Транзистор действует как переключатель, управляющий питанием двигателя. Контакт D3 Arduino используется для включения и выключения транзистора. Электромотор будет вращаться на полной скорости, когда на вывод D3 Arduino будет подан сигнал высокого уровня (логическая "1"). При подаче сигнала низкого уровня (логический "0") вращение вала электромотора прекратиться.

Рис. 2 — Схема управления включением/выключением электромотора

При подключении соблюдайте меры предосторожности:

  • убедитесь, что выводы транзистора PN2222 (1N2222) подключены правильно;
  • катод диода должен быть подключен к + 5 В питания.

Скетч №1

Для управления скоростью вращения электромотора можно использовать широтно-импульсную модуляцию (ШИМ). Чем больше будет коэффициент заполнения ШИМ, тем выше будет скорость вращения двигателя.

Скетч №2

Для управления направлением вращения двигателя постоянного тока используются схемы, называемые H-мостом. H-мост — это электронная схема, которая может управлять двигателем в обоих направлениях. Они называются H-мостом, потому что он использует четыре транзистора, соединенных таким образом, что принципиальная схема выглядит как «H».

Рассмотрим пример управления направлением и скоростью вращения вала электромотора постоянного тока с использованием Arduino Uno и микросхемы для драйвера двигателя L293D. Для этого необходимо подключить Arduino Uno, электромотор, микросхему L293D, переключатель и переменный резистор как показано на рис. 3.

Рис. 3 — Схема управления направлением и скоростью вращения вала электромотора Рис. 4 — Монтаж схемы управления направлением и скоростью вращения вала электромотора

Переменный резистор используется для управления скоростью вращения мотора. Кнопка используется для изменения направления вращения вала мотора: если кнопка нажата, мотор будет вращаться вперед, если не нажата – в противоположном направлении. Микроконтроллер Arduino Uno будет управлять контактами Enable2, In3 и In4 микросхемы для драйвера двигателя L293D.

Скетч №3

В функции setup инициализируются и выставляются режимы работы выводов.

С помощью функции map выполняется масштабирование аналоговых данных потенциометра (0–1023) в значения диапазона 0 — 255 скорости вала электромотора.

Переменной revers присваивается значение, которое считывается с вывода Pin_Sw с кнопкой. Если кнопка нажата, значение равно False , в другом случае значение равно True .

Скорость вращения вала устанавливается с использованием analogWrite на выводе Enable2 микросхемы L293. Контакт Enable2 включает-выключает мотор в зависимости от настроек контактов INPUT3 и INPUT4.

Для управления направлением вращения мотора, INPUT3 и INPUT4 должны иметь противоположные значения.

Если INPUT3 имеет значение HIGH , а INPUT4 — LOW , мотор будет двигаться в одном направлении, если INPUT3 принимает значение LOW , а INPUT4 – HIGH , мотор начнет вращаться в противоположном направлении.

Символ " ! " является управляющей командой, которая соответствует "НЕ". Первая функция digitalWrite для INPUT3 устанавливает значение в противоположное относительно значения revers . Если revers принимает значение HIGH , устанавливается LOW и наоборот.

Следующая функция digitalWrite для INPUT4 присваивает пину значение revers . Это значит, что оно всегда будет противоположно значению, которое генерируется на Arduino для INPUT3.

Как подключить двигатель Ардуино: 3 способа?

двигатель Ардуино

Программирование

Двигатель — достаточно мощная нагрузка для Ардуино. Подключить её к микроконтроллеру не получится — двигатель либо просто не запуститься, либо повредит элементы платы. Поэтому, для этого используют различные элементы управления, например транзистор, реле, или специальные драйверы. В этой статье рассмотрим, как подключить двигатель и управлять им.

Подключение двигателя через транзистор

Для подключения двигателя будем использовать:

  • n-канальный мосфет (полевой транзистор)
  • резистор с сопротивлением в диапазоне 1 – 10 кОм
  • резистор с сопротивлением в диапазоне 10 – 500 Ом
  • двигатель постоянного тока 5V
  • обратный диод

Подключаем по следующей схеме:

1 11

  1. Резистор R1 10 – 500 Ом для защиты пина на плате.
  2. Резистор R2 1 – 10 кОм для подтяжки затвора (защита от случайного замыкания цепи транзистором, ибо затвор очень чувствителен к любым воздействиям).
  3. Диод для защиты транзистора от индукционных выбросов от двигателя. Диод может быть предустановлен в транзистор (смотрите по даташиту своей модели). Без него, двигатель «убьет» транзистор.

При подключении через пин, поддерживающий ШИМ (широтно-импульсная модуляция), возможна регулировка скорости через команду:

Подключение двигателя через реле

Двигатель можно подключить через реле модуль. Правда, мы теряем возможность использовать ШИМ для регулировки скорости.

2 14

Подключаем по такой схеме:

  1. Информационный вход реле подключаем к контакту на плате.
  2. Питание выводим для каждого элемента отдельно.
  3. Плюс подключаем к контакту VCC на реле, землю на GND
  4. Плюсовой контакт источника питания подключаем к нормально разомкнутому контакту (NO) реле.
  5. Один из контактов двигателя проводим на землю, другой к общему контакту (COM) реле.

Так как использовать ШИМ невозможно, для проверки работы этого метода подойдет стандартный Blink-код для мигания светодиодом.

Подключение двигателя через драйвер

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

3 12

Данный способ разберем на примере популярного драйвера L298:

Возможно подключение до двух двигателей, но для примера приведем схему для одного.

4 10

Схема следующая:

  1. Питание выводим отдельно для платы, отдельно для драйвера.
  2. Подключаем пины, поддерживающие ШИМ, к пинам IN1, IN2, ENA на драйвере.
  3. Контакты двигателя соединяем с клеммами OUT1, OUT2.
  4. Так как используется двигатель 5V, перемычку питания необходимо отключить. В случае с моторами выше 5V, ставится перемычка, на клемму питания мотора 6V – 35V, на клемму 5V подключается питание “мозгов”.

Простой скетч для управления через ШИМ:

byte ena = 3 ;

byte in1 = 4 ;

byte in2 = 5 ;

void setup () <

pinMode ( ena , OUTPUT );

pinMode ( in1 , OUTPUT );

pinMode ( in2 , OUTPUT );

>

void loop () <

analogWrite ( ena , 255 );

digitalWrite ( in1 , HIGH );

digitalWrite ( in2 , LOW );

delay ( 5000 );

analogWrite ( ena , 150 );

digitalWrite ( in1 , LOW );

digitalWrite ( in2 , HIGH );

delay ( 5000 );

>

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

6

Разберем подключение шагового двигателя. Нам понадобится драйвер ULN2003APG. Схема выглядит так:

Скетч для управления им из стандартной библиотеки Arduino IDE:

#include <Stepper.h>

#define STEPS 64 // указываем количество шагов мотора

Stepper stepper(STEPS, 8, 9, 10, 11);

// переменная для запоминания предыдущего значения

int previous = 0;

void setup () <

stepper.setSpeed(30) ;

>

void loop () <

int val = analogRead (0); // Пин датчика (в нашем случае его нет)

// Прокрутить на разницу шагов между новым полученным значением и предыдущим

stepper.step(val — previous);

// Запоминаем новое полученное значение

previous = val;

Итак, мы подключили и можем управлять нашим шаговым двигателем.

Заключение

Мы разобрали, как подключить двигатель тремя способами: с помощью мосфета, модуля реле или драйвера.

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

Как подключить электродвигатель к Arduino

Как известно, электродвигатели бывают трёх основных типов: коллекторные, шаговые и сервоприводы. В данной статье мы рассмотрим подключение коллекторного электродвигателя к Arduino с помощью драйвера двигателей на основе микросхемы L9110S или аналогичной.

Для проекта нам понадобятся:

    или аналогичный; , или шилд на микросхеме L293D или аналогичный; или аналогичный; или иная совместимая плата;
  • соединительные провода (например, вот такой набор); ;
  • персональный компьютер со средой разработки Arduino IDE.

1 Что такое драйвер двигателей и для чего он нужен

Максимальный ток на выводах Arduino слаб (около 50 мА) для такой мощной нагрузки как электромотор (десятки и сотни миллиампер). Поэтому напрямую к выводам Arduino подключать электродвигатель нельзя: есть риск сжечь вывод, к которому подключён двигатель. Для безопасного подключения электродвигателей разных типов к Arduino необходим самодельный или промышленно изготовленный т.н. драйвер двигателей. Драйверы двигателей бывают разные, для их работы часто используются микросхемы типа HG788, L9110S, L293D, L298N и другие. Драйверы двигателей имеют выводы подачи питания, выводы для подключения электродвигателей, а также управляющие выводы.

Различные варианты исполнения драйверов двигателей Различные варианты исполнения драйверов двигателей

В данной статье мы будем использовать драйвер для управления двигателями, сделанный на основе микросхемы L9110S. Обычно выпускаются платы, которые поддерживают подключение нескольких двигателей. Но для демонстрации мы обойдёмся одним.

2 Схема подключения коллекторного двигателяи драйвера двигателей к Arduino

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

Давайте подключим двигатель по приложенной схеме. Питание драйвера двигателя – 5 В от Arduino, для управления скоростью вращения ротора мотора управляющие контакты подключаем к выводам Ардуино, поддерживающим ШИМ (широтно-импульсную модуляцию).

Схема подключения коллекторного двигателя к Arduino с помощью драйвера двигателей Схема подключения коллекторного двигателя к Arduino с помощью драйвера двигателей

Должно получиться что-то подобное:

Двигатель подключён к драйверу двигателей и Arduino Двигатель подключён к драйверу двигателей и Arduino

3 Скетч для управления коллекторным двигателем

Напишем скетч для управления коллекторным двигателем. Объявим две константы для ножек, управляющих двигателем, и одну переменную для хранения значения скорости. Будем передавать в последовательный порт значения переменной Speed и менять таким образом скорость (значением переменной) и направление вращения двигателя (знаком числа).

Загрузим скетч в память Arduino. Запустим его. Вал двигателя не вращается. Чтобы задать скорость вращения, нужно передать в последовательный порт значение от 0 до 255. Направление вращения определяется знаком числа.

Подключимся с помощью любой терминалки к порту, передадим число «100» – двигатель начнёт вращаться со средней скоростью. Если подадим «минус 100», то он начнёт вращаться с той же скоростью в противоположном направлении.

Управление электромотором с помощью драйвера двигателей и Arduino Управление электромотором с помощью драйвера двигателей и Arduino

А вот так выглядит подключение подключение коллекторного двигателя к Arduino в динамике:

4 Управление шаговым двигателем с помощью Arduino

Шаговый двигатель позволяет вращать ротор на определённый угол. Это бывает полезно, когда необходимо задать положение какому-либо механизму или его узлу. Шагом двигателя называется минимальный угол, на который можно повернуть ротор двигателя. Угол поворота и направление движения задаются в управляющей программе. Существует большое разнообазие шаговых двигателей. Рассмотрим работу с ними на примере двигателя 28BYJ-48 с драйвером ULN2003.

Шаговый двигатель с контроллером Шаговый двигатель с контроллером —> Шаговый двигатель с контроллером Шаговый двигатель с контроллером

Характеристики двигателя 28BYJ-48:

Характеристика Значение
Количество фаз 4
Напряжение питания от 5 до 12 В
Число шагов 64
Размер шага 5,625°
Скорость вращения 15 об./сек
Крутящий момент 450 г/см

Модуль с микросхемой драйвера для управления шаговым двигателем выглядит так:

Модуль с драйвером ULN2003 Модуль с драйвером ULN2003

На входы IN1…IN4 подаются управляющие сигналы от Arduino. Используем любые 4 цифровых пина, например, D8…D11. На вход питания необходимо подать постоянное напряжение от 5 до 12 В. Двигателю желательно обеспечить отдельное питание. Но в данном случае, т.к. не планируется использовать двигатель на постоянной основе, можно подать питание и от Arduino. Перемычка «Вкл/выкл» просто разрывает «плюс» питания, подаваемого на драйвер. В «боевом» изделии сюда можно, например, коммутировать питание с помощью реле, когда это необходимо, чтобы снизить потребление всего изделия. Итак, схема подключения будет такой:

Схема подключения шагового двигателя с драйвером ULN2003 к Arduino Схема подключения шагового двигателя с драйвером ULN2003 к Arduino

Соберём всё по схеме.

Подключение шагового двигателя 28BYJ-48 к Arduino Подключение шагового двигателя 28BYJ-48 к Arduino

Для Arduino «из коробки» существует готовая библиотека для управления шаговыми двигателями. Она называется Stepper. Можно посмотреть готовые примеры в среде разработки для Arduino: File Examples Stepper. Они позволяют управлять шаговым двигателем, изменяя скорость и направление движения, поворачивать ротор на заданный угол. Как говорится – бери и пользуйся. Но давайте попробуем разобраться с принципом работы шагового двигателя самостоятельно, не применяя никаких библиотек.

Двигатель 28BYJ-48 имеет 4 фазы. Это означает, что у него имеются 4 электромагнитные катушки, которые под действием электрического тока притягивают сердечник. Если напряжение подавать на катушки поочерёдно, это заставит сердечник вращаться. Рисунок иллюстрирует данный принцип.

Схема работы шагового двигателя Схема работы шагового двигателя

Здесь на (1) напряжение подано на катушки A и D, на (2) – на A и B, (3) – B и С, (4) – C и D. Далее цикл повторяется. И таким образом ротор двигателя вращается по кругу.

Напишем самый простой скетч для уравления шаговым двигателем. В нём просто будем вращать двигатель с постоянной скоростью в одном направлении, используя только что описанный принцип.

Простейший скетч управления шаговым двигателем (разворачивается)

Как можно догадаться, задержка del определяет скорость вращения двигателя. Уменьшая или увеличивая её можно ускорять или замедлять двигатель.

Если загрузить этот скетч, то увидим, что шаговый двигатель вращается против часовой стрелки. Соответственно, можно вынести цикл вращения в одну сторону в отдельную функцию rotateCounterClockwise(). И сделать аналогичную функцию вращения в противоположную сторону rotateClockwise(), в которой фазы будут следовать в обратном порядке. Также вынесем в отдельные функции каждую из 4-х фаз чтобы избежать дублирования одинакового кода в нескольких местах программы. Теперь скетч выглядит несколько интереснее:

Скетч управления шаговым двигателем (разворачивается)

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

Финальный скетч управления шаговым двигателем (разворачивается)

Вот теперь совсем другое дело! Мы можем управлять скоростью шагового двигателя, задавая задержку после каждой фазы. Мы можем менять направление движения ротора двигателя. И, наконец, мы умеем поворачивать ротор на некоторый угол. Осталось только определить, какое число необходимо передавать в функции поворота rotateClockwise() и rotateCounterClockwise(), чтобы ротор шагового двигателя 1 раз провернулся на 360° вокруг своей оси. Собственно, дальнейшие наработки – вопрос фантазии или необходимости.

Управление щёточными моторами

Как вы знаете, никакую нагрузку мощнее светодиода нельзя подключать к Ардуино напрямую, особенно моторчики. Ардуино, да и вообще любой микроконтроллер – логическое устройство, которое может давать только логические сигналы другим железкам, а те уже могут управлять нагрузкой. Кстати, урок по управлению мощной нагрузкой постоянного и переменного тока у меня тоже есть. “Драйвером” мотора могут быть разные железки, рассмотрим некоторые из них.

При помощи обычного реле можно просто включать и выключать мотор по команде digitalWrite(пин, состояние) , прямо как светодиод: blank При помощи двойного модуля реле (или просто двух реле) можно включать мотор в одну или другую сторону, а также выключать: blank Купить модуль реле можно на Али:

Мосфет

Полевой транзистор, он же мосфет, позволяет управлять скорость вращения мотора при помощи ШИМ сигнала. При использовании мосфета обязательно нужно ставить диод, иначе индуктивный выброс с мотора очень быстро убьёт транзистор. Скорость мотора можно задавать при помощи ардуиновской analogWrite(пин, скорость) . blank Вместо “голого” мосфета можно использовать готовый китайский модуль: blank Купить мосфет модуль можно на Aliexpress:

Реле и мосфет

blank

Если объединить реле и мосфет – получим весьма колхозную, но рабочую схему управления скоростью и направлением мотора:

Специальный драйвер

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

Остальные драйверы смотри у меня вот тут. Схемы подключения и таблицы управления:

blank

blank

blank

blank

blank

blank

blank

blank

Пины направления управляются при помощи digitalWrite(pin, value) , а PWM – analogWrite(pin, value) . Управление драйвером по двум пинам может быть двух вариантов:

Моторы переменного тока

Мотором переменного тока (220V от розетки) можно управлять при помощи диммера на симисторе, как в уроке про управление нагрузкой.

Библиотеки

У меня есть удобная библиотека для управления мотором – GyverMotor, документацию можно почитать вот здесь. Особенности библиотеки:

  • Контроль скорости и направления вращения
  • Работа с ШИМ любого разрешения
  • Программный deadtime
  • Отрицательные скорости
  • Поддержка всех типов драйверов
  • Плавный пуск и изменение скорости
  • Режим “минимальная скважность”

Помехи и защита от них

Индуктивный выброс напряжения

Мотор – это индуктивная нагрузка, которая в момент отключения создаёт индуктивные выбросы. У мотора есть щетки, которые являются источником искр и помех за счёт той же самой индуктивности катушки. Сам мотор потребляет энергию не очень равномерно, что может стать причиной помех по линии питания, а пусковой ток мотора так вообще сильно больше рабочего тока, что гарантированно просадит слабое питание при запуске. Все четыре источника помех могут приводить к различным глюкам в работе устройства вплоть до срабатывания кнопок на цифровых пинах, наведения помех на аналоговых пинах, внезапного зависания и даже перезагрузки микроконтроллера или других железок в сборе устройства. Отсечь индуктивный выброс с мотора можно при помощи самого обычного диода, чем мощнее мотор, тем мощнее нужен диод, то есть на более высокое напряжение и ток. Диод ставится встречно параллельно мотору, и чем ближе к корпусу, тем лучше. Точно таким же образом рекомендуется поступать с электромагнитными клапанами, соленоидами, электромагнитами и вообще любыми другими катушками. Логично, что диод нужно ставить только в том случае, если мотор или катушка управляется в одну сторону. Важные моменты:

  • При работе с драйвером и управлением в обе стороны диод ставить не нужно и даже нельзя!
  • При управлении ШИМ сигналом рекомендуется ставить быстродействующие диоды (например серии 1N49xx ) или диоды Шоттки (например серии 1N58xx).
  • Максимальный ток диода должен быть больше или равен максимальному току мотора.
  • Защитный диод, принимающий на себя обратный выброс ЭДС самоиндукции, также называется шунтирующим диодом, снаббером, flyback диодом.
  • В природе существуют мосфеты со встроенным защитным диодом. Этот диод является отдельным элементом и такой мосфет обычно имеет нестандартный корпус, читайте документацию на конкретный транзистор.
  • Диод, который показан на схематическом изображении мосфета, не является защитным диодом: это слабый и медленный “паразитный” диод, образованный при производстве транзистора. Он не защитит мосфет от выброса, нужно обязательно ставить внешний!

Помехи от щёток

blank

Искрящиеся щетки мотора, особенно старого и разбитого, являются сильным источником электромагнитных помех, и здесь проблема решается установкой керамических конденсаторов с ёмкостью 0.1-1 мкФ на выводы мотора. Такие же конденсаторы можно поставить между каждым выводом и металлическим корпусом, это ещё сильнее погасит помехи. Для пайки к корпусу нужно использовать мощный паяльник и активный флюс, чтобы залудиться и припаяться как можно быстрее, не перегревая мотор.

Помехи по питанию, просадка

Мотор потребляет ток не очень равномерно, особенно во время разгона или в условиях переменной нагрузки на вал, что проявляется в виде просадок напряжения по питанию всей схемы. Беды с питанием решаются установкой ёмких электролитических конденсаторов по питанию, логично что ставить их нужно максимально близко к драйверу, то есть до драйвера. Напряжение должно быть выше чем напряжение питания, а ёмкость уже подбирается по факту. Начать можно с 470 мкф и повышать, пока не станет хорошо.

Разделение питания

Если описанные выше способы не помогают – остаётся только одно: разделение питания. Отдельный малошумящий хороший источник на МК и сенсоры/модули, и отдельный – для силовой части, в том числе мотора. Иногда ради стабильности работы приходится вводить отдельный БП или отдельный аккумулятор для надёжности функционирования устройства.

Экранирование

В отдельных случаях критичными являются даже наводки от питающих проводов моторов, особенно при управлении ШИМ мощными моторами и управлении мощными шаговиками в станках. Такие наводки могут создавать сильные помехи для работающих рядом чувствительных электронных компонентов, на аналоговые цепи, наводить помехи на линии измерения АЦП и конечно же на радиосвязь. Защититься от таких помех можно при помощи экранирования силовых проводов: экранированные силовые провода не всегда удаётся купить, поэтому достаточно обмотать обычные провода фольгой и подключить экран на GND питания силовой части. Этот трюк часто используют RC моделисты, летающие по FPV.

Читать:
Как из зависимой варочной панели сделать независимую

Похожие публикации