Драйвер шагового двигателя своими руками

Содержание

Контроллер шагового двигателя в домашних условиях. Комментировать

Простой контроллер Шагового Двигателя из компьютерного барахла стоимостью

Началось мое станкостроение со случайной ссылки на немецкий станок за 2000DM, который на мой взгляд выглядел по детски, однако мог выполнять довольно много занятных функций. В тот момент, меня заинтересовала возможность рисовать платы (это было еще до появления в моей жизни ЛУТ).

В результате протяженных поисков в сети было найдено несколько сайтов посвященных этой проблеме, однако русскоязычных среди них не было ни одного (это было примерно 3 года назад). В общем, в конце концов, я нашел два принтера CM6337 (кстати их выпускал Орловский завод УВМ), откуда и выдрал униполярные шаговые двигатели (Dynasyn 4SHG-023F 39S, аналог ДШИ200-1-1). Параллельно с доставанием принтеров заказал и микросхемы ULN2803A(с буквой А – DIP корпус). Все собрал, запустил. Что получил, а получил дико греющиеся микросхемы ключей, и с трудом вращающийся двигатель. Так как по схеме из Голландии для увеличения тока ключи соединены попарно, то максимальный отдаваемый ток не превышал 1А, в то время как двигателю надо было 2А (кто ж знал что я найду такие прожорливые, как мне тогда показалось, двигатели J ). Кроме того, данные ключи построены по биполярной технологии, для тех кто не в курсе, падение напряжения может быть до 2В (если питание от 5, то фактически половина падает на сопротивлении перехода).

В принципе, для опытов с двигателями от 5” дисководов очень неплохой вариант, можно сделать например плоттер, однако что то более тяжелое чем карандаш (например дремель) ими вряд ли можно тягать.

Решил собрать свою собственную схему из дискретных элементов, благо в одном из принтеров оказалась нетронутой электроника, и я взял оттуда транзисторы КТ829 (Ток до 8А, напряжение до 100В)… Была собрана такая схема…

Рис.1 – Схема драйвера для 4х фазного униполярного двигателя.

Сейчас объясню принцип. При подаче логической “1” на один из выводов (на остальных “0”), например на D0, транзистор открывается и ток течет через одну из катушек двигателя, при этом двигатель отрабатывает один шаг. Далее единица подается на следующий вывод D1, а на D0 единица сбрасывается в ноль. Двигатель отрабатывает сладующий шаг. Если подавать ток сразу в две соседние катушки то реализуется режим полушагов (для моих двигателей с углом поворота 1,8’ получается 400 шагов на оборот).

К общему выводу подсоединяются отводы от середины катушек двигателя (их два если проводов шесть). Очень хорошо теория шаговых двигателей описана тут — Шаговые двигатели. Управление шаговым двигателем., тут же приведена схема контроллера ШД на микроконтроллере AVR фирмы Atmel. Честно говоря, мне показалось похоже на забивание гвоздей часами, однако в ней реализована очень хорошая функция как ШИМ регулирование тока обмоток.

Поняв принцип, несложно написать программу управляющую двигателем через LPT порт. Зачем в этой схеме диоды, а за тем, что нагрузка у нас индуктивная, при возникновении ЭДС самоиндукции она разряжается через диод, при этом исключается пробой транзистора, а следовательно и вывод его из строя. Еще одна деталь схемы – регистр RG (я использовал 555ИР33), используется как шинный формирователь, поскольку ток отдаваемый, например LPT портом мал – можно его элементарно спалить, а следовательно, есть возможность спалить весь компьютер.

Схема примитивна, и собрать такое можно минут за 15-20, если есть все детали. Однако у такого принципа управления есть недостаток – так как формирование задержек при задании скорости вращения задается программой относительно внутренних часов компьютера то работать в многозадачной системе (Win) это все не будет! Будут просто теряться шаги (может быть в Windows и есть таймер, но я не в курсе). Второй недостаток – это нестабилизированный ток обмоток, максимальную мощность из двигателя не выжать. Однако по простоте и надежности этот способ меня устраивает, тем более что для того, что бы не рисковать своим Атлоном 2ГГц, я собрал из барахла 486 тарантас, и кроме ДОСа там, в принципе мало, что можно поставить нормальное.

