Двигатель постоянного тока (глава 2): Н-мост и интегральные схемы

Сайт https://openclassrooms.com/fr/courses/2778161-programmez-vos-premiers-montages-avec-arduino/3285355-le-moteur-a-courant-continu-partie-2-le-pont-en-h-et-les-circuits-integres

SEkorp: продолжение и окончание. Однако, обратимся к трактату профессора.

В предыдущей главе вы узнали, как подключить двигатель с помощью управляющих транзисторов для защиты Arduino. Вы также видели, как управлять скоростью двигателя с помощью пинов ШИМ (PWM).

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

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

Затем вы увидите, как легко реализовать то же самое благодаря интегральным схемам, которые разработали специалисты по электронике.

Наконец, мы создадим программу, которая позволяет управлять двигателями двух вентиляторов, в зависимости от окружающей среды (один управляется кнопкой, другой – потенциометром).

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

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

Принцип
Переключатели работают попарно: A связан с D, B связан с С. В схеме, приведенной выше, ничего не происходит, потому что все переключатели разомкнуты, и ток в цепи не протекает. Двигатель остановлен.
Теперь давайте посмотрим, что происходит, когда замыкаются A и D (на рисунке слева), или – B и C (рисунок справа):

Итак, вы видите:

--> на рисунке слева – выключателиАи D замкнуты. Ток через двигатель течёт слева направо. Двигатель вращается.

--> на рисунке справа – выключатели B и C замкнуты. Ток через двигатель течёт справа налево.Двигатель вращается в обратном направлении!

Можно также замкнуть A и C (на рисунке слева) или B и D (на рисунке справа). В таком случае двигатель вращается по инерции и генерирует ток. Этот ток может быть использован в схеме H-моста как электромагнитный тормоз, что позволяет контролировать время работы двигателя, не давая ему свободного хода.

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

Н-мост с транзисторами N-P-N, диодамидля подключения к Arduino. Это примерная схема и для её практической реализации необходимо внести некоторые дополнения.

SEkorp: схема на биполярных транзисторах(применяются N-P-N иP-N-P)

Схема на MOSFET’ах:(применяются с N-каналом иP-каналом)

На реле:

Я не проверял работу этих схем. Они приведены для иллюстрации. Однако вернёмся к трактату профессора.

Схемы с двойным Н-мостом
Не вам первым я сообщаю, что 4 контакта – это слишком много для управления одним двигателем постоянного тока. Поэтому, чтобы облегчить нам жизнь, в удивительном мире электроники появился новый чип. Электронный чип – это микросхема (и наоборот), т. е. какой-то небольшой ящик, который содержит миниатюрные компоненты, соединённые между собой с целью удовлетворения той или иной функции. Как и с транзисторами, только ссылка на Datasheet данного чипа будет в состоянии сказать вам, какова его роль и как он подключается!
В нашем случае, есть чипы, которые служат в качестве Н-моста. Это их функция. Мы даже обнаружим, что наши ожидания позволяет удовлетворить чип, именуемый L293D.
Существует L293 и L293D. D – значит диоды, которые защищают транзисторы. L293 не содержит диоды.

Мы будем использовать L293D, потому что это позволяет нам решить проблемы защиты встроенных в чип транзисторов.
Вот datasheet на эту микросхему. Документ называется «Quadruplehalf-H driver», что можно перевести как «Четырехместный полу-Н драйвер». Таким образом, это двойной H-мост. Тогда почему это имя Quadru? Просто потому, что с этой схемы, вы можете управлять либо 2-мя двигателями в обоих направлениях двигателя, либо 4-мя двигателями в одном направлении.

Фото микросхемы L293D:

SEkorp: вот фото микросхемы на фоне линейки

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

Схема подключения:

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

Назначение выводов:

- Входы ENABLE1 и ENABLE2 отвечают за включение каждого из драйверов, входящих в состав микросхемы.

- Входы INPUT1 и INPUT2 управляют двигателем, подключенным к выходам OUTPUT1 и OUTPUT2.

- Входы INPUT3 и INPUT4 управляют двигателем, подключенным к выходам OUTPUT3 и OUTPUT4.

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

- Контакт Vss соединяют с положительным полюсом источника питания. Этот контакт обеспечивает питание самой микросхемы.

- Четыре контакта GND соединяют с "землей" (общим проводом или отрицательным полюсом источника питания). Кроме того, с помощью этих контактов обычно обеспечивают теплоотвод от микросхемы, поэтому их лучше всего распаивать на достаточно широкую контактную площадку.

SEkorp: в Datasheet’е показано, как и какой теплоотвод подсоединять к микросхеме. Кстати:

Характеристики микросхемы L293D

- Н
апряжение питания двигателей (Vs) - 4,5...36V

- напряжение питания микросхемы (Vss) - 5V

- допустимый ток нагрузки - 600mA (на каждый канал)

- пиковый (максимальный) ток на выходе - 1,2A (на каждый канал)

- логический "0" входного напряжения - до 1,5V

- логическая "1" входного напряжения - 2,3...7V

- скорость переключений до 5 kHz.

- защита от перегрева
Однако вернёмся к трактату профессора.

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

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

Диоды размещать вокруг двигателей не нужно.

Вот, наконец, пример на макете:

Подключение к Arduino L293D, 2-х двигателей постоянного ТОКА, батареи 9В.

Этот монтаж является достаточно сложным. Найдите хотя бы разноцветные кабели, это важно.

Команды двигателя сверху – на pin 12 и 8. Привод ШИМ на pin 11.
Команды двигателя снизу  - на pin2 и 4. Привод ШИМ на pin5.

Есть микросхема для управления большими токами, которая работает по тому же принципу: L298. Если вы поняли работу L293D, то с L298 у вас не будет проблем.

