Как поменять вращение шагового двигателя 3д принтера
В этом посте я постараюсь вкратце рассказать про шаговые электродвигатели, и как с ними можно работать с помощью нашего любимого ардуино.
Многие из вас знакомы с маленькими моторчиками, из которых исходят всего 2 провода, они часто встречаются в детских игрушках, например, в машинках.
Это коллекторные электродвигатели постоянного тока. Они могут напрямую подключатся к источнику питания и будут всегда вращаться с постоянной скоростью, в зависимости от подаваемого напряжения. Если необходимо изменить направление вращения, то на нашем моторе нужно просто поменять местами "+" и "-" и он сразу начнёт крутиться в другую сторону. За счёт их простой конструкции, они имеют небольшую стоимость и простоту в управлении.
Но есть ещё один из распространенных типов двигателей - это шаговые электродвигатели.
Вы могли их встречать, если разбирали CD-DVD привода, жёсткие диски, принтеры или другие электронные устройства, в механической части которых нужно чётко контролировать обороты, перемещения или другие необходимые кинематические движения.
Вот так выглядит шаговый электродвигатель с винтовым валом из оптического привода:
Как видно - здесь уже больше, чем 2 провода и напрямую подключить такой мотор к источнику питания просто так не получиться из-за совсем другой конструкции самого двигателя. Если для нашего первого моторчика достаточно было подать "+" и "-" на соответственные клемы и он начинал вращаться, то для шагового электродвигателя нужно подавать цифровые электронные сигналы управления, которые будут сообщать двигателю на сколько и в какую сторону ему необходимо вращаться. Это возможно осуществить с помощью устройства, которое будет генерировать и отправлять эти сигналы на драйвер, а он, в свою очередь, напрямую управлять обмотками двигателя.
Мы рассмотрим пример, как подключить шаговый электродвигатель к Arduino Mega 2560 - именно оно и будет тем устройством, которое генерирует нужные электронные сигналы управления.
Я взял мотор формата Nema 17 - это гибридный шаговый двигатель, который часто встречается в 3Д принтерах, ЧПУ системах, робототехнике и т.д.
Фото двигателя в разрезе:
Драйвер на микросхеме TB6600 - это довольно неплохой контроллер, который можно использовать с двигателями до 4.5 А, 50 В. Для домашних 3Д принтеров и ЧПУ систем его полностью достаточно.
У данного двигателя 4 обмотки: A+, A-, B+, B-, их нужно соединить с соответствующими выходами на плате драйвера.
Для управления шаговым двигателем можно использовать различные библиотеки, которые упрощают жизнь, если необходимо как-то динамически управлять двигателем, например "AccelStepper" и тому подобные. Также есть различные программные комплексы для управления 3Д принтерами или ЧПУ станками.
Мы же рассмотрим простой пример вращения двигателя с постоянной скоростью, который не сложно будет повторить всем желающим. Также, так ещё удобно проверять общее состояние двигателя.
Здесь написан цикл, который беспрерывно будет отправлять логические сигналы к нашему драйверу, а он уже на двигатель.
Примерно так всё работает:
P.S. Сильно в теорию я не вдавался, потому что на это нужен не один пост, да и не всем она понравится :)
Arduino & Pi
1.1K поста 18.1K подписчиков
Правила сообщества
В нашем сообществе запрещается:
• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)
• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском
• Рассуждать на темы политики
P.S. Сильно в теорию я не вдавался, потому что на это нужен не один пост, да и не всем она понравится :)
Почему хотя бы не рассказать об отличиях униполярного от биполярного двигателя? Почему не привести схему модуля(хотя бы из даташита на микросхему)?
Ладно упущен режим микрошага, но основу то можно было скопипастить написать.
Зачем было использовать ардуину? Много нагляднее было бы пару кнопок повесить.
Ребят, вижу тут есть знающие люди.
Собираю фотопиццу (мало ли кто знаком), не крутит шаговый двигатель, бывает после танцев с бубном крутит, но очень странно (не по программе).
Драйвер шагового двигателя менял - не помогло
В чем может быть проблема?
Автор показывает, как быстро и равномерно крутится шаговый двигатель. Ясно. Понятно. Тема раскрыта на 10 из 10.
а обязательно покупать эту здоровую мандулу? DRV8825 прекрасно справляется с шаговиками до NEMA17 включительно и стоит в несколько раз дешевле + под них на ардуины есть такиеже дешманские шилды - например ардуино 2560 + шилд + 5 драйверов = 1050рублей на али
а можно статью про то, как с компа управлять этим всем. желательно с кодом.
т.е., допустим, мне надо,чтобы после нажатия кнопки на компе, двигатель совершал серию поворотов. как это программируется?
Сделай подтяжку на s-d-e. Думаю, дело в этом. Когда не включится - проверни вал пальцами. Если провернется - точно подтяжка. Ну, или питание, но его-то ты смотрел, я думаю.такое ощущение, что автор и рад бы нам рассказать о шаговиках, но не разбирается в теме абсолютно. вешать NEMA17 на такой монструозный драйвер? перепутать количество обмоток? использовать такой дикий метод управления?
хотя бы схему шаговика в пэинте нарисовали, авось сами разобрались бы, как он работает.
Похоже, этим драйвером мотор от сидюка не запустишь - напряжение слишком высокое. У мотора +5в, а питание драйвера от 8 в начинается.
Вот расскажите мне как вы к этим двигателям приделываете достойно какую нибудь звездочку или сверлышко?
. ну т.е. у меня на одном таком движке было по маркировке до 38V и 3А максимальная подача (оптимальное 12V & 1.5A), где то около 30V&3A подавал. Как бы я не крепил это сверло, болтами, суперклеем, и тем и тем, эпоксидкой также вместе взятой и т.д. и т.п. в т.ч. и резал/сверлил это чертову маленькую ось, чтоб хоть как в неё вцепиться (по сути надо было его в таком режиме использовать весьма недолго, так что должно было быть норм), всё срывало! . если застревало хоть в мало-мальски не протачиваемом проёме, т.к. крутилось бешено, то даже небольшое торможение со временем всё равно давало срыв и приходилось монтажить заново. Да конечно я и искал напряжение оптимальное, но это либо получалось дико долгое сверление, которое добивало, либо срывало.
Вот как вы за такую ось цепляетесь нормально? . такая ж мелкая сволочь.
Rammstein - mutter на шаговых двигателях
Dolphin - Кокон
System of a down - Chop suey (Cover)
Небольшой проект выходного дня
Нужна критика электронщика
Я давеча задумался, есть драйвер uln2003 и шаговики от дисководов, можно ли их задружить? Конечно ясно, что uln2003 подходит только для униполярных движков(или биполярных только без реверса), но если сделать обвес?
Взяв за основу полный мост и безжалостно его обрезав, я получил такую вот схемку питания одной обмотки.
Попытаюсь проиллюстрировать режимы работы схемы. Сорри за мелкие буквы.
В итоге хотелось бы услышать, какие в этой схеме есть недочёты? Ну, не считая того, что высокий логический уровень на обоих пинах угробит uln-ку к чертям собачьим.
Короче, жду суровой критики :)
Одноступенчатый редуктор с приводом от Шагового Двигателя
В этом посте я хочу рассказать про изготовление при помощи ранее изготовленного мной станка с ЧПУ одноступенчатой прямозубой передачи.
Не так давно мной был спроектирован портальный станок с ЧПУ, про его разработку и постройку на этом ресурсе расположена моя предыдущая статья.
Сразу хочу сказать, что данный проект служит только для получения опыта проектирования простых зубчатых пар и их изготовления для возможного применения в последующих проектах.
Так как на изготовленном станке планировалось обрабатывать не только дерево и пластики, а еще и дюраль, то интересно было сделать зубчатую пару как раз из этого материала.
По наличию у меня были обрезки дюралевого листа толщиной 6мм. В качестве привода я решил использовать Шаговый Двигатель (ШД) 23HS8430, он тоже у меня был в наличие и валялся без дела.
Проектирование началось с моделирования всего механизма в среде Компас 3Д, сразу же возникло несколько ограничений, ввиду малого размера дюралевой заготовки, а это соответственно повлияло на габариты ведомой шестерни, а так же на количество и размер зубьев, так как наименьший диаметр фрезы которая у меня была, составлял всего 2мм, а это значит что наименьший радиус которым я могу описать контур в процессе изготовления 1мм.
Учтя все ограничения, я перевел двигатель в 3Д модель и дальше стал сопрягать с ним остальные детали…
Использованная мной утилита производит расчет и построение шестерни, также если при расчете возникают ошибки, то она об этом информирует. После расчета выводит отчет со всеми геометрическими размерами. Из него мне потребовалось только межосевое расстояние, так как саму шестерню он прорисовывает автоматически.
Для большего интереса я решил сделать шестерни с разным количеством зубьев и передаточным отношением 2:1.
Исходя из межосевого расстояния, было нарисовано основание. С ним сопрягли двигатель и ось, на которой будет крепиться ведомая шестерня.
После окончания 3Д проектирования, все детали перевел в 2Д вид и сохранил их в векторном формате *.dxf.
Для того чтобы вырезать все детали на станке, я преобразовал векторный формат в G-code через постпроцессор в программе ArtCam. Полученный файл загрузил в станок и после обнуления координат, вырезал все детали.
В ведомую шестерню запрессовал подшипник, он достаточно плотно вошел, так как я занизил отверстие на несколько соток.
Отдельно на токарном станке выточили ось, на которую устанавливается ведомая шестерня.
Дальше все достаточно просто, собрал узел в едино, и осталось только его закрутить.
Но пришлось подождать месяц, так как драйвера для ШД у меня не оказалось, и я заказал драйвер DM542 на Али.
Для того чтобы ШД закрутился на вход драйвера требуется подать частотный сигнал, для этого я на ардуино уно собрал генератор частоты с изменяемой частотой с помощью внешне подключенного энкодера на 24 импульса.
Сразу хочу оговориться, что код для прошивки ардуино нашел на просторах Интернета.
Генератор частоты может: — генерировать меандр на 16 битном таймере. Диапазон частот 1Гц — 8МГц. Регулировка частоты производится энкодером. До частоты 2,8 кГц разрешение 1 герц, на частотах выше таймер аппаратно уже не может поддерживать это разрешение, поэтому более высокие частоты синтезируются, задавая параметром не требуемую частоту, а просто инкременируя регистр сравнения. Получается чем выше частота — тем больше шаг между щелчками энкодера. Вращая энкодер, с не нажатой кнопкой частота меняется на 1Гц; с нажатой кнопкой один шаг — 100Гц. Выше 2,8кГц. вращение энкодера с нажатой кнопкой так — же ускоряет счёт. Программного подавления дребезга контактов энкодера нет, поэтому нужно повесить конденсаторы 0,01..0,1 мкф. относительно земли. На кнопке конденсатор не обязателен. Рассчитанная математически частота выводится в сериал.
/* Генератор 1 Hz..8 MHz. Энкодер подключен к пинам A0 и A1, кнопка
энкодера подключена к A2. Требуется использовать конденсаторы 0,01..0,1uf
относительно земли на каждый из 2х выводов энкодера.
Скетч для ардуино на мк atmega328 (UNO,Nano, MiniPro)
pinMode (9,OUTPUT); // выход генератора
pinMode(A0,INPUT); // с рассчетом, что энкодере внешняя подтяжка-
pinMode(A1,INPUT); // -к шине питания. Если нету, то подтянуть программно.
pinMode(A2,INPUT_PULLUP); //кнопка энкодера
PCICR=1<<PCIE1; //разрешить прерывание PCINT
PCMSK1=(1<<PCINT9);// По сигналу на А1 создавать прерывание
TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера
static boolean gen_mode=0; //флаг режима управления
static uint32_t enc=1; //переменная счёта энкодера
uint32_t divider=1; //переменная коэфф. деления прескалера
byte n=PINC&3; //считать значение энкодера
boolean knopka = PINC&(1<<2); // 0-кнопка нажата, 1-кнопка НЕ нажата.
if (freq<2848) gen_mode=0; //переключение режима управления по частоте
if (freq>=2848) gen_mode=1; //переключение режима управления по OCR
// Если увеличение частоты
else knopka? enc++ : enc+=100; // в нч режиме
// Если уменьшение частоты
divider=1; ocr = (F_CPU / enc /2 /divider) -1;
//запись в регистр прескалера
case 1: TCCR1B=1|(1<<WGM12); break;
case 8: TCCR1B=2|(1<<WGM12); break;
case 64: TCCR1B=3|(1<<WGM12); break;
case 256: TCCR1B=4|(1<<WGM12); break;
case 1024: TCCR1B=5|(1<<WGM12); break; >
freq= (float) F_CPU/2 / (OCR1A+1) /divider;
> //end if !gen_mode
После того как все собрал, подсоединил и залил в Arduino скетч, можно приступать к включению:
Если вы планируете создать свой собственный 3D-принтер или станок с ЧПУ, вам нужно будет управлять несколькими шаговыми двигателями. Если использовать для этого только Arduino, то большая часть скетча будет занята кодом управления шаговыми двигателями и не останется много места для чего-то еще.
Модуль A4988 может контролировать как скорость, так и направление вращения биполярного шагового двигателя, такого как NEMA 17, использую всего два вывода контроллера.
Вы знаете, как работают шаговые двигатели?
Шаговые двигатели используют зубчатое колесо и электромагниты (катушки), позволяющие вращать ось по одному шагу за раз.
- Последовательность импульсов определяет направление вращения двигателя.
- Частота импульсов определяет скорость двигателя.
- Количество импульсов определяет угол поворота.
Микросхема драйвера шагового двигателя A4988
Модуль собран на чипе A4988. Не смотря на свой малый размер (всего 0,8 ″ × 0,6 ″), но обладает хорошими характеристиками.
Драйвер шагового двигателя A4988 имеет высокую выходную мощность (до 35 В и 2 А) и позволяет управлять одним биполярным шаговым двигателем с выходным током до 2 А на катушку, например NEMA 17.
Для удобства работы драйвер имеет встроенный транслятор. Использование транслятора позволило уменьшить количество управляющих контактов до 2, один для управления шагами, а другой для управления направлением вращения.
Драйвер предлагает 5 различных разрешений шага, а именно:
- полный шаг
- 1/2 шага
- 1/4 шага
- 1/8 шага
- 1/16 шага
Распиновка драйвера A4988
Драйвер A4988 имеет всего 16 контактов, которые связывают его с внешним миром. Распиновка у A4988 следующая:
Давайте ознакомимся со всеми контактами по очереди.
Выводы питания
На самом деле A4988 требует подключения двух источников питания.
VDD и GND используется для управления внутренней логической схемой. Напряжение питания должно находиться в пределах от 3 до 5,5 В.
Vmot и GND для обеспечения питания шагового двигателя. Тут напряжение в пределах от 8 до 35 В.
Согласно datasheet, для питания двигателя требуется соответствующий разделительный конденсатор рядом с платой, способный выдерживать ток 4 А.
Выводы выбора микрошага
Драйвер A4988 допускает использование режима микрошага. Это достигается за счет подачи питания на катушки с промежуточными уровнями тока.
Например, если вы решите управлять шаговым двигателем NEMA 17 с шагом 1,8 градуса (200 шагов на оборот) в режиме 1/4 шага, то двигатель будет выдавать 800 микрошагов на оборот.
Драйвер A4988 имеет три вывода селектора размера шага (разрешения), а именно: MS1, MS2 и MS3. Установив соответствующие логические уровни на эти контакты, мы можем настроить двигатели на одно из пяти ступенчатых разрешений.
По умолчанию эти три контакта подтянуты к земле внутренним резисторам. Если мы оставим эти выводы не подключенными, то двигатель будет работать в режиме полного шага.
Выводы управления
Драйвер A4988 имеет два управляющих входа, а именно: STEP и DIR.
Если вы просто хотите, чтобы двигатель вращался только в одном направлении, то вы можете соединить вывод DIR непосредственно с VCC или GND соответственно.
Выводы STEP и DIR не подтянуты внутренними резисторами, поэтому вы не должны оставлять их не подключенными.
Выводы управления питанием A4988
A4988 имеет три различных вывода для управления состоянием питания, а именно. EN, RST и SLP.
Если вам не нужно использовать вывод RST, вы можете подключить его к соседнему контакту SLP / SLEEP, чтобы вывести его на высокий уровень и включить драйвер.
Выводы для подключения шагового двигателя
Выходные контакты: 1B, 1A, 2A и 2B.
К этим выводам можно подключить любой биполярный шаговый двигатель с напряжением питания от 8 до 35 В.
Каждый выходной контакт модуля может обеспечить ток до 2 А. Однако величина тока, подаваемого на двигатель, зависит от источника питания системы, системы охлаждения и настройки ограничения тока.
Чрезмерное рассеивание мощности микросхемы драйвера A4988 приводит к повышению температуры, которая может выйти за пределы возможностей микросхемы, что, вероятно, приведет к ее повреждению.
Даже если микросхема драйвера A4988 имеет максимальный номинальный ток 2 А на катушку, микросхема может подавать только около 1 А на катушку без перегрева.
Для достижения более 1 А на катушку требуется радиатор или другой метод охлаждения.
Драйвер A4988 обычно поставляется с радиатором. Желательно установить его перед использованием драйвера.
Ограничение тока
Перед использованием драйвера нам нужно сделать небольшую настройку. Нам нужно ограничить максимальный ток, протекающий через катушки шагового двигателя, и предотвратить превышение номинального тока двигателя.
На драйвере A4988 есть небольшой потенциометр, который можно использовать для установки ограничения тока. Вы должны установить ограничение по току равным или ниже номинального тока двигателя.
Для этого есть два метода:
Способ 1:
В данном случае мы собираемся установить ограничение тока путем измерения напряжения (Vref) на выводе «ref».
- Взгляните на техническое описание вашего шагового двигателя. Запишите его номинальный ток. В нашем случае мы используем NEMA 17 200 шагов/об, 12 В 350 мА.
- Переведите драйвер в полношаговый режим, оставив три контакта выбора микрошага отключенными.
- Удерживайте двигатель в фиксированном положении, не синхронизируя вход STEP.
- Во время регулировки измерьте напряжение Vref (один щуп мультиметра на минус питания, а другой к металлическому корпусу потенциометра).
- Отрегулируйте напряжение Vref по формуле:
ограничение тока = Vref x 2,5
Например, если ваш двигатель рассчитан на 350mA, вы должны установить опорное напряжение 0,14В.
Способ 2:
В данном случае мы собираемся установить ограничение тока, измеряя ток, протекающий через катушку двигателя.
- Взгляните на техническое описание вашего шагового двигателя. Запишите его номинальный ток. В нашем случае мы используем NEMA 17 200 шагов / оборот, 12 В 350 мА.
- Переведите драйвер в полношаговый режим, оставив три контакта выбора микрошага отключенными.
- Удерживайте двигатель в фиксированном положении, не синхронизируя вход STEP. Не оставляйте вход STEP висящим в воздухе, подключите его к источнику питания логики (5 В)
- Подключите амперметр последовательно с одной из катушек шагового двигателя и измерьте фактический ток.
- Возьмите небольшую отвертку и отрегулируйте потенциометр ограничения тока, пока не установите номинальный ток шагового двигателя.
Подключение драйвера шагового двигателя A4988 к Arduino UNO
Теперь, когда мы имеем всю необходимую информацию о драйвере A4988, мы можем перейти к подключению его к нашей Arduino Uno .
Предупреждение:
Подключение или отключение шагового двигателя при включенном драйвере может привести к его повреждению.
Затем подключите вывод RST к соседнему выводу SLP/SLEEP, чтобы драйвер оставался включенным. Также держите контакты выбора микрошага отключенными, чтобы двигатель работал в полношаговом режиме.
Наконец, подключите источник питания двигателя к контактам VMOT и GND. Не забудьте установить большой развязывающий электролитический конденсатор 100 мкФ на контакты источника питания двигателя, рядом с платой.
Следующий скетч даст вам полное представление о том, как управлять скоростью и направлением вращения биполярного шагового двигателя с помощью драйвера шагового двигателя A4988, и может служить основой для более практических экспериментов и проектов.
Пояснение к скетчу:
Скетч начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR A4988. Мы также определяем stepsPerRevolution. Установите его в соответствии со спецификациями шагового двигателя.
В разделе setup() кода все контакты управления двигателем объявлены как цифровой выход.
В цикле loop() мы медленно вращаем двигатель по часовой стрелке, а затем быстро вращаем его против часовой стрелки с интервалом в секунду.
Управление шаговым двигателем без библиотеки идеально подходит для простых приложений с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, то вам понадобится библиотека.
Итак, для нашего следующего эксперимента мы будем использовать расширенную библиотеку шаговых двигателей под названием AccelStepper library. Она поддерживает:
- Ускорение и замедление.
- Одновременное управление несколькими шаговыми двигателями с независимым шагом для каждого двигателя.
Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.
Установка библиотеки
Чтобы установить библиотеку, перейдите в Эскиз> Include Library> Manage Libraries… Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте результаты поиска, набрав «Accelstepper». Щелкните первую запись и выберите «Установить».
Скетч Arduino
Вот простой код, который ускоряет шаговый двигатель в одном направлении, а затем замедляется, чтобы остановиться. Как только двигатель совершает один оборот, он меняет направление вращения. И он повторяет это снова и снова.
Пояснение к скетчу:
Мы начинаем с подключения недавно установленной библиотеки AccelStepper.
Определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Устанавливаем motorInterfaceType значение 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).
Затем мы создаем экземпляр библиотеки с именем myStepper.
В функции setup() мы сначала устанавливаем максимальную скорость двигателя 1000. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя.
Затем мы устанавливаем обычную скорость 200 и количество шагов, например, 200 (поскольку NEMA 17 совершает 200 шагов за оборот).
В функции loop() мы используем оператор If, чтобы проверить, как далеко двигателю нужно проехать (путем чтения distanceToGo), пока он не достигнет целевой позиции (moveTo). Как только distanceToGo станет равен нулю мы переключаем двигатель в противоположное направление, изменив moveTo на противоположное значение относительно его текущего положения.
Теперь в конце цикла мы вызываем функцию run(). Это самая важная функция, поскольку шаговый двигатель не будет работать, пока эта функция не будет выполнена.
В прошлой части своего повествования о подключении ШД к ардуино я остановился на том, что собрал на макетной плате стабилизатор напряжения на 5 В, установил плату управления (ПУ) и подготовил выводы ШД. Настройка самой платы заключается в установке тока двигателя и выбора значения микрошага.
Начнём с тока двигателя. На ПУ надо подать только питание логической части, т.е. 5 В. Плюс подается на вывод VDD (может быть обозначен VCC, VLOG), минус на GND. ШД и его питание пока не подаю. Сам процесс регулировки сводится к установке Vref.
Формула Vref для A4988 изменяется от номинала токочувствительных резисторов. Это два чёрных прямоугольника на плате драйвера. Обычно подписаны R050 или R100.
Vref = Current Limit * 8 * (RS)
RS = 0,100
Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25
RS = 0,050
Vref = Current Limit * 8 * 0,050 = Current Limit / 2,5
где
Vref – напряжение на пине, который задаёт ток двигателя.
Current Limit – ток шагового двигателя.
RS — сопротивление резистора — датчика тока.
Измерять Vref проще всего на подвижном выводе подстроечного резистора. Минус мультиметра (в режиме измерения напряжения постоянного тока соединяется с выводом GND, а плюс цепляется за жало отвёрточки, которой кручу подстроечный резистор. Ток своего двигателя я не знал и подобрал опытным путём.
Если пересчитать по формуле, то получу ток:
Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25
отсюда
Current Limit = 1,25 * Vref = 1,25 * 0,28 = 0,35 А или 350 мА
С током разобрался. Теперь микрошаг.
За микрошаг отвечают выводы MS (micro step) MS1, MS2, MS3.
Теперь пару слов о том, что такое микрошаг. Из таблицы видно, что это дробное число. Допустим ШД совершает полный оборот за 200 шагов. Если будет выбран микрошаг 1/4, то полный оборот будет совершаться уже за 800 шагов, а при микрошаге 1/16 — за 3200 шагов. Для чего это нужно? При полном шаге получается больший момент, меньшая точность и больше шумность. Чем мельче шаг, тем выше точность позиционирования, плавнее ход (особенно на малых частотах вращения) и значительно меньше шума при работе. Однако при этом момент на валу двигателя будет меньше. Забегая вперёд, скажу что поигрался с разными значениями, но остановился на 1/16, соединив выводы MS1, MS2, MS3 с выводом VDD.
ПУ настроена — можно подключать двигатель и его питание.
Напомню, что одна из обмоток у меня это синий и зелёный провод, вторая — белый и оранжевый.
Схематически подключение ШД к ПУ выглядит у меня так:
После подачи напряжений питания на плату ШД стал произвольно двигаться. Виной тому наводки на выводах STEP (шаг) и DIR (direction — направление) — эти выводы отвечают за управление вращением ШД.
Если соединить вывод DIR с выводом VDD, ШД будет двигаться в одну сторону, а если с GND, то в другую.
При переходе напряжения от низкого к высокому уровню на выводе STEP ШД совершает 1 микрошаг. Т.е. для вращения двигателя на этот вывод нужно подавать прямоугольные импульсы с низким уровнем около нуля и высоким около 5 В, так называемые TTL-уровни. Генератором таких импульсов у меня будет плата ардуино.
Я загрузил в неё скетч из примеров под названием Blink. В оригинале он формирует на 13 выводе платы (в моём случае Arduino Nano) импульсы с частотой 1/2 Гц (1 с подается высокий уровень, затем 1 с низкий уровень). При такой частоте ШД совершил бы один оборот (при микрошаге 1/16) за 6400 с! Так долго я ждать не хотел))) и стал повышать частоту двигателя. Устойчивой работы мне удалось добиться на частотах вплоть до 10 кГц. Т.е. длительность импульса и паузы у меня составляют по 50 мкс. Операторы delay в скетче пришлось заменить на delayMicroseconds, потому что delay умеет работать только со временами от 1 мс. В итоге скетч стал выглядеть так:
Затем я решил доработать скетч таким образом, чтобы двигатель периодически менял направление вращения. Доработанный скетч выглядит так:
По подключению Arduino.
Пробный запуск показал полную работоспособность схемы. Двигатель не перегревается и шаги не пропускает. Цель достигнута.
Для тех, кто осилил весь материал, видео устройства в работе.
В прошлой части своего повествования о подключении ШД к ардуино я остановился на том, что собрал на макетной плате стабилизатор напряжения на 5 В, установил плату управления (ПУ) и подготовил выводы ШД. Настройка самой платы заключается в установке тока двигателя и выбора значения микрошага.
Начнём с тока двигателя. На ПУ надо подать только питание логической части, т.е. 5 В. Плюс подается на вывод VDD (может быть обозначен VCC, VLOG), минус на GND. ШД и его питание пока не подаю. Сам процесс регулировки сводится к установке Vref.
Формула Vref для A4988 изменяется от номинала токочувствительных резисторов. Это два чёрных прямоугольника на плате драйвера. Обычно подписаны R050 или R100.
Vref = Current Limit * 8 * (RS)
RS = 0,100
Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25
RS = 0,050
Vref = Current Limit * 8 * 0,050 = Current Limit / 2,5
где
Vref – напряжение на пине, который задаёт ток двигателя.
Current Limit – ток шагового двигателя.
RS — сопротивление резистора — датчика тока.
Измерять Vref проще всего на подвижном выводе подстроечного резистора. Минус мультиметра (в режиме измерения напряжения постоянного тока соединяется с выводом GND, а плюс цепляется за жало отвёрточки, которой кручу подстроечный резистор. Ток своего двигателя я не знал и подобрал опытным путём.
Если пересчитать по формуле, то получу ток:
Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25
отсюда
Current Limit = 1,25 * Vref = 1,25 * 0,28 = 0,35 А или 350 мА
С током разобрался. Теперь микрошаг.
За микрошаг отвечают выводы MS (micro step) MS1, MS2, MS3.
Теперь пару слов о том, что такое микрошаг. Из таблицы видно, что это дробное число. Допустим ШД совершает полный оборот за 200 шагов. Если будет выбран микрошаг 1/4, то полный оборот будет совершаться уже за 800 шагов, а при микрошаге 1/16 — за 3200 шагов. Для чего это нужно? При полном шаге получается больший момент, меньшая точность и больше шумность. Чем мельче шаг, тем выше точность позиционирования, плавнее ход (особенно на малых частотах вращения) и значительно меньше шума при работе. Однако при этом момент на валу двигателя будет меньше. Забегая вперёд, скажу что поигрался с разными значениями, но остановился на 1/16, соединив выводы MS1, MS2, MS3 с выводом VDD.
ПУ настроена — можно подключать двигатель и его питание.
Напомню, что одна из обмоток у меня это синий и зелёный провод, вторая — белый и оранжевый.
Схематически подключение ШД к ПУ выглядит у меня так:
После подачи напряжений питания на плату ШД стал произвольно двигаться. Виной тому наводки на выводах STEP (шаг) и DIR (direction — направление) — эти выводы отвечают за управление вращением ШД.
Если соединить вывод DIR с выводом VDD, ШД будет двигаться в одну сторону, а если с GND, то в другую.
При переходе напряжения от низкого к высокому уровню на выводе STEP ШД совершает 1 микрошаг. Т.е. для вращения двигателя на этот вывод нужно подавать прямоугольные импульсы с низким уровнем около нуля и высоким около 5 В, так называемые TTL-уровни. Генератором таких импульсов у меня будет плата ардуино.
Я загрузил в неё скетч из примеров под названием Blink. В оригинале он формирует на 13 выводе платы (в моём случае Arduino Nano) импульсы с частотой 1/2 Гц (1 с подается высокий уровень, затем 1 с низкий уровень). При такой частоте ШД совершил бы один оборот (при микрошаге 1/16) за 6400 с! Так долго я ждать не хотел))) и стал повышать частоту двигателя. Устойчивой работы мне удалось добиться на частотах вплоть до 10 кГц. Т.е. длительность импульса и паузы у меня составляют по 50 мкс. Операторы delay в скетче пришлось заменить на delayMicroseconds, потому что delay умеет работать только со временами от 1 мс. В итоге скетч стал выглядеть так:
Затем я решил доработать скетч таким образом, чтобы двигатель периодически менял направление вращения. Доработанный скетч выглядит так:
По подключению Arduino.
Пробный запуск показал полную работоспособность схемы. Двигатель не перегревается и шаги не пропускает. Цель достигнута.
Для тех, кто осилил весь материал, видео устройства в работе.
Читайте также: