Подключение транзистора к ардуино

Некоторые термины, используемые в тематике BLDC и ESC

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

Braking (торможение) – определяет насколько быстро BLDC двигатель может остановить свое вращение. Это особенно актуально для летающих средств (дронов, геликоптеров и т.д.) поскольку они вынуждены часто изменять количество оборотов двигателя в минуту чтобы маневрировать в воздухе.

Soft Start (плавный пуск, старт) – эта способность особенно важна для BLDC двигателей когда вращающий момент от него на исполнительный механизм (колесо, винт и т.д.) передается через механизм передач, обычно состоящий из шестерен. Плавный пуск означает, что двигатель не начнет сразу вращаться с максимальной скоростью, а будет увеличивать свою скорость вращения постепенно независимо от того, с какой скоростью нарастает управляющее воздействие. Плавный пуск значительно снижает износ шестерен, входящих в передаточный механизм.

Motor Direction (направление вращения двигателя) – обычно направление вращения BLDC двигателей не изменяется в процессе эксплуатации, однако во время сборки и тестирования работы изделия может потребоваться изменение направления вращения двигателя, обычно это можно сделать просто поменяв местами любые два провода двигателя.

Low Voltage Stop (остановка при низком напряжении питания) . Обычно BLDC двигатели калибруют так, чтобы при одинаковом уровне управляющего воздействия скорость его вращения была постоянной. Однако этого трудно достигнуть потому что со временем напряжение питающей батареи уменьшается. Чтобы предотвратить это обычно контроллеры ESC программируют таким образом чтобы они останавливали работу BLDC двигателя когда напряжение питающей батареи опускается ниже определенной границы. Особенно эта функция полезна при использовании BLDC двигателей в дронах.

Response time (время отклика, время реакции, время ответа) . Означает способность двигателя быстро изменять скорость вращения при изменении управляющего воздействия. Чем меньше время реакции, тем лучше контроль над двигателем.

Advance (движение вперед) . Эта проблема является своеобразной «ахиллесовой пятой» для BLDC двигателей. Все BLDC двигатели имеют хотя бы небольшой подобный баг. Эта проблема вызвана тем, что когда катушка статора запитана ротор движется вперед поскольку на нем есть постоянный магнит. И когда управляющее напряжение с этой катушки снимают (чтобы подать его на следующую катушку) ротор продвигается вперед немного дальше чем предусмотрено логикой функционирования двигателя. Это нежелательное продвижение двигателя вперед в англоязычной литературе называют “Advance” и оно может приводить к нежелательным вибрациям, нагреву и шуму при работе двигателя. Поэтому хорошие контроллеры ESC стараются по возможности устранить этот эффект в работе BLDC двигателей.

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

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

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

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

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

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

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

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

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

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

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

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

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

PNP mosfet arduino

Тут чутка сложнее

Если нам надо на нагрузку подать 5 вольт:

  • R1 ограничивает ток на затворе чтобы ардуинка не сломалась
  • R2 подтягивает порт на землю чтобы не было ложных срабатываний
  • D1 диод шотки чтобы не спалить все – он нужен только если нагрузка имеет большую индуктивность – например реле или мотор или еще что-то, где есть много намотанной проволоки. Кстати для NPN мосфета он тоже нужен. А на переменном токе не нужен, а то задымится)

Если на мотор или лампочку надо 12 вольт то все немного сложнее. Чтобы открыть мосфет нам надо подать 12 вольт на gate, а при таком варианте наш ардуино задымится. Надо еще один транзистор так:

Тут Q1 – биполярный транзистор – он то и включает 12 вольт на gate Q2, а R1 нужен чтобы ограничить ток чтобы ардуино опять таки не задымилась. Работает все так:

  • подаем с ардуино high – q1 начинает проводить ток с коллектора на эмиттер и 12 вольт утекает не в gate q2, а на землю. q2 включает мотор
  • подаем с ардуино low – q1 закрыт и не пропускает ток, 12 вольт через резистор подаются на gate q2, моторчик не крутится. все просто. резистор r2 нужен чтобы ограничить ток q1 и q2 чтобы он не задымились

