0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

Советы для начинающих. Arduino и шаговый двигатель Nema 17

Перед началом очередного проекта на Arduino, было решено использовать шаговый двигатель Nema 17.

Почему именно Nema 17? В первую очередь, из-за отличного соотношения цена/качество.

Перед подключением Nema 17, за плечами был определенный опыт работы с шаговиком 24byj48 (даташит). Управлялся он и с помощью Arduino, и с помощью Raspberry pi, проблем не возникало. Основная прелесть этого двигателя — цена (около 3 долларов в Китае). Причем, за эту сумму вы приобретаете двигатель с драйвером в комплекте. Согласитесь, такое можно даже и спалить, не особо сожалея о содеянном.

Теперь появилась задача поинтереснее. Управлять шаговым двигателем Nema 17 (даташит). Данная модель от оригинального производителя реализуется по цене около 40 долларов. Китайские копии стоят раза в полтора-два дешевле — около 20-30 долларов. Очень удачная модель, которая часто используется в 3D принтерах и CNC-проектах. Первая возникшая проблема — как подобрать драйвер для этого двигателя. Силы тока на пинах Arduino для питания не хватит.

Выбор драйвера для управления Nema 17

Google подсказал, что для оживления Nema 17 можно использовать драйвер A4988 от Poulou (даташит).

Кроме того, есть вариант использования микросхем L293D. Но A4988 считается более подходящим вариантом, так что на нем и остановились во избежание потенциальных проблем.

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

Ссылки для заказа необходимого оборудования из Китая

Подключение Nema 17 через A4988

Подключение было реализовано на основании этой темы на Arduino форуме. Рисунок приведен ниже.

Собственно, данная схема присутствует практически на каждом блоге-сайте, посвященном Arduino. Плата была запитана от 12 вольтового источника питания. Но двигатель не вращался. Проверили все соединения, еще раз проверили и еще раз.

Первая проблема

Наш 12 вольтовый адаптер не выдавал достаточной силы тока. В результате адаптер был заменен на 8 батареек АА. И двигатель начал вращаться! Что ж, тогда захотелось перескочить с макетной платы на прямое подключение. И тут возникла

Вторая проблема

Когда все было распаяно, двигатель опять перестал двигаться. Почему? Не понятно до сих пор. Пришлось вернуться к макетной плате. И вот тут возникла вторая проблема. Стоит предварительно было посидеть на форумах или внимательно почитать даташит. Нельзя подключать-отключать двигатель когда на контроллер подано питание! В результате контроллер A4988 благополучно сгорел.

Эта проблема была решена покупкой нового драйвера на eBay. Теперь, уже с учетом накопленного грустного опыта, Nema 17 был подключен к A4988и запущен, но.

Шаговый двигатель сильно вибрирует

Во время вращения ротора двигатель сильно вибрировал. О плавном движении не было и речи. Гугл вновь в помощь. Первая мысль — неправильное подключение обмоток. Ознакомление с даташитом шагового двигателя и несколько форумов убедили, что проблема не в этом. При неправильном подключении обмоток двигатель просто не будет работать. Решение проблемы крылось в скетче.

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

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

Основные выводы

  1. Никогда не подключайте/отключайте двигатель, когда на контроллер подано питание.
  2. При выборе источника питания, обратите внимание не только на вольтаж, но и на мощность адаптера.
  3. Не расстраивайтесь, если контроллер A4988 вышел из строя. Просто закажите новый 😉
  4. Используйте библиотеку AcclStepper вместо голого кода Arduino. Шаговый двигатель с использованием этой библиотеки будет работать без лишних вибраций.

Скетчи для управления шаговым двигателем

Простой Arduino-код для проверки шагового двигателя

//простое подключение A4988

//пины reset и sleep соединены вместе

//подключите VDD к пину 3.3 В или 5 В на Arduino

//подключите GND к Arduino GND (GND рядом с VDD)

//подключите 1A и 1B к 1 катушке шагового двигателя

//подключите 2A и 2B к 2 катушке шагового двигателя

//подключите VMOT к источнику питания (9В источник питания + term)

//подключите GRD к источнику питания (9В источник питания — term)

int stp = 13; //подключите 13 пин к step

int dir = 12; //подключите 12 пин к dir

if (a 400) // вращение на 200 шагов в направлении 2

Второй код для Arduino для обеспечения плавного вращения двигателя. Используется библиотека AccelStepper library.

AccelStepper Stepper1(1,13,12); //использует пин 12 и 13 для dir и step, 1 — режим «external driver» (A4988)

int dir = 1; //используется для смены направления

Stepper1.setMaxSpeed(3000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)

Stepper1.setAcceleration(13000); //устанавливаем ускорение (шагов/секунду^2)

Stepper1.move(1600*dir); //устанавливает следующее перемещение на 1600 шагов (если dir равен -1 будет перемещаться -1600 -> противоположное направление)

dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении

delay(1000); //задержка на 1 секунду

Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя

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

LXF155:Кру­тить мо­тор­чик

Подписка на печатную версию Весь 2015 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров)Подписка на электронную версию Весь 2015 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров)Подшивки старых номеров журнала (печатные версии) Весь 2014 год (12 номеров) Первое полугодие (6 номеров) Второе полугодие (6 номеров)

Arduino Управляем сервопориводами и шаговыми двигателями

Arduino: Моторы и дви­же­ние

По­ра дви­гать­ся даль­ше – Ник Вейч за­став­ля­ет ко­ле­са крутить­ся.

Ко­гда LXF толь­ко поя­вил­ся, его дер­жа­ли на пла­ву исключительно скрип­ты Bash от Ни­ка Вей­ча. По­том их за­ме­ни­ли «лю­ди», и это, по мне­нию Ни­ка, ста­ло ша­гом на­зад.

С тех са­мых пор, как Майкл Фа­ра­дей на­чал экс­пе­ри­мен­ти­ро­вать с про­водника­ми в чаш­ках со рту­тью, в элек­тронике, по­жа­луй, ничем не доста­вить боль­ше­го и мгно­венно­го удов­ле­тво­рения, как при­вес­ти что-то в дви­жение.

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

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

Этот тип сер­во­при­во­да – обыч­но со­че­тание несколь­ких эле­мен­тов: дви­га­те­ля, ко­то­рый да­ет энер­гию; шес­терней, со­еди­няю­щих дви­га­тель с его при­вод­ным ры­ча­гом (ко­то­рый мо­жет иметь раз­лич­ную фор­му и раз­ме­ры); и уст­рой­ст­ва об­рат­ной свя­зи, обыч­но по­тен­цио­мет­ра, с по­мо­щью ко­то­ро­го сер­во­при­вод мо­жет точ­но оп­ре­де­лить по­ло­жение ры­ча­га.

Для схем с серво­при­во­дом вам по­на­до­бит­ся обыч­ный RC-сер­во­при­вод, ниче­го боль­ше. Для ша­го­вых дви­га­те­лей нужен сам дви­га­тель (см. врез­ку «Закупаемся ша­го­выми дви­га­те­лями»), на­бор тран­зи­сто­ров и дио­дов или мик­ро­схе­ма H-Bridge, ти­па L239D.

Сер­во­при­вод име­ет три про­во­да: по крас­но­му и чер­но­му обыч­но по­да­ет­ся на­пря­жение пи­тания, по треть­ему, как пра­ви­ло, жел­то­му или оран­же­во­му – управ­ляю­щий сиг­нал. Сер­во­при­во­ды ра­бо­та­ют от ана­ло­го­вых управ­ляю­щих сиг­на­лов, ис­поль­зую­щих то­ко­вый им­пульс. Ши­ри­на им­пуль­са оп­ре­де­ля­ет по­ло­жение ры­ча­га.

По со­гла­шению, им­пульс дли­тель­но­стью 1,5 мс пе­ре­ме­ща­ет сер­во­при­вод в ней­траль­ное по­ло­жение, сред­нюю точ­ку – ме­ж­ду на­чаль­ной и конеч­ной точ­ка­ми, а весь диа­па­зон воз­мож­ных по­ло­жений по­кры­ва­ет ши­ри­на им­пуль­сов от 1 до 2 мс.

Для пи­тания од­но­го неболь­шо­го RC-сер­во­при­во­да доста­точ­но линии пи­тания Arduino +5 В, но ес­ли их боль­ше, под­клю­чи­те бо­лее под­хо­дя­щий ис­точник пи­тания. К сча­стью, RC-сер­во­при­во­ды обыч­но пре­крас­но ра­бо­та­ют от на­пря­жения 5 или 6 В, по­это­му Arduino и все сер­во­при­во­ды мож­но под­клю­чить к од­но­му внешнему ис­точнику.

Читать еще:  Двигатель 7514 ямз тех характеристики

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

На са­мом де­ле, эти вре­мен­ные ин­тер­ва­лы мо­гут по­ме­шать эф­фек­тив­но­му управ­лению сер­во­при­во­дом из ко­да Arduino. К сча­стью, су­ще­ст­ву­ет стан­дарт­ная биб­лио­те­ка, с редкой креативностью на­зван­ная Servo. Ес­ли вы под­клю­чи­те свой сер­во­при­вод в со­от­вет­ст­вии с рис. 1, то смо­же­те по­экс­пе­ри­мен­ти­ро­вать с ним и об­на­ру­жить его пре­де­лы.

Стан­дарт­ный при­мер ко­да для на­шей си­туа­ции – шаб­лон под на­званием “Sweep”, ко­то­рый мож­но най­ти в при­ме­рах, по­став­ляе­мых с Arduino. В нем для по­сте­пен­но­го из­менения по­ло­жения сер­во­при­во­да от 0 до 180 гра­ду­сов ис­поль­зу­ют­ся функ­ции по­зи­циониро­вания. Од­на­ко, ес­ли вы не уве­ре­ны в пре­дель­ных зна­чениях для сво­его уст­рой­ст­ва, сна­ча­ла мож­но по­про­бо­вать что-нибудь по­про­ще.

  1. include

Servo servo1; // create servo object

Ме­тод .writeMilliseconds() не со­дер­жит код, пре­об­ра­зую­щий угол в ши­ри­ну им­пуль­са, и про­сто фор­ми­ру­ет им­пульс за­дан­ной дли­тель­но­сти. Эти зна­чения мож­но умень­шать и уве­ли­чи­вать до тех пор, по­ка при­вод не пе­ре­станет дви­гать­ся, а за­тем ис­поль­зо­вать их в ка­че­­ст­ве пре­дель­ных при инициа­ли­за­ции уст­рой­ст­ва:

Па­ра­мет­ры этой функ­ции – но­мер вы­во­да, минималь­ная ши­ри­на им­пуль­са и мак­си­маль­ная ши­ри­на им­пуль­са. Здесь мы ис­поль­зу­ем для сер­во­при­во­да вы­вод 9 – имен­но этот вы­вод ис­поль­зу­ет­ся ча­ще все­го. В ста­рых вер­си­ях ко­да Arduino биб­лио­те­ка ра­бо­та­ла толь­ко с вы­во­да­ми 9 и 10, и да­же сей­час на всех пла­тах, кро­ме Mega, вы­зов биб­лио­те­ки сер­во­при­во­да при­ве­дет к то­му, что на этих вы­во­дах пе­ре­станет ра­бо­тать ШИМ (ши­рот­но-им­пульс­ная мо­ду­ля­ция), по­это­му мо­же­те восполь­зо­вать­ся и ими.

Ес­ли вы хо­ти­те или вам нуж­но за­пи­сы­вать дан­ные в сер­во­при­вод вруч­ную, восполь­зуй­тесь встро­ен­ной функ­ци­ей map:

ко­то­рая про­мас­шта­би­ру­ет вход­ное зна­чение ме­ж­ду пер­вой па­рой чи­сел в со­от­вет­ст­вую­щее зна­чение ме­ж­ду вто­рой па­рой чи­сел.

Ос­но­ва ша­го­во­го дви­га­те­ля – ста­тор, со­единен­ный непо­сред­ст­вен­но с осью дви­га­те­ля. Ста­тор ок­ру­жен по­сто­ян­ны­ми магнита­ми с че­ре­дую­щи­ми­ся по­лю­са­ми, на­прав­лен­ны­ми на­ру­жу.

Ста­тор ок­ру­жа­ет на­бор ме­тал­ли­че­­ских сер­дечников, об­мо­тан­ных про­водника­ми. Ме­ж­ду про­водника­ми и ста­то­ром есть неболь­шой за­зор, что­бы дви­га­тель мог вра­щать­ся. Когда че­рез эти про­водники про­пуска­ют ток, сер­дечник на­магничи­ва­ет­ся се­вер­ным или юж­ным магнит­ным по­лю­сом в за­ви­си­мо­сти от на­прав­ления то­ка.

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

