Управление двигателями постоянного тока

Поскольку надо ближе продвигаться к созданию чего-то движущегося под управлением Ардуино, решил я поискать в Интернете нечто, позволяющее работать с двумя моторчиками постоянного тока. Информаии – океан: от бессмысленного трёпа на всевозможных форумах до исключительно серьёзных материалов, созданных профессионалами. Но вот какая штука получается: то, что профессионалу кажется элементарным, и он проходит мимо этого, не поясняя деталей, для людей начинающих создаёт серьёзные проблемы, решить которые с ходу не представляется возможным. Профессионалы зачастую бравируют своим профессионализмом, свысока взирая на тех, кто копошится там  - внизу, пытаясь постичь пока ещё основы. Дело в том, что такие люди будут всегда. А профессионалы этого не понимают. Я уже неоднократно упоминал о том, что сейчас в Интернете учить берутся все подряд, совершенно не представляя себе, как это нужно делать. Учить надо уметь. Чтобы учить, надо этому учиться. Эту простую истину понимают далеко не все. В том числе и профессионалы. У меня есть соответствующий опыт. Не зря ведь профессионалы-программисты приводили ко мне своих детей, чтобы я учил их основам информатики и основам программирования. Они были умные люди и чётко понимали (попробовав, конечно!), что не умеют учить. Своих собственных детей! Ну ладно, это всё лирика.
Заглянул я на иностранные сайты. И нашёл кое-что весьма интересное, например:
https://openclassrooms.com/fr/courses/2778161-programmez-vos-premiers-montages-avec-arduino/3285333-le-moteur-a-courant-continu-partie-1-transistors-et-sorties-pwm

SEkorp: мне захотелось познакомить посетителей моего сайта с этим материалом, я откорректировал автоперевод и внёс в него малую толику «риализьма» (как говаривал незабвенный Никита Сергеевич Хрущёв). Итак, начнём изложение русской версии трактата профессора Жана-Ноэля Руссо (кого-то мне напоминает?).


Двигатель постоянного тока (глава 1): транзисторы и выходы ШИМ

Вы видели в предыдущей главе сервомотор, который позволяет осуществлять вращение до 180°. Но если реализовать робота, который катится, серво-двигатель не может быть использован для тяги. Поэтому нам необходимо использовать двигатель, который может вращаться бесконечно в одном или в другом направлении. Это двигатель постоянного тока.
В этой главе:
- Вы узнаете, во-первых, что такое двигатель постоянного тока.
- Затем вы узнаете, как подключить такой двигатель к Arduino, и, прежде всего, как создать программу его управления.
- Наконец, вы узнаете, как изменять его скорость с помощью цифровых выходов ШИМ.

Одновременно Вы будете открывать для себя новые компоненты: биполярные транзисторы и MOSFET-транзисторы.

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

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

Здесь мы рассмотрим один тип двигателя, который может быть использован с Arduino – это двигатель постоянного тока (Direct Current  на английском, сокращённо DC). Давайте разберемся, как он работает...

Ток индуцированный
Я уже сказал выше, основной принцип двигателя в том, что его ось должна вращаться.
Например,  мельница : ветер дует на равнинах Бретани. На равнине находится мельница. Ветер (это движение воздуха) давит на крылья мельницы. Их форма такова, что давление потока воздуха создаёт момент сил, и каждое крыло начинает вращаться на оси. Мельница, таким образом, представляет собой воздушный двигатель.
В нулевом приближении электродвигатель чем-то на неё похож: есть ось, есть лопасти, есть их перемещение благодаря электрической энергии.
Вот небольшая анимация для наглядного представления и понимания сути процесса:

Визуализация упрощенной модели вращения двигателя постоянного тока.

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

SEkorp: снова не могу удержаться, чтобы не напомнить вам – не существует магнита с одним полюсом, как и не существует (возможно – пока) элементарной частицы с одним полюсом. Такую частицу предсказал в 30-х годах ХХ века Поль Дирак. Она даже получила название «монополь Дирака». Но её до сих пор не обнаружили! И не получили в коллайдере! Так что изображение магнитов на анимированной картинке чисто условное. Однако, вернёмся к трактату профессора.

Изучая электричество и явления, которые связаны с ним, исследователи обнаружили, что существует связь между током и магнетизмом. Действительно, ток, который протекает в замкнутой цепи, создает магнитное поле (опыт Эрстеда). И, наоборот, изменение магнитного поля порождает в замкнутом контуре электрический ток (опыты Фарадея). Это называется электромагнитной индукцией.
Я не буду вдаваться в подробности законов индукции и теоремы, которые связаны с ними, так как это не является целью данной главы. Мы будем просто наблюдать, пытаясь лучше понять принцип работы двигателя постоянного тока.
Итак, чтобы изготовить электромагнит, достаточно иметь кусок железа (гвоздь, например), немного изолированного медного провода и источник тока (батарейку). Вы оборачиваете провод вокруг гвоздя, создаёте электромагнит. Если вы удалите гвоздь, вы получите катушку.

При подключении батарейки к концам провода создается магнитное поле, которое будет в состоянии притянуть небольшие металлические предметы,например, скрепки.
Не оставляйте батарею подключенной более нескольких секунд, так как она быстро разрядится. Действительно, цепь имеет очень малое сопротивление – это почти короткое замыкание. Ни в коем случае не используйте пины +5В и GND платы Arduino, чтобы реализовать этот опыт. Это крайне опасно для платы .

Вернёмся к нашему двигателю. На самом деле «крылья» двигателя представляют собой электромагниты (провод, намотанный вокруг железного сердечника, помещённого на оси) – якорь или ротор. Протекание тока создаёт вокруг якоря магнитное поле. Оно, в свою очередь, взаимодействует с магнитным полем постоянного магнита так, что одноимённые полюса отталкиваются, а разноимённые – притягиваются. Это то, что создает движение двигателя.
Ротор двигателя постоянного тока обычно имеет, по крайней мере, три «крыла». Более того, появление тока в катушке ротора (от слова rotary–вращать) создаёт магнитное поле таким образом, что вращение происходит в одном направлении.
Двигатель постоянного тока в разрезе:

Здесь хорошо видно:
- корпус двигателя и статические магниты, которые крепятся к нему: всё это называется статор, так как он неподвижен;
- три катушки и их железный сердечник (оранжевый и зеленый), что называется ротор, потому что это часть, которая вращается;
- ось, которая будет использоваться, чтобы передать вращательные движения шестерням, шкиву.
Вы видите, что катушка состоит из множества витков изолированого медного провода вокруг железного сердечника.
Следует понимать, что если мы будем подавать ток в двигатель, он заработает; он превращает электрическую энергию в механическую (кинетическую энергию вращения). Но следует помнить также, что если вы будете рукой вращать вал двигателя, в катушке возникнет ток. При этом механическая энергия преобразуетсяв электрическую. Т.е. электродвигатель обратим – в одном случае он совершает механическую работу, в другом – вырабатывает электроэнергию. Это важно помнить, и мы к этому ещё вернёмся.

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

Подключение двигателя постоянного тока к плате Arduino
В дальнейшем я предлагаю использовать двигатель постоянного тока, который работает от напряжения в диапазоне от 3В до 6В. Это небольшие моторчики, которые часто используют в различных игрушках, например:

SEkorp: мои реальные моторчики

Вы заметили оси, и два маленьких контакта для подключения. Все остальное скрыто в корпусе двигателя.
Несколько замечаний:
- для подключения контакта вам нужно припаять провода или использовать, например, зажим «крокодил»;
- ось вращается, когда ток проходит через двигатель; но для передачи движение нужно что-то другое (колесо, ремень, шестеренки), которые крепятся на оси.

Вы можете в первое время подключать двигатель непосредственнок +5V и GND Arduino:

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

Но лучше этого не делать!

