Управление биполярным шаговым двигателем без использования драйвера

Как-то раз мне захотелось поэксперементировать с шаговыми двигателями. С униполярным двигателем всё очень просто, достаточно полумоста на очень бюджетной микросхеме ULN2003 или ULN2803. А вот с биполярным двигателем всё гораздо сложнее. Он имеет минимум две обмотки, на каждом конце которых полярность питания должна меняться на противоположную. Кто-то скажет «зачем изобретать велосипед? Купи драйвер на L239 и радуйся жизни», может быть это и правильно, но мы же не ищем лёгких путей, да и что-нибудь спаять руки чешутся (а драйверы были куплены, просто они ещё ехали из Китая). Немного покопавшись в интернете, я заинтересовался такой штукой, как H-мост.

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

Так как у биполярного двигателя две обмотки, то нам понадобится два H-моста. Тогда для управления двумя мостами у нас получается восемь управляющих проводов (на затворы каждого транзистора). Это очень неудобно, потому что, во первых, нужно много проводов цеплять к управляющему микроконтроллеру, а во вторых, если подать управляющий сигнал одновременно на верхний и на нижний транзисторы одного плеча моста, то мы получим короткое замыкание и просто сожжём два транзистора. Потому я решил сделать одну хитрость: затворы нижних транзисторов каждого плеча (они у нас коммутируют минус к обмотке мотора) необходимо подключить через инвертор (в данном случае логический элемент «не»), а затворы верхних транзисторов — на вход того же инвертора. Таким образом мы получаем уже четыре управляющих сигнала (A, B, C ,D).

В итоге, если мы подаём на любую линию управления логическую единицу (ТТЛ), то у нас откроется верхний транзистор плеча, а на затвор нижнего пойдёт логический нуль и он будет закрыт. А если подать на ту же линию логический нуль , то верхний транзистор будет закрыт, а на затвор нижнего будет подана логическая единица (с выхода инвертора), и конец обмотки будет подключён к минусу. С теорией покончено.

Теперь подключаем нашу схему к arduino (или просто микроконтроллеру): линии A,B,C,D — к любому свободному пину, так же же подключаем минус и плюс 5 вольт от платы контроллера. Сами мосты запитываем от отдельного блока питания (у меня был не стабилизированный на 15 вольт). 

Осталось написать программу управления

Будем управлять двигателем в полушаговом режиме (8 шажков). В моей программе написаны три функции: forward — будет крутить двигатель в одну сторону, backward — в обратную, stope — остановка. Функции запускаются с помощью терминала путём отправки символов (f,b и s соответственно). Переменная dl служит для управления скоростью вращения двигателя. Так как программа выполняется по кругу, то двигатель вращается постоянно. По аналогии можно добавить подпрограммы для одного шага или нужного количества шагов.

Внешний вид готового устройства:

Как видно из фотографии, мосты собраны из разных транзисторов (в верхних плечах пары ceb703al и 76129s выпаянные из старых материнок, в нижних плечах irf640  и irf610), потому что восемь одинаковых у меня просто не было. Тем не менее схема вполне работоспособна. Так же на фото заметна пара «соплей» — перемычек — как всегда ошибки при рисовании платы.

И в конце статьи — демонстрационное видео работы устройства.


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

IC1
Микросхемак1533лн11
74als04R1-R8
Резистор100Ом-1кОм1
любой мощностиT1-T8
ТранзисторIRF7401
IRF610, IRF630, IRF640, IRF730,Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.