Управлять больше чем 12 вольт можно, например 24 вольтами, если q1 выдержит. Чтобы наверняка можно добавить диод D2:

Принцип управления двигателем при помощи Arduino и драйвера L298N

Благодаря наличию в драйвере L298N встроенного моста данная плата позволяет осуществлять одновременное управление сразу двумя электрическими машинами от двух пар выводов. Логическая схема в данном устройстве работает от напряжения в 5В, а питание самих электрических машин можно осуществлять до 45В включительно. Максимально допустимый ток для одного канала платы составляет 2А.

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

Пример драйвера L298N

Теперь разберем, как осуществляется управление двигателем с помощью драйвера L298N. Подключение двигателя производится к винтовым клеммным зажимам – по паре для питания каждого моторчика. Остальные клеммные зажимы предназначены для подачи питания плюс и минус, а также получения пониженного напряжения (на них подается определенный уровень питающего напряжения, от которого работают двигатели, а внутренний преобразователь понижает его до 5В для собственных логических цепей). Штекерные выводы платы осуществляют широтно-импульсную модуляцию при формировании рабочих сигналов.

Зажимы, куда подключать моторы

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

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

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

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

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

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

Купить модуль реле можно на Aliexpress.

Мосфет

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

Вместо “голого” мосфета можно использовать готовый китайский модуль:

Купить мосфет модуль можно на Aliexpress.

Реле и мосфет

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

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

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

Драйвер Vmot Ток (пик)

Стоимость

Aliexpress
L298N 4-50V 1A (2A) 100р Купить
MX1508 2-9.6V 1.5A (2.5A) 20р Купить
TA6586 3-14V 5A (7A) 100р (чип 30р) Купить, купить, купить чип
L9110S 2.5-12V 0.8A (1.5A) 50р Купить
TB6612 4.5-13.5V 1.2A (3A) 80р Купить
BTS7960 5.5-27V 10A (43A) 300р Купить
Большой 3-36V 10A (30A) 700р Купить

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

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

ДОКУМЕНТАЦИЯ

Документация

Инициализация

Библиотека поддерживает три типа драйверов:

  • DRIVER2WIRE – двухпроводной драйвер (направление + ШИМ)
  • DRIVER2WIRE_NO_INVERT – двухпроводной драйвер, в котором при смене направления не нужна инверсия ШИМ
  • DRIVER3WIRE – трёхпроводной драйвер (два пина направления + ШИМ)
  • RELAY2WIRE – реле в качестве драйвера (два пина направления)

Инициализация происходит следующим образом:

  • GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, level);
  • GMotor motor(DRIVER3WIRE, dig_pin_A, dig_pin_B, PWM_pin, level);
  • GMotor motor(RELAY2WIRE, dig_pin_A, dig_pin_B, level);
  • dig_pin , dig_pin_A , dig_pin_B – любой цифровой пин МК
  • PWM_pin – любой ШИМ пин МК
  • level – LOW / HIGH – уровень драйвера. Если при увеличении скорости мотор наоборот тормозит – смени уровень

Настройки

  • setDeadtime(us) – установка программного deadtime на переключение направления, us в микросекундах. По умолчанию стоит 0: deadtime отключен
  • setDirection(dir) – ГЛОБАЛЬНАЯ смена направления вращения мотора например чтобы FORWARD совпадал с направлением движения “вперёд” у машинки. dir – REVERSE или NORMAL (умолч.)
  • setLevel(level) – смена уровня драйвера (аналогично при инициализации). Если при увеличении скорости мотор наоборот тормозит – смени уровень. level – LOW или HIGH
  • setMinDuty(duty) – минимальный сигнал (по модулю), который будет подан на мотор. Автоматически сжимает диапазон регулирования мотора: например minDuty поставили 50, и при сигнале 1 будет на мотор будет подано

