АВТОНОМНЫЙ КОНТРОЛЛЕР БИПОЛЯРНОГО ШАГОВОГО ДВИГАТЕЛЯ.
Для проверки и автономного использования шаговых двигателей был разработан
автономный контроллер униполярных шаговых двигателей,
однако он может работать далеко не со всеми двигателями, а только с теми,
что имеют средние выводы обмоток, 5 ,6 и 8 выводные двигатели.
Для запуска 4 выводные двигателей по схеме биполярного включения был разработан
новый контроллер . Он позволяет запускать 4, 6 и 8 выводные двигатели с большим КПД.
Фотография собранного контролера. Транзисторы отогнуты в разные стороны для крепления двух раздельных пластинчатых радиаторов.
Фотография со стороны проводников
Схема собрана на микроконтроллере PIC12F629 и дискретных элементах в драйвере ШД. Монтаж выполнен частично с использованием smd элементов. Выходные транзисторы Дарлингтона уже содержат диоды для защиты от индуктивной составляющей обмоток ШД.
При использованных деталях допускается напряжение питания ШД до 40 вольт и током обмотки до 5 ампер (паспортно). Есть прошивки для работы в полушаговом, шаговом однофазном и шаговом двухфазном режимах.
Управление биполярным шаговым двигателем. Часть 1. Теория. Схема с контроллером PIC12F629 и драйвером LB1838
Шаговые двигатели интересны тем, что позволяют повернуть вал на определённый угол. Соответственно, с их помощью можно повернуть вал и на определённое число оборотов, потому что N оборотов — это тоже определённый угол, равный 360*N, и, в том числе, на нецелое число оборотов, например на 0.75 оборота, 2.5 оборота, на 3.7 оборота и т.д. Этими возможностями шаговых двигателей определяется и область их применения. В основном они используются для позиционирования различных устройств: считывающих головок в дисководах, печатающих головок в принтерах и плоттерах и т.д.
Естественно такие возможности не могли обойти стороной и радиолюбители. Они с успехом используют шаговики в конструкциях самодельных роботов, самодельных станков с ЧПУ и т.д. Ниже описаны результаты моих опытов с шаговым двигателем, надеюсь, что кому-то это может оказаться полезным.
Итак, что нам понадобится для экспериментов. Во-первых, шаговый двигатель. Я брал 5-ти вольтовый китайский биполярный шаговик с загадочным названием, выдранный из старого 3,5″ дисковода, аналог M20SP-GW15. Во-вторых, поскольку обмотки двигателя потребляют значительный ток (в данном случае до 300 мА), то вполне понятно, что подключить шаговик к контроллеру напрямую не удастся, нужен драйвер.
В качестве драйвера для биполярных шаговых двигателей обычно используют схему так называемого H-моста или специальную микросхему (в которой всё равно встроен H-мост). Можно конечно ваять самому, но я взял готовую микруху (LB1838) из того же старого дисковода. Собственно, кроме всего вышеописанного, для наших экспериментов также понадобятся: PIC-контроллер (был взят PIC12F629, как самый дешёвый) и пара кнопок.
Перед тем, как перейти непосредственно к схеме, давайте немного разберёмся с теорией.
Биполярный шаговый двигатель имеет две обмотки и, соответственно, подключается по четырём проводам. Найти концы обмоток можно простой прозвонкой — концы проводов, относящиеся к одной обмотке, будут между собой звониться, а концы, относящиеся к разным обмоткам, — нет. Концы первой обмотки обозначим буквами «a», «b», а концы второй обмотки буквами «c», «d».
На рассматриваемом экземпляре есть цифровая маркировка контактов возле мотора и цветовая маркировка проводов (бог его знает, может это тоже какой-то стандарт): 1 — красный, 2 — голубой — первая обмотка; 3 — жёлтый, 4 — белый — вторая обмотка.
Для того, чтобы биполярный шаговый двигатель вращался, необходимо запитывать обмотки в порядке, указанном в таблице. Если направление обхода таблицы выбрать сверху вниз по кругу, то двигатель будет вращаться вперёд, если снизу вверх по кругу — двигатель будет вращаться назад:
За один полный цикл двигатель делает четыре шага.
Для правильной работы, должна строго соблюдаться указанная в таблице последовательность коммутаций. То есть, например, после второй комбинации (когда мы подали + на вывод «c» и минус на вывод «d») мы можем подать либо третью комбинацию (отключить вторую обмотку, а на первой подать — на «a» и + на «b»), тогда двигатель повернётся на один шаг вперёд, либо первую комбинацию (двигатель повернётся на один шаг назад).
То, с какой комбинации нужно начинать вращение, определяется тем, какая последняя комбинация подавалась на двигатель перед его выключением (если конечно его руками потом не крутили) и желаемым направлением вращения.
То есть, допустим мы повернули двигатель на 5 шагов вперёд, подавая на него комбинации 2-3-4-1-2, потом обесточили, а потом захотели повернуть ещё на один шаг вперёд. Для этого на обмотки надо подать комбинацию 3. Пусть после этого мы его опять обесточили, а через какое-то время захотели вернуть его на 2 шага назад, тогда нам нужно подать на двигатель комбинации 2-1. И так далее в таком же духе.
Эта таблица, кроме всего прочего, позволяет оценить, что будет происходить с шаговым двигателем, если мы перепутаем порядок подключения обмоток или концы в обмотках.
На этом мы закончим с двигателем и перейдём к драйверу LB1838.
У этой микрухи есть четыре управляющие ноги (IN1, IN2, EN1, EN2), на которые мы как раз и будем подавать сигналы с контроллера, и четыре выходных ноги (Out1, Out2, Out3, Out4), к которым подключаются обмотки двигателя. Обмотки подключаются следующим образом: провод «a» подключается к Out1, провод «b» — к Out2, провод «c» — к Out3, провод «d» — к Out4.
Ниже представлена таблица истинности для микросхемы драйвера (состояние выходов в зависимости от состояния входов):
IN1 | EN1 | Out1 (a) | Out2(b) | IN2 | EN2 | Out3(c) | Out4(d) |
Low | High | + | — | Low | High | + | — |
High | High | — | + | High | High | — | + |
X | Low | откл | откл | X | Low | откл | откл |
Теперь давайте нарисуем на диаграмме, какую форму должны иметь сигналы IN1, EN1, IN2, EN2 для одного полного цикла вращения (4 шага), т.е. чтобы на выходах появились последовательно все 4 комбинации подключения обмоток:
Если присмотреться к этой диаграмме (слева), то становится очевидно, что сигналы IN1 и IN2 можно сделать абсолютно одинаковыми, то есть на обе этих ноги можно подавать один и тот же сигнал. В этом случае наша диаграмма будет выглядеть так:
Итак, на последней диаграмме нарисовано, какие комбинации уровней сигналов должны быть на управляющих входах драйвера (EN1, EN2, IN1, IN2) для того, чтобы получить соответствующие комбинации подключения обмоток двигателя, а также стрелками указан порядок смены этих комбинаций для обеспечения вращения в нужную сторону.
Вот в общем-то и вся теория. Необходимые комбинации уровней на управляющих входах формируются контроллером (мы будем использовать PIC12F629).
R1..R2 = 1 кОм. Когда соответствующая кнопка не нажата — резистор подтягивает напряжение на входе контроллера к +5 В (высокий уровень). При нажатии на кнопку напряжение на входе подтягивается к земле (низкий уровень).
С1, С2 = 0,1 мкФ — керамические конденсаторы.
С3 = 470 мкФ х 16В — электролитический конденсатор.
Программа управления реализует следующий алгоритм: при нажатии кнопки КН1 двигатель поворачивается на один шаг в одну сторону, а при нажатии кнопки КН2 — на один шаг в другую сторону.
Собственно говоря, можно прикрутить сюда программный UART и реализовать управление от компьютера (передавать с компа скорость, количество шагов и направление вращения).
Контроллер биполярного шагового двигателя
21.10.2011
6 комментариев
У биполярного шагового двигателя есть 2 обмотки, без отводов от середины (в отличие от униполярных), поэтому для запуска такого двигателя нужны схемы изменяющие полюсовку напряжения на обмотках. Мне поставили задачу — заставить вращаться такой вот, биполярный шаговый мотор.
Для управления обмотками был использован микроконтроллер PIC12F629 и простые транзисторные H-мосты. Схема показана на рисунке.
Девайс размещен на плате из одностороннего фольгированного стеклотекстолита.
Алгоритм работает так: при нажатии на одну из кнопок двигатель начинается вращаться в ту или иную сторону. Когда обе кнопки отпущены — на двигатель ничего не подается. А если зажать обе кнопки, двигатель будет заторможен на текущем шаге. Вместо кнопок, естественно, можно подавать сигналы с внешнего микроконтроллера — это позволит применить данную схему, скажем, для управления ходовыми двигателями робота (да еще и с тормозом).
Скачать архив файлов — в архиве содержиться файл прошивки микроконтроллера, рисунок печатной платы и проект под PROTEUS.
Модуль управления биполярным («двухфазным») шаговым двигателем БУШД-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 (бесплатная гляделка).