В этом тексте я написал как диагностировать и тестировать такую электрическую схему как H-мост. Запрограммировать H-мост это просто. Куда сложнее в Run-Time(е) определять Fault(ы) в этом пресловутом H-мосте, чтобы вовремя отключить ключи и перевести всю цепь в безопасное состояние тем самым спасти дорогое оборудование от сгорания в стиле бенгальского огня.
В электронике существует классическая электрическая цепочка, которая называется H-мост (H-bridge).
рис 1Эта схема позволяет пропускать ток через нагрузку в прямом и обратном направлении. Если в эту цепь подключить DC-мотор, то он будет крутиться либо по часовой стрелке (СW) либо против часовой стрелки (CCW). Также можно модулировать величину тока, если переключать ключи PWM сигналом. Также из схемы H-моста можно сделать инвертор. То есть переходник с постоянного тока в переменный ток.
H-мосты активно применяют в маломощных устройствах, которые крутят, например, шаговые двигатели в CNC станках или, например, в контроллерах управления автомобильными стекло-опускателями, выдвижными ramp(ами) в автобусах. Это всё так называемые прошивки-спинеры. Также H-мостом можно управлять фарами автомобиля и прочее.
Однако есть проблема. Вернее есть 31 проблема. То есть в H-мостах может быть 31 тип сбоев, которые приведут к тому, что H-мост просто больше не будет работать. А 14 lethal кейсов приведут к тому, что из H-моста просто посыплются искры. Вот список этих аварий.
Как же определить аварии в H-мосте во время исполнения? Надо разработать механизм, который можно назвать Load Detect.
Понятное дело что за H-мостом надо как-то наблюдать. В электронике есть только 2 способа наблюдать за чем-либо: GPIO, работающие на вход и ADC.
Вот возможная схемотехника, которая позволит диагностировать состояние H-моста. Тут на каждое плечо H-моста подключен аналого-цифровой преобр. (ADC) и тут же ключ, который управляет подтяжкой напряжения к питанию на каждом плече H-моста.
pbc 3. Схема наблюдения за H-мостомУ каждого микроконтроллера, есть аналоговые пины, которые подключены к внутреннему ADC преобразователю. Подтяжками же напряжения к питанию можно управлять по GPIO или при помощи ключа и высоко-омного резистора или при помощи специальных ASIC микросхем-источников смачивающего тока. (Если нужно название чипа, то пишите в личку).
рис 4Очевидно, что нужен какой-то алгоритм или высокоуровневый программный конечный автомат (FSM), который будет сообщать, когда в H-мосте возникли аварии. В идеале хотелось бы, чтобы этим занимался отдельный ASIC. Однако можно составить и чисто программное решение на С(ях).
Разработка конечного автомата это просто механические действия. Как известно, любые конечные автоматы проектируются за 7 шагов:
Фаза | Этап разработки конечного автомата |
1— | определить выходы |
2— | определить состояния |
3— | определить действия |
4— | определить входы |
5— | составить таблицу переходов |
6— | нарисовать граф переходов |
7— | воплотить конечный автомат в коде |
1— Вот выходы конечного автомата диагностики H-моста. Это как раз те высокоуровневые события, которые хочет услышать обыкновенный пользователь (схемотехник, программист, техник, интегратор, водитель).
№ | FSM Output | Type | Wire | shoulder |
1 | left shoulder short GND | short | GND | left |
2 | left shoulder short Vbat | short | Vbat | left |
3 | right shoulder short GND | short | GND | right |
4 | right shoulder short Vbat | short | Vbat | right |
5 | open load | open | load | — |
2— Состояния конечного автомата может определяться состоянием подтяжек к питанию. Важно устанавливать подтяжки именно в коде Грея. Это уменьшит время переходного процесса установки подтяжек и уменьшит энергопотребление устройства, да и отлаживаться на осциллографе так проще.
№ | Left shoulder | Right shoulder |
1 | Pull none | Pull none |
2 | Pull none | Pull up |
3 | Pull up | Pull up |
Pull up | Pull none |
3— Что будет делать этот конечный автомат на низком (аппаратном) уровне? Или какие он будет делать системные действия?
№ | Действие | плечо H-моста | Type |
1 | Установить подтяжку к питанию на левом плече | левое | on |
2 | Установить подтяжку к питанию на правом плече | правое | on |
3 | Отключить подтяжку к питанию на левом плече | левое | off |
4 | Отключить подтяжку к питанию на правом плече | правое | off |
5 | Измерить показание напряжения на левом плече | левое | get |
6 | Измерить показание напряжения на правом плече | правое | get |
7 | Рассчитать аналитику | — | calc |
4—Входом конечного автомата будет являться прерывание по таймеру. Конечный автомат будет переключаться в очередное состояние и просто ждать, пока пройдет переходной процесс в установке подтяжке напряжения. Это порядка 100ms. Для определенности можно считать что это время равно 500ms. Это основной параметр данного конечного автомата. Этот параметр зависит от величины смачивающего тока. Чем больше ток подтяжки тем быстрее переходной процесс. Надо калибровать каждый конкретный H-мост. Значение таймаута перехода в другое состояние стоит хранить в NVRAM.
№ | Входное воздействие |
1 | Сработало прерывание по переполнению аппаратного таймера |
2 | На H-мост подали PWM сигнал со скважностью более 0% |
Аналитику надо запускать именно пройдя полный цикл в конечном автомате. Только так будет накоплена полная необходимая статистика для принятия решения о здоровье H-моста.
5—Таблица переходов состояний конечного автомата диагностика H-моста
начальное состояние | Inputs | |
0%<PWM duty | ||
LN_RN | LN_RU | LN_RN |
LN_RU | LU_RU | LN_RN |
LU_RU | LU_RN | LN_RN |
LU_RN | LN_RN | LN_RN |
6—Граф переходов получился такой (рис 5). За один оборот конечный автомат накапливает все нужные исходные данные для принятия решения о состоянии H-моста
рис 5На рисунке 6 представлена LookUp таблица для принятия решения. На основе измерений напряжений на плечах H-моста можно судить о таких высокоуровневых событиях как «отвалившийся мотор» или «короткое замыкание» в цепи. Таблицу можно хранить в ROM (on-chip Nor Flash) памяти микроконтроллера-спинера H-моста.
рис. 6 LookUp таблица принятия решения ссылка на таблицуhttps://docs.google.com/spreadsheets/d/1ajd2wMbZntCOuDBE6T6dYTMBCxfLru5oziDJqKoUaFg/edit#gid=1581953763
Как видите для разработки алгоритмов программирования микроконтроллеров надо уметь активно пользоваться полноценными электронными таблицами (коллективное редактирование, сортировка по категориям, тягание столбцов, раскраска ячеек, фиксация шапки и прочее).
За работой H-моста надо внимательно наблюдать. Благодаря программному компоненту Load Detect, например, если злоумышленник выкрутит лампочку в фаре автомобиля, то водителю на смартфон придет push-уведомление. Это же так здорово!
Надеюсь этот текст поможет другим инженерам тоже делать надежные драйверы умных H-мостов с диагностикой в run time.
Если есть опыт работы с H-мостами, то напишите об этом в комментариях.
Акроним | Расшифровка |
ADC | Analog-to-Digital Converter |
PWM | Pulse-Width Modulation |
ASIC | Application-Specific Integrated Circuit |
FSM | Finite-State Machine |
NVRAM | Non-volatile random-access memory |
CW | ClockWise |
LU_RN | Left shoulder pull up, Right shoulder pull none |
LU | Left shoulder pull Up |
RN | Right shoulder pull none |
CCW | CounterClockWise |
Links
https://habr. com/ru/post/697388/
https://habr.com/ru/company/vk/blog/373397/
Сегодня мы рассмотрим схему, позволяющую изменять полярность прикладываемого к нагрузке постоянного напряжения.
Необходимость изменять полярность напряжения часто возникает при управлении двигателями или в схемах мостовых преобразователей напряжения. Например, для двигателей постоянного тока это необходимо для изменения направления вращения, а шаговые двигатели или импульсные мостовые DC-DC преобразователи без решения этой задачи вообще не будут работать.
Итак, ниже вы можете видеть схему, которую за внешнюю схожесть с буквой H принято называть H-мостом.
К1, К2, К3, К4 — управляемые ключи
A, B, C, D — сигналы управления ключами
Идея этой схемы очень проста:
Если ключи K1 и К4 замкнуты, а ключи К2 и К3 разомкнуты, то к точке h2 оказывается приложено напряжение питания, а точка h3 замыкается на общий провод. Ток через нагрузку в этом случае течёт от точки h2 к точке h3.
Если сделать наоборот, — ключи К1 и К4 разомкнуть, а ключи К2 и К3 замкнуть, то полярность напряжения на нагрузке изменится на противоположную, — точка h2 окажется замкнута на общий провод, а точка h3 — на шину питания. Ток через нагрузку теперь будет течь от точки h3 к точке h2.
Кроме смены полярности, h-мост, в случае управления электродвигателем, добавляет нам и ещё один бонус — возможность закоротить концы обмоток, что ведёт к резкому торможению нашего движка. Такой эффект можно получить замкнув одновременно либо ключи К1 и К3, либо ключи К2 и К4. Назовём такой случай «режимом торможения». Справедливости ради стоит отметить, что этот бонус H-моста используется значительно реже, чем просто смена полярности (позже будет понятно почему).
В качестве ключей может выступать всё, что угодно: реле, полевые транзисторы, биполярные транзисторы. Промышленность делает H-мосты встроенными в микросхемы (например, микросхема LB1838, драйвер шагового двигателя, содержит два встроенных H-моста) и выпускает специальные драйверы для управления H-мостами (например драйвер IR2110 для управления полевиками). В этом случае, разработчики микросхем конечно стараются выжать максимум бонусов и устранить максимум нежелательных эффектов. Понятно, что такие промышленные решения справляются с задачей лучше всего, но радиохламеры народ бедный, а хорошие микросхемы стоят денег, поэтому мы, ясен пень, будем рассматривать чисто самопальные варианты мостов и схем управления ими.
В самопальщине (то бишь в радиолюбительской практике) чаще всего используют H-мосты либо на мощных MOSFET-ах (для больших токов), либо на биполярных транзисторах (для небольших токов).
Довольно часто сигналы управления ключами попарно объединяют. Объединяют их таким образом, чтобы от одного внешнего сигнала управления формировалось сразу два сигнала управления в нашей схеме (то есть сразу на два ключа). Это позволяет сократить количество внешних сигналов управления с четырёх до двух штук (и сэкономить 2 ноги контроллера, если у нас контроллерное управление).
Объединяют сигналы чаще всего двумя способами: либо A объединяют с B, а C объединяют с D, либо A объединяют с D, а B объединяют с C. Чтобы обозначить и зафиксировать различия, — назовём способ, когда образуют пары AB и CD «общим управлением противофазными ключами» (эти ключи для изменении полярности прикладываемого к нагрузке напряжения должны работать в противофазе, т.е. если один открывается — другой должен закрываться), а способ, когда образуются пары AD и BC назовём «общим управлением синфазными ключами» (эти ключи для изменении полярности работают синфазно, т.е. либо оба должны открываться, либо оба закрываться).
Чтобы было понятнее о чём идёт речь, — смотрим на рисунок справа. Договоримся далее высокий уровень напряжения считать единицей, а низкий — нулём. В левой части рисунка транзисторы управляются независимо друг от друга. Чтобы открыть верхний транзистор — нужно подать сигнал управления А=0, а чтобы его закрыть — нужно подать А=1. Для открытия и закрытия нижнего транзистора нужно подавать B=1 или В=0. Если с помощью дополнительного транзистора объединить сигналы A и В (смотрим правую часть рисунка), то управлять верхним и нижним транзистором можно одним общим сигналом АВ. Когда АВ=1 оба транзистора открываются, а когда АВ=0 — оба закрываются.
На рисунке слева показан H-мост с общим управлением противофазными ключами, а на рисунке справа — с общим управлением синфазными ключами. У1 и У2 — это узлы, позволяющие из одного внешнего общего сигнала сформировать отдельный сигнал на каждый из работающих в паре ключей.
Теперь давайте подумаем что нам даёт каждый из этих двух способов управления.
При общем управлении противофазными ключами мы легко можем сделать так, чтобы оба верхних или оба нижних ключа оказались открыты (если схема такая, как у нас слева, то это произойдёт при AB=CD), то есть нам доступен режим торможения. Однако минус в том, что при таком способе управления мы практически наверняка получим сквозные токи через транзисторы, вопрос будет только в их величине. В проиышленных микрухах для борьбы с этой проблемой вводят специальную цепь задержки для одного из транзисторов.
При общем управлении синфазными ключами мы легко можем побороть сквозные токи (просто нужно сначала подавать сигнал на выключение той пары транзисторов, которая используется в настоящий момент, а уже потом сигнал на включение той пары, которую мы планируем использовать). Однако при таком управлении про режим торможения можно забыть (даже более того, если мы случайно одновременно подадим на оба внешних управляющих сигнала единицу — мы устроим в схеме КЗ).
Поскольку получить сквозные токи гораздо более кислый вариант (бороться с ними непросто), то обычно предпочитают забыть про режим торможения.
Кроме всего вышеперечисленного необходимо понимать, что при частых постоянных переключениях (в преобразователях или при управлении шаговиками), для нас будет принципиально важно не только избежать возникновения сквозных токов, но и добиться максимальной скорости переключения ключей, поскольку от этого зависит их нагрев. Если же мы используем h-мост просто для реверса двигателя постоянного тока, то тут скорость переключения не имеет такого критического значения, поскольку переключения не имеют систематического характера и ключи даже в случае нагрева скорее всего успеют остыть до следующего переключения.
Вот в общем-то и вся теория, если вспомню ещё что-нибудь важное — обязательно напишу.
Как вы понимаете, практических схем H-мостов, как и вариантов управления ими, можно придумать достаточно много, поскольку, как мы уже разобрались, важно учитывать и максимальный ток, и скорость переключения ключей, и варианты объединения управления ключами (а также вообще возможность такого объединения), поэтому для каждой практической схемы нужна отдельная статья (с указанием того, где эту конкретную схему целесообразно использовать). Здесь же я приведу для примера лишь простую схемку на биполярных транзисторах, годящуюся, скажем, для управления не очень мощными двигателями постоянного тока (зато покажу, как её рассчитывать).
Итак, пример:
Сам H-мост выполнен на транзисторах T1, T2, T3, T4, а с помощью дополнительных транзисторов T5, T6 выполнено объединение управления синфазными ключами (сигнал A управляет транзисторами T1 и T4, сигнал B — транзисторами T2 и T3).
Работает эта схема следующим образом:
Когда уровень сигнала A становится высоким — начинает течь ток через резистор R2 и p-n переходы БЭ транзисторов T5 и T4, эти транзисторы открываются, в результате чего появляется ток через переход БЭ транзистора T1, резистор R1 и открытый транзистор T5, в результате чего открывается транзистор T1.
Когда уровень сигнала A становится низким — запираются p-n переходы БЭ транзисторов T5 и T4, эти транзисторы закрываются, прекращает течь ток через переход БЭ транзистора T1 и он тоже закрывается.
Как такую схему рассчитать? Очень просто. Пусть у нас напряжение питания 12В, максимальный ток двигателя 1А и сигнал управления также 12-ти вольтовый (состоянию «1» соответствует уровень напряжения около 12В, состоянию «0» — уровень около нуля вольт).
Сначала выбираем транзисторы T1, T2, T3, T4. Подойдут любые транзисторы, способные выдержать напряжение 12В и ток 1А, например, КТ815 (npn) и его комплиментарная пара — КТ814 (pnp). Эти транзисторы рассчитаны на ток до 1,5 Ампер, напряжение до 25 Вольт и имеют коэффициент усиления 40.
Рассчитываем минимальный ток управления транзисторов T1, T4: 1А/40=25 мА.
Рассчитываем резистор R1, полагая, что на p-n переходах БЭ транзисторов T1, T4 и на открытом транзисторе T5 падает по 0,5В: (12-3*0,5)/25=420 Ом. Это максимальное сопротивление, при котором мы получим нужный ток управления, поэтому мы выберем ближайшее меньшее значение из стандартного ряда: 390 Ом. При этом наш ток управления будет (12-3*0,5)/390=27 мА, а рассеиваемая на резисторе мощность: U2/R=283 мВт. То есть резистор надо ставить на 0,5 Вт (ну или поставить несколько 0,125 ваттных параллельно, но чтоб их общее сопротивление получилось 390 Ом)
Транзистор T5 должен выдерживать всё те же 12В и ток 27 мА. Подойдёт, например, КТ315А (25 Вольт, 100 мА, минимальный коэффициент усиления 30).
Рассчитываем его ток управления: 27 мА / 30 = 0,9 мА.
Рассчитываем резистор R2, полагая, что на переходах БЭ транзисторов T5 и T4 падает по 0,5 В: (12-2*0,5)/0,9 = 12 кОм. Опять выбираем ближайшее меньшее значение из стандартного ряда: 10 кОм. При этом ток управления T5 будет 1,1 мА и на нём будет рассеиваться 12,1 мВт тепла (то есть подойдёт обычный резистор на 0,125 Вт).
Вот и весь расчёт.
Далее хотелось бы поговорить вот о чём. В приведённых в статье теоретических схемах H-мостов у нас нарисованы только ключи, однако в рассматриваемом примере, кроме ключей присутствуют ещё одни элементы — диоды. Каждый наш ключ шунтирован диодом. Зачем это сделано и можно ли сделать как-то иначе?
В нашем примере мы управляем элетродвигателем. Нагрузкой, на которой мы переключаем полярность с помощью H-моста, является обмотка этого двигателя, то есть нагрузка у нас индуктивная. А у индуктивности есть одна интересная особенность — ток через неё не может измениться скачком.
Индуктивность работате как маховик — когда мы его раскручиваем — он запасает энергию (и мешает раскручиванию), а когда мы его отпускаем — он продолжает крутиться (расходуя
запасённую энергию). Так и катушка, — когда к ней прикладывают внешнее напряжение — через неё начинает течь ток, но он не резко вырастает, как через резистор, а постепенно, поскольку часть передаваемой источником питания энергии не расходуется на разгон электронов, а запасается катушкой в магнитном поле. Когда мы это внешнее напряжение убираем, — ток через катушку тоже не спадает мгновенно, а продолжает течь, уменьшаясь постепенно, только теперь уже на поддержание этого тока расходуется запасённая ранее в магнитном поле энергия.
Так вот. Посмотрим ещё раз наш самый первый рисунок (вот он, справа). Допустим у нас были замкнуты ключи К1 и К4. Когда мы эти ключи размыкаем, у нас через обмотку продолжает течь ток, то есть заряды продолжают перемещаться от точки h2 к точке h3 (за счёт энергии, накопленной обмоткой в магнитном поле). В результате этого перемещения зарядов, потенциал точки h2 падает, а потенциал точки h3 вырастает. Возникновение разности потенциалов между точками h2 и h3 при отключении катушки от внешнего источника питания известно также как ЭДС самоиндукции. За то время, пока мы открываем ключи K3 и К2, потенциал точки h2 может упасть значительно ниже нуля, также как и потенциал точки h3 может вырасти значительно выше потенциала шины питания. То есть наши ключи могут оказаться под угрозой пробоя высоким напряжением.
Как с этим бороться? Есть два пути.
Первый путь. Можно зашунтировать ключи диодами, как в нашем примере. Тогда при падении потенциала точки h2 ниже уровня общего провода откроется диод D3, через который с общего провода в точку h2 потечёт ток, и дальнейшее падение потенциала этой точки прекратиться. Аналогично, при росте потенциала точки h3 выше потенциала шины питания откроется диод D2, через который потечёт ток из точки h3 на шину питания, что опять же предотвратит дальнейший рост потенциала точки h3.
Второй путь основан на том факте, что при перекачивании зарядов из одной точки схемы в другую, изменение потенциалов между этими двумя точками будет зависеть от ёмкости схемы между этими точками. Чем больше ёмкость — тем больший заряд нужно переместить из одной точки в другую для получения одной и той же разности потенциалов (подробнее читайте в статье «Как работают конденсаторы»). Исходя из этого можно ограничить рост разности потенциалов между концами обмотки двигателя (а, соответственно, и рост разности потенциалов между точками h2, h3 и шинами питания и земли), зашунтировав эту обмотку конденсатором. Это, собственно, и есть второй путь.
На этом на сегодня всё, удачи!
H-мост — это простая схема, позволяющая управлять двигателем постоянного тока, чтобы он двигался вперед или назад.
Обычно вы используете его с микроконтроллером, таким как Arduino, для управления двигателями.
Когда вы можете управлять двумя двигателями, чтобы двигаться вперед или назад — вы можете построить себе робота!
Вот концепция Н-моста:
Двигатель постоянного тока вращается либо назад, либо вперед, в зависимости от того, как вы соедините плюс и минус.
Если вы замкнете переключатели 1 и 4, у вас будет плюс, подключенный к левой стороне двигателя, и минус к другой стороне. И двигатель начнет вращаться в одном направлении.
Если вы вместо этого замкнете переключатели 2 и 3, у вас будет плюс, подключенный к правой стороне, а минус к левой стороне. А мотор крутится в обратную сторону.
Вы можете построить Н-мост с четырьмя транзисторами.
Если вы не знаете, как работает транзистор, я рекомендую вам сначала прочитать статью «Как работают транзисторы». Оттуда вы узнаете, что транзистор может работать как переключатель, который вы можете открывать и закрывать с помощью напряжения на базе.
Поскольку транзистор может быть переключателем, вы сможете заставить двигатель вращаться в любом направлении, включая и выключая четыре транзистора в приведенной выше схеме.
Обычно вы управляете транзисторами с микроконтроллера, такого как Arduino.
Выбранные вами транзисторы должны:
Самое главное, чтобы все транзисторы выдерживали ток, достаточный для двигателя. В противном случае он сгорит.
Например, если двигатель потребляет 1 ампер тока, вам нужны транзисторы, способные выдерживать минимум 1 ампер.
Далее вы видите, что я выбрал транзисторы PNP сверху и транзисторы NPN снизу.
Транзистор включается или выключается за счет разницы напряжений между базой и эмиттером.
С PNP-транзисторами в верхней части можно использовать более высокое напряжение для VCC, чем для базы транзисторов.
Например, вы можете использовать выходы 3,3 В для микроконтроллера и 9 В для Vcc.
Это не сработает, если у вас есть NPN наверху, так как эмиттер будет на 0,7 В ниже, чем база. Потому что это превращается в 3,3 В — 0,7 В = 2,6 В на положительной стороне двигателя, независимо от того, какое напряжение VCC вы выберете.
При сборке робота в Колумбии я попытался собрать эту схему с использованием транзисторов TIP120 и TIP127.
Это не сработало.
Транзисторы TIP12x дают падение 2 В от эмиттера к коллектору.
В такой конфигурации вы получите потерю 4 В на транзисторах. Я пытался подключить это к Arduino, используя его питание 5 В, но потерпел неудачу, потому что для двигателя оставался только 1 В!
Вот хорошая статья/разглагольствование на тему: Хватит использовать антикварные детали!
По сути, это говорит о том, что транзисторы TIP — это антиквариат, который вы не должны больше использовать именно из-за этого огромного падения напряжения.
Выбирайте транзисторы с малым падением напряжения. Например, транзисторы BD135/BD136 или MOSFET.
Побочным эффектом работы двигателя является то, что двигатель также вырабатывает электроэнергию. Когда вы отключаете транзисторы, чтобы остановить двигатель, эта энергия должна каким-то образом высвобождаться.
Если вы добавите диоды в обратном направлении для транзисторов, вы зададите путь для тока, по которому высвобождается эта энергия. Без них вы рискуете, что напряжение поднимется и повредит ваши транзисторы.
Подробнее об этом — и о том, что нужно иметь в виду, если вы хотите использовать ШИМ-сигнал для управления скоростью двигателя, — в этой статье.
Резисторы, входящие в каждую базу, предназначены для уменьшения тока каждого транзистора. Не знаете, как рассчитать? Если вы используете микроконтроллер для управления ими, начните с 1k и отрегулируйте, если это не сработает.
Вы когда-нибудь строили Н-мост? Или у вас есть вопросы по H-мосту? Дайте мне знать в поле для комментариев ниже:
В этом эксперименте мы будем управлять двигателем с помощью расширения ШИМ. Для этого мы будем использовать чип H-Bridge и отправлять ему соответствующие управляющие сигналы с расширением PWM, после чего H-Bridge позаботится о запуске двигателя. Попутно мы узнаем, как именно работают H-мосты, и создадим больше классов, использующих преимущества тех, которые мы создали ранее. Чтобы расширить это, мы подключим три переключателя и запрограммируем Omega для управления скоростью и направлением двигателя в зависимости от их положения.
Если вам нужно напомнить, как работает ШИМ (или широтно-импульсная модуляция), вы можете найти объяснение в первом эксперименте с диммированием светодиодов.
Самый простой из всех двигателей, двигатель постоянного тока вращается, когда на него подается постоянное напряжение. Такой двигатель можно найти в дронах, электроинструментах и роботах. Двигатель постоянного тока может изменять скорость и направление в зависимости от того, сколько энергии подается на него и в каком направлении.
Двигатель постоянного тока использует магнитное поле, создаваемое электромагнитом, для вращения якоря двигателя. Электромагнит активируется подачей напряжения, поэтому, когда питание включено, магнитное поле, которое он генерирует, заставит якорь (катушка провода) генерировать собственное магнитное поле, эти поля отталкивают друг друга и заставляют якорь вращаться.
Чтобы двигатель вращался в другую сторону, нам нужно изменить приложенное напряжение, то есть поток тока через двигатель будет противоположным. К сожалению, переключение направления тока с контроллера, такого как Omega, затруднено. Процессоры используют низкий ток и напряжение, плюс они обычно отсоединяются от двигателя, чтобы индуктивная обратная связь не нарушала их работу.
Если бы только было какое-то устройство, которое могло бы помочь нам контролировать мощность, которую мы подаем на наши двигатели постоянного тока…
Обратите внимание, что подача тока на обе клеммы может привести к повреждению двигателя.
Н-мост — это схема, позволяющая подавать напряжение на нагрузку в любом направлении. Электрический ток течет от источника к земле, и многие компоненты должны быть ориентированы в соответствии с направлением тока, чтобы они работали должным образом. H-мост — это схема, построенная для изменения направления напряжения и, следовательно, тока, протекающего к нагрузке.
В электрических терминах нагрузка — это любой элемент цепи, который потребляет электроэнергию для выполнения каких-либо действий — нагрева, включения, освещения и т. д.
H-мост состоит из четырех коммутаторов: двух последовательно и двух параллельно, при этом нагрузка размещается между коммутаторами. В этой конфигурации схема принимает форму буквы «Н».
Чтобы изменить направление подаваемого напряжения, H-мост управляет переключателями, подающими питание на нагрузку ( С1
). Глядя на схему, если мы замкнем S1
и S4
, оставив остальные открытыми, напряжение будет прикладываться слева направо к двигателю. Если вместо этого замкнуты S2
и S3
, а другие разомкнуты, напряжение будет подаваться справа налево.
Эта конфигурация может вызвать короткое замыкание, поэтому большинство H-мостов не позволяют напрямую управлять этими коммутаторами.
Несколько типичных применений схем H-Bridge: * Создайте переменный ток (переменный ток) из источника постоянного тока, используя сигнал ШИМ для управления H-мостом. Это процесс, известный как инверсия мощности. * Обеспечьте возможность обратного тока через двигатель постоянного тока, позволяя вращение в любом направлении.
Кроме того, Н-мосты позволяют питать нагрузки независимо от управляющих сигналов, обеспечивая изоляцию цепей.
ШИМ-сигнал приводит в действие двигатель за счет очень быстрого включения и выключения источника питания. Обычно это можно сделать, отправив сигнал ШИМ на транзистор, и транзистор переключит питание. Изменяя ширину импульса ШИМ-сигнала, можно управлять скоростью двигателя. H-мост может заменить транзистор и добавить функциональность, позволяя легко изменять направление тока. Мы по-прежнему посылаем пульсирующий сигнал на H-мост, чтобы контролировать скорость, за исключением того, что теперь мы можем переключать направление тока, меняя переключатели, которые разомкнуты.
В нашей схеме мы будем использовать микросхему интегральной схемы Н-моста ( IC ), поэтому нам не нужно самостоятельно подключать внутренние компоненты, а также для предотвращения коротких замыканий, которые могли бы возникнуть, если бы мы напрямую управляли этими переключателями.
Если вы хотите начать строить прямо сейчас, перейдите к следующему разделу. Если вы хотите узнать, как сигналы из нашего кода будут управлять двигателем, читайте дальше!
Чип SN754410 содержит два H-моста, что дает нам четыре выхода, что позволяет нам управлять двумя двигателями постоянного тока. На данный момент мы будем управлять только одним двигателем.
Таким образом, вместо переключателей 1/2/3/4 мы будем переключать 1A
и 2A
(как показано в техническом описании). В этом уроке мы будем использовать один из двух H-мостов для управления мощностью, подаваемой на два входа вашего двигателя постоянного тока. В частности, пара входов и выходов ( 1A
, 2A
и 1Y
, 2Y
) на левой стороне микросхемы.
На микросхеме 1A
управляет полярностью 1Y
, то же самое касается 2A
и 2Y
. На очень высоком уровне этот чип H-моста изменяет выходное напряжение (на контакты, помеченные Y
) в соответствии с входным напряжением, подаваемым на контакты, помеченные A
. Например, отправка «высокого» на 1A
отправит то же самое на 1Y
. Разница заключается в том, что сигнал, отправляемый на контакты Y
, использует напряжение, подаваемое на контакт 8
, независимо от входного напряжения.
Напряжение действует подобно водопаду — оно всегда создает ток, вытекающий из напряжения источник (вверху) к заземлению (внизу). Вы можете представить источник как HIGH
, а землю как LOW
. Таким образом, если вы подключите двигатель к 1Y
и 2Y
, он будет двигаться только в том случае, если они посылают различных сигналов .
Штифт 1,2EN
просто включает или выключает Н-мост. Если 1,2EN
видит «высокий», то все, что мы рассмотрели выше, происходит в штатном режиме, если выключен, то на выходы ничего посылаться не будет, несмотря ни на что 1A
и 2A
настроены на.
Благодаря такой реализации Н-моста — с двумя переключателями вместо четырех независимых — микросхема удобно обрабатывает ситуации короткого замыкания и упрощает работу Н-моста.
Эта схема соединяет Omega с двигателем постоянного тока. Сначала Omega будет подключен к расширению PWM, расширение PWM будет отправлять сигналы на H-мост, который будет подавать питание на двигатель постоянного тока в соответствии с сигналами. ШИМ будет сигнализировать, как быстро двигатель должен вращаться, а Н-мост действует как переключатель, включая или выключая напряжение питания в соответствии с сигналом ШИМ.
На рисунках вы видите более короткие провода, которые мы использовали вместо перемычек, чтобы дать вам лучшее представление о том, что происходит. Чтобы было легче увидеть вращение двигателя, мы обмотали ось двигателя скотчем.
Примечание : Как видно выше, чип имеет грубое зеркальное отображение. Верхний правый и нижний левый контакты — это питание для выходов ( контакт 8
) и микросхемы ( контакт 16
) соответственно. Разница между двумя выводами питания заключается в том, что напряжение, подаваемое на выходы, может достигать 36 В, а напряжение, подаваемое на микросхему, рекомендуется в пределах 2–5 В. Если вы хотите запитать большой двигатель, вам следует запитать двигатель от внешнего источника через контакт 8
и подать около 3В на контакт 16
.
Вот схема, к которой можно обратиться, если что-то станет беспокойным:
Вам может понадобиться пара резиновых лент и блок, чтобы удерживать двигатель постоянного тока во время его работы. В целом, вот что вы будете использовать для создания схемы:
При работе с микросхемами установка направляющих макетной платы может быть очень полезна для уменьшения беспорядка. Для этого эксперимента мы сначала сделаем это, чтобы уменьшить количество необходимых проводов.
-
) шины с обеих сторон платы вместе на одном конце (обычно конец, удаленный от большей части проводки) с помощью перемычки M-M, мы назовем ее ЗЕМЛЯ
рейка. +
) шинами, в этом эксперименте мы назовем эти шины Vcc
.Теперь давайте настроим нашу схему:
4
, 5
, 12
и 13
на H-мосте являются контактами заземления, поэтому давайте подключим их к GND
на соответствующих сторонах с помощью четырех перемычек M-M. Мы использовали короткие провода, чтобы вы могли видеть, что происходит. 1Y
Н-моста (ряд 7 на нашей макетной плате). 2Y
Н-моста (ряд 10 на нашей плате). GND
, а крайний правый ряд каждого коммутатора — с шиной Vcc
.Теперь, когда схема Н-моста готова, давайте подключим все это к вашей Omega, чтобы она могла управлять двигателем:
GND
с шиной GND
. контакт на канале S0
на расширении ШИМ с одной перемычкой MF. 1,2EN
на ИС (ряд 5 на нашей плате) к шине Vcc
. 1A
, или ряд 6 на нашей плате, к каналу S0
. 2A
, или ряд 11, в канал S1
. Vcc
канала S0
расширения PWM.Вот как это выглядит, когда все подключено:
Возможно, вы заметили, что мы подключили все компоненты макетной платы и соединения GPIO сначала до подключение основной линии электропередач. Мы делаем это, чтобы свести к минимуму риск ошибок при подключении проводки и питания цепи, которая потенциально может повредить компоненты или Omega. Это хорошая практика, и мы будем строить схемы таким образом на протяжении всех этих экспериментов.
Если вы действительно хотите убедиться, что ваши компоненты безопасны перед проведением эксперимента, вы можете оставить Omega ВЫКЛЮЧЕННЫМ перед подключением питания к цепи. Как только все будет подключено, вы можете снова включить Omega.
Есть причина, по которой мы используем контакты
GND
иVcc
на плате PWM Expansion вместо контактов заголовка от док-станции. Если он подключен к штырьковым контактам, двигатель будет подавать напряжение обратной связи на док-станцию расширения. Это может привести к зацикливанию загрузки или другому непредсказуемому поведению омеги. На контактахVcc
/GND
расширения PWM установлены диоды для предотвращения этого.
Давайте добавим определение класса для двигателя постоянного тока, управляемого H-мостом, в файл motors.py
, который мы создали в предыдущем эксперименте. Это определение класса будет специально управлять двигателем постоянного тока, подключенным к Н-мосту. Он основан на абстракциях класса OmegaPwm
и заботится о деталях управления двигателем.
Откройте motors.py
из эксперимента Dimming LEDs и добавьте следующее:
H_BRIDGE_MOTOR_FORWARD = 0 H_BRIDGE_MOTOR_REVERSE = 1 класс hBridgeMotor: """Класс, что два цифровых сигнала и ШИМ-сигнал для управления H-мостом""" def __init__(self, pwmChannel, fwdChannel, revChannel): # обратите внимание на каналы self.pwmChannel = pwmChannel self.fwdChannel = fwdChannel self.revChannel = revChannel # настроить объекты self.pwmDriver = OmegaPwm(self.pwmChannel) self.pwmDriver.setDutyCycle(0) self.fwdDriver = OmegaPwm(self.fwdChannel) self.fwdDriver.setDutyCycle(0) self.revDriver = OmegaPwm(self.revChannel) self.revDriver.setDutyCycle(0) # устанавливаем ограничения self.minDuty = 0 self.maxDuty = 100 def setupMinDuty (я, обязанность): """Установите минимально допустимый рабочий цикл для ШИМ""" self.minDuty = обязанность def setupMaxDuty (я, обязанность): """Установите максимально допустимый рабочий цикл для ШИМ""" self. maxDuty = обязанность сброс защиты (сам): """Установите ШИМ на 0%, отключите оба элемента управления H-Bridge""" рет = self.pwmDriver.setDutyCycle (0) рет |= self.fwdDriver.setDutyCycle(0) рет |= self.revDriver.setDutyCycle(0) вернуться обратно def spin(я, направление, обязанность): """Установите ШИМ на указанную обязанность и в указанном направлении""" возврат = 0 #0 - вперед, 1 - назад если (направление == H_BRIDGE_MOTOR_FORWARD): self.revDriver.setDutyCycle(0) self.fwdDriver.setDutyCycle(100) elif (направление == H_BRIDGE_MOTOR_REVERSE): self.fwdDriver.setDutyCycle(0) self.revDriver.setDutyCycle(100) еще: возврат = -1 если (возврат == 0): # сверяемся с минимальным и максимальным pwm если долг < self.minDuty: долг = self.minDuty elif duty > self.maxDuty: долг = self. maxDuty # запрограммировать рабочий цикл ret = self.pwmDriver.setDutyCycle(долг) вернуться обратно def spinForward(я, долг): ret = self.spin (H_BRIDGE_MOTOR_FORWARD, обязанность) вернуться обратно def spinReverse (я, обязанность): ret = self.spin (H_BRIDGE_MOTOR_REVERSE, обязанность) возврат рет
Далее давайте напишем код для эксперимента. Этот код заставит мотор делать что-то, используя класс hBridgeMotor, который мы создали выше. Скрипт попросит вас ввести несколько чисел и заведет мотор на основе вашего ввода!
Создайте файл с именем MAK03-hBridgeExperiment.py
и вставьте в него следующий код:
from motors import hBridgeMotor импорт лукаGpio время импорта # настроить каналы расширения PWM, подключенные к H-Bridge IC H_BRIDGE_1A_CHANNEL = 0 H_BRIDGE_2A_CHANNEL = 1 H_BRIDGE_12EN_CHANNEL = 2 # создаем объекты gpio для наших входов переключателей направлениеGPIO = onionGpio.OnionGpio(0) скорость1GPIO = onionGpio. OnionGpio(1) скорость2GPIO = onionGpio.OnionGpio(2) # создать словарь функций для проверки ввода пользователя # это, по сути, таблица диспетчеризации для сопоставления вызовов функций с разными именами моторкоманды = { '000': (лямбда-двигатель: motor.reset()), '001': (лямбда-двигатель: motor.spinForward(50)), '010': (лямбда-двигатель: motor.spinForward(60)), '011': (лямбда-двигатель: motor.spinForward(70)), '100': (лямбда-двигатель: motor.reset()), '101': (лямбда-двигатель: motor.spinReverse(50)), '110': (лямбда-двигатель: motor.spinReverse(60)), '111': (лямбда-двигатель: motor.spinReverse(70)), } деф основной(): # создать экземпляр моторного объекта двигатель = hBridgeMotor (H_BRIDGE_12EN_CHANNEL, H_BRIDGE_1A_CHANNEL, H_BRIDGE_2A_CHANNEL) команда = '000'; # цикл навсегда пока (правда): # немного спит, чтобы разместить переключатели время сна (0,5) # получает сигналы, проходящие через коммутаторы commandNew = directionGPIO. getValue()[0] commandNew = commandNew + speed1GPIO.getValue()[0] commandNew = commandNew + speed2GPIO.getValue()[0] # переводит команду в формат motorCommands commandNew.replace('\n', '') # проверить ввод пользователя по словарю, запустить соответствующую функцию # но только если команда изменилась, нет необходимости продолжать вызывать ту же команду если (команда != командаНовая): команда = командаНовый motorCommands[команда](двигатель) если __name__ == '__main__': главная()
При запуске скрипт запускает ШИМ-генератор, а затем устанавливает выход в активное состояние (канал 0 – 100%-ная загрузка). Затем скрипт запросит у вас набор из 3-х цифр, первая задает направление мотора, следующие две цифры задают скорость. Программа будет повторно запрашивать ввод и соответствующим образом регулировать скорость и направление.
Первая цифра | 0 | Двигатель вращается по часовой стрелке |
1 | Двигатель вращается против часовой стрелки | |
Последние две цифры | 00 | от |
01 | 50% скорости | |
10 | Скорость 60% | |
11 | 70% скорости |
Вот он в действии:
Как вы, наверное, уже видели, здесь используется бесконечный цикл, и вы можете прервать его, нажав Ctrl-C
.
Примечание : Мы рекомендуем установить двигатель на 000
перед разрывом цепи, чтобы не повредить двигатель. Напоминаем, что вы можете просто вызвать pwm-exp -s
, чтобы остановить мотор в терминале или по ssh.
В этом эксперименте мы объединили знания из предыдущих экспериментов для управления двигателем постоянного тока с помощью Python. Теперь мы получаем пользовательский ввод в интерактивном режиме, что позволяет нам изменять вывод в режиме реального времени. Кроме того, мы использовали 93 = 8 различных состояний системы переключения. Это означает, что нам действительно нужно учитывать только 8 отдельных случаев ввода.
К сожалению, это не всегда так просто, и хорошей практикой является предположение, что можно получить все виды различных входных данных. Здесь большая часть проверки ошибок происходит прямо в начале взаимодействия, ограничивая количество доступных входных состояний — у нас есть только три переключателя. Если бы мы позволили пользователям вводить произвольные команды, нам пришлось бы выполнять гораздо больше проверок.
Вы можете заметить, что ввод, вводимый пользователем в основном цикле, всегда сверяется с переменной motorCommands — эта переменная хранит набор известных значений для проверки. В нашем случае таблица содержит действительный ввод переключателя, совпадающий с его соответствующим выводом, также известный как пара ключ-значение, и сценарий отправляет вывод на ШИМ-контроллер, если ввод, полученный от пользователя, соответствует любому значению в таблице.
Проверяя входные данные по таблице поиска перед отправкой команд, мы можем гарантировать отсутствие ошибочных команд. Соедините это с надлежащей калибровкой, и мы сможем значительно снизить риск удаленного управления оборудованием.
Для работы двигателей постоянного тока требуется приложенное напряжение, а использование ШИМ означает, что двигатель фактически «отвечает» серией импульсов.