51, максимум останется прежним (диапазон сигнала переведётся в 50.. 255 внутри библиотеки).

Режим работы

У мотора есть 5 режимов работы, устанавливаются при помощи setMode(mode) , где mode:

  • FORWARD – вперёд
  • BACKWARD – назад
  • STOP – холостой (мотор отключен)
  • AUTO – отдать управление функции setSpeed()

Управление скоростью и направлением

Скорость устанавливается при помощи функции setSpeed(speed) . Есть два варианта управления скоростью:

  • Направление в ручном режиме, скорость 0..255 (0..1023). В этом случае скорость должна быть положительной ( setSpeed(0..255) ), направление вращения задаётся при помощи setMode() . При направлении FORWARD частота оборотов растёт по мере увеличения setSpeed(speed) , при направлении BACKWARD частота оборотов растёт в противоположную сторону по мере увеличения setSpeed(speed) .
  • Направление в автоматическом режиме, скорость -255..255 (-1023..1023 для 10 бит). В этом случае устанавливаем setMode(AUTO) и подаём скорость во всём диапазоне. При значении мотор -255 крутится с максимальной скоростью в направлении “назад”, при 255 – в направлении “вперёд”. При значении 0 (ноль) режим автоматически переключается на STOP. Если задан параметр minDuty (при помощи setMinDuty() ), то режим STOP будет автоматически активирован при значении скорости в пределах (-minDuty, minDuty). Пример: у нас есть мотор, экспериментально установлено, что он начинает вращаться при величине скорости больше 50 (и, соответственно, меньше -50), при меньшем значении он просто “пищит” и стоит на месте. Если мы выставим setMinDuty(50) , то в диапазоне -50..50 мотор автоматически будет находиться в режиме STOP и не будет пищать при “шуме” задающего сигнала.

Разрешение ШИМ

setSpeed(speed) может работать с ШИМ любого разрешения, для этого нужно

  • Перевести таймер в режим нужного разрешения. 8 битные таймеры можно запустить только на пониженном разрешении, а 16 битный – например на 10 битах (выводы D9 и D10), смотрите пример в библиотеке и урок по частоте ШИМ. По Arduino MEGA пока что такого готового набора у меня нет.
  • Настроить нужный объект класса GMotor на нужное разрешение при помощи setResolution(bit) , где bit – разрешение ШИМ в битах (по умолчанию 8). Также не забыть подключить пин драйвера ШИМ к выводу настроенного в первом пункте таймера (смотри пример).

Несколько моторов могут работать на одной плате с разным разрешением, т.е. например 2 мотора на таймере 1 с разрешением 10 бит, и ещё два на таймере 2 с разрешением 8 бит.

Плавное управление скоростью

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

  • setSmoothSpeed(acc) – установка скорости изменения скорости (т.е. ускорения) мотора
  • smoothTick(speed) – данная функция сама меняет скорость мотора, плавно приближая её к указанной speed . Функция работает по встроенному таймеру на millis() с периодом 50 мс, то есть рекомендуется вызывать smoothTick(speed) не реже, чем каждые 50 мс.

В примере smooth_control можно открыть плоттер и посмотреть, как работает алгоритм.

Принцип действия BLDC двигателей

Бесколлекторные электродвигатели постоянного тока (BLDC двигатели) в настоящее время часто используются в потолочных вентиляторах и электрических движущихся транспортных средствах благодаря их плавному вращению. В отличие от других электродвигателей постоянного тока BLDC двигатели подключаются с помощью трех проводов, выходящих из них, при этом каждый провод образует свою собственную фазу, то есть получаем трехфазный мотор.

