В этом уроке вы узнаете, как управлять с помощью Ардуино шаговым двигателем, который был взят от старого принтера.
Шаг 1. Что такое шаговый двигатель?
Шаговый двигатель состоит из двух основных частей: ротора и статора.
Ротор является частью двигателя, который фактически вращается и обеспечивает работу. Статор представляет собой неподвижную часть двигателя, в котором размещается ротор. В шаговом двигателе ротор представляет собой постоянный магнит. Статор состоит из нескольких катушек, которые действуют как электромагниты, когда через них проходит электрический ток. Электромагнитная катушка заставит ротор выровняться вместе с ним при зарядке. Ротор приводится в движение путем чередования тока на катушках, протекающий через них.
Шаговые двигатели имеют ряд преимуществ. Они дешевы и просты в использовании. Когда ток не поступает в двигатель, ничего не происходит. Шаговые двигатели также могут вращаться без ограничений и изменять направление в зависимости от установленной полярности.
Шаг 2: Список деталей
Необходимые детали для проекта Ардуино шагового двигателя:
- Шаговый двигатель (этот двигатель был взят от старого принтера)
- Arduino
- Изолированный медный провод
- Проволочные резаки / стрипперы
- Регулятор тока
- транзистор
- драйвер двигателя H-Bridge 1A
- моторный шилд
Дополнительные детали:
- паяльник
- припой
- инструменты
- безопасные очки
Шаг 3: Присоединяем провода
Большинство шаговых двигателей имеют четыре провода, поэтому вам нужно будет обрезать четыре медных провода (обратите внимание, что цвет не коррелирует с чем-либо конкретным (обычно есть правило, что черный – это земля, но не сейчас). Различные цвета были использованы только для облегчения понимания. Эти выводы будут использоваться для управления, какая катушка в настоящее время активна в двигателе. Для этого проекта Ардуино шаговый двигатель был взят от старого принтера, поэтому пайка проводов была самым простым вариантом для этого проекта. В любом случае, вы можете безопасно установить соединение (пайка, штекер, клипы).
Шаг 4: Эскиз/скетч Arduino
Arduino уже имеет встроенную библиотеку для шаговых двигателей. Просто перейдите в меню:
Файл → Примеры → Шаговые → stepper_oneRevolution
File → Examples → Stepper → stepper_oneRevolution
Затем вам нужно изменить переменную stepsPerRevolution, чтобы она соответствовала вашему конкретному двигателю. После просмотра номера деталей двигателей в Интернете наш конкретный двигатель был рассчитан на 48 шагов для завершения одного оборота.
То, что на самом деле делает библиотека Stepper – чередует сигналы HIGH и LOW для каждой катушки, как показано в анимации выше.
Шаг 5: Что такое мост H-bridge?
H-Bridge – схема, состоящая из 4 переключателей, которые могут безопасно управлять двигателем постоянного тока или шаговым двигателем. Эти переключатели могут быть реле или (чаще всего) транзисторами. Транзистор представляет собой твердотельный переключатель, который можно закрыть, посылая небольшой ток (сигнал) на один из его контактов.
В отличие от одного транзистора, который позволяет вам контролировать скорость двигателя, H-мосты позволяют вам также контролировать направление вращения двигателя. Он делает это, открывая различные переключатели (транзисторы), чтобы ток тек в разных направлениях и, таким образом, изменяя полярность на двигателе.
Важно! Переключатели 1 и 2 или 3 и 4 никогда не должны быть закрыты вместе. Это приведет к короткому замыканию и возможному повреждению устройства.
H-Bridges может помочь вам предотвратить перегорания вашего Arduino моторами, которыми вы пользуетесь. Двигатели являются индукторами, а это означает, что они хранят электрическую энергию в магнитных полях. Когда ток больше не посылается двигателям, магнитная энергия возвращается в электрическую энергию и может повредить компоненты. H-Bridge помогает изолировать ваш Arduino лучше всего. Вы не должны подключать двигатель непосредственно к Arduino.
Хотя H-Bridges можно легко сделать самому многие предпочитают покупать H-Bridge (например, чип L293NE / SN754410) из-за удобства. Это чип, который мы будем использовать в этом уроке. Физические номера контактов и их назначение ниже:
- Пин 1 (1, 2EN) → Мотор 1 Включен/Выключен (HIGH/LOW)
- Пин 2 (1A) → Мотор 1 логический выход 1
- Пин 3 (1Y) → Мотор 1 терминал 1
- Пин 4 → Земля
- Пин 5 → Земля
- Пин 6 (2Y) → Мотор 1 терминал 2
- Пин 7 (2A) → Мотор 1 логический выход 2
- Пин 8 (VCC2) → Питание для двигателей
- Пин 9 → Мотор 2 Включен/Выключен (HIGH/LOW)
- Пин 10 → Мотор 2 логический выход 1
- Пин 11 → Мотор 2 терминал 1
- Пин 12 → Земля
- Пин 13 → Земля
- Пин 14 → Мотор 2 терминал 2
- Пин 15 → Мотор 2 логический выход 2
- Пин 16 (VCC1) → Питание для H Bridge (5В)
Шаг 6: Схема соединения
Схема соединения нашего проекта Ардуино шагового двигателя ниже.
Для шагового двигателя Ардуино 4 вывода на H-Bridge должны подключаться к 4 выводам двигателя. Затем 4 логических вывода подключаются к Arduino (8, 9, 10 и 11). Как показано на диаграмме выше, для питания двигателей можно подключить внешний источник питания. Чип может обрабатывать внешний источник питания от 4,5 до 36 В (мы выбрали батарею 9В).
Шаг 7: Загрузка кода и тестирование
Загрузите свой код в Ардуино. Если вы запустите свой код и все сработает так, как ожидалось, это потрясающе! Если провода вставлены в неправильные контакты, двигатель просто вибрирует, а не полностью вращается. Играйте со скоростью и направлением двигателя, как сочтете нужным.
На этом всё, теперь у вас должен быть рабочий шаговый двигатель Arduino. То, что вы сделаете дальше, зависит только от вас.
Управление мотором Ардуино
В этом уроке мы рассмотрим как управлять обычным мотором постоянного тока при помощи Ардуино.
У вас наверняка есть такие моторчики дома от старых игрушек или машинок. Так давайте их используем, нечего им валяться без дела. И не важно на какое они напряжение 5 вольт или 12 вольт, главное что бы были постоянного тока, а не переменного.
Управлять будем с помощью Ардуино, а точнее с помощью ШИМ выводов которые есть на этих платах.
Можно конечно купить специальную плату-драйвер для управления моторами, но мы не будем этого делать, а обойдёмся только Ардуино.
В управлении мотором нет ничего сложного, надо только подключить мотор к выводу ШИМ, а потенциометр которым будем управлять, к аналоговому входу.
ШИМ – это Широтно-Импульсная Модуляция, или по другому PWM – Pulse-Width Modulation — процесс управления мощности методом пульсирующего включения и выключения прибора.
ШИМ выходов на платах Ардуино несколько.
На платах Arduino UNO такие выходы отмечены знаком тильда.
Выходы которые можно использовать как ШИМ – это 3, 5, 6, 9, 10, 11
У Arduino Mega они обозначаются как PWM со 2 по 13 пин и 44-46.
У Arduino NANO никаких обозначений на плате нет. Надо просто запомнить это 3, 5, 6, 9, 10, 11.
Точно так же как и у Ардуино УНО.
Подробнее про технологию ШИМ можно прочитать на моём сайте.
http://arduino-kid.ru/arduino_nano_pwm
Там описан принцип работы, а также некоторые ограничения которые надо знать. Например, при совместной работе с функцией tone().
Напрямую подключать моторы к Ардуино нельзя, так как они потребляют большой ток и могут питаться не 5 вольтами, а больше. Поэтому я подключил мотор через транзистор и параллельно мотору установил диод..
Описание скетчей.
Сегодня будет несколько скетчей.
Первый для управления скоростью вращения мотора. Управлять будем с помощью потенциометра. А в следующем уроке я покажу, как управлять вращением мотора программно. Плавно меняя скорость вращения.
Во втором мы объединим то что делали в двух последних уроках.
Это используем датчик ХОЛЛА и индикатор TM1637 для подсчёта оборотов вращения.
Короче сделаем тахометр на Ардуино. А для любителей велоспорта это прям почти готовый проект для определения скорости по количеству оборотов.
На мотор я приклеил магнит, а напротив установил датчик ХОЛЛА. И каждый раз когда магнит находится рядом с датчиком, датчик посылает сигнал на Ардуино и выводит значения на индикатор TM1637.
Как подключить мотор к Ардуино я показал на видео.
В данной статье рассматривается наиболее простой способ подключения мотора постоянного тока к Arduino.
Введение
Моторы постоянного тока нельзя подключать напрямую к Arduino. Это обусловлено тем, что пины не способны выдавать ток более 40 мА. Мотору же, в зависимости от нагрузки, необходимо несколько сотен миллиампер. Потому возникает потребность увеличения мощности. Делается это, как-правило, с помощью транзисторов.
В статье «Транзисторы: схема, принцип работы, чем отличаются биполярные и полевые» можно ознакомиться с основными типами транзисторов и их принципами работы.
Так же рекомендуется посмотреть: Видеоуроки по Arduino, 5-я серия — Моторы и транзисторы. В данном уроке Джереми Блюм рассказывает о подключении мотора постоянного тока к Arduino через биполярный транзистор.
Необходимые компоненты
Мы рассмотрим вариант взаимодействия с полевым транзистором. Принципы подключения мотора будут разобраны на конкретном железе: DC-мотор, плата Arduino, N-канальный полевой транзистор, резистор на 10 кОм (R1), резистор на 220 Ом (R2).
Вы же в своих экспериментах вольны использовать то, что есть в наличии. Важны лишь 3 условия:
Максимальный ток потребления мотора (ток при блокировке) не должен превышать максимальный ток стока полевого транзистора.
Затвор транзистора должен отпираться при напряжении 5 В.
Транзистор должен обладать встроенным диодом обратной цепи (flyback диод).
Схема подключения
По-сути, обмотка мотора представляет собой катушку индуктивности. В момент подачи напряжения возникнет обратная электродвижущая сила, которая может вывести из строя транзистор. Flyback диод устанавливается в обратном направлении и предотвращает утечку тока с мотора на транзистор. Поэтому, если в транзисторе нет flyback диода, его необходимо установить дополнительно: анод на исток, катод на сток.
Транзистор IRF530N является мощным и поставляется в корпусе TO-220. Ниже приведена его распиновка.
В данной схеме транзистор будет работать в ключевом режиме: по одной команде (установка уровня HIGH на затворе) от Arduino транзистор будет подключать мотор к источнику питания (отпираться), по другой команде (установка уровня LOW на затворе) — отключать мотор от источника питания.
Резистор R1 подтягивает к земле затвор транзистора. Номинал не принципиален — можно использовать любые резисторы в диапазоне от 1 до 10 кОм. Резистор R2 служит для защиты пина микроконтроллера. Диапазон, примерно, от 10 до 500 Ом.
Чтобы запитать данную схему, можно подключить к Arduino внешний источник питания на 6-9 В, либо подать питание непосредственно на макетную плату ( синяя шина — минус, красная шина — плюс).
Программинг
Для наибольшей простоты воспользуемся, пожалуй, самым известным скетчем из готовых примеров — Blink.
- Blink.ino
int led = 13; void setup() { // Инициализация цифрового пина 13 на вывод pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); // Включение светодиода и мотора delay(1000); // Задержка на 1 секунду digitalWrite(led, LOW); // Выключение светодиода и мотора delay(1000); // Задержка на 1 секунду }
Посмотрим, что получилось.
Цифровой пин 13 раз в секунду меняет своё состояние. Когда на выходе устанавливается значение HIGH — загорается светодиод и начинает вращаться мотор. Когда устанавливается LOW — светодиод гаснет, а мотор останавливается.
Результаты
Была получена возможность подключать к выводам Arduino мощные устройства, в частности, моторы постоянного тока.
Использование ШИМ для регулировки скорости мотора
Если мотором управлять ничуть не сложнее, чем светодиодом, то, наверное можно изменять яркость скорость вращения мотора точно так же, как при работе со светодиодами? Именно так! С точки зрения Arduino абсолютно не важно с чем мы имеем дело.
Как вы уже, наверно, могли догадаться, для изменения скорости вращения мотора нам понадобится скетч Fade.
- Fade.ino
int led = 9; // Пин, к которому подключён затвор транзистора int brightness = 0; // Теперь эта переменная отвечает за скорость вращения int fadeAmount = 5; // Шаг изменения скорости void setup() { // Настраиваем цифровой пин 9 на вывод pinMode(led, OUTPUT); } void loop() { // Устанавливаем скорость вращения мотора analogWrite(led, brightness); // Увеличиваем текущее значение скорости вращения brightness = brightness + fadeAmount; // Когда скорость становится максимальной/минимальной — начинаем её снижать/повышать if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // Пауза 30 миллисекунд delay(30); }
Схема подключения
Чтобы использовать возможности функции analogWrite(..)
, нам придётся перейти на один из пинов (3/5/6/9/10/11), поддерживающих аппаратный ШИМ. Поскольку, по умолчанию, в скетче Fade задействован 9-й пин, остановим свой выбор на нём.
Результат
Была получена возможность изменять скорость вращения мотора, используя аппаратный ШИМ Arduino.
На чём данная статья подходит к завершению. Теперь вы смело можете использовать моторы постоянного тока в своих проектах!
Arduino и двигатели||Arduino-diy.com
Одно из самых интересных в хобби-электронике – это использование двигателей для «оживления» ваших проектов.
Однако добавление мотора в ваш проект может оказаться непростой задачей, особенно, если вы до этого с приводами не работали.
Данная статья даст вам понимание принципов работы двигателей различных типов и пояснит многие необходимые нюансы и их особенности.
Принцип работы двигателей
Перед тем как разбираться, как именно моторы работаю, давайте сосредоточимся на том, для чего они используются. Моторы используют электромагнитные силы для обеспечения движения, преобразования электроэнергии в механическую.
Магнитные поля создают силу, которая может перемещать объекты. Каждый магнит имеет магнитное поле с северным и южным полюсом. Если вы попробуете приблизить два северных полюса двух магнитов, они будут отталкиваться. То же самое произойдет, если вы попытаетесь приблизить два южных полюса. Если полюса одинаковые, они будут отталкиваться друг от друга. Если же вы приблизите северный полюс одного с южному полюсу другого магнита, они притянутся с определенным усилием. То есть, противоположные полюса притягиваются друг к другу.
Электродвигатель использует свойства магнитов отталкиваться и притягиваться для генерации движения. В обычном электродвигателе два магнита: постоянный и переменный. Переменный магнит называется электромагнитом. Электромагнит создается с помощью пропускания электрического тока через проводник. Постоянный магнит постоянно имеет магнитное поле (северный и южный полюса), а электромагнит генерирует магнитное поле только, когда через него пропускают электрический ток. Сила магнитного поля электромагнита может быть увеличена с помощью повышения тока, проходящего через проводник или методом формирования нескольких обмоток проводника.
В электродвигателе электромагнит устанавливается на ось таким образом, что он может свободно вращаться внутри магнитного поля постоянного магнита. В момент, когда через проводник проходит электрический ток, переменное магнитное поле взаимодействует со статическим магнитным полем магнита, возникают силы отталкивания и притяжения. Это заставляет электромагнит вращаться, возникает движение.
Основные узлы электродвигателя:
– Постоянный магнит (магниты), в случае, когда он установлен неподвижно, называется статором;
– внутри статора есть катушка, которая установлена на оси и вращается, называется ротором.
Двигатели постоянного тока
Двигатели постоянного тока (DC motor) во многом являются самыми простыми электродвигателями. Большинство «щеточных» двигателей работают одинаково. Есть ротор и статор. Есть магниты на статоре и катушка на роторе с магнитным полем, которое генерируется с помощью подачи на нее силы тока. Есть щетки внутри мотора, которые заставляют двигаться ротор.
При использовании источника постоянного тока, для управления подобным двигателем практически ничего не надо. Скорость его вращения зависит от силы тока, которая поступает на катушки от источника питания к коммутатору.
Для вращения оси двигателя в противоположном направлении, достаточно подключить контакты от источника питания к двигателю наоборот.
Шаговые двигатели
Как и двигатели постоянного тока, шаговые двигатели состоят из ротора и статора. Но, в отличие от других двигателей, ротор шагового двигателя представляет из себя постоянный магнит, который вращается внутри полей, создаваемых электромагнитами. Статор состоит из нескольких катушек, которые расположены в корпусе мотора. Когда ток проходит через катушки, подвижный вал двигателя (который является, по сути, постоянным магнитом) располагается в соответствии с генерируемым электромагнитной катушкой полем. Когда катушки заряжаются в определенной последовательности, вал двигателя выбирает новые положения и, соответственно, начинает вращаться.
Ротор приводится в движение последовательной подачей напряжения на катушки. Шаговый двигатель имеет возможность проворачивать ротор на определенный шаг в зависимости от разрешения импульса.
Шаговые двигатели являются отличным выбором для проектов на Arduino (и не только) по нескольким причинам. Они стоят относительно недорого, у них маленькая погрешность, следовательно – это идеальный выбор для управления с разомкнутой системой управления (без дополнительных датчиков положения рабочего органа). Шаговые двигатели будут обеспечивать заданное положение ротора исключительно в зависимости от поданной силы тока.
Эти двигатели предназначены для вращения в одном и противоположном направлении. Если вы подключите источник питания к контактам шагового двигателя, вал начнет вращаться. Если вы подключите проводники наоборот, он будет вращаться в противоположном направлении. Правда, стоит учесть, что в некоторых шаговых двигателях вращение в противоположную сторону невозможно. Перед его запуском, уточняйте этот момент.
Серводвигатели
Обычные серводвигатели для моделистов используются для поворота и удерживания определенной позиции в диапазоне от 0 до 180 градусов. Благодаря этому они находят широкое применение в робототехнике, приводах позиционирования. В производстве серводвигатели используются в модулях рулевого управления автомобилями, лодками, в механизмах фокусировки современных видеокамер.
В большинстве случаем серводвигатели имеют три провода: питание, земля и сигнал. Обычно провод питания красного цвета, земля – черного или коричневого. Сигнал – желтый, оранжевый или белый.
В серводвигателях, которые, например, используются в системах управления радиоуправляемых машин, электродвигатель подключен к потенциометру. Стандартный приемник/передатчик посылает ШИМ-сигналы на серву. Электроника (небольшая плата-контроллер) внутри серводвигателя, переводит ширину импульса в положение. Когда на серву поступает сигнал к повороту, питание будет подаваться на мотор до тех пор, пока потенциометр не достигнет положения, которое будет соответствовать заданному предварительно через приемник/передатчик.
Сигнал управления является цифровым ШИМ сигналом с частотой 50 Гц. Каждые 20 миллисекунд подается цифровой импульс управления. Продолжительность (ширина) импульса находится в диапазоне от 1.0 миллисекунды до 2.0 миллисекунд. 1.5 – середина диапазона. Большая ширина импульса может использоваться для дополнительного хода, который выходит за нормальный рабочий диапазон. ШИМ (широтно-импульсная модуляция) сигнал иногда называют ШПМ (широтно-позиционная модуляция), хотя это не корректно.
Импульс шириной 1.5 миллисекунды обычно устанавливает серводвигатель в «нейтральное» положение или 90 градусов. Импульс шириной 1.25 миллисекунд может установить его в 0 градусов, а импульс 1.75 миллисекунды в 180 градусов. Физические ограничения и время для различных серводвигателей могут отличаться, но его нейтральное положение всегда соответствует 1.5 миллисекундам.
Вибрационные двигатели
Вибрационные двигатели часто используются в мобильных устройствах для регистрации наличия движения.
Вибрационные моторы по конструктивному исполнению похожи на большинство шаговых двигателей и двигателей постоянного тока. Отличием является то, что на конце ротора установлен эксцентрик. При движении ротора, эксцентрик заставляет механизм внутри корпуса двигателя вибрировать. Интенсивность вибрации зависит как от размеров двигателя, так и от размеров эксцентрика.
На видео сверху показан мотор, установленный на металлической основе. Обратите внимание, как лист металла совершает волновые движения под действием вибрации вибрационного мотора.
Как выбрать двигатель для проекта
Выбор типа двигателя для вашего проекта зависит от того, что именно вы собираетесь автоматизировать. Если вы хотите установить камеру и обеспесить ее поворот влево-вправо, идеальным выбором будет серводвигатель. Если вы передаете движение на зубчатые колеса с необходимостью обеспечения реверса, лучшим выбором станет шаговый двигатель.
Естественно, отличным выбором для управления вашим двигателем станет плата Arduino или ее клоны. Отличительной позитивной чертой данных плат является то, что их пины могут быть использованы для комплексных проектов, включая дополнительное подключение к двигателям датчиков, систем контроля и т.п.
Дальше в статье приведена информация о том, как можно быстро «оживить» выбранный вами предварительно двигатель с использованием платы Arduino.
Использование шагового двигателя с Arduino
Стоит отметить, что «оживлять» свои проекты с помощью плат Arduino и оболочки Arduino IDE для их программирования очень легко из-за наличия большого количества уже готовых библиотек. Подключение шагового двигателя к плате Arduino отличается от подключения двигателя постоянного тока. Существует специальная библиотека и функция, встроенные в Arduino IDE. Более детально об этом вы можете почитать здесь.
После открытия Arduino IDE, перейдите в меню во вкладку
File -> Examples -> Stepper -> stepper_oneRevolution
Данная программа дает возможность управлять уни- или биполярным шаговым двигателем после его подключения к цифровым пинам 8-11 на плате Arduino. После загрузки скетча на плату Arduino, шаговый двигатель должен сделать один оборот по часовой стрелке, после этого – один поворот против часовой стрелки.
Данный пример – отличное начало. Естественно, вы можете вносить свои коррективы в программу, подстраивая ее под свои задачи. Задержка указывается в миллисекундах, так что если вы не хотите выдерживать паузу между оборотами, можете выставить задержку delay(10). Или, для того, чтобы замедлить вращение можете изменить stepsPerRevolution и присвоить ему значение, например, (1000000).
Изменения скетча зависят от того, что именно вы хотите реализовать. Для лучшего понимания того, как именно происходит обмен данными между шаговым двигателем и платой Arduino, советую поэкспериментировать с другими примерами.
Использование двигателя постоянного тока / вибрационного двигателя с Arduino
В некоторых проектах нет смысла использовать микропроцессоры вроде Arduino. Например, если вы делаете игрушку для ребенка (или взрослого) и хотите установить в нее вибрационный двигатель, гораздо эффективнее и лучше использовать простую кнопку для запуска двигателя.
В таком случае, мотор будет подключатся непосредственно к вашему источнику питания через выключатель, который соединен с позитивным коннектором вашего двигателя.
Использование серводвигателя с Arduino
Так же как и шаговые двигатели, для работы серводвигателей в оболочке Arduino IDE есть встроенная библиотека.
После открытия Arduino IDE, перейдите в меню во вкладку
File -> Examples -> Servo -> Knob
Данная программа обеспечивает управление серводвигателем, который подключен к 9-му ШИМ пину платы Arduino. Потенциометр, в свою очередь, подключен к аналоговому пину 0 и обеспечивает управление положением серводвигателя, посылая напряжение, пропорциональное сопротивлению на пин А0 платы Arduino. Скетч, который «залит» в плату Arduino, интерпретирует сигнал в импульсы, которые посылаются на серводвигатель. Двигатель обеспечивает поворот вала в соответствии с положением «крутилки» потенциометра.
Драйверы двигателя L298N, L293D и Arduino Motor Shield
Драйвер двигателя выполняет крайне важную роль в проектах ардуино, использующих двигатели постоянного тока или шаговые двигатели. C помощью микросхемы драйвера или готового шилда motor shield можно создавать мобильных роботов, автономные автомобили на ардуино и другие устройства с механическими модулями. В этой статье мы рассмотрим подключение к ардуино популярных драйверов двигателей на базе микросхем L298N и L293D.
Драйвер двигателя в проектах ардуино
Для чего нужен драйвер двигателя?
Как известно, плата ардуино имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода – и того меньше, 40mA. Мы не можем подключить напрямую к Arduino Uno, Mega или Nano даже самый маленький двигатель постоянного тока. Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока, превышающие этот предел.
Как же тогда подключить двигатель к ардуино? Есть несколько вариантов действий:
Использовать реле. Мы включаем двигатель в отдельную электрическую сеть, никак не связанную с платой Arduino. Реле по команде ардуино замыкает или размыкает контакты, тем самым включает или выключает ток. Соответственно, двигатель включается или выключается. Главным преимуществом этой схемы является ее простота и возможность использовать Главным недостатком данной схемы является то, что мы не можем управлять скоростью и направлением вращения.
Использовать силовой транзистор. В данном случае мы можем управлять током, проходящим через двигатель, а значит, можем управлять скоростью вращения шпинделя. Но для смены направления вращения этот способ не подойдет.
Использовать специальную схему подключения, называемую H-мостом, с помощью которой мы можем изменять направление движения шпинделя двигателя. Сегодня можно без проблем найти как микросхемы, содержащие два или больше H-моста, так и отдельные модули и платы расширения, построенные на этих микросхемах.
В этой статье мы рассмотрим последний, третий вариант, как наиболее гибкий и удобный для создания первых роботов на ардуино.
Микросхема или плата расширения Motor Shield
Motor Shield – плата расширения для Ардуино, которая обеспечивает работу двигателей постоянного тока и шаговых двигателей. Самыми популярными платами Motor Shield являются схемы на базе чипов L298N и L293D, которые могут управлять несколькими двигателями. На плате установлен комплект сквозных колодок Ардуино Rev3, позволяющие устанавливать другие платы расширения. Также на плате имеется возможность выбора источника напряжения – Motor Shield может питаться как от Ардуино, так и от внешнего источника. На плате имеется светодиод, который показывает, работает ли устройство. Все это делает использование драйвера очень простым и надежным – не нужно самим изобретать велосипеды и решать уже кем-то решенные проблемы. В этой статье мы будем говорить именно о шилдах.
Принцип действия H-моста
Принцип работы драйвера двигателя основан на принципе работы H-моста. H-мост является электронной схемой, которая состоит из четырех ключей с нагрузкой. Название моста появилось из напоминающей букву H конфигурации схемы.
Схема моста изображена на рисунке. Q1…Q4 0 полевые, биполярные или IGBT транзисторы. Последние используются в высоковольтных сетях. Биполярные транзисторы практически не используются, они могут присутствовать в маломощных схемах. Для больших токов берут полевые транзисторы с изолированным затвором. Ключи не должны быть замкнуты вместе одновременно, чтобы не произошло короткого замыкания источника. Диоды D1…D4 ограничительные, обычно используются диоды Шоттки.
С помощью изменения состояния ключей на H-мосте можно регулировать направление движения и тормозить моторы. В таблице приведены основные состояния и соответствующие им комбинации на пинах.
Q1 | Q2 | Q3 | Q4 | Состояние |
1 | 0 | 0 | 1 | Поворот мотора вправо |
0 | 1 | 1 | 0 | Поворот мотора влево |
0 | 0 | 0 | 0 | Свободное вращение |
0 | 1 | 0 | 1 | Торможение |
1 | 0 | 1 | 0 | Торможение |
1 | 1 | 0 | 0 | Короткое замыкание |
0 | 0 | 1 | 1 | Короткое замыкание |
Драйвер двигателя L298N
Модуль используется для управления шаговыми двигателями с напряжением от 5 до 35 В. При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2 А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4 А.
Плата выглядит следующим образом:
Распиновка микросхемы L298N:
- Vcc – используется для подключения внешнего питания;
- 5В;
- Земля GND;
- IN1, IN2, IN3, IN4 – используется для плавного управления скоростью вращения мотора;
- OUT1, OUT2 – используется для выхода с первого двигателя;
- OUT3, OUT4 – используется для выхода со второго двигателя;
- S1 – переключает питание схемы: от внешнего источника или от внутреннего преобразователя;
- ENABLE A, B – требуются для раздельного управления каналами. Используются в двух режимах – активный, при котором каналами управляет микроконтроллер и имеется возможность изменения скорости вращения, и пассивный, в котором невозможно управлять скоростью двигателей (установлено максимальное значение).
При подключении двух двигателей, нужно проверить, чтобы у них была одинаковая полярность. Если полярность разная, то при задании направления движения они будут вращаться в противоположные стороны.
Драйвер двигателя L293D
L293D – является самой простой микросхемой для работы с двигателями. L293D обладает двумя H-моста, которые позволяют управлять двумя двигателями. Рабочее напряжение микросхемы – 36 В, рабочий ток достигает 600 мА. На двигатель L293D может подавать максимальный ток в 1,2 А.
В схеме имеется 16 выходов. Распиновка:
- +V – питание на 5 В;
- +Vmotor – напряжение питания для мотором до 36 В;
- 0V – земля;
- En1, En2 –включают и выключают H-мосты;
- In1, In2 – управляют первым H-мостом;
- Out1, Out2 – подключение первого H-моста;
- In3, In4 – управляют вторым H-мостом;
- Out3, Out4 – подключение второго H-моста.
Для подключения к микроконтроллеру Arduino Uno нужно соединить выходы In1 на L293D и 7 пин на Ардуино, In2 – 8, In3 – 2, In4 – 3, En1 – 6, En2 – 5, V – 5V, Vmotor – 5 V, 0V – GND. Пример подключения одного двигателя к Ардуино показан на рисунке.
Драйвер двигателя на микросхеме HG7881
HG7881 – двухканальный драйвер, к которому можно подключить 2 двигателя или четырехпроводной двухфазный шаговый двигатель. Устройство часто используется из-за своей невысокой стоимости. Драйвер используется только для изменения направления вращения, менять скорость он не может.
Плата содержит 2 схемы L9110S, работающие как H-мост.
Характеристики драйвера HG7881:
- 4-контактное подключение;
- Питание для двигателей от 2,5 В до 12 В;
- Потребляемый ток менее 800 мА;
- Малые габариты, небольшой вес.
Распиновка:
- GND – земля;
- Vcc – напряжение питания 2,5В – 12В;
- A-IA – вход A(IA) для двигателя A;
- A-IB – вход B (IB) для двигателя A;
- B-IA – вход A(IA) для двигателя B;
- B-IB – вход B (IB) для двигателя B.
В зависимости от поданного сигнала на выходах IA и IB будет разное состояние для двигателей. Возможные варианты для одного из моторов приведены в таблице.
IA | IB | Состояние мотора |
0 | 0 | Остановка |
1 | 0 | Двигается вперед |
0 | 1 | Двигается назад |
1 | 1 | Отключение |
Подключение одного двигателя к Ардуино изображено на рисунке.
Сравнение модулей
Модуль L293D подает максимальный ток в 1,2А, в то время как на L298N можно добиться максимального тока в 4 А. Также L293D обладает меньшим КПД и быстро греется во время работы. При этом L293D является самой распространенной платой и стоит недорого. Плата HG7881 отличается от L293D и L298N тем, что с ее помощью можно управлять только направлением вращения, скорость менять она не может. HG7881 – самый дешевый и самый малогабаритный модуль.
Подключение L298N к Arduino
Как уже упоминалось, в первую очередь нужно проверить полярность подключенных двигателей. Двигатели, вращающиеся в различных направлениях, неудобно программировать.
Нужно присоединить источник питания. + подключается к пину 4 на плате L298N, минус (GND) – к 5 пину. Затем нужно соединить выходы с L298N и пины на Ардуино, причем некоторые из них должны поддерживать ШИМ-модуляцию. На плате Ардуино они обозначены ~. Выходы с L298N IN1, IN2, IN3 и IN4 подключить к D7, D6, D5 и D4 на Ардуино соответственно. Подключение всех остальных контактов представлено на схеме.
Направление вращения задается с помощью сигналов HIGH и LOW на каждый канал. Двигатели начнут вращаться, только когда на 7 пине для первого мотора и на 12 пине для второго на L298N будет сигнал HIGH. Подача LOW останавливает вращение. Чтобы управлять скоростью, используются ШИМ-сигналы.
Для управления шаговым двигателем в Arduino IDE существует стандартная библиотека Stepper library. Чтобы проверить работоспособность собранной схемы, можно загрузить тестовый пример stepper_oneRevolution. При правильной сборке вал двигателя начнет вращаться.
При работе с моторами Ардуино может периодически перезагружаться. Это возникает из-за того, что двигателям требуются большие токи при старте и в момент торможения. Для решения этой проблемы в плату встроены конденсаторы, диоды и другие схемы. Также для этих целей на шидле имеется раздельное питание.
Управление скоростью двигателя постоянного токас использованием Arduino Uno
Здесь мы собираемся связать двигатель постоянного тока с Arduino UNO , и его скорость регулируется. Это делается ШИМ (широтно-импульсная модуляция). Эта функция включена в UNO для получения переменного напряжения по постоянному напряжению. Метод ШИМ объясняется здесь; рассмотрим простую схему, как показано на рисунке.
Если кнопка нажата, если цифра, тогда двигатель начнет вращаться, и он будет двигаться, пока кнопка не будет нажата.Это нажатие является непрерывным и представлено в первой волне фигуры. Если, для случая, рассматриваемая кнопка нажата в течение 8 мс и открыта в течение 2 мс в течение цикла 10 мс, в этом случае двигатель не будет испытывать полное напряжение батареи 9 В, так как кнопка нажата только в течение 8 мс, поэтому напряжение RMS на двигатель будет около 7В. Из-за этого уменьшенного среднеквадратичного напряжения двигатель будет вращаться, но с пониженной скоростью. Теперь среднее время включения за период 10 мс = время включения / (время включения + время выключения), это называется рабочим циклом и составляет 80% (8 / (8 + 2)).
Во втором и третьем случаях кнопка нажимается еще меньше, чем в первом случае. Из-за этого среднеквадратичное напряжение на клеммах двигателя еще больше уменьшается. Из-за этого пониженного напряжения скорость двигателя еще больше уменьшается. Это снижение скорости при продолжительности рабочего цикла должно происходить до момента, когда напряжение на клеммах двигателя будет недостаточным для вращения двигателя.
Таким образом, мы можем сделать вывод, что ШИМ можно использовать для изменения скорости двигателя.
Прежде чем идти дальше, нам нужно обсудить H-МОСТ. Теперь эта схема имеет в основном две функции: первая для привода двигателя постоянного тока от сигналов управления малой мощности, а другая для изменения направления вращения двигателя постоянного тока.
Рисунок 1
Рисунок 2
Все мы знаем, что для двигателя постоянного тока, чтобы изменить направление вращения, нам нужно изменить полярность напряжения питания двигателя.Поэтому для изменения полярности мы используем H-мост. Теперь на рисунке 1 у нас есть четверные переключатели. Как показано на рисунке 2, для вращения двигателя А1 и А2 закрыты. Из-за этого ток протекает через двигатель справа налево, как показано в части 2 и на рисунке 3. А пока рассмотрим двигатель вращается по часовой стрелке. Теперь, если выключатели A1 и A2 разомкнуты, B1 и B2 замкнуты. Ток, проходящий через двигатель, протекает слева направо, как показано в 1 -й части на фиг.3. Это направление потока тока противоположно первому, и поэтому мы видим противоположный потенциал на клемме двигателя по отношению к первому, поэтому двигатель вращается против часовой стрелки.Вот как работает H-BRIDGE. Однако маломощные двигатели могут приводиться в движение H-BRIDGE IC L293D.
L293D – это микросхема H-BRIDGE, предназначенная для привода двигателей постоянного тока малой мощности и показанная на рисунке. Эта микросхема состоит из двух h-мостов, поэтому она может управлять двумя двигателями постоянного тока. Таким образом, эта микросхема может быть использована для управления двигателями робота от сигналов микроконтроллера.
Теперь, как обсуждалось ранее, эта микросхема может изменять направление вращения двигателя постоянного тока. Это достигается путем контроля уровней напряжения на входах INPUT1 и INPUT2.
Разрешить контакт | Входной контакт 1 | Входной контакт 2 | Направление двигателя |
Высокий | Низкий | Высокий | Поверните направо |
Высокий | Высокий | Низкий | Поверните налево |
Высокий | Низкий | Низкий | Стоп |
Высокий | Высокий | Высокий | Стоп |
Так, как показано на рисунке выше, для вращения по часовой стрелке 2A должно быть высоким, а 1A – низким.Точно так же для против часовой стрелки 1A должен быть высоким, а 2A должен быть низким.
Как показано на рисунке, Arduino UNO имеет 6-ШИМ каналы, поэтому мы можем получить ШИМ (переменное напряжение) на любом из этих шести контактов. В этом уроке мы будем использовать PIN3 в качестве выхода ШИМ.
Аппаратное обеспечение: ARDUINO UNO, источник питания (5 В), конденсатор 100 мкФ, светодиод, кнопки (две части), резистор 10 кОм (две части).
Программное обеспечение: Arduino IDE (Arduino nightly).
принципиальная схема
Цепь подключена к макету в соответствии с принципиальной схемой, показанной выше. Однако следует обратить внимание во время подключения светодиодных клемм. Хотя кнопки показывают эффект отскока в этом случае, они не вызывают значительных ошибок, поэтому нам не нужно беспокоиться на этот раз.
ШИМ от UNO – это просто, в обычных случаях настроить контроллер ATMEGA для сигнала ШИМ непросто, нам нужно определить множество регистров и настроек для точного сигнала, однако в ARDUINO нам не приходится иметь дело со всеми этими вещами. ,
По умолчанию все заголовочные файлы и регистры предопределены в IDE ARDUINO, нам просто нужно вызвать их, и у нас будет ШИМ-выход на соответствующем выводе.
Теперь для получения ШИМ-выхода на соответствующем выводе нам нужно поработать над тремя вещами:
|
Сначала нам нужно выбрать выходной контакт ШИМ из шести контактов, после этого нам нужно установить этот вывод как выходной.
Далее нам нужно включить функцию ШИМ в UNO, вызвав функцию «analogWrite (pin, value)». Здесь «контакт» представляет номер контакта, для которого нам нужен выход ШИМ, мы обозначаем его как «3». Таким образом, на PIN3 мы получаем выход ШИМ.
Значение – рабочий цикл включения, между 0 (всегда выключен) и 255 (всегда включен). Мы собираемся увеличивать и уменьшать это число нажатием кнопки.
UNO имеет максимальное разрешение «8», дальше идти нельзя, поэтому значения от 0 до 255.Однако можно уменьшить разрешение ШИМ с помощью команды «analogWriteResolution ()», введя значение в скобках от 4 до 8, мы можем изменить его значение с четырехбитного ШИМ до восьмибитного ШИМ.
Переключатель для изменения направления вращения двигателя постоянного тока.
,/ * Бесщеточное управление бесщеточным двигателем постоянного тока (BLDC) с Arduino UNO (Arduino DIY ESC).
* Это бесплатное программное обеспечение без ГАРАНТИИ.
* https://simple-circuit.com/
* /
#define SPEED_UP A0
#define SPEED_DOWN A1
# определить PWM_MAX_DUTY 255 9000MD2000MD2000MD2000MD
байт bldc_step = 0, motor_speed;
без знака int i;
void setup () {
DDRD | = 0x38; // Настройка выводов 3, 4 и 5 как выходов
PORTD = 0x00;
DDRB | = 0x0E; // Настройка выводов 9, 10 и 11 как выходов
PORTB = 0x31;
// Настройка модуля Timer1: установите источник синхронизации на clkI / O / 1 (без предварительного масштабирования)
TCCR1A = 0;
TCCR1B = 0x01;
// Настройка модуля Timer2: установите источник синхронизации на clkI / O / 1 (без предварительного масштабирования)
TCCR2A = 0;
TCCR2B = 0x01;
// Настройка аналогового компаратора
ACSR = 0x10; // Отключить и очистить (флаговый бит) прерывание аналогового компаратора
pinMode (SPEED_UP, INPUT_PULLUP);
pinMode (SPEED_DOWN, INPUT_PULLUP);
}
// Аналоговый компаратор ISR
ISR (ANALOG_COMP_vect) {
// BEMF debounce
для (i = 0; i <10; i ++) {
if (bldc_step & 1) {
(! (ACSR & 0x20)) i – = 1;}
else {
if ((ACSR & 0x20)) i – = 1;
}
}
bldc_move ();
bldc_step ++;
bldc_step% = 6;
}
void bldc_move () {// Функция коммутации двигателя BLDC
switch (bldc_step) {
case 0:
AH_BL ();
BEMF_C_RISING ();
перерыв;
, дело 1:
AH_CL ();
BEMF_B_FALLING ();
перерыв;
, дело 2:
BH_CL ();
BEMF_A_RISING ();
перерыв;
, дело 3:
BH_AL ();
BEMF_C_FALLING ();
перерыв;
, дело 4:
CH_AL ();
BEMF_B_RISING ();
перерыв;
, дело 5:
CH_BL ();
BEMF_A_FALLING ();
перерыв;
}
}
void loop () {
SET_PWM_DUTY (PWM_START_DUTY); // Настройка запуска ШИМ с рабочим циклом = PWM_START_DUTY
i = 5000;
// Запуск двигателя
while (i> 100) {
delayMicroseconds (i);
bldc_move ();
bldc_step ++;
bldc_step% = 6;
i = i – 20;
}
motor_speed = PWM_START_DUTY;
ACSR | = 0x08; // Включить аналоговое прерывание компаратора
while (1) {
while (! (DigitalRead (SPEED_UP)) & & motor_speed motor_speed ++; SET_PWM_DUTY (motor_speed); (100); } while (! (DigitalRead (SPEED_DOWN)) && motor_speed> PWM_MIN_DUTY) { motor_speed–; SET_PWM_DUTY (motor_speed); (100); } } } void BEMF_A_RISING () { ADCSRB = (0 << ACME); // Выбор AIN1 в качестве отрицательного входа компаратора ACSR | = 0x03; // Установить прерывание по нарастающему фронту } void BEMF_A_FALLING () { ADCSRB = (0 << ACME); // Выбор AIN1 в качестве отрицательного входа компаратора ACSR & = ~ 0x01; // Установить прерывание по падающему фронту } void BEMF_B_RISING () { ADCSRA = (0 << ADEN); // Отключаем модуль АЦП ADCSRB = (1 << ACME); ADMUX = 2; // Выбор аналогового канала 2 в качестве отрицательного входа компаратора ACSR | = 0x03; } void BEMF_B_FALLING () { ADCSRA = (0 << ADEN); // Отключаем модуль АЦП ADCSRB = (1 << ACME); ADMUX = 2; // Выбор аналогового канала 2 в качестве отрицательного входа компаратора ACSR & = ~ 0x01; } void BEMF_C_RISING () { ADCSRA = (0 << ADEN); // Отключаем модуль АЦП ADCSRB = (1 << ACME); ADMUX = 3; // Выбор аналогового канала 3 в качестве отрицательного входа компаратора ACSR | = 0x03; } void BEMF_C_FALLING () { ADCSRA = (0 << ADEN); // Отключаем модуль АЦП ADCSRB = (1 << ACME); ADMUX = 3; // Выбор аналогового канала 3 в качестве отрицательного входа компаратора ACSR & = ~ 0x01; } void AH_BL () { PORTB = 0x04; PORTD & = ~ 0x18; PORTD | = 0x20; TCCR1A = 0; // Включаем ШИМ 11 (OC2A) ШИМ (контакт 9 и 10 ВЫКЛ) TCCR2A = 0x81; // } void AH_CL () { PORTB = 0x02; PORTD & = ~ 0x18; PORTD | = 0x20; TCCR1A = 0; // Включаем ШИМ 11 (OC2A) ШИМ (контакт 9 и контакт 10 ВЫКЛ) TCCR2A = 0x81; // } void BH_CL () { PORTB = 0x02; PORTD & = ~ 0x28; PORTD | = 0x10; TCCR2A = 0; // Включение ШИМ 10 (OC1B) ШИМ (контакт 9 и 11 ВЫКЛ) TCCR1A = 0x21; // } void BH_AL () { PORTB = 0x08; PORTD & = ~ 0x28; PORTD | = 0x10; TCCR2A = 0; // Включение ШИМ 10 (OC1B) ШИМ (контакт 9 и 11 ВЫКЛ) TCCR1A = 0x21; // } void CH_AL () { PORTB = 0x08; PORTD & = ~ 0x30; PORTD | = 0x08; TCCR2A = 0; // Включаем ШИМ 9 (OC1A) ШИМ (контакт 10 и 11 ВЫКЛ) TCCR1A = 0x81; // } void CH_BL () { PORTB = 0x04; PORTD & = ~ 0x30; PORTD | = 0x08; TCCR2A = 0; // Включаем ШИМ 9 (OC1A) ШИМ (контакт 10 и 11 ВЫКЛ) TCCR1A = 0x81; // } void SET_PWM_DUTY (байтовая обязанность) { if (долг долг = PWM_MIN_DUTY; if (долг> PWM_MAX_DUTY) долг = PWM_MAX_DUTY; OCR1A = долг; // Устанавливаем вывод 9, рабочий цикл ШИМ OCR1B = долг; // Устанавливаем контакт 10 ШИМ, рабочий цикл OCR2A = долг; // Устанавливаем контакт 11 ШИМ, рабочий цикл }