Драйвер шагового двигателя своими руками
Содержание этой части обучения
1) Шаговый двигатель, возьмем - Nema23 76 мм, вместо него может быть другой, управлять будем биполяным методом, любой гибридный и биполярный шаговый двигатель будет работать с таким же управлением.
2) Блок питания, возьмем - импульсный блок питания мощностью 360W с выходным напряжением 24V / 15A, может использоваться любой другой блок питания, если будет достаточно мощности и напряжения для работы двигателя. Более мощному двигателю будет нужно больше напряжения. Предел напряжения нашего драйвера ограничивается максимальным напряжением, которое выдерживают транзисторы, это 100V, у нас блок питания на 24V. В случае большего напряжения транзисторы в схеме необходимо заменить на более мощные, также при увеличении напряжения, транзисторы могут начать греться, если такое случилось, необходимо дополнительно обдувать их куллером (у меня все в порядке и куллер не требуется). Для подключения блока питания к сети 220V также нужен шнур и нужно определить где в вашей розетке ноль, а где фаза. Контакт блока N подключается к нулю, а L к фазе, также можно подключить заземление (но не обязательно). Определение возможно при помощи индикаторной отвертки, у меня определилось, что слева ноль, а справа фаза.
Как крутить шаговый двигатель
Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 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 управлением, который я собрал:Драйвер шагового двигателя с 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 - ATmega16A, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье
управление машиной. Для устройства можно использовать и другой микроконтроллер AVR, я выбрал ATmega16A, т.к. в нем с запасом имеется много памяти и контактов для подключения нескольких двигателей и большого количества рабочих инструментов.
Слева от ATmega16A находятся компоненты для организации связи по протоколу 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). Проверка устройства - при посылке команды кручения двигателя загораются различные светодиоды. Все светодиоды должны загораться в свое время при переборе комбинаций. Медленный перебор комбинаций позволяет точно убедиться в том, что все работает правильно.
Управление скоростью двигателя с помощью ШИМ сигнала
Управлять скоростью двигателя можно снижая подачу тока. Для этого вместо постоянного сигнала (на порты PB0, PB1, PB2, PB3) подается сигнал ШИМ. Суть ШИМ сигнала состоит в том, что это не постоянный сигнал, а быстрое включение и выключение. При этом интервал выключения можно изменять и направлять больше или меньше тока двигателю. Чем больше интервал выключения, тем медленней двигатель будет крутиться. В микроконтроллере AVR существует 2 способа получения ШИМ сигнала - программный ШИМ и аппаратный ШИМ.Программный ШИМ делается на отдельном контроллере просто записью в него программы, этот контроллер подключается к уже имеющемуся контроллеру и сигнал идет не напрямую от ATmega16 к IR2101, а через этот ШИМ контроллер. Такое можно сделать на более мелком контроллере, например, ATtiny2313, программа для ATtiny2313, которая превращает его в программный ШИМ контроллер, вот она, эта программа на языке AVR Assembler...
Программа | Комментарии | |
---|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Записываем 1-цы в регистр r16 Настроили порт B на вывод Записываем 0-ли в регистр r16 Настроили порт D на ввод Начало основной программы Записываем в r16 то что на порте D (читаем) Записываем в порт B прочтенные данные Задерживаем (для включения ШИМ на порт D надо подать 1) Записываем 0-ли в r16 Записываем в порт B эти 0-ли Задерживаем данные (это всегда 0) Переход на начало основной программы Начало функции delay1, которая задерживает 1 Держим 1-цу 200 операций Конец функции delay1 Начало функции delay0, которая задерживает 0 Держим 0-ль 120 операций Конец функции 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...Программа | Комментарии | |
---|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | Текущая позиция ШД - 0 стоит, туда 1234, обратно 4321 Сколько еще осталось открутить шагов Направление кручения - 0 туда, 1 обратно Задержка между шагами в периодах таймера T2 Текущее значение счетчика задержки Переменная показывает на каких линиях включать ШИМ Переменная показывает на каких линиях отключать ШИМ Первый параметр с ПК USB Второй параметр с ПК USB Подключаем дополнительные библиотеки WinAVR, которые необходимы Подключаем файлы Дескриптор USB Функция обработки USB пакета с ПК В USB пакете с ПК приходит 2 параметра числа - p1 и p2, в зависимости от их значений решаем что делать Обработка пришедших номеров p1 и p2 На приход нуля в первом параметре в пакете с ПК ставим включение и выключение лампочки, которая установлена на линии PB0 микроконтроллера AVR, второй параметр определяет - включить или выключить Единица будет настраивать параметры ШИМ Отключение таймеров счетчиков по приходу нуля Запрещаем прерывания от таймеров счетчиков T0 и T2 Останавливаем таймер счетчик T0 Останавливаем таймер счетчик T2 Включение таймеров счетчиков по приходу единицы Разрешаем прерывания - по совпадению, по переполнению Настраиваем T0 - 256 тактовый, без деления частоты Настраиваем T2 - 256 тактовый, деление частоты на 8 Ставим на любое число совпадение T2, оно не используется По двойке возвращаем частоту ШИМ 47 кГц По тройке установить частоту ШИМ 6 кГц По четверке сделать частоту несколько Гц Задать уровень подачи энергии на двигатель, заполнение интервала ШИМ - от 0 (1%) до 256 (100% энергии) Выключает питание, если что-то пошло не так Устанавливает сколько еще шагов открутить надо Устанавливает параметры задержки между шагами - сколько периодов таймера T2 держать задержку, перед тем как сделать следующий шаг Здесь устанавливается переменная, которая определяет направление кручения Это не используется, пока не нужно. Отправка пакета с 1 обратно от ПК от МК. Основной цикл программы Watchdog таймер включаем для повышения надежности Инициализация USB Делаем стартовый дисконект на 250 мс Устанавливаем на вывод порт B Разрешаем прерывания Бесконечно опрашиваем USB порт в ожидании пакета с ПК. Также watchdog таймер сбрасываем, который перезагружает МК в случае зависания. Прерывание по переполнению ШИМ таймера T0 - ставим высокий уровень сигнала на линиях, где это нужно, они в pwm1 и постоянно меняются Прерывание по совпадению таймера T0 - обнуляем все экономичным для расхода тактов способом Прерывание по переполнению шагового таймера T2. Если есть шаги для открутки и пришло время - делать их в установленном направлении или обесточить двигатель. |
Биты конфигурации для ATmega16A:
CKSEL3..0=1111 SUT0..1=10 BODEN=0 BODLEVL=1 BOOTRST=1 BOOTSZ0..1=00 EESAVE=1 CKOPT=0 SPIEN=0 JTAGEN=1 OCDEN=1 LB1..2=00 BLB=0000
Тех. поддержка ответит на ваши вопросы по этой статье
phpinbox@yandex.ru |