Хотя BLDC относятся к двигателям постоянного тока они управляются с помощью последовательности импульсов. Для преобразования напряжения постоянного тока в последовательность импульсов и распределения их по трем проводникам используется контроллер ESC (Electronic speed controller). В любой момент времени питание подается только на две фазы, то есть электрический ток заходит в двигатель через одну фазу, и покидает его через другую. Во время этого процесса запитывается катушка внутри двигателя, что приводит к тому, что магниты выравниваются по отношению к запитанной катушке. Затем контроллер ESC подает питание на другие два провода (фазы) и этот процесс смены проводов, на которые подается питание, продолжается непрерывно, что заставляет двигатель вращаться. Скорость вращения двигателя зависит от того как быстро подается энергия на катушку двигателя, а направление вращения – от порядка смены фаз, на которые поочередно подается питание.

Существуют различные типы BLDC двигателей – давайте рассмотрим основные из них. Различают Inrunner и OutRunner BLDC двигатели. В Inrunner двигателях магниты ротора находятся внутри статора с обмотками, а в OutRunner двигателях магниты расположены снаружи и вращаются вокруг неподвижного статора с обмотками. То есть в Inrunner (по этому принципу конструируется большинство двигателей постоянного тока) ось внутри двигателя вращается, а оболочка остается неподвижной. А в OutRunner сам двигатель вращается вокруг оси с катушкой, которая остается неподвижной. OutRunner двигатели особенно удобны для применения в электрических велосипедах, поскольку внешняя оболочка двигателя непосредственно приводит в движение колесо велосипеда, что позволяет обойтись без механизма сцепления. К тому же OutRunner двигатели обеспечивают больший крутящий момент, что делает их также идеальным выбором для применения в электрических движущихся средствах и дронах. Поэтому и в этой статье мы будем рассматривать подключение к платы Arduino двигателя OutRunner типа.

Примечание: существует еще такой тип BLDC двигателей как бесстержневой (coreless), который находит применение в «карманных» дронах. Эти двигатели работают по несколько иным принципам, но рассмотрение принципов их работы выходит за рамки данной статьи.

BLDC двигатели с датчиками (Sensor) и без датчиков (Sensorless). Для BLDC двигателей, которые вращаются плавно, без рывков, необходима обратная связь. Поэтому контроллер ESC должен знать позиции и полюса магнитов ротора чтобы правильно запитывать статор. Эту информацию можно получить двумя способами: первый из них заключается в размещении датчика Холла внутри двигателя. Датчик Холла будет обнаруживать магнит и передавать информацию об этом в контроллер ESC. Этот тип двигателей называется Sensor BLDC (с датчиком) и он находит применение в электрических движущихся транспортных средствах. Второй метод обнаружения позиции магнитов заключается в использовании обратной ЭДС (электродвижущей силы), генерируемой катушками в то время когда магниты пересекают их. Достоинством этого метода является то, что он не требует использования каких либо дополнительных устройств (датчик Холла) – фазовый провод самостоятельно используется в качестве обратной связи благодаря наличию обратной ЭДС. Этот метод используется в двигателе, рассматриваемом в нашей статье, и именно он чаще всего применяется в дронах и других летающих устройствах.

Исходный код программы

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

То есть для использования ШИМ на нужном контакте нам необходимо сделать следующие вещи:

Сначала мы должны выбрать один из доступных 6 выходов (контактов) ШИМ. Потом необходимо установить этот контакт в режим на вывод данных.

После этого мы должны задействовать функции ШИМ на этом выходе используя функцию “analogWrite(pin, value)”. Здесь ‘pin’ обозначает номер контакта, на котором мы будем использовать ШИМ, в нашем случае это будет 3-й контакт.

Value в этой функции представляет собой цикл занятости (коэффициент заполнения) ШИМ, оно может принимать значения от 0 (всегда выключено) до 255 (всегда включено). Мы будем увеличивать и уменьшать это значение с помощью кнопок, присутствующих на схеме.