Описанная выше схема работала и в принципе неплоха, но я решил, что можно несколько переделать схему. Применить MOSFETJ ). транзисторы (полевые), выигрыш в том, что можно коммутировать огромные токи (до 75 – 100А), при солидных для шаговых двигателей напряжениях (до 30В), и при этом детали схемы практически не греются, ну если не считать предельных значений (хотел бы я видеть тот шаговый двигатель который съест ток 100А

Как всегда в России возник вопрос, где взять детали. У меня возникла идея – извлечь транзисторы из горелых материнских плат, благо, например Атлоны кушают порядочно и транзисторы там стоят огого. Дал объявление в ФИДО, и получил предложение забрать 3 мат. платы за 100 рублей. Прикинув что в магазине за эти деньги можно от силы купить 3 транзистора, забрал, расковырял и о чудо, хотя они все и были дохлыми, ни один транзистор в цепи питания процессора не пострадал. Так я получил пару десятков полевых транзисторов за сто рублей. Схема, которая получилась в результате, представлена ниже.

Рис. 2 – Тоже на полевых транзисторах

Отличий в этой схеме немного, в частности была применена микросхема нормального буфера 75LS245 (выпаяна над газовой плитой из 286 материнской платы J ). Диоды можно поставить любые, главное, что бы их максимальное напряжение не было меньше максимального напряжения питания, а предельный ток не меньше тока питания одной фазы. Я поставил диоды КД213A, это 10А и 200В. Возможно это излишне для моих 2х амперных двигателей, однако покупать детали не было смысла, да и запас по току думается лишним не будет. Резисторы служат для ограничения тока перезарядки емкости затворов.

Ниже приводится печатная плата контроллера построенного по такой схеме.

Рис. 3 – Печатная плата.

Печатная плата разведена для поверхностного монтажа на одностороннем текстолите (лень мне что то дырочки сверлить сталоJ). Микросхемы в DIP корпусах паяются с подогнутыми ножками, резисторы SMD с тех же материнок. Файл с разводкой в Sprint-Layout 4.0 прилагается. Можно было бы запаять на плату и разъемы, но лень как говорится — двигатель прогресса, да и при отладке железа удобнее было запаять провода подлиннее.

Еще необходимо отметить, что схема снабжена тремя концевиками, на плате справа снизу шесть контактов вертикально, радом с ними посадочные места под три резистора, каждый соединяет один вывод выключателей с +5В. Схема концевиков:

Рис. 4 – Схема концевиков.

Вот так это выглядело у меня в процессе наладки системы:

В результате на представленный контроллер я потратил не более 150 рублей: 100 рублей за материнские платы (при желании можно вообще бесплатно достать) + кусок текстолита, припой и банка хлорного железа в сумме тянут на

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

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

Если бы на Орловских заводах проточить отдельные детали не стоило бы так дорого, то мне бы конечно проще было бы вычертить все детали в CAD’е, со всеми квалитетами и шероховатостями и отдать на съедение рабочим. Однако знакомых токарей нет… Да и руками как то знаете ли интереснее…

Драйвер шагового двигателя своими руками

4-х осевой Step/Dir контроллер шаговых двигателей

Автор: Роман Лут

Создано при помощи КотоРед.

В статье описывается step/dir контроллер униполярных шаговых двигателей.

Контроллер используется для управления самодельным сверлильно-фрезерным станком.

Предполагается, что читатель уже знаком с самодельными ЧПУ cтанками;

иначе рекомендуется изучить материалы, указанные в конце статьи.

Контроллер разрабатывался взамен имеющегося примитивного 3-х осевого контроллера(на ATTiny2313).

снижения шума и повышения скорости перемещения.

— для униполярных двигателей;

— аппаратный контроль тока в обмотках (ШИМ);

— опторазвязка с LPT портом;

— режим удержания с понижением тока до указанного значения;

— full step, half step, 4, 8,16 microstep выбирается отдельно для каждой оси;

— максимальная частота следования импульсов step: 12.5 кГц (период — 80мкс);

— минимальная длина step и dir импульса: 5мкс;

— ток двигателей — до 2А, индивидуально для каждой оси ( больше 2А не проверялось, схема позволяет);

— питание двигателей — до 30В, с возможностью увеличения ( больше 19В не проверялось ).

В общем целом, получился достаточно “навороченный” контроллер на дешёвых распространённых компонентах.

Ни один из известных мне самодельных контроллеров таким набором возможностей не обладает.

Управляющий модуль выполнен на микроконтроллере ATMega8535, работающем на частоте 16МГц.

Задача контроллера — обрабатывать входные сигналы Step/Dir и выдавать сигналы включения и опорные напряжения для силовой части схемы.

Опорные напряжения формируются микросхемой M62359 — это 8-бит 8-канальный DAC с SPI интерфейсом.

Опторазвязка выполнена на оптронах PC817 и является неотъемлемой частью контроллера.

На этот моменте нужно остановиться отдельно.

Как видно из схемы, в отличие от аналогичных контроллеров, сигналы Step не подключены к выводам микроконтроллера, которые вызывают аппаратные прерывания.

Вместо этого контроллер крутится в бесконечном цикле, проверяя, не изменились ли логические уровни на входах. Это обеспечивает стабильную предсказуемую работу контроллера.

Один цикл ( проверка входов, реакция, вывод управляющих сигналов ) занимает в текущей реализации

При этом заявленная минимальная длина импульса Step — 5мкс.

Каким же образом контроллер не пропускает импульсы?

Это, так сказать, моё ноу-хау 🙂 Секрет — в свойствах оптронов.

В даташите на PC817 можно найти графики Response time.

После исчезновения сигнала на входе, оптрону требуется определённое время (ts + tf), чтобы закрыться.

Это время зависит от тока, который протекает через фототранзистор.

На практике это выглядит так:

Нагрузочный резистор 10кОм на 5В — и входной импульс 5мкс превращается в

Таким образом, у микроконтроллера есть, по крайней мере, 28мкс на опрос входов.

В результате он в одиночку может управлять сразу 4-мя осями.

Четыре платы силовой части полностью идентичны и собраны на микросхемах UC3842

и транзисторах IRFZ44 или IRF560 (транзисторы расположены на обратной стороне платы):

Ток в каждой обмотке контролируется отдельной микросхемой и транзистором:

Микросхема UC3842 — это ШИМ контроллер для импульсных источников питания.

Она содержит ШИМ генератор, компаратор тока, RS триггер и драйвер полевого транзистора. В общем, для этих целей подходит идеально 🙂

Первоначально я пытался собрать контроллер на микросхемах TL494.

Но, как выяснилось, эти микросхемы не предназначены для контроля максимального тока в течении одного периода ШИМ.

Их входные сенсоры тока и напряжения должны быть обрезаны фильтрами с частотой 10-15кГц.

UC3842, напротив, предназначена для ограничения максимального тока через обмотку трансформатора в течении одного периода.

Она выключает транзистор в момент достижения установленного тока:

Опорное напряжение, сформированное ЦАП на управляющем модуле, поступает на вход Comp микросхемы.

В начале периода ШИМ микросхема открывает транзистор. Ток в обмотке начинает плавно нарастать.

Как только ток превышает заданное значение, микросхема закрывает транзистор.

UC3842 измеряет ток в обмотке по падению напряжения на токоизмерительном резисторе.

Кроме сравнения с опорным напряжением, в микросхеме предусмотрена защита по максимальному

току, которая отключает транзистор при напряжении на Isense выше 1В.

Поэтому токоизмерительный резистор нужно выбирать таким образом, чтобы при максимальном токе падение напряжения на нём составляло чуть меньше 1В.

Точное значение максимального тока задаётся в прошивке.

Микросхема содержит встроенный генератор, частота которого задаётся цепочкой R3C2:

Во время разряда конденсатора, выходной транзистор закрывается (это dead time).

Таким образом, выбором номиналов R3C2 можно задавать и частоту, и dead time.

Естественно, эти элементы должны быть одинаковыми для всех обмоток.

Частоту ШИМ выбирают индивидуально для двигателя, учитывая повышение нагрева двигателя с повышением частоты.

Чтобы не устанавливать дополнительные компоненты, можно использовать сигнал Clock, который формирует микроконтроллер.

Частота и dead time при этом задаются в прошивке. Элементы R3C2 не устанавливаются — устанавливается резистор R4.

Один выход ЦАП формирует опорное напряжение для пары обмоток ( только одна из которых может быть включена в данный момент ).

Поэтому управляющий модуль отключает ( высоким логическим уровнем ) парную обмотку сигналом /M_L1EN.

Цепочка R1C1 подбирается таким образом, чтобы погасить всплеск тока, возникающий при открывании транзистора:

Диод D1 устанавливается опционально. Мне хватило встроенных в MOSFET.

При выключении транзисторов возникают выбросы противоЭДС, при этом выбросы напряжения на Drain-Source транзисторов могут превышать напряжение питания в 3 раза.

Классически эти выбросы гасят шунтирующими диодами, установленными на обмотки, либо отводят в источник питания.

Поэтому выбросы нужно гасить только при превышении предельного значения, что обеспечивается включением стабилитрона навстречу диоду:

Желательно просто выбрать транзисторы с достаточно большим Vdss.

Я использовал IRF540N (Vdss = 100В) для двигателя ДШИ-200 и IRFZ44N (Vdss = 55В) для двигателей от принтеров.

Напомню, что Vdss — это напряжение между Drain и Source, при котором транзистор самопроизвольно открывается.

На практике это вызывает неправильную работу контроллера, нагрев транзисторов при относительно малых токах через них, или выход транзисторов из строя.

Для двигателей до 3А, мосфеты должны быть холодными; радиаторы на них не устанавливаются.

Контроллер запитан от блока питания от ноутбука на 19В 3А:

5В получены с помощью готового модуля DC-DC преобразователя на LM2596, доступного на ebay:

Почему важен контроль тока

В стабильном состоянии ток в обмотке определяется только активным сопротивлением обмотки и напряжением питания.

Но в момент включения ток в обмотке зависит и от активного, и от реактивного сопротивления.

Поэтому вместо прямоугольных импульсов тока мы увидим следующую картину:

Чем больше индуктивность обмотки, тем дольше будут происходить нарастания и спады тока.

При повышении скорости вращения, ток не будет успевать нарастать до максимального значения, и момент двигателя начнёт падать:

Чтобы обеспечить быстрое нарастание тока, нужно увеличить напряжение питания.

Но в стабильном состоянии ток в обмотке ограничен только активным сопротивлением обмотки.

Поэтому ограничение тока при повышении питающего напряжения является обязательным.

Следует упомянуть ещё один способ повышения оборотов.

Напряжение питания двигателя повышают, а сам двигатель включают через мощное сопротивление.

Этим мы уменьшаем долю реактивного сопротивления в цепи обмотки.

Таким образом эффективно решаются сразу две задачи: повышение оборотов двигателя и обогрев мастерской 🙂

Режимы работы двигателя

Режим работы двигателя указывается в прошивке индивидуально для каждой оси.

(полный шаг, одна обмотка)

Классический режим, в котором в каждый момент времени включена одна обмотка.

Full Step, Half phase

Режим, в котором в каждый момент включены 2 соседние обмотки одновременно.

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

Комбинация предыдущих режимов. Количество шагов увеличивается вдвое. Когда включены две обмотки, ток в каждой установлен в 0.707 * Imax.

Если представить, как вращается двигатель в режиме полного шага — можно заметить, что он двигается рывками:

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

Это вызывает вибрации вала и всего станка в целом.

Так работает станок, при создании которого вопрос снижения шума не рассматривался:

Здесь всё плохо — мощные двигатели в режиме полного шага, огромный резонирующий корпус из ДСП

Совсем как в моём первом станке, который и пришлось разобрать из-за шумности 🙂

В жилом помещении вопрос снижения шума — это не прихоть, это — вопрос, будет ли возможно использовать станок вообще.

Чтобы обеспечить плавное вращение двигателя, необходимо питать двигатель синусоидальным током.

Для этого в контроллерах шаговых двигателей момент перехода от одной обмотки к другой делят на 4-16 микрошагов.

На каждом микрошаге ток в первой обмотке уменьшается, а во второй — увеличивается, по синусоидальному закону:

При этом частота импульсов Step в управляющей программе должна быть увеличена в 4-16 раз соответственно.

Использование микрошага позволяет значительно снизить шум двигателя и получить более высокий момент на больших скоростях.

Станок начинает “звучать профессионально”:

Я лично не рассматриваю микрошаг как способ повышения точности позиционирования, потому что конструкция ротора и статора не гарантирует равномерного распределения микрошагов.

Кроме того, при небольшом усилии, или при переключении в режим удержания, вал двигателя может “выпадать” в положения полного шага.

При отсутствии импульсов Step в течении

2 секунд, контроллер понижает ток в обмотках до значений, указанных индивидуально для каждой оси в прошивке.

Сравнение с модулями на чипах Allegro

Популярность самодельных 3D принтеров вызвала появление на ebay готовых модулей на чипах A4983, конкурировать с которыми “рассыпухой” достаточно сложно.

С другой стороны, мне было спокойнее экспериментировать со схемой, где в худшем случае придётся заменить ключи, чем с микросхемой 3×3мм, которая взорвётся при любой ошибке.

Кроме того, в будущем планируется расширить контроллер для автономной работы с небольшого пульта,

так как составлять программу каждый раз, когда требуется сделать ровный рез — неудобно.

А в совсем отдалённом будущем, возможно, получится реализовать управление по USB

( это когда контроллер принимает описание шагов с USB-UART и сам генерирует шаги ).

Описываемый контроллер эквивалентен 4-м таким модулям + плата опторазвязки.

— чипы Allegro умеют включать “режим быстрого снижения тока”. Если на следующем микрошаге ток в обмотке должен снизится, чип кратковременно шунтирует обмотку, открывая транзисторы моста. Введение такой возможности в данный (униполярный) контроллер слишком сильно усложнило бы схему;

— у A4983 максимальная частота импульсов Step составляет 1/2мкс = 500кГц.

Я пробовал подключать один и тот же двигатель к этому контроллеру в униполярном и к A4983 в биполярном подключении.

Субъективно, униполярное подключение давало больший момент на высоких скоростях.

Возможно, из-за меньшей индуктивности обмотки при униполярном включении.

Прошивка написана на С для CodevisionAVR 2.05.

При большом желании, основной цикл можно переписать на ассемблере и увеличить максимальную частоту импульсов Step до

При программировании микроконтроллера нужно отключать питание от силовой части.

Настройка Mach 3

В идеальном случае, управляющая программа должна уметь формировать импульсы Step точно с требуемой частотой.

На практике в программе Mach3 и подобных, драйвер работает на фиксированной частоте (Kernel speed):

Поэтому Mach3 умеет формировать импульсы только на границах периодов Kernel speed.

при частоте ядра 25kHz (период — 40мкс), то импульсы будут следовать неравномерно — с периодами, кратными 40мкс:

Из осциллограммы на выходе оптрона видно, что время восстановления для уверенного чтения “1” микроконтроллером составляет примерно 50мкс.

После этого нужно выдержать “единицу” один цикл программы (26мкс), итого

Для этого должно соблюдаться условие:

Steps per * Velocity / 60 12500

Полярность импульсов Step выставляется положительной:

Напряжение на токоизмерительном резисторе, низкая и средняя скорость вращения (Microstep 8x):

Напряжение на токоизмерительном резисторе, высокая скорость вращения:

Общение с микросхемой M62359 идет на частоте, превышающей заявленные в даташите, поэтому её желательно заменить на что-то более быстрое.

На практике я не наблюдал проблем в работе контроллера. Мне удаётся успешно фрезеровать печатные платы, обработка которых включает штриховку всей платы с шагом 0.3мм:

Платы силовой части разводились “на все случаи жизни”. Возможно имеет смысл убрать посадочные места для опциональных деталей и уменьшить габариты. Или сделать весь контроллер на одной большой плате в SMD варианте.

Силовые платы планировалось вставлять в управляющий модуль вертикально, как в материнскую плату компьютера, но в итоге сделал на шлейфах. Из-за этот шлейфы пришлось пережимать со сдвигом. Если бы делал изначально — развёл бы под готовые шлейфы от дисководов.

Контроллер не проверялся с токами больше 2А — возможно, следует уделить больше внимания разводке.

Напряжение питания двигателей можно поднять вплоть до 60В. При этом нужно установить транзисторы в большим Vdss и подобрать сопротивление R8 в цепи питания UC3842 (микросхема содержит внутренний стабилитрон на 30В). Напряжение питания нельзя поднимать бесконечно, потому что можно получить пробой в обмотках двигателя.

Также обратите внимание на (нестандартный) разъём программатора.

Сразу хочу предупредить, что для настройки контроллера обязательно нужен осциллограф.

Без него понять, что происходит в обмотках, будет невозможно.

UC3842 CURRENT MODE PWM CONTROLLER

DMOS Microstepping Driver with Translator A4983

Ускорение шаговых двигателей

Ускорение шаговых двигателей 2

Losing steps in Mach3: Kernel Speed, Pulse Width and Sherline 1/2 Pulse mode

Электроника и механика домашнего 3-х координатного станка ЧПУ (Hobby CNC).

hCNC3+ (ATMega16, StepDir, 3 axis, ШИМ, ручное управление).

Простой биполярный драйвер на Pic

Микрошаговый контроллер шагового двигателя на базе PIC18F2320 V4.1

STEP/DIR контроллер 3-х шаговых двигателей на микроконтроллере (для станка ЧПУ)

3 axis STEP-DIR controller

Драйвер шагового двигателя своими руками

Драйвер шагового двигателя своими руками

Шаговый двигатель используется в машинах для точного перемещения. Наладим управление шаговым двигателем через USB с компьютера своими руками. Нам потребуется:

1) Шаговый двигатель, возьмем — Nema23 76 мм, вместо него может быть другой, управлять будем биполяным методом, любой гибридный и биполярный шаговый двигатель будет работать с таким же управлением.

