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


Обычно у них четыре вывода, две обмотки. В большинстве случаем, но есть и другие конечно. Я рассмотрю самый ходовой.
Схема шагового двигателя
Его схема обмоток выглядит примерно так:

- Конденсатор емкостью 470-3300 мкФ.
- Источник переменного тока 12 В.

Середину проводов скручиваем и запаиваем.

Подключаем конденсатор одним выводом к середине обмоток, а вторым выводом в источнику питания на любой выход. Фактически конденсатор будет параллелен одной из обмоток.


Подаем питание и двигатель начинает крутиться.

Если перекинуть вывод конденсатора с одного выхода питания на другой, то вал двигателя начнет вращаться в другую сторону.

Все предельно просто. А принцип работы этого всего очень прост: конденсатор формирует сдвиг фаз на одной из обмоток, в результате обмотки работают почти попеременно и шаговый двигатель крутится.
Очень жалко то, что обороты двигателя невозможно регулировать. Увеличение или уменьшение питающего напряжения ни к чему не приведет, так как обороты задаются частотой сети.
Хотелось бы добавить, что в данном примере используется конденсатор постоянного тока, что является не совсем правильным вариантом. И если вы решитесь использовать такую схему включения, берите конденсатор переменного тока. Его так же можно сделать самому, включив два конденсатора постоянного тока встречно-последовательно.
Шаговый двигатель с ручным управлением в качестве мотора
Описание Шаговый двигатель с ручным управлением в качестве мотора
Если в качестве двигателя использовать шаговый двигатель, то можно упростить систему управления и отказаться от микроконтроллера. Это готовая сборка блоков, для простого способа ручного управления четырехполюсным шаговым двигателем. Шаговый двигатель является надежным мотором рассчитанным на продолжительную работу, у него отсутствует щеточный узел и он может заменить коллекторные моторы в схемах низкооборотистых приводов, Устройство состоит из шагового мотора, драйвера и блока регулятора выдающего импульсы. Они передаются на драйвер, который вращает шаговый двигатель как обычный мотор редуктор, регулировку оборотов производят переменным резистором, а направление вращения переключателем. На драйвере имеются грубые настройки параметров работы. Схема позволяет управлять шаговых двигателей (однополярный или биполярный) вручную, с помощью регулятора оборотов, без использования контроллера или компьютера, поэтому никакого программирования не требуется.
Напряжение питания: 9-12 вольт. ток 1-3 ампера.
Преимущества и недостатки шагового электродвигателя
К преимуществам эксплуатации шагового двигателя можно отнести:
В шаговых электродвигателях угол поворота соответствует числу поданных электрических сигналов, при этом, после остановки вращения сохраняется полный момент и фиксация;
Точное позиционирование – обеспечивает 3 – 5% от установленного шага, которая не накапливается от шага к шагу;
Обеспечивает высокую скорость старта, реверса, остановки;
Отличается высокой надежностью за счет отсутствия трущихся компонентов для токосъема, в отличии от коллекторных двигателей;
Для позиционирования шаговому двигателю не требуется обратной связи;
Может выдавать низкие обороты для непосредственно подведенной нагрузки без каких-либо редукторов;
Сравнительно меньшая стоимость относительно тех же сервоприводов;
Обеспечивается широкий диапазон управления скоростью оборотов вала за счет изменения частоты электрических импульсов.
К недостаткам применения шагового двигателя относятся:
Может возникать резонансный эффект и проскальзывание шагового агрегата;
Существует вероятность утраты контроля из-за отсутствия обратной связи;
Количество расходуемой электроэнергии не зависит от наличия или отсутствия нагрузки.
Использование шагового двигателя как обычного мотора:
Шаговый двигатель это устройство, которое преобразует электрические импульсы в дискретные, механические перемещения. Шаговый двигатель практически ничем не отличается от двигателей других типов. Шаговые двигателя в настоящее время широко применяются в качестве приводов в принтерах, сканерах, DVD-проигрывателях и многих других . В случае выхода из строя такого прибора, из него можно извлечь шаговый мотор и применить его по другому подходящему назначению, без применения электронного управления.
С этим товаром смотрят
Подключение шаговых двигателей
Что делать если при подключении шагового двигателя — он отказывается вращаться? Что делать если подключенный двигатель дрожит, трещит или вращается не в ту сторону. В этой статье мы постараемся решить эти проблемы не прибегая к изменению настроек электроники.
Почему двигатель на осях X, Y или Z издает странные звуки?
Первое, что нужно проверить — это то насколько хорошо у вас натянут ремень. Дребезг и посторонние звуки могут возникнуть при слабой натяжке ремней. Что в свою очередь приводит к потере тяги и имеет тот же эффект, что и возможные проблемы с проводкой. Начните с проверки натяжения ремней на вашем 3D принтере. Если на ваш взгляд с натяжкой всё в порядке переходите к следующему пункту.
Второе, что необходимо проверить — это целостность проводки. Высокие ускорения, длительная печать, не правильная организация проводки могут приводить к повреждению кабеля от платы управления 3D принтера к шаговому двигателю.
Вы установили новый двигатель, поменяли провод или установили новую плату управления и теперь всё не работает или работает не правильно?
Итак, вы установили установили/поменяли новый шаговый двигатель NEMA или поставили новую плату управления 3D принтера. Вероятнее всего сигналы подаваемые от платы управления к двигателю теперь другие, т.е. шаговый двигатель не получает правильный или полный сигнал. Из-за этого шаговый двигатель «сходит с ума» — гремит, шумит или дергается.
Почему же не работает?
Шаговые двигатели NEMA 17 устанавливаемые на практически все 3D принтеры работают на основе обмоток, соединенных попарно, и каждая из них называется фазой. Эти фазы перемещают магниты внутри шагового двигателя. Когда проводка для этих пар не совпадают или если кабель поврежден, шаговый двигатель не может правильно вращаться, так как северный и южный полюса магнитов не могут получать правильный сигнал и правильно вращаться.
Существует огромное количество производителей как самих двигателей так и электроники, которая управляет этими двигателями. И никто из производителей не разработал стандарт подключения. Из-за этого проводки шаговых двигателей могут отличаться, а цвета проводов в кабеле которые к ним подключаются ничего не значат.

Кабели для шаговых двигателей
Кроме того, последовательность подключения к плате управления 3D принтера вряд ли будет соответствовать шаговым двигателям. Из-за этого на шаговый двигатель поступает неверный сигнал и он начнет «глючить» — дрожать, греметь или даже двигаться только в одном направлении.

Разъем двигателя в плате BTT SKR mini E3

Разъем двигателя в плате BTT Octopus
Для некоторых плат в свою очередь есть исключения. Например, это касается плат выпускающихся для замены оригинальных 1 в 1.Для самого популярного 3D принтера Ender-3 насколько производителей выпускают платы взамен оригинально устанавливаемой на этот 3D принтер, например, BTT SKR Mini E3 V2 — это специализированная материнская плата для замены платы от Creality. И следовательно проводка в BTT SKR Mini E3 полностью совпадает с проводкой оригинальной платы управления.
Как найти правильное подключение?
Есть несколько быстрых и простых способов определить катушки шагового двигателя.
1. «Прозвонка» с помощью мультиметра.
Первое , вы можете использовать мультиметр для проверки целостности цепи. Переведите мультиметр в режим «прозвонки» цепи, который обычно имеет значок диода или зуммера.

Режим прозвонки на мультиметре

Прозвонка шагового двигателя
Затем подсоедините один щуп мультиметра к крайнему левому контакту на двигателе. Затем с помощью другого щупа проверьте один из двух средних контактов. Когда мультиметр начнет отображать значение на дисплее или издаст звуковой сигнал, это значит что вы нашли парное соединение катушку. Повторите тоже самое на правой стороне разъема: подсоедините один щуп на правый контакт двигателя, а вторым щупом проверьте один из двух средних контактов. Вы нашли контакты обмоток двигателя.
2. Поиск светодиодом
Один из самый простых и надежный методов. Возьмите обычный круглый светодиод на 3В. Подключите разъем к двигателю, а в разъем который подключается к плате вставьте светодиод. Теперь вручную прокрутите вал двигателя. Если светодиод загорелся — вы нашли контакты обмотки.

Поиск обмотки шагового двигателя с помощью светодиода