Плата Arduino UNO имеет максимальное разрешение (разрешающую способность) ШИМ, равную 8, что означает что value в функции analogWrite(pin, value) может принимать значения от 0 до 255. Но если в этом есть необходимость, мы можем уменьшать разрешение ШИМ используя функцию “analogWriteResolution()”, в скобках которой мы можем записать число в диапазоне 4-8, которое и будет определять разрешающую способность ШИМ платы Arduino UNO.

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

А теперь непосредственно сам код программы с комментариями.

Arduino

volatile int i=0; // инициализируем переменную целого типа для увеличения и уменьшения коэффициента заполнения ШИМ
void setup()
{
pinMode(3, OUTPUT); // устанавливаем pin3 на вывод данных
pinMode(0, INPUT); // устанавливаем pin0 на ввод данных
pinMode(1, INPUT); // устанавливаем pin1 на ввод данных
}

void loop()
{
analogWrite(3, i); // analogWrite values from 0 to 255
if (digitalRead(0)==LOW)
{
if (i<255) //если первая кнопка нажата (подключенная к pin0) и коэффициент заполнения ШИМ (i) меньше чем 255
{
i++;
delay(30);
}
}
if (digitalRead(1)==LOW)
{
if (i>0) // если вторая кнопка нажата (подключенная к pin1) и коэффициент заполнения ШИМ (i) больше 0
{
i—;
delay(30);
}
}
}

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
26
27
28

volatileinti=;// инициализируем переменную целого типа для увеличения и уменьшения коэффициента заполнения ШИМ      

voidsetup()

{

pinMode(3,OUTPUT);// устанавливаем pin3 на вывод данных

pinMode(,INPUT);// устанавливаем pin0 на ввод данных

pinMode(1,INPUT);// устанавливаем pin1 на ввод данных

}

voidloop()

{

analogWrite(3,i);// analogWrite values from 0 to 255

if(digitalRead()==LOW)

{

if(i<255)//если первая кнопка нажата (подключенная к pin0) и коэффициент заполнения ШИМ (i) меньше чем 255

{

i++;

delay(30);

}

}

if(digitalRead(1)==LOW)

{

if(i>)// если вторая кнопка нажата (подключенная к pin1) и коэффициент заполнения ШИМ (i) больше 0

{

i—;

delay(30);

}

}

}

Работа схемы

Схема устройства представлена на следующем рисунке.

В схеме необходимо сделать следующие соединения:

  • подсоединить нормально замкнутые выводы обоих реле к положительному выводу батареи;
  • подсоединить нормально разомкнутые выводы обоих реле к стоку 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, поэтому проблем с обеспечением тока возникнуть не должно.

Управление оборотами однофазного асинхронного двигателя с помощью Arduino

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

Существует три способа регулирования частоты вращения асинхронного мотора:

  • изменением скольжения (только двигатели с фазным ротором);
  • изменением числа пар полюсов;
  • изменением частоты источника питания.

Частотник нужен для обеспечения нормального управления процессами, которые требуют регулирования. Пускатели (УПП, софт-стартеры) уменьшают ударные нагрузки от сетевого напряжения с помощью фазо-импульсного (ФИУ) способа подачи питания на электродвигатель. Словно диммер, они обеспечивают плавное нарастание тока потребления электродвигателя и препятствуют развитию КЗ в питающей сети при пуске.

После разгона двигателя от УПП, двигатель просто полностью переходит на питание от сети, так как УПП синхронизировано с сетью. Использовать ФИУ для полноценного управления электродвигателем не получится, лишь в отдельных случаях это может «прокатить».

Если ПЧ для вас дорогое удовольствие, то можно попробовать классический метод регулировки подачи воздуха – управление шиберной задвижкой от сервопривода. Здесь уже упор делается на механику. Собственно сам электродвигатель при таком способе всегда будет работать в номинале.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Электрик в доме
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: