21.12.2018 14:03, автор DiEitch
В последнее время всё чаще в технике стали появляться мощные шаговые и вентильные моторы постоянного тока. Однако коллекторные моторы постоянного тока всё ещё широко применяются в силовых приводах из-за своей распространённости, простоты включения и конструкции, а также сравнительно низкой стоимости.
Но моторы постоянного тока имеют и ряд недостатков: генерация помех (на щётках при искрении в широком диапазоне радиочастот), невозможность точной установки вала в заданную позицию (кстати говоря, из коллекторного мотора с энкодером на валу можно сделать интересный ГСЧ для демонстраций), сравнительно высокие стартовые обороты (и низкий крутящий момент на этих оборотах). Все эти недостатки в какой-то мере устраняются конструкторами в сервоприводах установкой редукторов, датчиков ОС (энкодеры, сельсины, датчики Холла и др.).
Двигатели постоянного тока имеют простую и понятную схему управления: выключатель последовательно с двигателем. Но эта схема не позволяет регулировать скорость и менять направление вращения вала (для чего в устаревших схемах применялись мощные реостаты и пускатели с несколькими группами контактов). На практике же используют вместо ненадёжных переключателей и реостатов полупроводниковые приборы.
Как правило, мощные транзисторы (полевые или биполярные, а также БТИЗы) включают в разрыв массы, так проще управлять (не требуется вольтдобавка). Транзистор способен не только включать и выключать мотор, но и с помошью ШИМ (широтно-импульсной модуляции) регулировать частоту вращения. Также можно регулировать сопротивление транзистора (линейный режим), но, в силу неэкономности, не будем подробно останавливаться на этом режиме.
На рисунке выше приведена эпюра, которая наглядно объясняет принцип ШИМ. Представим, что мы подключили к транзистору генератор с некоторой частотой Fm=5/(2*Pi*Tau), где Tau=10мс. Fm - минимальная частота для нашего генератора, которая выбирается для мотора (подробнее здесь: https://electronics.stackexchange.com/questions/242293/is-there-an-ideal-pwm-frequency-for-dc-brush-motors). Наш генератор характеризуется перидом T=1/Fm на эпюре. В какой-то момент времени 0 генератор включает ключ.
Рассмотрим 3 варианта:
Также, можно получить "меандр" на выходе генератора, это когда импульс будет равен времени T/2 (тогда говорят, что Duty=50%, т.е. половина цикла). Благодаря тому, что двигатель - это довольно инерционное изделие (как лампы накаливания, нагревательные элементы и многие другие потребители электроэнергии), количество полученной за период интегральной энергии отразится на его мощности и скорости вращения (что и нужно).
ШИМ - это прекрасный способ отказаться от линейных режимов работы ключей (при которых теряется впустую много энергии), уменьшить их нагрев (ведь большая часть "потерянной энергии" выделяется на ключах в виде тепла, а, значит, можно взять более слабые ключи и уменьшить габариты контроллера) и увеличить КПД привода.
Всё вышеописанное прекрасно работает, когда мотор нужно вращать только в одну сторону. Но, что делать, когда нужно использовать реверс? Существует так называемое включение нагрузки в диагональ моста.
На рисунке изображены четыре мощных n-канальных полевых транзистора с индуцированным каналом (HEXFET, типа IRF640). Если к клеммам "внутри" моста подключить двигатель постоянного тока, то при соответствующих сигналах на затворах, можно заставить его вращаться в разные стороны с разной скоростью. Казалось бы, что ещё нужно. Но в реальности такая схема будет работать лишь при малых напряжениях. Проблема кроется в "верхних" ключах. Напряжение, нужное для открывания "полевика" 4-8В относительно истока (тот вывод, что к идёт корпусу). Для открывания "нижнего" ключа потребуется напряжение всего 4-8В, а вот для открывания верхнего - оно будет 4-8В+напряжение на нагрузке (т.е. почти то же напряжение, от которого питается схема). Если питаем схему от 5 вольт, для отпирания верхнего ключа потребуется 9В минимум. Нужна "вольтдобавка". Для решения этих проблем и придумали микросхемы драйвера "верхнего ключа" или комбинированные микросхемы драйвера полумоста ("верхнего" и "нижнего" ключа в одном корпусе), например, IR2106 https://www.infineon.com/dgdl/ir2106.pdf?fileId=5546d462533600a4015355c7cfc51673.
Микросхема решает все проблемы с ключами, но их для моста потребуется две, и ещё обвязка. Можно ли упростить схему и отказаться от драйверов? Да. Можно сделать комплиментарный мост, когда нижние транзисторы N-канальные (или биполярные NPN), а верхние P-канальные (или биполярные PNP).
В таком случае "нижние" ключи отпираются как обычно, а "верхние" отрицательным относительно истока P-канального транзистора (т.е. для открытия достаточно замкнуть затвор на корпус). Кроме того - затворы верхнего и нижнего транзисторов можно объединить (так делается во многих КМОП-микросхемах) и получить мощный инвертор.
Теперь у нас есть мост и два управляющих входа. Здесь https://www.petervis.com/dictionary-of-digital-terms/h-bridge-driver-for-two-phase-bipolar-stepper-motor/h-bridge-driver-for-two-phase-bipolar-stepper-motor.gif красивая анимированная картинка работы комплиментарного моста.
Соответствующими комбинациями сигналов можно получить любой режим работы мотора. Для этого многие схемотехники добавляют логические элементы, дополнительные транзисторы и даже оптроны. Впрочем, для питания мотора, отличного от питания микроконтроллера (теперь мы плавно переходим к сугубо цифровой части повествования), всё равно необходимо использовать преобразователь уровней (шифтер). Забегая вперёд, скажу, что я в своей схеме использовал 7406 (6 инверторов с ОК) в качестве шифтера, но для простоты можно обойтись и двумя транзисторами. Я не буду приводить здесь схему, в интернете огромное количество наработок.
Чем же хороша немного устаревшая, но глубоко любимая начинающими и ардуинщиками ATMega8 в нашем случае? Дело в том, что этот контроллер (и другой, подобный ему в работе таймера) ещё больше упростит "любителям включения моторов" жизнь. Два управляющих вывода нашего моста подключаем (через вышеупомянутый шифтер) прямо к двум выводам Timer1: OC1A и OC1B. Таймер1 настраиваем в режим ШИМ, устанавливаем нужную частоту ШИМ (я брал изначально 2кГц, но по результатам эксперимента снизил до 250Гц). Если вы используете среду CodevisionAVR, то настройте всё во вкладках проекта, если нет (процедура приведена для частоты кварца 8МГц):
Я здесь не говорю о том, что Timer1 16-битный в ATMega8, и можно сделать более точный ШИМ (хотя для мотора вполне подойдёт и 8-битный режим), предлагаю поправить данный код и сделать это заинтересованным людям в качестве саморазвития. И, напоследок, не забывайте, что ножки порта OC1A и OC1B надо преварительно настроить соответствующим образом.
Код позволяет обслуживать как прямой, так и инверсный ШИМ сигнал.