Драйвер биполярных шаговых двигателей
Ниже представлена принципиальная схема драйвера биполярных шаговых двигателей с двумя L298 (усиленный) 48В, 4А.
Данный драйвер может использоваться для управления практически любых 2-фазных биполярных гибридных шаговиков с 4 выводами и может обеспечить ток работы до 4 ампер при максимальном напряжении 35В.
Драйвер поддерживает режимы работы full step и half step которые можно выбрать с помощю джапмпера H/F. Джампер CTRL предназначен для установки типа двигателя униполярный/биполярный, в позиции биполярного ШИМ работает на выходы INHIBIT в противном случае на выходы ABCD. Питание драйвера 12-35В для двигателя и 15-24В для схемы, диоды D1-D8 быстрые на 3 ампера, желательно Шоттки. Цепочкой R9 и C15 можно подбирать частоту ШИМ, при указанных номиналах она выше диапазона слышимых звуков, так что движок не жужжит. Потенциометром RV1 устанавливается рабочий ток двигателя.
Если будете гонять на максимальной мощности , то нужно обязательно посадить его на хороший радиатор и поставить кулер, также не забудьте намазать термопастой.
Схема и плата нарисованы в программе Proteus 7.7.
Схема протестированна и показала полную работоспособность драйвера
Используемые радиоэлементы:
Драйвер биполярного шагового двигателя
Представленная система предназначена для использования в устройствах ЧПУ, поэтому тактовый сигнал, сигнал направления вращения и включение системы должны поступать от внешних устройств управления.
Принципиальная схема контроллера показана на рисунке.
Он состоит из двух взаимодействующих микросхем L297 и L298 от STMicroelectronics. Микросхема L298 — это силовой каскад, содержащий в своей структуре два H-моста, а L297 — это контроллер, генерирующий сигналы, управляющие микросхемой L298.
Он генерирует сигналы ШИМ в соответствии с установленным током катушки двигателя. Контроллер позволяет управлять двигателем с максимальным фазным током 2А. Он может управлять 4-проводными биполярными, 6-проводными однополюсными и 8-проводными универсальными двигателями с делением 1/1 и 1/2 шага (микрошаг), установленным с помощью перемычки H/F
Разделив шаг основного двигателя на два, удваивается разрешение по скорости двигателя. Тем не менее, следует помнить, что, установив деление шага на 2, необходимо получить в два раза больше управляющих импульсов для полного вращения оси двигателя. Максимальная скорость вращения ротора также уменьшается, что обусловлено частотными характеристиками шагового двигателя.
Контроллер требует только три управляющих сигнала, подключенных к разъему JP4.
• CLK — тактовый сигнал, частота которого определяет скорость и количество шагов,
• ENABLE — включить уровень мощности контроллера.
На разъем JP4 также должно подаваться напряжение питания +5 В для цифровых цепей. Источник питания для схемы L298 должен питаться от отдельного блока питания через качественное винтовое соединение. Это напряжение не должно превышать 40В, а коэффициент полезного действия зависит от тока, потребляемого двигателем.
Рекомендуется, чтобы напряжение, подающее питание на логическую часть, появлялось до появления питания двигателя. Два контроллера могут быть подключены параллельно, увеличивая фазный ток. На рисунке показано, как подключить 4-проводный биполярный двигатель, и 6- и 8-проводные. Направление вращения двигателя может быть легко изменено путем замены одной пары проводов, например, AB для BA.
Печатная плата сборки устройства показана на рисунке.
Плата контроллера выполнена на двухстороннем стеклотекстолите. Чтобы увеличить сечение токовых дорожек, надо припаять к ним медный провод. Примечание, корпус микросхемы L298 внутренне соединен с заземлением схемы! Наконец, подключите двигатель в соответствии с рисунком и настройте ток обмотки с помощью потенциометра PR1.
Этот ток лучше всего измерять с помощью амперметра, подключенного к цепи катушки двигателя.
Модуль управления биполярным («двухфазным») шаговым двигателем БУШД-01N.04-02
Продолжаю цикл заметок «проекты-малыши»
В данной заметке будет рассмотрена одна из возможных реализаций модуля управления биполярным («двухфазным») шаговым двигателем (ШД) на базе связки микросхем L297/1 и L298N:
По весне зашел ко мне один мой хороший товарищ. У товарища появилась идея – сделать себе сверлильно/гравировально/фрезерный станок. Он практически всё уж́е нашел – и движки, и сверла/фрезы, и даже подходящую станину для станка. Не хватало только узлов для управления ШД. Ну и, собственно, просьба товарища заключалась в следующем – сделай мне платы управления двигателями для моего будущего станка.
Поскольку движки он нашел биполярные (с четырьмя провод́ами на «выходе»), для управления ШД предполагалось использовать широко распространенную микросхему L298N (ну и L297 – в качестве контроллера). И на мой робкий вопрос («А на хера городить что-то новое, когда в Интернете навалом готовых решений по теме, а лучше вообще соорудить схему с МК») последовал не менее робкий ответ: «Хочется сделать так, как мне надо, а искать соответствующую реализацию – с ума сойдешь, да и не факт, что найдешь». Ну а поскольку товарищ действительно хороший – решил-таки пойти у него на поводу и развести плату под именно его н́ужды. В результате родилась такая вот схема:
Как видно, схема практически полностью передрана с документации (ага, документации – привет treasure, я помню твои нарекания:) ) на L297/L298. Не вижу особого смысла подробно описывать здесь принципы работы данной связки, так как этой теме посвящена далеко не одна HTML-страница (про виды ШД и принципы управления ими также есть хорошая статья (хорошая статья также приаттачена к заметке)). Однако, в общих чертах, всё-таки поясню.
Есть мнение, что микросхемы L297 и L298 были разработаны именно для работы в связке. И именно этим объясняется нехуевый такой их коммерческий успех. Данный успех косвенно подтверждается тем, что L297 и L298 до сих пор нормально продаются (инфа от пламенных тружеников радиорынка), несмотря на то, что даже убогая связка ATMega48 с кнопками, транзисторами и соответствующей логикой раза в два дешевле, чем L297+L298, а функций в мегу можно натолкать на порядок больше. Судите сами – достаточно соединить в соответствии с документацией чипы L297 и L298 – и вот драйвер для биполярного ШД готов, безо всяких прошивок. Согласитесь, это довольно лакомая тема для тех, кто с кирпичами дела не имеет, а шаговые движки крутить хочет. Да и вообще – многий софт для станков-поделок заточен именно под L297.
Суть сей связки – собираем драйвер в соответствии с документацией и получаем возможность:
— крутить биполярные движки (до 46В и 2А на фазу, что по прошлым временам весьма и весьма неплохо);
— устанавливать скорость кручения;
— устанавливать направление кручения;
— устанавливать максимальный ток обмотки ШД;
— устанавливать различные режимы вращения ШД.
Повторю, что для этого не надо никаких программаторов, чтобы прошить какой-либо МК – все функции управления наглухо встроены в L297. А чип L298 – и вовсе безмозглый, это просто драйвер, позволяющий преобразовывать слаботочные логические сигналы (0В/5В) от LM297 в сигналы/цепи управления непосредственно обмотками двигателя (46В/2А).
Как видно из стандартной схемы, по линиям A, B, C, D, INH1 и INH2 микросхема L297 управляет ШД, по линиям SENSE_1 и SENSE_2 – считывает ток обмотки двигателя. На остальные выводы L297 подаются питание и управляющие TTL-сигналы. В данной реализации задействованы следующие линии управления работы драйвером:
— CLOCK (CLK, pin 18): по этой линии передается тактовая частота вращения ротора двигателя;
— CW/CCW (DIR, pin 17): по этой линии задается направление вращения ротора ШД (условно – при лог. «1», присутствующей на данном входе, ротор ШД будет вращаться по часовой стрелке, при лог. «0» — против часовой стрелки. Условно – потому, что направление вращения еще и напрямую зависит от того, как именно подключены к L298 обмотки ШД);
— Vref (pin 15): по этой линии осуществляется управление максимальным током обмотки ШД. Если напряжение на токосчитывающих резисторах R15 и R16 превысит напряжение на входе Vref, соответствующая обмотка отключается до того момента, пока напряжение на R15/R16 не станет меньше Vref;
— HALF/FULL (H/F, pin 19): по этой линии осуществляется выбор между полношаговым и полушаговым режимами вращения ротора ШД. Если на этом входе логический нуль – выбран полношаговый режим работы, если единица – полушаговый;
— CONTROL (CTRL, pin 11): по этой линии можно выбрать группу сигналов управления ШД, которые будут промодулированы («изрезаны») сигналом от внутренних «токовых» компараторов (это которые осуществляют контроль тока обмотки). Если на данной линии логический нуль – модулируются сигналы INH1 и INH2, если единица – сигналы A, B, C, D.
Всё вышесказанное – вещи довольно стандартные, не один раз описанные, и вопросов тут вроде как не должно возникать. Однако, в приведенной схеме есть и пара «нововведений». Во-первых, сигналы тактовой частот́ы и выбора направления вращения ротора ШД подаются через оптроны, а это какая-никакая, а всё-таки гальваноразвязка. Во-вторых, в схему добавлены две оптопары для подключения концевых выключателей. То есть получается, что модуль управления двигателем вообще не связан гальванически с управляющим контроллером (не с LM297, а с, допустим, МК, который управляет L297). В-третьих, контроллер L297 питается от встроенного в модуль линейного стабилизатора на +5.0В, так что отдельной линии питания от пользователя не требует (правда, жрет он на пяти вольтах до 80мА на холостом ходу – об этом надо помнить). Ну и самое главное, с точки зрения товарища: джампер «DIVIDER» и элементы, с ним связанные. Здесь, наверное, надо остановиться поподробнее.
Если замкнуты контакты 2 и 3 джампера «DIVIDER», то схема работает в «обычном» режиме: цепочка R2+VD1 отключена и максимальный ток обмотки определяется только тем, в каком положении находится движок подстроечного резистора R5. А вот если замкнуть контакты 1 и 2 джампера «DIVIDER», тогда происходит следующее. Если на входе CLK присутствует логическая единица, то за счет диода VD1 резистор R2 оказывается отключен от R5, и максимальный ток обмотки по-прежнему определяется только подстроечным резистором. А когда на входе CLK присутствует логический нуль, вот тогда резистор R2 оказывается через диод VD1 посаженным на «массу», а это означает, что R2 шунтирует R5. Из-за этого напряжение на входе Vref уменьшается (на сколько – зависит от номиналов R2, R12 и типа диода VD1, при указанных на схеме номиналах напряжение на R5 уменьшится примерно в два раза), что влечет за собой уменьшение максимального тока обмотки. Идею эту товарищ у кого-то украл (у кого именно – не помнит), а использовать ее решил для автоматического уменьшения тока удержания обмотки в те моменты времени, когда движок не крутится.
Питание на схему подается через точки подключения 1 и 2 («плюс» и «масса» соответственно). Поскольку L297 питается от встроенного стабилизатора L7805, то диапазон напряжений питания составляет +7,5В…+30,0В. Еще раз напомню – L297 жрет неплохой ток, поэтому при напряжении питания более +12,0В на стабилизатор лучше повесить радиатор. Шаговый двигатель подключается к точкам 3-6. На плате точки 1-6 расположены таким образом, что для подачи питания и подключения ШД можно использовать обычные клеммники с шагом выводов, равным 5,0мм.
Концевые выключатели подключаются к разъему XP2 («LIMIT»). Ну а разъем XP1 («CONTROL») служит для связи модуля управления ШД и, например, микроконтроллера. Через этот разъем подается тактовая частота, сигнал выбора направления вращения ротора ШД, а также снимаются сигналы от концевых выключателей.
Под указанную схему была немедленно разведена и изготовлена печатная плата:
Как видно, плата получилась односторонняя, и разведена под дырочные элементы ([поправляет очки] под радиокомпоненты для установки и монтажа в отверстия), ибо место позволяло, а начинающим так будет проще. SMD-элемент ровно один – конденсатор C12. Помимо деталей, указанных на схеме, присутствуют также 4 проволочные перемычки J1-J4 (две по 20,32мм и две по 7,62мм). Под оптронами по идее должна быть профрезерована щель (это там, где «маска» отсутствует) для обеспечения «настоящей» гальваноразвязки. Однако, товарищ распорядился щель не делать, поскольку огромной разности потенциалов между модулем и управляющим контроллером у него заведомо не будет.
Ну и габаритные размеры платы вкупе с элементами коммутации и управления:
На сегодня всё. Желаю удачи при работе с шаговыми двигателями!
БУШД-01N.04-02.pdf – схема, плата в неизвестном масштабе и габаритные размеры модуля;
БУШД-01N.04-02_ФР.lay – плата, вариант для «шаблонщиков»;
БУШД-01N.04-02_ЛУТ.lay – плата, вариант для «утюжников».
Платы нарисованы в Sprint Layout 5.0 (бесплатная гляделка).
Управление биполярным шаговым двигателем без использования драйвера
Как-то раз мне захотелось поэксперементировать с шаговыми двигателями. С униполярным двигателем всё очень просто, достаточно полумоста на очень бюджетной микросхеме 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), так как восемь одинаковых у меня просто не было. Тем не менее схема вполне работоспособна. Так же на фото заметна пара «соплей» — перемычек — как всегда ошибки при рисовании платы.
И в конце статьи — демонстрационное видео работы устройства.