Обмотка шагового двигателя найденная с помощью светодиода
3. Поиск замыканием
Другой метод проверки соединений шагового двигателя заключается в использовании двух проводов с разъемом DuPont на одной стороне и оголенным проводом на другом. Вначале скрутите два оголенных провода вместе. Затем подключите один разъем Dupont в крайний левый контакт на двигателе а второй разъем Dupont в один из средних контактов на двигателе. Как и в случае со светодиод, поверните вал шагового двигателя. Если усилие на валу изменилось (увеличился крутящий момент), значит, вы нашли соединение обмотки.

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

Распиновка контактов шагового двигателя на BTT SKR E3
Большинство производителей плат управления для 3D-принтеров указывают распиновку контактов в технических характеристиках самих плат или в руководствах. Проверьте документацию своей платы управления на онлайн ресурсах, например GitHub. У таких производителей как BigtTeeTech, MKS, FLYmaker (Mellow Fly) обязательно есть ресурсы с подробным описанием распиновки. Как только вы найдете распиновку, вы сопоставьте найденные контакты двигателя с контактами 1А и 1B на плате управления. Затем подключите вторую обмотку к контактам 2A и 2B.
Подключили двигатель, а он движется не в ту сторону
Подключенный двигатель работает тихо, так как надо, вот только крутит не в ту сторону. Не стоит отчаиваться. Есть довольно простое решение заставить вал двигателя вращаться в правильном направлении.
Все что вам нужно сделать — это поменять местами провода обмотки. Если у вас красный + черный провод соответствуют одной обмотке, то вам необходимо поменять их местами чтобы стало черный + красный провод. Ту же операцию можно проделать и с парой средних проводов. Эту операцию необходимо проделать только на одном разъеме провода.

Смена вращения вала шагового двигателя. Было.

Смена вращения вала шагового двигателя. Стало.
Ту же операцию можно проделать и с парой средних проводов. Эту операцию необходимо проделать только на одном разъеме провода.
Как вытащить провод из кабеля шагового двигателя?
Вначале не помешает сделать фото или записать расположение контактов, чтобы запомнить начальное положение контактов проводов. Затем, с помощью пинцета или небольшой плоской отвертки поднимите защелку на разъеме. Прежде чем отпустить защелку, вытащите провод с из разъема. Постарайтесь не отломить защелку. После того как необходимые провода вытащены, вставьте их обратно, но уже на новые места разъема. Если вы решите проделать эту операцию на разъеме подключаемом к плате управления, то действия будут совпадать.

Замена проводов в шаговом двигателе
Изучаем миниатюрный шаговый двигатель
Шаговые двигатели нашли широкое применение в современной промышленности и самоделках. Их используют там, где необходимо обеспечить точность позиционирования механических узлов, не прибегая к помощи обратной связи и точным измерениям.
Сегодня хочу поговорить об особой разновидности шаговых моторов — миниатюрные шаговые двигатели, которые применяются в конструкциях оптических систем. Мы подробно рассмотрим их устройство и способы управления такими крошечными моторчиками.
Шаговый двигатель — бесколлекторный (бесщёточный) электрический двигатель с несколькими обмотками (фазами), расположенными на статоре и магнитами (часто постоянными) на роторе. Подавая напряжения на обмотки статора, мы можем фиксировать положение ротора, а подавая напряжение на обмотки последовательно можно получить перемещение ротора из одного положения в другое (шаг), причём этот шаг имеет фиксированную угловую величину.
Мы не будем останавливаться на рассмотрении каждого типа шагового двигателя. Об этом в сети написано довольно много и хорошо, например здесь.
Хочу поговорить об особой разновидности шаговых моторов — миниатюрные шаговые двигатели, которые применяются в конструкциях оптических систем. Такие малыши имеются в свободной продаже. Но в сети, особенно в русскоязычной, очень мало информации по таким моторчикам. Потому, когда мне потребовалось использовать их в своём проекте, пришлось изрядно поискать информации и провести пару экспериментов.
Результатами своих поисков и экспериментами я поделюсь в этой статье.
Мы рассмотрим вопросы управления такими маленькими моторчиками, а именно:
- драйвер L293D + микроконтроллер ATtiny44;
- драйвер TMC2208 + микроконтроллер ATtiny44;
- микроконтроллер ATtiny44 (без драйвера).
Знакомство
Сначала немного посмотрим на внешний вид нашего героя:

Он действительно очень маленький! Согласно умной книжке Петренко С.Ф.
«Пьезоэлектрические двигатели в приборостроении», меньших размеров электромагнитные моторчики создать в принципе невозможно… то есть возможно, но с уменьшением диаметра проволоки, из которой изготавливают обмотки, всё больше энергии рассеивается в виде тепла в окружающую среду, что приводит к уменьшению КПД моторчика и делает их использование нерациональным.
Из примечательного, можно отметить, что его вал очень короткий и имеет специальную проточку для установки шестерни или рычага.
Отчётливо видны две обмотки, которые даже покрыты изоляцией разного цвета. Значит, наш моторчик относится, скорее всего, к классу биполярных шаговых двигателей.
Посмотрим как он устроен:

Считаю, наше знакомство с этими моторчиками будет не полным, если мы не посмотрим, что же у него внутри. Ведь всегда интересно заглянуть внутрь механизма! Разве нет?
Собственно, ничего необычного мы не увидели. Ротор намагничен. Подшипников нигде не наблюдается, всё на втулках. Задняя втулка запрессована в корпус двигателя. Передняя ничем не закреплена. Интересно, что корпус двигателя собирался точечной сваркой. Так что переднюю крышку корпуса пришлось спиливать.
Теперь перейдём к вопросу подключения и его электрическим характеристикам.
Убедимся, что он биполярный, прозвонив обмотки. Действительно биполярный, всё как на картинке выше. Сопротивление обмоток около 26Ом, хотя продавец указал 14Ом.
В описании сказано, что напряжение питания 5В. Хотя мы то с вами знаем, что для шагового двигателя важен ток, который будут потреблять его обмотки.
Пробуем подключить.
Эксперимент №1. L293D + ATtiny44
Как мы знаем, для управления биполярным шаговым двигателем необходимо не просто прикладывать напряжения к двум обмоткам в нужной последовательности, но и изменять направление тока в этих обмотках, причём делать это независимо друг от друга. Для этого на каждую обмотку нужен собственный Н-мост. Чтобы не городить его из транзисторов, был взят готовый в лице микросхемы L293D. Ещё одно её преимущество — у микросхемы имеются специальные выводы Enable1 и Enable2, который включают и выключают каждый мост. Их можно использовать чтобы подавать ШИМ сигнал, тем самым, возможно контролировать напряжения питания каждого моста. Зачем это может понадобиться, мы увидим дальше.
Кроме того, L293D может коммутировать напряжения до 36В и выдавать до 1,2А на каждый канал, чего вполне должно хватить для питания обмоток нашего моторчика.

Управляющие входы L293D подключены к выходам OC0A и OC0B, что позволит в будущем подавать на них ШИМ сигнал.
Прошивать контроллер будем через внутрисхемный программатор (на схеме не указан).
Вот как выглядит собранная схема на макетной плате:

И вот так расположен наш подопытный:

Теперь можно приступать к экспериментам.
Рассчитаем ток, который будет течь через обмотки двигателя при подключении их к напряжению 5В:
I=U/R = 5В/26Ом = 190мА
Совсем небольшой. Интересно как долго он сможет держать такой ток и не перегреться.
Включим в цепь одной из обмоток амперметр и вольтметр, и проведём замеры соответствующих величин при подачи питания на эту обмотку через драйвер.
При падении напряжения на обмотке 2.56В амперметр показывает ток 150мА, причём хорошо заметно, как начинает падать величина силы тока в процессе нагревания обмоток. Надо отметить, что не так уж и сильно он греется.
Убедившись, что напряжение 5В для моторчика опасности не представляет, попробуем покрутить им в разные стороны. И вот теперь пару слов мы скажем про режимы работы шагового двигателя.
Об этом довольно хорошо сказано здесь.
Не будем повторяться, но вспомним, что шаговый двигатель может работать в трёх режимах:
- Полношаговый однофазный это когда одновременно напряжение подаётся только на одну фазу двигателя, ротор делает шаг, затем текущая фаза выключается и включается следующая.
- Полношаговый двухфазный это когда напряжение подаётся одновременно на две фазы мотора, при этом, ротор притягивается одновременно к двум обмоткам, что создаёт больший крутящий момент.
- Микрошаговый режим в этом случае реализуется тот же принцип, что и на полношаговом двухфазном, то есть работают одновременно две обмотки, но напряжение (и как следствие ток) распределяется между ними неравномерно. Фактически, это означает, что мы можем поставить моторчик в неограниченное количество положений (на практике, разумеется, такого сделать нельзя). Увеличивается точность позиционирования.
Исходный код программы выглядит следующим образом:
Исходный код в среде WinAVR
#define F_CPU 8000000UL // указываем частоту в герцах // фьюзы необходимо выставить L: E2; H:DF; Ex:FF; // это будет частота 8МГц от внутреннего генератора с выключенным предделителем тактовый частоты (включен по умолчанию и равен 8) #include // подключаем библиотеку АВР #include // подключаем библиотеку задержек #include // подключаем библиотеку прерываний // управление штатным светодиодом #define LED_pin PA5 #define LED_ON PORTA |=(1 <> void delay_millisecond (unsigned int delay_time) < // функция реализации задежки в миллисекундах for(unsigned int delay_ms = 0; delay_ms> // функции шагов для полношагового однофазного режима void step_1_one_phase (void) < PORTB &=(~((1<void step_2_one_phase (void) < PORTA &=(~((1<void step_3_one_phase (void) < PORTB &=(~((1<void step_4_one_phase (void) < PORTA &=(~((1<// функции шагов для полношагового двухфазного режима void step_1_two_phase (void) < PORTB |=(1<void step_2_two_phase (void) < PORTA &=(~(1<void step_3_two_phase (void) < PORTB |=(1<void step_4_two_phase (void) < PORTA |=(1<void stepper_OFF (void) < // функция отключения двигателя // снимаем напрядение с обмоток, если не нужна фиксация в установленном положении, чтобы двигатель не перегревался PORTA &=(~((1<unsigned char step_counter = 0; // функция следящая за текущим шагом void L293D_step (unsigned int step_quantity, unsigned char direction, unsigned int step_delay, unsigned char phase) < // при вызове функции происходит смена шага while(step_quantity>0) < // цикл выполняется, пока не будут выполнены все шаги switch(direction) < // в зависимости от установленного направления вращения инкрементируем или декрементируем счётчик шагов case 'F': if(step_counter<3) < step_counter++; >else < step_counter=0; >break; case 'B': if(step_counter>0) < step_counter--; >else < step_counter=3; >break; > switch(phase) < // выбираем однофазный или двухфазный режим case 1: switch(step_counter) < // назначаем текущий шаг case 0: step_1_two_phase_DL(); break; case 1: step_2_two_phase_DL(); break; case 2: step_3_two_phase_DL(); break; case 3: step_4_two_phase_DL(); break; >break; case 2: switch(step_counter) < // назначаем текущий шаг case 0: step_1_two_phase_DL(); break; case 1: step_2_two_phase_DL(); break; case 2: step_3_two_phase_DL(); break; case 3: step_4_two_phase_DL(); break; >break; > delay_millisecond(step_delay); // пауза между шагами задаёт скорость вращения двиагетля step_quantity--; > > void PWM_init (void) < // функция инициализации ШИМ DDRB |=(1<// конец функции инициализации ШИМ int main (void) < DDRA |=(1<>
Полношаговый режим. Одна фаза
Двигатель делает 16 шагов на один оборот. Причём шаги для двух фаз имеют не одинаковую угловую величину. Не знаю с чем это связано. Может конструкция двигателя такая?
Посмотрим на максимальную частоту шагов, которую он может обеспечить в таком режиме, не пропуская их.
Минимальная задержка между шагами 2мс, значит 500 шагов/секунду. Неплохо, это 31 об/сек = 1850 об/мин.
Полношаговый режим. Две фазы
Обратите внимание, что в этом случае шаги получаются ровнее, они одинаковы по величине (во всяком случае, более одинаковы, чем в предыдущем случае).
Естественно, в этом случае под напряжением находятся одновременно две обмотки и теплоотдача возрастает. Двигатель уже через несколько секунд нагревается достаточно сильно, потому эксперимент я прекратил.
Что с максимальной частотой шагов? 500 шагов/секунду; 31 об/сек = 1875 об/мин.
Надо сказать, что для шагового двигателя он довольно шустрый. Это связано с малым количеством магнитных полюсов на роторе.
Эксперимент №2. TMC2208 + ATtiny44
TMC2208 — название микросхемы-драйвера для управления биполярными шаговыми двигателями, аналогично называется модуль на её основе, который выпускается для установки в самодельные (и не только) 3D принтеры и имеет унифицированное расположение выводов.
Много и доходчиво сказано про этот модуль вот здесь.
В интернете много написано про то, как установить его в свой 3D принтер, но нас интересует как подключить модуль к микроконтроллеру, потому давайте разбираться.
Характеристики микросхемы впечатляют (только впечатлительных людей):