Теперь можно подключить двигатель к DIGITAL pin (от 0 до 13) и GND и контролировать ток программно, как на следующей схеме :

Простенькая программа:

Но лучше этогоне делать!

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

Во-вторых, двигатель имеет шанс не запуститься, поскольку сила тока Arduino слишком мала. И мы не можем увеличить этот ток.
Отсюда следует, что не стоит подключать двигатель постоянного ТОКА непосредственно к пинам Arduino.
Как быть?
Вы должны уметь управлять силой тока. Вот схема с кнопкой:

SEkorp: я не согласен с тем, что кнопка позволяет управлять силой тока. Хотя… изменение силы тока скачком в моменты замыкания/размыкания – это тоже, в какой-то степени, происходит в результате управления? Однако, вернёмся к трактату профессора.

Хорошо видно, что при нажатии двигатель получает ток (здесь напрямую от +5V Arduino) и включается. Если вы отпускаете, двигатель останавливается. Но все это приказал ваш мозг, который контролирует ваш палец, а не автоматическое программирование... А нам нужен выключатель, управляемый программно. И он существует! В самом деле, есть несколько выключателей, которые можно программировать. В этой главе мы рассмотрим два: биполярный транзистор и MOSFET-транзистор. Есть и выключатель совершенно другого типа – реле.

Транзистор биполярный
Биполярный транзистор представляет собой электронный полупроводниковыйкомпонент, который был изобретен в 1947 году. Вот пример современного биполярного транзистора типа N-P-N:

Это довольно небольшой транзистор. Есть разные размеры, включая крошечные (видимые только в микроскоп). Транзистор является основой многих электронных схем. Он используется для двух основных целей :
- в качестве усилителя электрического сигнала (этот аспект мы не рассматриваем);
- как выключатель в цепи (это нас как раз интересует).

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

SEkorp: некоторые мои реальные биполярные N-P-N транзисторы

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

Он имеет три вывода:
B – база: отсюда можно будет управлять транзистором;
C – коллектор: сюда можно будет подключить двигатель;
E –  эмиттер: он будет соединен с «землей» –  GND;
для уточнения конкретных выводов реального транзистора необходимо обратиться к Datasheet.

Не ленитесь взглянуть на Datasheet, иначе вы рискуете безвозвратно испортить транзистор .

Управляя током базы (B), мы открываем транзистор, и он станет проводить ток между коллектором (C) и эмиттером (Е). Цепь замкнется и позволит двигателю работать.
Вы уже знаете, что двигатель генерирует паразитное, опасное напряжение для Arduino, когда он останавливается. Теперь это не Arduino (так как транзистор защищает его от опасности), но и транзистор может перегореть! Поэтому необходимо и его защитить от обратного тока двигателя. Вот такая получается цепочка: одно защищает другое, но и оно нуждается в защите, потом защиту тоже надо защитить и т.тд.
Для защиты транзистора применим диод, который будет препятствовать протеканию обратного тока. Помните, что диод пропускает ток только в одном направлении. Мы выигрываем! Диод защищает транзистор, когда тормозит двигатель! Он называется «безынерционный» диод.
Какой диод поставить? Можно было бы поставить светодиод (SEkorp: для красоты и наглядности?). Но он переключается не достаточно быстро, переходя из состояния проводимости в состояние блокировки. Существует и другой вид – диод Шоттки, который переключается очень быстро.

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

Следует также предусмотреть резистор между Arduino и базой транзистора. Он позволяет защитить транзистор, если напряжение слишком велико.
В результате получаем следующую схему:

Двигатель постоянного тока, контролируемый N-P-N транзистором и с диодом.

К клеммам двигателя можно также подключить конденсатор (даже электролитический) для поглощения всплесков напряжения и защиты диода и транзистора.
Вот макет монтажа:

И хорошо, что это не так просто! Это причина, по которой я затронул данную главу до конца курса. Я доверяю вам, вы готовы переварить все это без проблем на этом этапе!
Вы можете проверить схему, используя следующий код (который не должен быть проблемой):