Хорошо, теперь посмотрим программирование с этой небольшой обломок мечты... (SEkorp: меня так тронула этот "ОБЛОМОК", что я решил оставить фразу в первозданном варианте автоперевода)

Запрограммируйте два двигатели постоянного ТОКА с микросхемой L293D
Теперь, когда вы смогли подключить двигатели, чип L293D, батарейку к плате Arduino, вы сможете вращать вперед и/или назад два двигателя с разной скоростью. Это уже здорово!!

Я вам сказал раньше, что половина L293D управляет одним двигателем. Поэтому необходимо продумать как можно лучше, какой pin-код команды для какого мотора использовать! Самый простой способ – это дать соответствующее имя переменной. Например:


Преимущество переменных в том, что если вы решаете задать другой pin-код в переменной, это не меняет программу.

Теперь давайте посмотрим таблицу, которая показывает поведение двигателя постоянного ТОКА (Moteur1 или Moteur2) в зависимости от состояния его выводов:

Выводы находятся в режиме OUTPUT и активируются с помощью команды:

с etat, которая принимает значение 1 (HIGH) или 0 (LOW).

Что касается управления ШИМ, я вам напоминаю, что используется команда:

с valeur в диапазоне от 0 (stop) и 255 (max).

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

Вы не видите, как это сделать? Давайте посмотрим на это вместе в следующем разделе!

Тишина... Двигатели постоянного тока... Это работает!

Вот программа, которая будет управлять каждым двигателем, благодаря функции, которую можно будет назвать actionMoteur. Эта функция будет принимать 3 аргумента:

- Соответствующий привод: двигатель 1 или 2.
- Направление вращения: 1 или -1 (в обратном направлении). Любое другое целое число, остановит двигатель.
- Процент мощности: между 0% и 100%.

Функция actionMoteur затем будет анализировать эти аргументы, чтобы отправить правильную информацию от пинов, подсоединенных к L293D.

Связь с монитором не является обязательной, но она позволяет проверить работу программы. И вот программа управления двигателя с функцией actionMoteur :

Строка if (sens==-1 || sens==1) означает: если (sens равно -1 или если sensравно 1). Знак || в программировании – это логический оператор.
Таким образом, с помощью этих логических операторов вы можете проверить несколько условий:

||  означает «или» (or в английском языке)

! означает «нет/не» (not  в английском языке)

&& означает «и» (and в английском языке).

Двигатели и взаимодействия
Как мы увидим в главе, посвященной автономному роботу, датчики состояния окружающей среды часто помогают управлять двигателями в функции. У нас, пока что имеются кнопка (опустил, поднял) и потенциометр (позиции вращения со значением между 0 и 1 024).
Что мы можем себе позволить с таким оборудованием? Почти ничего. Например, просто вентилятор. Или нет, два вентилятора. У одного скорость будем проконтролировать кнопкой, у другого – через потенциометр.

На рисунке макета соединений, где L293D вид сверху:

- Двигатель 1, управляемый pin12, 8 и 11 для ШИМ ;Д

- вигатель 2, управляемый pin2, 4 и 5 для ШИМ.

- Регулятор будет связан с аналоговым pin аналоговый А0.

- Кнопка будет подключен к pin 7 Arduino в режиме INPUT_PULLUP

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

Пояснения к программе, созданной ранее, с некоторыми нюансами:

Первый двигатель должен быть связан с кнопкой:

- начала до остановки,
- поддержка = 25% скорости,
- другой поддержки = 50% скорости,
- другой поддержки = 75% скорости,
- другой поддержки=100% скорости,
- другой поддержки = остановка вентилятора.

Второй двигатель должен контролироваться регулятором:
- потенциометр в центре = двигатель остановлен,
- потенциометр вправо = двигатель ускоряется пропорционально в одном направлении,
- потенциометр влево = двигатель ускоряется пропорционально в другую сторону.

Вы можете создавать новые функции, чтобы удовлетворить ваши потребности и добиться успеха в этом упражнении. Как обычно, имеется не только один путь решения задачи.

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

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

Например, производство вентиляторов...
Если вы еще не знакомы с изготовлением роботов или других объектов, вы можете начать просто. В случае вентиляторов, вы можете вырезать прямоугольники из картона для обуви. Затем возьмите пробку (типа от бутылки вина), и вставьте в неё импровизированные лопасти (3 вполне достаточно). Затем сажаете эту конструкцию на ось двигателя (сильный клей), и этого хватит на данный момент.

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

Запомните то, что делает все богатство сообщества пользователей Arduino : их творчество! Каждый найдет, в зависимости от его проектов, идеи для разработки своих моделей и платформ. И здесь редко всё получается с первого раза!

Я думаю, что я всё сказал.

Пример программы final...

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

Думаю, что этого вполне достаточно для 2-х двигателей... и за столь короткое время!
Несколько слов в конце этого краткого вводного курса по программированию с платой Arduino.
Теперь вы знаете, как создавать всевозможные электронные приспособления и управлять ими с помощью платы Arduino. Вспомним о ваших достижениях за это время:

- Компоненты, которые вы научились подключать: светодиоды, кнопки, потенциометры, двигатели и серводвигатели. Кроме того, созданы программы, чтобы заставить мигать светодиоды, запрограммировать цифровой кубик, чтобы привести в движение двигатель...

- Программы, которые вы создали, чтобы управлять этимикомпонентами, содержат:
циклы, условия, функции, тексты, константы и переменные, которые хорошо понятны, если сопровождаются ясными комментариями;
типичные функции Arduino, их константы и некоторые библиотеки;
сериал монитор IDE Arduino для отображения информации на экране компьютера.

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

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


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