Программинг
Для наибольшей простоты воспользуемся, пожалуй, самым известным скетчем из готовых примеров — 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 — светодиод гаснет, а мотор останавливается.
Работа схемы
Схема устройства представлена на следующем рисунке.
В схеме необходимо сделать следующие соединения:
- подсоединить нормально замкнутые выводы обоих реле к положительному выводу батареи;
- подсоединить нормально разомкнутые выводы обоих реле к стоку MOSFET транзистора;
- подсоединить исток MOSFET транзистора к отрицательному выводу батареи и к земле платы Arduino UNO;
- затвор MOSFET транзистора подключить к контакту 6 платы Arduino (на этом контакте возможно формирование ШИМ сигнала);
- подсоединить резистор 10 кОм между затвором и истоком MOSFET транзистора, а также подсоединить диод 1N4007 между истоком и стоком MOSFET транзистора;
- подсоединить двигатель между средними выводами реле;
- один из оставшихся выводов реле (для каждого реле) подключить к контакту Vin платы Arduino, а другой – к коллектору транзистора;
- подсоединить эмиттеры обоих транзисторов к контакту GND (земля) платы Arduino;
- контакты 2 и 3 платы Arduino подключить к кнопкам, вторые концы кнопок подключить к базе транзисторов;
- подключить диоды параллельно выводам реле как показано на схеме;
- оконечные контакты потенциометра подсоединить к контактам 5v и Gnd платы Arduino, а средний контакт потенциометра – к контакту A0.
Если батареи на 24 В у вас нет, то можно последовательно соединить две батареи на 12 В.
Функции транзисторов
Цифровые контакты платы Arduino не могут обеспечить достаточный ток для срабатывания реле на 5v. К тому же мы используем реле на 12v. Контакт Vin платы Arduino не может обеспечить достаточный ток для обоих реле. Поэтому транзисторы используются для «доставки» тока от контакта Vin платы Arduino к реле. Транзисторы управляются с помощью кнопок, один вывод которых подключен к их базе, а другой – к цифровому контакту платы Arduino
Функции платы Arduino
- обеспечить ток, необходимый для срабатывания реле;
- управлять транзистором;
- управлять скоростью вращения электродвигателя постоянного тока с помощью потенциометра.
Функции MOSFET
MOSFET транзистор используется для управления скоростью вращения двигателя. Он включается и выключается (открывается и закрывается) с высокой частотой, поэтому и двигатель, соединённый последовательно со стоком MOSFET, управляется данной ШИМ (широтно-импульсной модуляцией). Чем больше коэффициент заполнения ШИМ, тем выше скорость вращения двигателя. Более подробно о подобном механизме управления с помощью ШИМ и MOSFET транзистора можно прочитать в статье про понижающий преобразователь напряжения постоянного тока на Arduino.
Расчеты тока
- сопротивление катушки реле, измеренное нами с помощью мультиметра, составило примерно 400 Ом;
- контакт Vin платы Arduino обеспечивает 12v;
- поэтому получаем ток, необходимый для переключения реле равный 12/400 = 30 mA;
- если энергия подается на оба реле, то получаем ток 30*2=60 mA;
- контакт Vin платы Arduino рассчитан на максимальный ток 200mA, поэтому проблем с обеспечением тока возникнуть не должно.
Помехи и защита от них
Индуктивный выброс напряжения
Мотор – это индуктивная нагрузка, которая в момент отключения создаёт индуктивные выбросы. У мотора есть щетки, которые являются источником искр и помех за счёт той же самой индуктивности катушки. Сам мотор потребляет энергию не очень равномерно, что может стать причиной помех по линии питания, а пусковой ток мотора так вообще сильно больше рабочего тока, что гарантированно просадит слабое питание при запуске. Все четыре источника помех могут приводить к различным глюкам в работе устройства вплоть до срабатывания кнопок на цифровых пинах, наведения помех на аналоговых пинах, внезапного зависания и даже перезагрузки микроконтроллера или других железок в сборе устройства. Отсечь индуктивный выброс с мотора можно при помощи самого обычного диода, чем мощнее мотор, тем мощнее нужен диод, то есть на более высокое напряжение и ток. Диод ставится встречно параллельно мотору, и чем ближе к корпусу, тем лучше. Точно таким же образом рекомендуется поступать с электромагнитными клапанами, соленоидами, электромагнитами и вообще любыми другими катушками. Логично, что диод нужно ставить только в том случае, если мотор или катушка управляется в одну сторону. Важные моменты:
- При работе с драйвером и управлением в обе стороны диод ставить не нужно и даже нельзя!
- При управлении ШИМ сигналом рекомендуется ставить быстродействующие диоды (например серии 1N49xx) или диоды Шоттки (например серии 1N58xx).
- Максимальный ток диода должен быть больше или равен максимальному току мотора.
- Защитный диод, принимающий на себя обратный выброс ЭДС самоиндукции, также называется шунтирующим диодом, снаббером, flyback диодом.
- В природе существуют мосфеты со встроенным защитным диодом. Этот диод является отдельным элементом и такой мосфет обычно имеет нестандартный корпус, читайте документацию на конкретный транзистор.
- Диод, который показан на схематическом изображении мосфета, не является защитным диодом: это слабый и медленный “паразитный” диод, образованный при производстве транзистора. Он не защитит мосфет от выброса, нужно обязательно ставить внешний!
Помехи от щёток
Искрящиеся щетки мотора, особенно старого и разбитого, являются сильным источником электромагнитных помех, и здесь проблема решается установкой керамических конденсаторов с ёмкостью 0.1-1 мкФ на выводы мотора. Такие же конденсаторы можно поставить между каждым выводом и металлическим корпусом, это ещё сильнее погасит помехи. Для пайки к корпусу нужно использовать мощный паяльник и активный флюс, чтобы залудиться и припаяться как можно быстрее, не перегревая мотор.
Помехи по питанию, просадка
Мотор потребляет ток не очень равномерно, особенно во время разгона или в условиях переменной нагрузки на вал, что проявляется в виде просадок напряжения по питанию всей схемы. Беды с питанием решаются установкой ёмких электролитических конденсаторов по питанию, логично что ставить их нужно максимально близко к драйверу, то есть до драйвера. Напряжение должно быть выше чем напряжение питания, а ёмкость уже подбирается по факту. Начать можно с 470 мкф и повышать, пока не станет хорошо.
Разделение питания
Если описанные выше способы не помогают – остаётся только одно: разделение питания. Отдельный малошумящий хороший источник на МК и сенсоры/модули, и отдельный – для силовой части, в том числе мотора. Иногда ради стабильности работы приходится вводить отдельный БП или отдельный аккумулятор для надёжности функционирования устройства.
Экранирование
В отдельных случаях критичными являются даже наводки от питающих проводов моторов, особенно при управлении ШИМ мощными моторами и управлении мощными шаговиками в станках. Такие наводки могут создавать сильные помехи для работающих рядом чувствительных электронных компонентов, на аналоговые цепи, наводить помехи на линии измерения АЦП и конечно же на радиосвязь. Защититься от таких помех можно при помощи экранирования силовых проводов: экранированные силовые провода не всегда удаётся купить, поэтому достаточно обмотать обычные провода фольгой и подключить экран на GND питания силовой части. Этот трюк часто используют RC моделисты, летающие по FPV.
Управление двигателем при помощи биполярного транзистора
Самый простой способ приведения в действие двигателя показан ниже:
Биполярный транзистор используется в качестве переключателя. Резистор R необходимо подобрать таким, чтобы в худшем случае (потенциал базы равен потенциалу эмиттера) через него протекал ток, не превышающий максимальный ток порта микроконтроллера.
Для того чтобы подобрать подходящий транзистор, нам нужно знать максимальный ток во время пуска или остановки двигателя, и ток во время нормальной его работы. Исходя из этого, мы подберем транзистор с соответствующим током коллектора и его максимальное значение.
Следует также обратить внимание на мощность, выделяющуюся на транзисторе (P = Uкэ * Iк). Несмотря на то, что транзистор в данном случае работает в состоянии насыщения и напряжение Uкэ часто не превышает 1В, коллекторный ток все же велик (около 0,5 А для двигателя среднего размера) и, следовательно, мощность, излучаемая на транзисторе может потребовать от нас установки радиатора
Другой проблемой при применении биполярных транзисторов, может быть, слишком большой ток базы. Соотношение токов выходного сигнала к входному такого транзистора — это чаще всего 100 (это отношение называется коэффициентом усиления по току и обозначается или hfe ). Но, к сожалению, когда транзистор работает в состоянии насыщения, этот коэффициент сильно снижается.
Это приводит к тому, что если мы хотим, чтобы ток коллектора имел большое значение, это может потребовать большего тока, чем 20 мА, то есть больше, чем составляет нагрузочная способность порта микроконтроллера. В таких случаях решением может быть использование комбинации транзисторов – транзистор Дарлингтона:
Такая система ведет себя как один транзистор с большим значением усиления тока и малой скоростью работы.
Несколько слов об индуктивных нагрузках
Поскольку двигатель является индуктивной нагрузкой, мы должны быть осторожны. Если через обмотку течет ток, и мы внезапно остановим этот поток, то на выводах обмотки временно появляется большое напряжение. Это напряжение может привести к повреждению транзистора (в представленной схеме выше) вызывая пробой перехода база-коллектор. Кроме того, это может создавать значительные помехи. Для предотвращения этого необходимо параллельно с индуктивной нагрузкой подключить диод:
Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…
Подробнее
Во время нормальной работы двигателя диод смещен в обратном направлении. Отключение питания электродвигателя вызывает нарастание напряжения на катушке, при этом диод будет смещен в прямом направлении, благодаря чему произойдет разряд излишней энергии накопленной в катушке.
Диод следует подобрать такой, чтобы он выдерживал обратное напряжение во время нормальной работы двигателя. Такую защиту можно применять как при использовании биполярных транзисторов, так и MOSFET. Так же рекомендуется использовать диод и в работе с электромагнитным реле, для предотвращения раннего износа контактов.
Подключение Mosfet к Ардуино по-хорошему
Для таких вещей люди специально придумали специальные драйверы типа этих https://voltmaster-samara.ru/catalog/drajvery-mop-i-igbt-tranzistorov
Тут уж народ издевается над МОП транзисторами как хочет
Суть в том, что драйвер нужен как раз для согласования пяти вольт с выводов ардуино (а также других микроконтроллеров) с уровнями, необходимыми для управления затворами мосфетов.
На картинке первые две схемы а) и б) не очень, так как из-за кривых рук разработчика все может задымится. Зато вторые норм.
И кстати если надо использовать ШИМ — то лучше выбрать высокоскоростной драйвер типа TC4420.
Подключение мотора к Arduino
Как уже было сказано выше, ардуино не может обеспечить мотор необходимым током и напряжением. В таких случаях используются транзисторы.
Транзистор это радиоэлектронный компонент из полупроводникового материала способный от небольшого входного сигнала управлять значительным током в выходной цепи, что позволяет его использовать для усиления, генерирования, коммутации и преобразования электрических сигналов. Обычно у транзисторов 3 вывода: база, эмиттер и коллектор. Алгоритм действия можно сформулировать так: пропустить ток от коллектора к эмиттеру в зависимости от сигнала на базе. Транзисторы бывают разных типов и номиналов. Об этом можно подробнее почитать на википедии.
Будьте внимательны при выборе транзисторов для своих проектов. Некоторые рассчитаны на пропуск большого напряжения, или большого тока. Так же многие транзисторы не откроются от 5 вольт на базе. Всегда проверяйте характеристики транзисторов перед покупкой в datasheet
Так же обратите внимание, что для управления переменным током используются мосфет транзисторы
Теперь давайте подключим мотор к ардуино по следующей схеме:
Подключение мотора к ардуино
Как всегда ничего сложного. Главное не перепутать выводы транзистора
Обратите внимание на резистор через который ардуино подключена к базе. Это резистор на 1 кОм и нужен он для того что бы обезопасить нашу ардуинку
В видео к схеме добавлены диод и конденсатор, но они не обязательны. Так же можно добавить резистор на 10 — 100 кОм между эмиттером и коллектором для стабильности работы нашей схемы. Так же не забудьте, что земля на всех уровнях напряжения должна быть объединена. И взглянем на наш код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // Обозначаем пин к которому у нас подключена база транзистора int motorPin = 9; void setup () { // Устанавливаем пин в качестве выхода pinMode (motorPin, OUTPUT); } void loop () { // Перебор значений от 0 до 255 в цикле for (int i = 0; i <= 255; ++i) { analogWrite(motorPin, i); // небольшая задержка что бы все происходило не слишком быстро delay(10); } delay(500); for (int i = 0; i >= 0; i—) { analogWrite(motorPin, i); delay(10); } delay(500); } |
Как видите скетч очень прост. По комментариям в коде вы легко разберетесь, что к чему. Единственная конструкция, которую мы еще не использовали это цикл for.
Подключение сервопривода практически ни чем не отличается от подключения моторчика. Отличие в том что у сервы 3 вывода. Плюс, минус и логический. В видео подробно об этом рассказано.
Добавим в нашу схему инфракрасный дальномер. Просто потому, что мы можем
Почему люди используют Arduino для управления трехфазным асинхронным мотором?
Трехфазный асинхронный двигатель является самым эффективным способом, когда необходимо преобразовать электроэнергию в крутящий момент. Крутящий момент преобразуется в давление, скорость движения влияет в свою очередь на расход.
Наиболее эффективно выполняется регулировка вращения электродвигателя методом изменения частоты сети питания. Самое простое, это сделать посредством на микроконтроллере.
Arduino — торговая марка аппаратно-программных средств построения простых систем автоматики и робототехники, ориентированная на непрофессиональных пользователей.
Понижение сетевого напряжения осуществляетсяпри помощи трансформатора, а выпрямление – диодного моста. Микроконтроллер работает в режиме генератора переменной частоты, коммутирует ключ на транзисторах. Переменное напряжение повышается при помощи второго трансформатора и подается на обмотки питания электродвигателя.
Частоту коммутации (а также скорость вращения вала мотора) задаёт переменный резистор в широком диапазоне. Если применить переключатель и постоянные резисторы, можно управлять частотой ступенчато. Подключив к одному из входов микроконтроллера Arduino датчик тока, можно использовать программу, которая автоматически будет снижать скорость вращения вала при нежелательном повышении нагрузки.
Программа посредством специальных кодов включает преобразователь, считывает величину напряжения и регулирует его. Далее отдаёт команду переходить к библиотеке передатчика для генерирования кода и его передачи. По мере роста нагрузки, рабочее напряжение компенсируется и регулируется. Для этого применяется два способа: установка большого конденсатора для запасной энергии либо повышающего преобразователя. Выход при этом необходимо контролировать стабилизатором.
В этом заключается основной принцип взаимодействия между электронными устройствами, движком и платой.
Реверс двигателя постоянного тока схемы.
В статье «Регуляторы оборотов электродвигателей » речь шла о регулировке оборотов коллекторных двигателей электроинструментов. Нередко возникает и другая задача: реверс двигателя постоянного тока, т.е. требуется обеспечить его вращение в одну и другую стороны. Это может понадобиться, например, для привода ворот в гараже или коттедже, в различных моделях и пр. Проще всего такая задача с реверсом решается с помощью мостовой схемы, которая в общем виде представлена на рис.1 . Схема реверса состоит из четырех ключей, двигателя и источника питания. Когда все ключи разомкнуты ( рис.1а ), ток через двигатель не течет. При коммутации первого и четвертого ключа ток через двигатель Iд течет слева направо ( рис.1б ), и двигатель вращается в одном направлении. А при коммутации второго и третьего ключей — течет справа налево ( рис.1в ), и двигатель вращается в обратном направлении. Понятно, что руками коммутировать для реверса четыре переключателя неудобно, поэтому вместо ключей используем транзисторы ( рис.2 ). Транзисторы могут быть разной проводимости, полевыми или биполярными. Работают они в ключевом режиме. Обратно включенные диоды VD1. VD4 защищают транзисторы от выхода из строя, так как в момент выключения электродвигателя возникает достаточно большая ЭДС самоиндукции. Силовая часть устройства реверса на биполярных транзисторах приведена на рис.3 . Она состоит из четырех силовых и двух управляющих транзисторов; резисторов, ограничивающих базовые токи; шунтирующих диодов и гальванической развязки в виде двух оптопар. Питание моста происходит от блока питания, подающего постоянное напряжение +50 В относительно земли. В cостоянии покоя на оба канала (А и Б) подается 0 В. Все транзисторы закрыты, на концах обмоток потенциал 0 В. Вал двигателя не вращается. Для вращения двигателя в одну сторону на канал А подается постоянное напряжение +5 В или ШИМ-сигнал, на канал Б — 0 В. Открывается оптрон VU1, следом управляющий VТ5; при этом VТ6 закрыт. Через резистор R2 протекает ток, открывающий силовые VТ1 и VТ4, а VТ2 и VТЗ закрыты. Таким образом, на конце обмотки Я1 потенциал составляет +50 В, на конце обмотки Я2 — 0 В. Вал двигателя вращается (например, по часовой стрелке). Чтобы включить реверс двигателя, на канал Б подается напряжение +5 В (ШИМ-сигнал), на канал А — 0 В. Управляющий VТ6 открыт, VТ5 — закрыт. Через резистор R4 в цепи коллектора VТ6 протекает ток, открывающий VТ2 и VТ3, а VТ1 и VТ4 закрыты. На конце обмотки Я1 потенциал составляет 0 В, на конце обмотки Я2 — +50 В. Вал двигателя вращается против часовой стрелки. В случае подачи полoжительного напряжения на оба канала (А и Б) произойдет короткое замыкание, поэтому такой режим предотвращается управляющей частью устройства. Реверс двигателя постоянного тока можно выполнить и на МОП-транзисторах ( рис.4 ). На входе схемы реверса последовательно установлены два инвертора так, что выход одного одновременно является входом другого. При этом сигнал управления (высокий или низкий логический уровень) на входе DD1.1 инвертируется и подается на вход DD1.2. Выходы инверторов управляют полевыми транзисторами. При высоком уровне на входе, на выходе DD1.1 — низкий уровень, а на выходе DD1.2. — высокий. Благодаря этому VТ2 и VТЗ открыты и пропускают ток от отрицательного к положительному полюсу источника питания. Двигатель М1 вращается против часовой стрелки. Если на вход схемы реверса подать низкий уровень, на выходе DD1.1 появится высокий уровень и откроются VT1 и VТ4, замыкая другую диагональ моста. Теперь ток потечет в другую сторону, и двигатель изменит направление вращения. Для управления устройством для реверса необходим логический сигнал МОП-уровня (0/+12 В).
Устройство для реверса испытывалось с электродвигателем автомобильного вентилятора. Мощные МОП-транзисторы (для КП74ЗБ напряжение сток-затвор составляет 80 В. максимальный ток стока — 4,9 А) обеспечивают запас по мощности и по напряжению. Сопротивление открытого канала составляет 0,3.. .0,5 Ом. Для повышения эффективности VT1. . .VТ4 устанавливаются на теплоотводы. Напряжение питания зависит от типа применяемого электродвигателя М1. Если его напряжение питания превышает 15 В, следует предусмотреть в схеме дополнительный стабилизатор для питания микросхемы DD1. Вместо К561ЛА7 можно применить другую микросхему серии 561, если ее элементы обеспечивают инвертирование сигнала (К561ЛЕ5, К561ЛН2). Другая схема управления реверсом, построенная на мощных комплементарных полевых транзисторах, показана на рис.5 .
Подключение мосфет транзистора к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- биполярный транзистор;
- мотор постоянного тока;
- резисторы от 1 до 10 кОм;
- провода «папа-папа» и «папа-мама».
Подключить мотор постоянного тока напрямую к цифровым или аналоговым портам Arduino не получится. Это обусловлено тем, что пины на плате Ардуино не способны выдавать ток более 40 мА. При этом мотору постоянного тока, в зависимости от нагрузки, необходимо сотни миллиампер. Потому и возникает потребность управления электрической цепью высокого напряжения транзистором или Motor Shield L293D.
Подключение мотора постоянного тока через транзистор к Ардуино
Соберите электрическую цепь, как на рисунке выше. Если присмотреться к сборке на макетной плате, то вы заметите, что транзистор играет роль кнопки. Если кнопка замыкает электрическую цепь при нажатии на толкатель, то транзистор начинает пропускать ток при подаче напряжения на базу. Таким образом, мы можем сделать автоматическое или полуавтоматическое управление мотором на Ардуино.
Управление мотором через мосфет транзистор Arduino
void setup() { pinMode(11, OUTPUT); // объявляем пин 11 как выход } void loop() { digitalWrite(11, HIGH); // зажигаем светодиод delay(2000); // ждем 2 секунды digitalWrite(11, LOW); // выключаем светодиод delay(2000); // ждем 2 секунды }
Если вы заметили, то это скетч из занятия — Включение светодиода на Ардуино
С точки зрения микропроцессора абсолютно не важно, что подключено к Pin11 — светодиод, транзистор или драйвер светодиодов для Светового меча на Ардуино
Обратите внимание на то, что резистор R1 подтягивает базу транзистора к земле, а резистор R2 служит для защиты порта микроконтроллера от перегрузки
Управление мотором через полевой транзистор Arduino
Управление нагрузкой от Arduino через транзистор
Скетч управления двигателем постоянного тока на Ардуино можно написать по-другому. Добавим в схему фоторезистор и сделаем автоматическое включение мотора при снижении уровня освещенности в комнате. Можно также использовать датчик уровня жидкости или любой другой датчик. В скетче мы используем операторы if и else для управления (включения/выключения) нагрузки от Ардуино.
// Присваиваем имя для аналогового входа A1 #define sensor A1 // Присваиваем имя для значений аналогового входа A1 // unsigned int принимает только положительные числа unsigned int value = 0; void setup() { // Пин 11 с транзистором будет выходом (англ. «output») pinMode(11, OUTPUT); pinMode(sensor, INPUT); } void loop() { // Считываем значение с фоторезистора на аналоговом входе A1 value = analogRead(sensor); // Если значение value меньше 500, включаем транзистор if (value<500) digitalWrite(11,HIGH); // В противном случае выключаем транзистор else digitalWrite(11, LOW); }
Пояснения к коду:
- в первой строчке программы мы присвоили имя для аналогового входа A1 с помощью директивы #define Arduino;
- тип данных указывает, что значение может принимать только положительное целое число, а начальное значение равно нулю;
- условный оператор позволяет определить действие при истинном условии. Оператор позволяет определить действие, когда истинное условие ложно.
Заключение. Транзисторы являются основой для построения микросхем логики, памяти и микропроцессоров компьютеров. Транзистор — это электронный элемент из полупроводникового материала, обычно с тремя выводами, позволяющий с помощью входного сигнала управлять током высокого напряжения. Использование транзистора — это наиболее простой способ подключения к Ардуино мотора постоянного тока.