Если вы измените значение сопротивления резистора на базе, то увидите, что двигатель станет работать быстрее или медленнее. Таким образом, коллекторный ток зависит от тока базы транзистора. Следовательно, так можно менять скорость вращения моторчика. Беда в том, что при этом соответственно меняется мощность двигателя.

Всё это хорошо, но биполярный транзистор не является лучшим решением. Конечно, он используется в электронных схемах, но MOFSET лучше! Это другой тип транзисторов – транзисторы с эффектом поля, так называемые транзисторы MOSFET Metal Oxide Semiconductor Field Effect Transistor).

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

SEkorp: мои реальные MOSFET’ы с N-каналом

На вывод MOSFET’а достаточно подать довольно низкое напряжение, чтобы вызвать прохождение тока. Такой транзистор является более стабильным, он нагревается меньше (металл служит радиатором), но зато дороже (порядка 10 раз), чем биполярный. Я предлагаю использовать транзистор IRF540N.
SEkorp: не думаю, что следует ограничиваться именно IRF540N. Можно использовать всякме другие. Проверено. Кстати, речь идёт о MOSFET’ахс индуцированным N-каналом. Но вернёмся к трактату профессора.

Я не буду вдаваться в подробности о его внутренней работы, но следует знать, что существует 2 вида MOSFET’ов с N-каналами и Р-каналами.
Вот символ MOSFET’а с N-каналом:

Пояснения:
G (Gate – Затвор): здесь мы подаём команду в транзистор;
S (Source – Исток): соединяется с «-» GND;
D (Drain– Сток): для N-канального MOSFET’а присоединяется к двигателю;

  • Не забывайте обратиться к Datasheet MOSFET’а, чтобы подключить его правильно!

Будьте внимательны! Не путайте выводы MOSFET’а и биполярного транзистора. Они совершенно разные! Надо каждый раз проверять Datasheet компонента, который вы выбираете.

Вот схема подключения N-канального MOSFET’а.
Source – Исток – соединён с «-» GND; к Drain – Стоку подключён двигатель:

SEkorp: Внимание! Тут профессор перепутал. На схеме показана ЛАМПА НАКАЛИВАНИЯ!! Но вернёмся к трактату профессора.

Резистор 10 кОм является «подтягивающим» – PULL-DOWN , чтобы сигнал, поступающий на MOSFET, был строго высокого или низкого уровня (+5В или 0В).

SEkorp: подробнее о подтягивающих и стягивающих см., например: https://tsibrov.blogspot.com/2018/02/pullupresistors.html
Но вернёмся к трактату профессора.

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

Для использования биполярных транзисторов P-N-P или MOSFET’ов с P-каналом я не предлагаю вам никаких объяснений по двум причинам:

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

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

До сих пор мы видели питанием двигателей непосредственно с платы Arduino +5V. На самом деле данный подход по практическим причинам малоэффективен, если не сказать - ОПАСЕН. Лучше использовать источники энергии отдельно для Arduino и отдельно для двигателей. Этот принцип в настоящее время широко применяется в электронной  и электротехнике: разделение цепи управления и силовой цепи. Я объясняю:

1. Схема управления посылает двоичные данные (0 или 1, LOW или HIGH) при напряжении, которое используется для Arduino (+5 В) и силе тока (не более 40 мА). Питание этой схемы осуществляется через USB-кабель, если Arduino подключен к компьютеру, или от батареи 9 В. Плата Arduino должна быть защищена от перепадов напряжения, чтобы работать лучше и без риска повреждения.

  • 2. Цепь питания должна обеспечивать энергию, необходимую для запуска нагрузки (которая подключена), как в нашем случае двигатель. Это может быть также светильник, экран, жалюзи или другое устройство, потребляющее больше +5В и 200 мА.

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

Вы заметили, что в случае «транзисторного» управления двигателями, важно, что GND является общей (то есть «-» батареи или блока питания должен быть подключен также к GND Arduino). Так можно управлять двигателями 12В или 24 В без риска повреждения платы Arduino.