2) Блок питания, возьмем — импульсный блок питания мощностью 360W с выходным напряжением 24V / 15A, может использоваться любой другой блок питания, если будет достаточно мощности и напряжения для работы двигателя. Более мощному двигателю будет нужно больше напряжения. Предел напряжения нашего драйвера ограничивается максимальным напряжением, которое выдерживают транзисторы, это 100V, у нас блок питания на 24V. В случае большего напряжения транзисторы в схеме необходимо заменить на более мощные, также при увеличении напряжения, транзисторы могут начать греться, если такое случилось, необходимо дополнительно обдувать их куллером (у меня все в порядке и куллер не требуется). Для подключения блока питания к сети 220V также нужен шнур и нужно определить где в вашей розетке ноль, а где фаза. Контакт блока N подключается к нулю, а L к фазе, также можно подключить заземление (но не обязательно). Определение возможно при помощи индикаторной отвертки, у меня определилось, что слева ноль, а справа фаза.

Момент инерции: 56 oz-in

Момент инерции: 4 кг/см

Для соединителя: 5 мм

Максимальный ток: 15 A

Напряжение: AC 220V

Контакты: 2 (N / L)

Макс. напряжение: 250V

Не горит: Ноль (N)

Для двигателей: Nema 17

Диаметр 2: 10 мм

Как крутить шаговый двигатель

Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки — 4 провода, первая обмотка — черный (A) и зеленый (A*) провод, вторая обмотка — красный (B) и синий (B*). За одну смену комбинаций делается 1 шаг — 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться — крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.

Чтобы крутить шаговый двигатель, надо:

1) Собрать устройство — USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут — контроллер USB. Если USB связь работает нормально, то можно приступать к изготовлению драйвера.

2) Написать программу для компьютера, которая будет посылать USB команды устройству.

3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель.

USB контроллер шаговых двигателей и USB драйвер шагового двигателя

Взятый нами двигатель является гибридным и поддерживает несколько вариантов управления. Управлять двигателем будем биполярным методом и соответственно собираем мы драйвер биполярного шагового двигателя с USB контроллером. Сначало покажу готовый результат, а потом подробно рассмотрим его. Вот фото собранного драйвера шагового двигателя с USB управлением, который я собрал:

На картинке сверху — биполярный (гибридный) шаговый двигатель NEMA 23 с потреблением — 3А тока на обмотку. Под ним — импульсный блок питания 360 Вт, 24 В, 15 А. Мощности блока хватает на 15 / 3 = 5 одновременно запитанных обмоток, у одного двигателя 2 обмотки, т.е хватит на 2 одновременно работающих двигателя (4 обмотки). Я не вижу необходимости включать одновременно больше одного двигателя, в случае если необходимо двигаться по кривой траектории, то нужно чередовать короткие включения то одного, то другого двигателя. Так что имеющейся мощности с запасом хватает. Двигатель и блок питания подключены к устройству, которое также подключено через USB к компьютеру. Все соединено по схеме.

Схема драйвера биполярного шагового двигателя и USB контроллера (схема длинная и нуждается в прокрутке для просмотра):

Драйвер шагового двигателя USB на микроконтроллере AVR своими руками

Дополнительно нужно (нет в наличии):

1) Модуль питания DC-DC SMAU01L-12 (вместо него пойдет любой конвертер DC-DC с 5V до 10V-15V) — 1 шт. возможно можно без него, от 5V питать (не проверено)

Главным компонентом схемы является программируемый микроконтроллер AVR — ATmega16, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье

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

Слева от ATmega16 находятся компоненты для организации связи по протоколу USB — к выводам XTAL подключен внешний кварцевый резонатор с USB-совместимой частотой 12 МГц. Для сглаживания сигнала у него есть 2 конденсатора по 20 пФ, все это соединяется с минусом питания. К контактам, через которые идет обмен сообщениями с USB, подключены 2 резистора по 68 Ом, как того требует протокол USB. Резистор на 1.5 кОм, подключенный к D- линии задает низкоскоростной режим работы USB устройства. Диоды Зенера 3V6 понижают напряжение на линиях, через которые идет обмен данными USB с 5 до 3.6V.

Управление двигателем подключается к контактам PB0, PB1, PB2, PB3, на остальные свободные P-контакты можно в будующем подключить еще двигатели и рабочие инструменты, но пока они пустуют. Микроконтроллер ATmega16 отдает команды и обрабатывает USB сигналы после того как в него записана программа (ниже она будет написана). После него идет конструкция из микросхем IR2102 и транзисторов IRF540N (2 так называемых H-моста) — она приводит шаговый двигатель в движение.