Чис­ло сер­дечников и магнитов в ста­то­ре оп­ре­де­ля­ет уг­ло­вое раз­ре­шение дви­га­те­ля. Это зна­чение су­ще­ст­вен­но раз­ли­ча­ет­ся и в рас­про­странен­ных дви­га­те­лях со­став­ля­ет от 1,8 гра­ду­са (200 ша­гов на пол­ный обо­рот) до 30 гра­ду­сов (12 ша­гов). Двух­по­люс­ные дви­га­те­ли по­зво­ля­ют обес­пе­чить боль­шую плот­ность ис­поль­зо­вания сер­дечников, и по­это­му с ними обыч­но лег­че по­лу­чить боль­ший вра­щаю­щий мо­мент при неболь­ших га­ба­ри­тах.

Сер­во­при­во­ды по­лез­ны для управ­ления все­ми ви­да­ми ро­бо­то­техники, а так­же для ра­дио­управ­ляе­мых са­мо­ле­тов. По­жа­луй, са­мое про­стое, что мож­но сде­лать с их по­мо­щью – из­ме­рить фи­зи­че­­ский угол. Кро­ме сер­во­при­во­да, по­на­до­бит­ся толь­ко мик­ро­пе­ре­клю­ча­тель, под­клю­чен­ный к «пле­чу» или дви­жу­ще­му­ся ры­ча­гу сер­во­при­во­да. За­тем мож­но под­ве­сить это к циф­ро­во­му вхо­ду и про­ве­рять его в ка­ж­дом цик­ле (или вме­сто это­го упот­ре­бить пре­ры­вания – см. пре­ды­ду­щую ста­тью) что­бы уви­деть, коснул­ся ли ры­чаг че­го-ли­бо, см. Схе­му 1.

Форум сайта mypractic.ru

Обсуждение и вопросы по темам сайта.

  • Ссылки
  • Темы без ответов
  • Активные темы
  • Поиск
  • Наша команда

Управление шаговым двигателем

  • Версия для печати

Управление шаговым двигателем

  • Цитата

Сообщение Alian » 28 янв 2017, 23:06

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 29 янв 2017, 00:01

Re: Управление шаговым двигателем

  • Цитата

Сообщение Эдуард » 29 янв 2017, 00:31

Прежде всего, вам надо формализовать задачу.

У меня следующие вопросы.

    Вам надо просто вращать двигатель, или еще требуется постоянно контролировать какой-нибудь датчик для остановки двигателя? Т.е. алгоритм управления – нажали кнопку, и двигатель крутится или более сложный? Что надо делать в программе в рабочем цикле при вращении?

Зачем Вам микро шаговый режим? Он снижает скорость вращения двигателя, уменьшает крутящий момент, требует увеличивать частоту импульсов STEP.

Гиперболический закон изменения скорости вращения это обязательное условие? Или вы боитесь, что двигатель выйдет из синхронизма?

С какой точностью и дискретностью надо регулировать частоту вращения?

На какие-то вопросы, касающиеся физических процессов, вы, скорее всего не знаете ответы. Я бы рекомендовал сделать так.

    Собрать реальную конструкцию или близкий к ней макет.

Подключить STEP/DIR драйвер к плате Arduino UNO по схеме из урока 35. Загрузить в плату программу драйвера с AT командами.

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

Проверить на реальной конструкции, с реальной нагрузкой работу всего: механической конструкции, двигателя, электроники. Вы узнаете все: мощность, скорость, какой режим вращения предпочтительнее…

В уроке 32 есть программа верхнего уровня для следящего электропривода. Можете попробовать управлять с помощью нее. Посмотрите фильм из урока.

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

Только после всего этого может идти речь об индикаторах, кнопках и т.п.

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 29 янв 2017, 16:05

Эдуард писал(а): Прежде всего, вам надо формализовать задачу.

У меня следующие вопросы.

    Вам надо просто вращать двигатель, или еще требуется постоянно контролировать какой-нибудь датчик для остановки двигателя? Т.е. алгоритм управления – нажали кнопку, и двигатель крутится или более сложный? Что надо делать в программе в рабочем цикле при вращении?