- напряжение питания логической части: 3-5В;
- напряжение питания двигателя 5.5-36В;
- пиковый ток 2А;
- настройка максимального тока двигателя;
- поддержка интерфейса UART как для управления, так и для конфигурирования внутренних регистров;
- автоматическое отключение питания;
- поддержка микрошагового режима управления двигателем вплоть до 1/16 шага.
Управлять ей очень просто, по сути нужно всего два пина микроконтроллера. Один подключаем к DIR — указываем направление вращения двигателя, другой подключаем к STEP — при подаче импульса микросхема производит необходимые манипуляции с токами и напряжениями на обмотках двигателя и тот делает один шаг.
Схема подключения будет выглядеть так:

Дополнительно я использовал пин EN, чтобы отключать моторчик и длительное время не держать обмотки под напряжением.
Исходный код в среде WinAVR
#define F_CPU 8000000UL // указываем частоту в герцах // фьюзы необходимо выставить L: E2; H:DF; Ex:FF; // это будет частота 8МГц от внутреннего генератора с выключенным предделителем тактовый частоты (включен по умолчанию и равен 8) #include // подключаем библиотеку АВР #include // подключаем библиотеку задержек #include // подключаем библиотеку прерываний // управление штатным светодиодом #define LED_pin PA5 #define LED_ON PORTA |=(1 <> void delay_millisecond (unsigned int delay_time) < // функция реализации задежки в миллисекундах for(unsigned int delay_ms = 0; delay_ms> void TMS2208_STEP (unsigned int step_quantity, unsigned char direction, unsigned int step_delay) < switch(direction) < // направление вращения case 'F': DIR_FOR; break; case 'B': DIR_BACK; break; >while(step_quantity>0) < // пока не сделали нужное количество шагов STP_ON; // делаем один шаг delay_microsecond(100); // длительность импульса 100мкС STP_OFF; delay_millisecond(step_delay);// пауза между импульсами step_quantity--; >> int main (void) < DDRA |=(1<>
Перед тем как всё запустить нужно произвести предварительную настройку модуля. Во-первых, выставить желаемый режим микрошага. Во-вторых, выставить желаемый максимальный ток двигателя.
С микрошагом всё просто. За это отвечают пины MS1 и MS2.

Отмечу, что микросхема не скачкообразно меняет напряжение, а делает это «плавно», но так как микросхема цифровая, то на выходе у нас не гладкий сигнал, а сигнал с маленьким шагом, если верить документации, то каждый шаг она разбивает на 256 микрошагов. Сделано это для увеличения плавности хода, снижения шумов от двигателя и по идее не должно позволять конструкции, к которой он прикручен, входить в резонанс. Короче, всё для того, чтобы 3D принтер работал тише.
Чтобы выставить ток двигателя необходимо измерить напряжения на контакте Vref, который указан на рисунке. Изменить значение напряжения можно при помощи потенциометра, установленного рядом с контактом. Напряжение на контакте будет пропорционально току двигателя, и зависимость будет иметь следующий вид:
Нашему моторчику нужно примерно 150мА, потому Vref = 0,216В. Устанавливаем…
Подразумевается, что увеличение тока микросхема обеспечивает за счёт увеличения напряжения на обмотке. Потому, нужно позаботиться о том, чтобы этого напряжения хватило. Но, полагаю, для того маленького моторчика должно хватить и 5В.
Протестируем работу моторчика с различными режимами микрошага и посмотрим что получится (пауза между микрошагами 10мс):
Можно заметить, что движения моторчика стали более плавными (по сравнению с предыдущим экспериментом), однако характерные 16 шагов всё равно наблюдаются довольно чётко. Что же… видимо это черта шаговых двигателей с ротором из постоянных магнитов.
Ещё необходимо отметить, что моторчик в этом режиме нагревается почти также сильно, как в полношаговом режиме с двумя фазами. Оно и понятно, обмотки постоянно находятся под напряжением, непрерывно происходит выделение тепла.
Полагаю, для таких моторчиков использование такого драйвера, да и вообще режимов микрошага не очень целесообразно.
Эксперимент №3. ATtiny44-драйвер
Вернёмся ненадолго к первому эксперименту и вспомним, что входы EN1 и EN2 микросхемы драйвера подключены к пинам OC0A и OC0B микроконтроллера. Это значит, что мы можем подать туда ШИМ сигнал, генерируемый при помощи таймера TIMER0 и таким образом изменять напряжение, прикладываемое к обмоткам двигателя и соответственно регулировать ток, который будет протекать через них.
Согласно даташиту на микроконтроллер ATtiny44 максимальный ток, который может выдать один пин составляет всего 40мА. Причём не указано для какого вида тока (пульсирующего или постоянного) эта характеристика. Просто она есть и она вот такая…
Надо сказать, что я более 7 лет знаком с микроконтроллерами фирмы ATMEL. И ни разу у меня не возникло желания проверить эту строчку из даташита.

Возможно, производитель просто подстраховывается и на самом деле он может выдать больше, а может это действительно максимум, что может выдать один пин.
Мы это выясним. Но сначала нужно выяснить при каком минимальном токе моторчик вообще способен вращаться.
Используя схему из первого эксперимента, подгоняем значение тока через обмотки равное 40мА. Запускаем в полношаговом режиме с двумя фазами (так как будет выше крутящий момент):
Отлично! При 40мА двигатель успешно запустился! Был также выявлено минимальное значение тока обмоток, необходимое для устойчивой работы мотора, и равно оно 30мА.
Разумеется, крутящий момент будет значительно ниже, но для нас важен сам факт того, что удалось запустить моторчик с таким маленьким энергопотреблением.
Схема подключения шагового двигателя к микроконтроллеру будет следующей:

Поскольку каждый пин микроконтроллера работает как полумост (может коммутировать вывод микросхемы либо на Vcc, либо на GND), то для управления биполярным шаговым мотором нам понадобиться 4 пина микроконтроллера.
Исходный код в среде WinAVR
#define F_CPU 8000000UL // указываем частоту в герцах // фьюзы необходимо выставить L: E2; H:DF; Ex:FF; // это будет частота 8МГц от внутреннего генератора с выключенным предделителем тактовый частоты (включен по умолчанию и равен 8) #include // подключаем библиотеку АВР #include // подключаем библиотеку задержек #include // подключаем библиотеку прерываний // управление штатным светодиодом #define LED_pin PA5 #define LED_ON PORTA |=(1 <> void delay_millisecond (unsigned int delay_time) < // функция реализации задежки в миллисекундах for(unsigned int delay_ms = 0; delay_ms> // функции шагов для двухфазного полношагового режима без драйверов void step_1_two_phase_DL (void) < // DL - driver less // первая обмотка OCR0A = 160; PORTB &=(~(1<void step_2_two_phase_DL (void) < // первая обмотка OCR0A = 160; PORTB &=(~(1<void step_3_two_phase_DL (void) < // первая обмотка OCR0A = 95; PORTB |=(1<void step_4_two_phase_DL (void) < // первая обмотка OCR0A = 95; PORTB |=(1<unsigned char step_counter = 0; // функция следящая за текущим шагом void L293D_step (unsigned int step_quantity, unsigned char direction, unsigned int step_delay, unsigned char phase) < // при вызове функции происходит смена шага while(step_quantity>0) < // цикл выполняется, пока не будут выполнены все шаги switch(direction) < // в зависимости от установленного направления вращения инкрементируем или декрементируем счётчик шагов case 'F': if(step_counter<3) < step_counter++; >else < step_counter=0; >break; case 'B': if(step_counter>0) < step_counter--; >else < step_counter=3; >break; > switch(phase) < // выбираем однофазный или двухфазный режим case 1: switch(step_counter) < // назначаем текущий шаг case 0: step_1_two_phase_DL(); break; case 1: step_2_two_phase_DL(); break; case 2: step_3_two_phase_DL(); break; case 3: step_4_two_phase_DL(); break; >break; case 2: switch(step_counter) < // назначаем текущий шаг case 0: step_1_two_phase_DL(); break; case 1: step_2_two_phase_DL(); break; case 2: step_3_two_phase_DL(); break; case 3: step_4_two_phase_DL(); break; >break; > delay_millisecond(step_delay); // пауза между шагами задаёт скорость вращения двиагетля step_quantity--; > > void PWM_init (void) < // функция инициализации ШИМ DDRB |=(1<// конец функции инициализации ШИМ int main (void) < // главная функция DDRA |=(1<>
Немного поясню как работает эта программа. Это модифицированный код из первого эксперимента. Как я говорил выше, будет использован 8 битный TIMER0 для генерирования ШИМ сигнала на выходах OC0A и OC0B. Таймер настраивается в режим FastPWM с предделителем на 8 (частота сигнала при 8МГц тактового генератора микроконтроллера составляет 3906Гц).
Чтобы изменять полярности сигналов на обмотках происходит переключение пина микроконтроллера от Vcc к GND изменением соответствующего бита в регистре PORTx и изменением коэффициента заполнения ШИМ путём записи значений в регистры OCR0A и OCR0B (значения подбирались экспериментально).
Курс схемотехники, прослушанный на первом курсе института подсказывает, что мультиметр показывает среднеквадратическое значение напряжения и тока в двигателе.
Шаговый двигатель вращается от пинов микроконтроллера без драйверов!
Но здесь мы не выходим за пределы возможностей микроконтроллера, по крайней мере, если верить тому, что пишут в документации. В таком режиме микроконтроллер и моторчик могут работать долго. Действительно, эксперимент длился 20 минут. За это время не наблюдалось ни пропуска шагов, ни сброса контроллера, ни перегрева (ни у двигателя, ни у контроллера).
Отбросим все предосторожности
Уберём из эксперимента ШИМ и будем напрямую управлять пинами микроконтроллера при помощи регистров PORTx. Посмотрим что будет с микроконтроллером после этого.
Работает… с максимальным током в 51мА… Что же… неожиданно, похоже это и есть предельный ток, который может отдать один пин микроконтроллера? Если я ошибаюсь, поправьте меня.
В любом случае, ролик с ютуба не обманул. Действительно можно управлять этим моторчиком без всяких драйверов.
Выводы
Мы подробно изучили миниатюрные биполярные шаговые моторчики, их конструкцию и способы управления ими, для использования в собственных приложениях.
1. Миниатюрный биполярный шаговый мотор с ротором из постоянных магнитов действительно миниатюрный.
Его основные особенности:
- малое количество магнитных полюсов, как следствие, малое количество шагов (у моего, напомню, всего 16);
- относительно большая скорость вращения (следствие из предыдущего пункта), в эксперименте удалось достичь 1875 об/мин;
- неудовлетворительно работает в микрошаговых режимах (не удерживается промежуточное положение ротора);
3. Использование специализированного драйвера TMC2208 является спорным вопросом, так как микрошаговый режим не поддерживается самим двигателем, хотя переходы между шагами выполняются более плавно.
4. Возможно подключение шагового двигателя непосредственно к портам микроконтроллера. Но это только в рамках эксперимента, так как крутящий момент в данном случае совсем незначителен, да и малый ток не позволяет совершать шаги с большой скоростью.
В следующий раз расскажу, для чего именно нам потребовались такие маленькие шаговые моторчики.
- шаговый двигатель
- микроконтроллеры avr
- tmc2208
- l293d
- ATtiny44
- Программирование
- Схемотехника
- Робототехника
- DIY или Сделай сам
- Электроника для начинающих