Драйвер IR2101 нужен для преодаления большой емкости затвора транзистора IRF540N, что позволяет открывать и закрыть транзистор с большой скоростью (например принимать сигнал ШИМ, которым может регулироваться скорость двигателя при необходимости — об этом сигнале дальше напишу), что нам и нужно. К сожалению для питания этого драйвера необходимо 10-15V, у нас есть только 5V от USB. Поэтому пришлось поставить компонент DC-DC SMAU01L-12, который преобразует 5V в 12V, вместо него можно использовать любой другой способ получения такого напряжения, например, при помощи трансформатора или любым другим путем. К VCC подключается +12V, к COM -12V. Один драйвер работает с 2мя транзисторами — верхним (H) и нижним (L). Контакты HIN и LIN — входной сигнал с микроконтроллера для верхнего и нижнего транзистора, по этому сигналу транзисторы открываются и закрываются. HO и LO — это выходные сигналы, транзисторы подключаются гейтами (G) к этим контактам. Они подключаются не просто так — справа на линиях 2 резистора 10/100 Ом и диод, они нужны для нормальной работы транзисторов — чтобы они замедлялись при открытии и не замедлялись при закрытии, эти транзисторы слишком быстро открываются и это может вызвать проблемы. Диод и конденсаторы 3300 пФ — нужны для работы драйвера IR2101 согласно документации на эту микросхему.

Каждая обмотка (фаза) двигателя (у двигателя 2 обмотки A и B — 4 контакта) подключается к H-мосту из транзисторов IRF540N. H-мост — это специальная схема соединения транзисторов, которая позволяет подавать через них напряжение высокого уровня (24V) в разных направлениях. Один мост изготавливается из 4-х транзисторов. В итоге здесь вы видите 2 H-моста, которые позволяют гонять разнонаправленное напряжение высокого уровня по 2м обмоткам двигателя и тем самым крутить его.

Обратите внимание, что в мосту — HIN верхнего драйвера соединяется с LIN нижнего драйвера, а LIN верхнего с HIN нижнего. Это сделано для одновременной подачи сигналов. Если вы включили HIN сверху, то обязаны включить LIN с низу, иначе произойдет короткое замыкание. Такое подключение позволяет автоматом включать пару. Впрочем короткое замыкание все же возможно, если вы откроете и HIN и LIN на одном мосте, поэтому не допускайте этого. На контактах PB0 — PB3 допустимы только значения 0000, 1010, 0110, 0101, 1001. Их перебор крутит двигатель. Подача других значений скорей всего приведет к короткому замыканию моста.

Мощные резисторы с низким номиналом 0.1 Ом и высокой мощностью (3-5 Вт) нужны для защиты от высокого тока — это шунты. Если что их можно снять и заменить простым соединением с минусом питания, если например не будет хватать мощности. Для слабых резисторов мощность берется от тока USB: 0.05 А * 5 V = 0.25 Вт (ток USB задается программно, по умолчанию в нашей программе стоит 0.05). Черная полоска на диодах соответствует вертикальной линии на схеме.

Шаговый двигатель и блок питания подключаются к H-мостам, как показано на схеме. Минусы питания 24V, 12V и 5V соединяются. Между плюсом и минусом 24V линии ставится сглаживающий пленочный конденсатор.

Отдельное крупное фото драйвера шагового двигателя:

Сразу подключать питание высокого уровня (24V) к схеме и шаговый двигатель не рекомендую. Сначало лучше проверьте правильность работы устройства. Для этого можно использовать 5 светодиодов и отсек для батареек в качестве источника питания (3V). 1 светодиод подключается к контакту PA0 длинной стороной (+) и короткой стороной (-) к минусу питания. Этот желтый диод показан на первом фото сверху, на схеме его нет. С его помощью можно проверить работу USB контроллера, зажигать его и гасить по команде из программы. 2 других светодиода подключите на место первой обмотки шагового двигателя в разнонаправленном положении — один длинной стороной к первому контакту, другой длинной стороной ко второму контакту. Оставшиеся 2 светодиода таким же образом подключите на место второй обмотки. Вместо импульсного блока питания 24V подключите батарейный отсек и батарейки на 1.5V (2 батарейки — это 3V). Проверка устройства — при посылке команды кручения двигателя загораются различные светодиоды. Все светодиоды должны загораться в свое время при переборе комбинаций. Медленный перебор комбинаций позволяет точно убедиться в том, что все работает правильно.

Конец функции delay0

Ток регулируется изменением чисел 200 и 120. 200 — время включения, 120 — время выключения. Сумма 200+120=320 дает частоту ШИМ 25 кГц (при условии, что контроллер работает на частоте 8 МГц от внутреннего генератора, такая там стоит по умолчанию, получается 8000000/320=25000). Сумма должна оставаться такой, а числа можно менять, чем больше первое число, тем ток больше.

Кроме того существует аппаратный ШИМ, который автоматически включается на линиях в микроконтроллере AVR через таймер счетчик. Однако тут есть недостаток — нужно пользоваться прерыванием для считывания сигнала таймера счетчика и передачи его на несколько портов. В виду постоянной ШИМизации и при большом количестве таких портов, возникает проблема перегруженности прерываний — если прерывание не уложится в период ШИМ, то в его конце запустится еще одно такое прерывание и контроллер зависнит, а ведь есть еще и другие прерывания, которые могут возникнуть в любое время! Аппаратный ШИМ есть в текущей версии программы для микроконтроллера.

Программа для Windows

Уже готовую программу для Windows на USB контроллер нужно немного изменить. В итоге должны перебираться комбинации для подачи напряжения в разных направлениях, нам нужно менять значения на портах PB0, PB1, PB2, PB3, следующие комбинации нужны для запуска двигателя 1010, 0110, 0101, 1001. Перебор их в одну сторону — кручение в эту сторону, в другую — кручение обратно. 0000 — отключает питание, необходимо в конце перебора, иначе двигатель нагреется. Сейчас над этой программой ведется работа, так что возьмите из USB контроллера, связь там работает.

Программа для микроконтроллера

Программа для микроконтроллера еще недоделана и находится в разработке, но то что было сделано вот оно, язык WinAVR C.

Драйвер шагового двигателя с микрошаговым режимом

В статье представлены схема и конструкция, описан принцип действия драйвера биполярного шагового двигателя на базе микроконтроллера ATmega48. Он способен работать со многими двигателями, не содержит специализированных микросхем для управления шаговыми двигателями. Универсальность обеспечена оригинальным методом поддержания заданного тока в обмотках двигателя. Эта конструкция может послужить основой для создания аналогичных устройств, содержащих дополнительные элементы безопасности — опторазвязку входных цепей, защиту от замыкания нагрузки и пр. В описываемом устройстве в связи с предполагаемыми умереннымиусловиями его эксплуатации и для ограничения стоимости такие узлы не предусмотрены.

Целью разработки было создание простого и недорогого драйвера биполярного шагового двигателя универсального применения. Всё программное обеспечение написано на языке ассемблера AVRASM и оптимизировано по времени выполнения, что позволило решить задачу на имеющейся на момент разработки элементной базе.

Основные технические характеристики

  • Напряжение питания силовой части, В . 27
  • Напряжение питания логической части, В . 12
  • Максимальная амплитуда тока фазы двигателя, А, не менее . 5
  • Минимальная амплитуда тока фазы двигателя, А, не более . 0,25
  • Предустанавливаемый коэффициент деления шага . .1/8, 1/4, 1/2, 1/1
  • Автопонижение тока в режиме удержания, %. 65
  • Задержка автопонижения тока относительно последнего шага, с . 3,4
  • Уровни управляющих сигналов . ТТЛ,5 В
  • Максимальная частота шагов, кГц. 12
  • Габариты, мм . 102x68x40

Принципиальная схема драйвера приведена на рис. 1 . В его основу положены мостовые формирователи тока фаз А и В на полевых транзисторах VT1-VT4, VT5-VT8 соответственно, управляемые специализированными микросхемами-драйверами верхних и нижних ключей полумоста DA5-DA8 IR2104S. Для повышения помехоустойчивости применено раздельное питание силовой части (27 В) и логической части с драйверами силовых ключей (12 В).

Далее рассмотрим часть схемы, относящуюся к одной из фаз (фазе А), поскольку часть, относящаяся к фазе В, действует аналогично.

Мгновенное значение тока фазы устройство определяет по падению напряжения на резисторе R45, которое через интегрирующую цепь R5C6 поступает на неинвертирующий вход усилителя DA1.1 с регулируемым коэффициентом усиления, выполняющего также функцию ФНЧ первого порядка. С выхода усилителя сигнал приходит на инвертирующий вход компаратора DA3.1. Компаратор сравнивает сигнал, пропорциональный текущему через фазу двигателя току, с образцовым напряжением. Его формирует в виде ступенчатой синусоиды (для микрошагового режима работы) Таймер 1 микроконтроллера, работающий в режиме Быстрая ШИМ без предварительного деления. Сигнал с выхода таймера пропущен через многозвенный фильтр R1C1R3C4R7C8. Период следования широтно-модулированных импульсов — 12,7 мкс, что соответствует частоте 78,4 кГц. Резистор R23 в рабочем режиме в формировании образцового напряжения не участвует, так как выход PB3 микроконтроллера, к которому он подключён, находится в высокоимпедансном состоянии.

В режиме удержания (после отсутствия импульсов на входе Шаг в течение последних 3,4 с) программа устанавливает на выходе PB3 микроконтроллера низкий логический уровень, и амплитуда образцового сигнала понижается. С выхода компаратора DA3.1 с открытым коллектором, нагруженного резистором R25, результат сравнения поступает на вход компаратора DA3.2. Выход компаратора DA3.1 связан также с общим проводом через конденсатор C22. Совместно R25 и C22 — времязадающая цепь узла стабилизации тока. При его падении ниже некоторого образцового уровня происходит зарядка конденсатора C22 через резистор R25. В интервале времени от начала зарядки до достижения напряжением на конденсаторе значения, заданного делителем напряжения R27R28, питание обмотки двигателя отключено, что препятствует быстрым флюктуациям тока около образцового значения.

Этот алгоритм в классическом смысле не относится к алгоритмам стабилизации тока “Fixed-Frequency PWM” или “Fixed-Off-Time PWM”, однако на практике он показал хорошую работоспособность. При превышении током образцового значения на выходе компаратора DA3.2 установлен низкий логический уровень. Микроконтроллер реагирует на это отключением обмотки одновременным закрыванием транзисторов VT1-VT4 с помощью сигнала SD, подаваемого на драйверы DA5 и DA6. Этим достигается быстрый спад тока в обмотках двигателя. В случае спада тока ниже образцового происходит обратное, на драйверы DA5 и DA6 поступает сигнал SD высокого уровня, открывающий упомянутые транзисторы, что не препятствует нарастанию тока в обмотке.

Смена ступеней образцового напряжения, а также смена комбинаций открытых и закрытых транзисторов моста происходит с приходом очередного импульса на вход Шаг по алгоритмам, зависящим от предустановленного коэффициента деления шага (наличия перемычек между контактами 1-2 и 3-4 разъёма XP1) и текущего направления вращения (логического уровня сигнала на входе Напр.). Вход Разр. был задуман для разрешения и запрета работы двигателя, но в прилагаемой к статье версии программы он не действует.

Драйвер выполнен на двухсторонней печатной плате, чертёж печатных проводников которой изображён на рис. 2, а расположение элементов — на рис. 3. Транзисторы VT1-VT8 расположены с одной стороны платы теплоотводящими поверхностями от неё. К этим поверхностям прижат через изоляционные прокладки теплоотвод — в простейшем случае алюминиевая пластина размерами 60х60 мм. Следует заметить, что при токе фаз более 4. 5 А и длительном режиме работы теплоотвода в виде пластины может оказаться недостаточно и его поверхность следует увеличить, сделав теплоотвод ребристым или игольчатым.

Материал платы следует выбрать толщиной не менее 1 . 1,5 мм, толщина фольги — не менее 35 мкм. Печатные проводники, по которым течёт большой ток, следует обильно залудить или бандажировать медной проволокой, припаяв её по всей длине проводника.

Большая часть компонентов конструкции применена в оформлении для поверхностного монтажа. Резисторы и конденсаторы — типоразмера 1206. Резисторы R45, R50 имеют проволочные выводы и мощность — не менее 2 Вт. оксидные конденсаторы в цепях питания — с малым ESR. Подстроечные резисторы R18 и R19 — многооборотные 3296W.

Амплитудные значения тока фаз двигателя регулируют подстроечными резисторами R18, R19. Проще всего это делать, переведя драйвер в режим микрошага 1/8 и контролируя цифровым вольтметром падение напряжения на резисторах-датчикахтока R45 и R50. Подавая на вход Шаг одиночные импульсы, добиваются максимальных значений тока поочерёдно в фазах А и В. Подстроечными резисторами устанавливают эти значения одинаковыми и соответствующими требуемой амплитуде тока. Уменьшение сопротивления под-строечных резисторов приводит к снижению тока, и наоборот. Для ориентировки можно воспользоваться табл. 1, в которой приведена зависимость амплитуды тока фазы Imф от введённого сопротивления подстроечного резистора.


Источник: vsedelaisam.ru