Вот так схема подключения изменена с использованием биполярного транзистора N-P-N:

SEkorp: резистор 1 кОм в базовой цепи включен (я бы сказал – последовательно) именно так потому, что биполярный транзистор управляется ТОКОМ. Но вернёмся к трактату профессора.

А теперь схема, которая использует MOFSET с N-каналом:

SEkorp: резистор 10 кОм в цепи затвора включен (я бы сказал – параллельно) именно так потому, что MOFSET-транзистор управляется напряжением. Он именуется «подтягивающим». В своих опытах я не ставил такой резистор, и всё прекрасно работало. Но вернёмся к трактату профессора.

Теперь вы имеете представление, как запустить и остановить двигатель постоянного тока, как отделить цепи управления от силовой цепи. Осталось последнее, что нужно узнать в этой главе...

Изменение скорости вращения двигателя
Вспомните «Звёздные войны» и робота R2D2 (два колеса и свободное колесо). Если создать такого робота, используя полученные знания, то он сможет двигаться вперед и поворачивать, но не сможет изменять свою скорость. Действительно, двигатель будет запущен на полную мощность, либо выключен (инерция остановки не учитывается).
SEkorp: R2D2 был примерно таким

Но вернёмся к трактату профессора.

Мне хорошо известно, что скорость вращения двигателя можно изменять!
Это довольно просто, если использовать некоторые цифровые выходы Arduino, которые рассчитаны на ШИМ (широтно-импульсная модуляция) или PWM (pulse-width modulation). Именно так они обозначены на плате:

Выходы PWM Arduino имеют символ «~»около номера.

Какая разница между этими пинами (3, 5, 6, 9, 10 и 11) и другими?
И они способны, как и другие, подавать +5 В, либо 0 В в режиме OUTPUT. Но у них есть другое преимущество, они могут «передать» группу импульсов переменной. Её можно задать с функцией Arduino, которая будет принимать значение между 0 и 255:

где pin – это pin PWM (ШИМ) в режиме OUTPUT, а valeur – это значение в диапазоне от 0 до 255, которое будет определять долю времени, когда pin-код будет в HIGH состоянии в течение каждого интервала (255 будет соответствовать 100% времени интервала в HIGH состоянии).
Время от начала одного импульса до начала следующего составляет 2 мс, и называют его периодом цикла.

Циклы импульсов: процент времени, где pin находится в HIGH состоянии (2 мс) и значение связанного с ним параметра. Все значения между 0 и 255 могут использоваться. Это как если бы применялась функция:

Что в это время происходит с двигателем?

Можно представить, что двигатель начинает дергаться (он останавливается, двигается, останавливается, двигается...). На самом деле не так. Помните, что двигатель имеет механическую инертность. Он не останавливается мгновенно, а продолжает вращаться некоторое малое время даже без электричества. 2 мс – это очень малое время, в течение которого двигатель не успевает остановиться.
Так называемая скважность– это время в состоянии HIGH (Th), делённое на время цикла (t): RC=Th/t. Результат находится между 0 и 1.
Чем ближе скважность к 1, тем больше время восстановления, тем большая мощность подаётся на двигатель, и он  будет вращаться быстрее. Наоборот, чем меньше скважность, тем более он имеет тенденцию к остановке. Таким образом, он будет вращаться медленнее. Если скважность равна 0, он останавливается (с инерцией).
Вы понимаете, что импульс передается на транзистор, который открывается и замыкает цепь питания с нагрузкой. 
Вот программа, которая изменяет скорость двигателя со значениями 0%, 25%, 50%, 75% и 100% в течение 3 секунд каждый:

SEkorp: я бы на месте профессора проиллюстрировал вышеприведённый скетч хотя бы в симуляторе. Но я не профессор… Однако, вернёмся к трактату профессора.

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

SEkorp, 12 апрель 2019г.


НАЗАД на страницу РАДИОардуино