Думаю, что логично иметь возможность остановки двигателя в нужный момент. Либо концевой датчик для остановки (микропереключатель). Точность положения ротора меня, практически, не интересует, это не станок. В рабочем цикле, когда двигатель вращается нужно только выведение информации на LCD 1602 Hd44780 желательно на русском языке такого характера: установленная скорость, ну и «СТОП» чтобы можно было понять, что для остановки двигателя нужно нажать на кнопку. Характер сообщений или МЕНЮ я еще конкретно не обдумывал, но должны быть такие параметры как скорость в условных единицах, направление вращения, стартстоп. Пока как-то так. Не плохо было бы иметь уровень разряда аккумулятора, ибо устройство предполагается мобильным, но пока не представляю как это реализовать.

Эдуард писал(а): Прежде всего, вам надо формализовать задачу.

У меня следующие вопросы.
Зачем Вам микро шаговый режим? Он снижает скорость вращения двигателя, уменьшает крутящий момент, требует увеличивать частоту импульсов STEP.

Гиперболический закон изменения скорости вращения это обязательное условие? Или вы боитесь, что двигатель выйдет из синхронизма?

С какой точностью и дискретностью надо регулировать частоту вращения?

Читал известную в сети статью Леонида Ридико, по всему видно, что это профессионал в шаговых двигателях. http://darxton.ru/wiki-article/kontroller-shagovogo-dvigatelya/
Он, в частности, указывает ».. В микрошаговом режиме можно осуществлять только разгон и торможение, а основное время работать в полношаговом режиме. » Затем, на невысоких скоростях микрошаговый режим позволяет работать двигателю более плавно.
Что касается гиперболического закона, то в вышеуказанной статье пишется следующее :
«. Использование разгона и торможения позволяет достичь значительно больших скоростей — в индустриальных применениях используются скорости до 10000 полных шагов в секунду. .
. На практике чаще всего применяют разгон и торможение с постоянным ускорением.
. При разгоне или торможении с постоянным ускорением частота повторения шагов должна изменяться линейно, соответствено значение периода, которое необходимо загружать в таймер, должно меняться по гиперболическому закону. «
Точность регулировки частоты вращения не имеет ни малейшего значения. Достаточно весь спектр скоростей поделить на 10-20 градаций от нуля до максимума и выбирать просто нужную относительную цифру перед пуском.

Читать еще:  Двигатель qr20 какой должен быть

Эдуард писал(а): [list]Собрать реальную конструкцию или близкий к ней макет.

Подключить STEP/DIR драйвер к плате Arduino UNO по схеме из урока 35. Загрузить в плату программу драйвера с AT командами.

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

Конструкцию собрал, а именно: двигатель, драйвер, контроллер. Питание на контроллер пока пробовал только 12 вольт, вот вот появится возможность подать до 48 В (как того требует драйвер для максимальных скоростей).
Загружал именно Ваш скетч из урока 35 с библиотекой StepDirDriver. Двигатель вращается. Правда максимальная скорость не очень высока. Я ещё плохо понимаю Ваш скетч, буду задавать вопросы. Мне там не понятно, как формируется скорость.
С AT командами не пробовал, но думаю, что максимальную скорость без разгона по гиперболе все равно не получить.

Эдуард писал(а):
Проверить на реальной конструкции, с реальной нагрузкой работу всего: механической конструкции, двигателя, электроники. Вы узнаете все: мощность, скорость, какой режим вращения предпочтительнее…

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 29 янв 2017, 16:26

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 29 янв 2017, 16:33

Re: Управление шаговым двигателем

  • Цитата

Сообщение Эдуард » 29 янв 2017, 18:12

Я все таки советую проверить максимальную скорость двигателя в программе драйвера с AT командами. Вы можете устанавливать любую скорость с компьютера и все проверить за 5 минут. Вполне возможно, что не придется реализовывать разгон двигателя. Это очень не благодарная задача.

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

Возможно она вас устроит.

Я когда-то делал управление мощным индукторным двигателем с датчиками положения ротора (ДПР).
Сначала он разгонялся в режиме шагового двигателя без обратной связи.
Затем фазы переключались по сигналам ДПР.
А на следующем этапе скорости магнитное поле в обмотках отставало от реального положения ротора. Приходилось строить виртуальную диаграмму переключения фаз с опережением сигналов ДПР.
Но это был очень скоростной двигатель.

Для больших скоростей вращения применяют бесколлекторные двигатели. Например, эти. У них есть встроенные датчики положения ротора. Без ДПР вы не сможете получить высокой скорости вращения. Любое изменение механической нагрузки, и двигатель выходит из синхронизма.

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

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 30 янв 2017, 15:45

Re: Управление шаговым двигателем

  • Цитата

Сообщение Эдуард » 30 янв 2017, 17:12

Измерить количество оборотов для шагового двигателя?

Посчитать шаги. Для вашего двигателя 200 шагов это полный оборот.

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 30 янв 2017, 23:13

Эдуард писал(а): Измерить количество оборотов для шагового двигателя?

Посчитать шаги. Для вашего двигателя 200 шагов это полный оборот.

Нет, я скорость имел ввиду. Оборотов в минуту. По времени засекать — как-то не камильфо. Для Андроида скачивал проги по замеру скорости вращения, они не работают. Прибора для этого измерения — нет.

Re: Управление шаговым двигателем

  • Цитата

Сообщение Эдуард » 30 янв 2017, 23:16

Re: Управление шаговым двигателем

  • Цитата

Сообщение Alian » 03 фев 2017, 23:06

Re: Управление шаговым двигателем

  • Цитата

Сообщение Эдуард » 03 фев 2017, 23:08

Re: Управление шаговым двигателем

  • Цитата

Сообщение Rom327 » 09 июл 2017, 15:10

Re: Управление шаговым двигателем

  • Цитата

Сообщение Rom327 » 09 июл 2017, 15:24

Re: Управление шаговым двигателем

  • Цитата

Сообщение Эдуард » 09 июл 2017, 19:22

Re: Управление шаговым двигателем

  • Цитата

Сообщение Rom327 » 09 июл 2017, 22:39

Здравствуйте! Вот наваял скетч из 2-х один. Работает от кнопки на 3-ем пине. Вторая кнопка вообще не реагирует, видимо что-то я наврал.
Вперед шагает на 400 шагов, назад на 100. В принципе то что надо. Как правильно задействовать кнопку на пине 2, чтобы при нажатии на нее мотор постоянно крутился обратно?

// define a constant value named stepPin and assign the value 9 to it — this value will not change during our code
// this assumes digital pin 9 of your Arduino is attached to the step input of your driver
// определяем значение константы по имени продвижение и присвойте значение 9 к нему — это значение не изменится в ходе нашего кода
// при этом предполагается, что цифровой контакт 9 части вашего Arduino крепится к шагу ввода драйвера
#define stepPin 9

// define a constant value named dirPin and assign the value 8 to it — this value will not change during our code
// this assumes digital pin 8 of your Arduino is attached to the step input of your driver
// определяем значение константы по имени штырь и присвоить значение 8 — это значение не изменится в ходе нашего кода
// при этом предполагается, что цифровой вывод 8 части вашего Arduino крепится к шагу ввода драйвера
#define dirPin 8

// define the pins on which we’ve put our N.O. buttons
// определить штыри, на которых мы поместили наши кнопки Н.О.
#define button1 2
#define button2 3

// setup() loop, the Arduino only runs through this once
// настройка() петли, Arduino только проходит через этот раз
void setup() <
// digital pins on the Arduino can only be either set as an output or input — in our case we want to send data to the driver, so we choose output
// цифровых пинов на Arduino можно только либо установить в качестве выходного или входного сигнала — в нашем случае мы хотим отправить данные на водителя, поэтому мы выбираем выходной
pinMode(stepPin , OUTPUT);
pinMode(dirPin , OUTPUT);

// define our button pins as input pullup type
// определения наша кнопка булавки в качестве входного типа подтяжки
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);

// let’s set an initial value of low to both our step and dir pins, we could easily write false or 0 instead of LOW
// зададим начальное значение минимума как шаг штырей и дира, мы могли бы легко написать false или 0, а не низкий
digitalWrite(stepPin , LOW);
digitalWrite(dirPin , LOW);
>

// loop() loop, the Arduino continuously cycles through this as fast as it can
// петля() петли, Ардуино постоянно циклов через это как можно быстрее
void loop() <

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

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

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

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

Читать еще:  Датчик расхода топлива для двигателей cummins

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

Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 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 управлением своими руками

Схема драйвера биполярного шагового двигателя и 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 линии ставится сглаживающий пленочный конденсатор.

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

0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты