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

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

Управляем шаговым двигателем с помощью Arduino и контроллера Easy Driver

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

В этой статье мы детально обсудим один из типов двигателей — шаговый двигатель. Разберемся, в каких случаях уместно его использование. Рассмотрим пример подключения с использованием драйвера Easy Driver.

Необходимые элементы

  • Драйвер для шагового двигателя EasyDriver;
  • Небольшой шаговый двигатель;
  • Макетная плата;
  • Провода мама-мама;
  • Коннекторы;
  • Arduino Uno или подобный микроконтроллер;
  • Паяльник;
  • Источник питания на 12 В (или регулируемый источник питания)

Принцип работы шагового двигателя

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

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

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

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

Сборка драйвера

Самый простой метод использования драйвера EasyDriver — установить на нем коннекторы для последующей установки на макетной плате. Теоретически, можно закрепить коннекторы и на макетной плате.

Первый шаг — монтаж коннекторов на плату EasyDriver. В данном примере будут использованы не все выходы на драйвере, но все равно рекомендую распаять все отверстия. Как минимум, это обеспечит более надежную установку драйвера на макетной плате. Да и в дальнейшем все выходы могут пригодиться. Отломайте необходимое количество коннекторов и установите их на макетку. После этого сверху поставьте драйвер запаяйте все коннекторы.

Схема подключения

После распайки пришло время подключить драйвер к Arduino. Схема подключения несложная и приведена на рисунке ниже.

Примечание. Маленький шаговый двигатель выглядит не так, как он изображен на схеме подключения. У него должен быть коннектор с четырьмя разъемами на конце. Этот коннектор можно напрямую подключить к разъему с четырьмя коннекторами на драйвере (см. Рисунок после распайки выше). Только обратите внимание на даташит вашего двигателя. Бывает такое, что разводка кабелей не соответсвует пинам на драйвере.

Важно! Шаговые двигатели потребляют больше тока, чем может предоставить Arduino. В связи с этим мы будем питать Arduino от 12 В. При этом вход для питания (М+) на EasyDriver подключен к пину Vin на Arduino. Благодаря этому, можно запитывать Arduino и двигатель от одного источника.

Программа Arduino для вращения шагового двигателя

После подключения, можно заливать программу в Arduino. Ниже приведен исходник простенького скетча для первого запуска. В интернете куча готовых кусков кода, которые вы спокойно можете использовать в своих целях. Кроме того, в Arduino IDE есть полноценная встроенная библиотека Stepper library, которая значительно упрощает процесс вашего общения с шаговыми двигателями.

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

Подключение шагового двигателя. Контроллер L298

Серия статей: Программирование Arduino с нуля #8

Серия статей: Arduino, использование шаговых двигателей #1

Мы подключили к нашему контроллеру обычные двигетели постоянного тока. С их помощью можно, например двигать мобильную платформу на колесном или гусеничном ходу или совершать простейшие действия (типа открытия двери или поднятия штор). Вот только регулировать вращение этих двигателей можно только подавая на них определенное напряжение. И если мы, например, подадим 100% мощности на одну секунду, мы не можем быть уверены, что за это время двигатель повернет вал, например, на 100 оборотов. Ведь нагрузка может меняться, а соотвтетственно и скорость вращения при той-же заданной мощности. В случае визуального управления роботом это не проблема – увидел, что робот проехал нужную дистанцию – подал команду на остановку. Но мы веть хоти создавать именно автоматические устройства, которые не будут ребовать посоянного внимания. Тут есть несколько вариантов:

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

Если же нам нужно обеспечить более точное управление двигателем, чтобы он делал точное количество оборотов или даже долей оборота – тогда нам нужно применять шаговые двигатели. С их помощью можно совершать очень точные движения, ведь вращение вала контролируется с точностью до нескольких градусов. Благодаря этому можно использвоать такие двигатели для точныз перемещений – в станках с ЧПУ, 3D принтерах и там, где возможностей сервоприводов недостаточно.

Читать еще:  Вибрация при запуске двигателя тигуан

В отличие от сервопривода, в котором используется обычный двигатель постоянного тока, пусть с дополнительным датчиком, шаговый двигатель изначально построен по другой схеме. У него не одна обмотка, а несколько независимых обмоток. Причем обмотки расположены параллельно ротору, но под углом друг к другу. Подача тока на одну из обмоток заставляет ротор поворачиваться на небольщой угол и останвоиться. Если теперь выключить ток на первой обмотке, и подать на следующую – ротор повренется еще на долю оборота. А чередование аодачи напряжения между обмотками заставит ротор вращаться, причем в зависимости от частоты это будет выглядеть или как скачкообразный поворот вала двигателя на определенный угол, или как непрерывное вращение (в случае большой частоты переключения обмоток). Причем здесь мы контроллируем не только мощность но и точную частоту вращения. И можем задать точный угол поворота двигателя и отановить точно на определенном угле поворота.

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

Если же проводов шесть – это униполярыный двигатель. По два провода подключены к концам каждой обмотки и по одному – в ее середине. Эти провода подключается к заземлению.

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

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

Конечно мы можем вручную написать код, который с определенным интервалом будет чередовать подачу тока на обмотки и таким образом обеспечить управление нашим двигателем. Но этот код давно уже написан и входит в стандартную сборку Arduino IDE, просто подключим библиотеку Stepper командой #include . Теперь создадим объект типа stepper и укажем, к каким именно пинам подключены наши обмотки. Для этого нам нужно указать еще одну характеристику шагового двигателя – количество шагов для одного оборота вала. Стандартыне двигатели, которые проще всего приобрести, обычно имеют точность позиционирования 1,8° или 3.6°. Этот угол соответствует значению одного шага, соответственно для одного оборота нужно будет совершить, соответственно, 200 и 100 шагов. Пусть наш двигетель обладет точностью 200 шагов на оборот:

Поскольку при управлении шаговым двигателем используется только наличие или отсутствие тока на обмотках, то нам нет необходимости в подключении выходов с ШИМ регулированием. Достаточно использовать только пины I1 и I2 . Логическая единица на выводе будет соотвтетствовать подаче номинального напряжения на один конец обмотки и нулевого – на другой. Логический ноль — номинальное напряжение на втором конец обмотки и нулевого на первом. Таким образом каждая из двух обмоток управляется одним цифровым выходом.

Также контроллер двигателя может иметь независимое управление каждым выходом (т.е. когда для управления одной парой выводов используется три цифровых выхода – два обычных для независимого управления каждым выходом и один ШИМ для регулирования значения подаваемого напряжения). Здесь мы полностью независимо указываем, какое напряжение (высокое или низкое) подавать на каждый из концов обмотки, т.е каждая из двух обмоток управляется с помощью двух цифровых выводов

Схема подключения такого типа контроллера двигателя:

И в том, и в другом случае на каждую обмотку будет подпапться ток на время, достаточное для совершения валом одного шага. Затем ток с первой обмотки убирается, а подается на вторую (для следующего шага), или ток подается на обе обмотки (для остановки вала в текущем положении) или же тока с обеих обмоток будет снят (для свободного вращения вала) Частота таких переключений будет регулировать скорость вращения. Для изменения частоты служит метод Stepper.setSpeed(int speed); который устанавливает для нашего шагового двигателя определенную скорость вращения (в оборотах в минуту). При этом при вызове этого метода двигатель не начнет вращаться с указанной скоростью – мы только устанавливаем скорость. Для движения необходимо использовать метод Stepper.step(int steps); , который подает команду двигателю сделать steps шагов со скоростью, установленной командой setSpeed . Пример использования для двигателя, подключенного к 4 и 7 пинам:

После загрузки на контрорллер, подключенный к нему двигатель сделает пол оборота со скоростью 60 об/мин (1 об/сек, т.е. на пол оборота ему понадобится 0.5 секунды), остановится на одну секунду, затем с той-же скоростью провернется на пол оборота в обратном направлении.

Нужно уситывать, что мы здесь не можем напрямую влиять на скорость вращения – только на частоту шагов. И если для средних и больших скоростей вращения это не так важно, то при малых значениях скорости будет хорошо заметно прерывистое вращение вала. Например, при установленной скорости 1 оборот в минуту вал двигателя не будет медленно вращаться со скоростью 6 градусов в секунду. Он максимально быстро повернется на 1,8 градуса, затем остановится на треть секунды мс, затем повернется еще на 1,8 градуса, и т.д. Для средних скоростей такое прерывистое значение будет не так заметно, зато хорошо слышны частые щелчки (с частотой переключения обмоток). Поэтому в тех случаях, где нужно медленное и плавное движение, использовать шаговые двигатели напрямую не получится – нужно будет добавлять понижающий редуктор или использовать традиционные двигатели постоянного тока.

  • Все +1
  • Тематические +1
  • Персональные
      • Блог им. Ghost_D


      Изначально, я хотел в одной статье изложить весь материал, так сказать, «от идеи до воплощения«. Но по мере написания, понял, что будет слишком громоздко. И разбил статью на две части.

      Итак, первая часть. Теоретически-макетная 🙂

      Я назвал свой «проектик» LOW-COST Motor Shield (или LC-Motor Shield, если сокращенно)! Собирал я его из всякого гов… хлама... из того, что оказалось под руками.

      Как правило, все платы управления двигателями на Ардуино так или иначе базируются на пресловутой L293 (ну, или на L298 ). Да, удобно. Минимум обвязки, куча готовых схем. Но, работают они как правило с очень слабыми двигателями (с максимальным током что-то около 0.5 Ампера, для L293). Зачастую, этого недостаточно. Плюс стоимость и доступность (у нас в г. Минске на сегодняшний день на радио рынке купить L293 — можно буквально у 1-2 продавцов и по цене порядка 5 у.е.). Да, готовое изделие на L293 можно купить у братьев-китайцев — меньше чем за 10 у.е. Но, как говорит мой приятель: «Это не наш метод. Мы сделаем сами, пусть по выходу окажется и в два раза дороже!».
      Небольшая предыстория. Я уже предпринимал ранее робкие попытки построения некого подобия «motor shield»-а На рассыпухе. Но признаюсь, не совсем удачно 🙂 (Уверен на 90%, что при использовании пары n-p-n и p-n-p все было бы значительно лучше! Но сейчас не об этом). Отложил затею в долгий ящик, но надежду не потерял. И тут волею случая, после модернизации одного магазина (а именно, после замены печатающих устройств с матричных на термо) у меня на руках оказалось несколько матричных принтеров фирмы Epson, модель TM-U210.

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

      И тут натыкаюсь на очень необычный элемент STA434A, читаем даташит и… радости нет предела! До боли знакомое сочетание транзисторов. Это же то, что нужно. Ниже кусочки из даташитов на STA434A и L293D.


      Надеюсь, обратили внимание на некое сходство 🙂 Кстати ниже, типовая схема управления двигателем, в игрушечных машинках (картинку «позаимствовал» в инете).

      А не эксклюзив ли эти сборки Дарлингтона? Оказывается, нет. ТУТ можно заказать и по вполне гуманной цене (я так, понимаю, порядка 1.5..2 $). Немного завидую в этом плане россиянам.

      _______Этот кусок текста необязателен для прочтения___________
      Для солидности статьи, немного теории. (Мало ли, кому-то будет полезно)
      Итак. Управление двигателем постоянного тока .

      Тут все просто. У коллекторного двигателя два контакта; подал на один «+», а на второй вывод «-» — закрутился моторчик в одну сторону. Поменял полярность — он радостно крутиться в другую сторону. Больше подал напряжение — крутиться быстрее, уменьшил напряжение — скорость вращения уменьшилась. Да не судите строго, за примитивное изложение основ:)
      И вот умные люди придумали способ, как управлять этими параметрами: направление вращения и скорость. И называется такой способ «H-Bridge».

      Вот его условная схема.

      Есть четыре выключателя: S1, S2, S3, S4. Рассмотрим возможные варианты коммутации.
      Вполне очевидно, что НИКОГДА. Никогда не должны быть ОДНОВРЕМЕННО включены следующие пары выключателей: S1+S3 и S2+S4, так как при этом мы накоротко соединяем питание и землю, т.е., имеем КЗ.
      S1+S2 — двигатель подключается к питанию двумя контактами — мотор окажется закорочен, в этом состоянии вал двигателя интенсивно тормозится. Иными словами, двигатель будет работать в режиме генератора. Чуть-чуть иначе, при варианте S3+S4 (только в этом случае двигатель подключен к земле). Я бы назвал этот вариант — «холостой ход».

      Ну и самые полезные варианты: S1+S4. При таком подключении на левый (по рисунку) контакт двигателя подается «+», на правый — «-«. Допустим, при этом двигатель будет вращаться по часовой стрелке. В случае S2+S3 — против часовой стрелки. А если при одном из этих двух вариантах коммутации отключать-включать один из выключателей пары — то мы сможем управлять скоростью вращения двигателя. (Иными словами, » шимить » или подавать PWM-сигнал).
      Единственное различие между этим простым H-мостом и реальным, является то, что переключатели заменены на транзисторы, для электронного управления двигателем и стыковкой с микроконтроллером.

      Фу… как смог, так и преподнес теоретическую часть 🙂 Строго не судите.
      _______Тут конец текста необязателеного для прочтения___________

      Теперь будем выбирать схему управления. (многие вещи и решения украл… почерпнул из L-Motor Shield )
      — Все же попытаемся сделать ее максимально совместимой с Atmega8 (я пользуюсь «самопальной» Ардуиной ). Дело в том, что у 8-ой Аtmeg-и только 3 пина с аппаратным ШИМ-ом.
      — Нам нужно минимум два канала для коллекторных двигателей (или один для шагового)
      — Постараемся не занимать важные пины
      Начались поиски схемы. Достаточно быстро нагуглился один из вариантов.

      Вроде как неплохо, однако прикинув детали я понял, что разместить на односторонней плате задуманные два канала, не сильно выступая за габариты Ардуинки, с минимум перемычек, при моей сноровке — вряд ли у меня получится :(.

      Не знаю как у Вас, но у меня на работе обычно во время перекуров мы с друзьями обсуждаем всякие свои «поделки» не связанные с работой :). И мой приятель, выслушав мои «терзания», предложил интересный вариант: «Так, а сделай на оптопарах. ». А ведь и действительно, здОровская мысль.


      Оптопара (чаще всего, встречается РС817) = светодиод + фототранзистор. Открытие фототранзистора напрямую зависит от степени его освещенности светодиодом. На светодиод нужно подавать постоянное напряжение:
      вывод 1 (+ анод), вывод 2 (- катод) и ограничивать ток через него (при подключении к пинам ардуино (+5 Вольт — резистором, порядка 220..500 Ом).
      Через фототранзистор ток протекает, как нарисована стрелочка в его обозначении:
      от вывода 4 (+ коллектор) к выводу 3 (- эмиттер).

      После долгих «гуглений», споров, черновых набросков получилась следующая схема. Так сказать, предварительный вариант.

      Итак, для управления одним двигателем нам нужно три пина. Два задают направление вращения (FWD и REV), а третий (Enable) мы будет использовать для задания скорости. Три вывода — 8 возможных состояний.

      вариант «вращение двигателя по часовой стрелке»

      Прошу заметить, что в случае подачи «1» на вывод «ENABLE» у нас будет отключаться ключ правой нижней части. И если подавать ШИМ-сигнал — то можно управлять скоростью вращения двигателя.

      Аналогично, вариант «вращение двигателя против часовой стрелке»

      Случай, если на выводы «FWD» и «REV» подать высокий уровень («1») — открыты ключи левой и правой нижних половинок. В этом случае двигатель находиться в состоянии «холостого хода».

      Для остальных случаев, я поленился делать картинки :(, опишу словами… (к сожалению, сделать таблицу у меня не получилось.
      FWD—REV—ENABLE
      -1——0——0— Открыты ключи верхней левой и правой нижней части схемы. (ВПЕРЕД!)
      -1——0——1— Отключение нижней правой части. ШИМ на ENABLE — ВПЕРЕД с регулировкой скорости.
      -1——1——0— Включены нижние ключи. Режим «холостого» хода.
      -1——1——1— Все ключи выключены.
      -0——1——0— Открыты ключи нижней левой и правой верхней части схемы. (НАЗАД!)
      -0——1——1— Отключение нижней левой части. ШИМ на ENABLE — НАЗАД с регулировкой скорости.
      -0——0——0— Все ключи выключены.
      -0——0——1— Все ключи выключены.

      Самый удобный способ быстрой проверки задуманного решения — сборка на макетке (я встречал другое название этого способа, «Arduino-style» :))

      вид сверху

      небольшой тестовый скетч:

      Убеждаемся, что все работает, так как и задумано. Что не может не радовать!
      Ну, теперь ОЧЕНЬ даже реально разместить задуманное на небольшом куске текстолита. При этом, (после примерок и прикидок деталей на листочке) даже остается свободное место. А его мы заполним 5-ти вольтовым стабилизатором для двух сервоприводов. (Прямо, «копейка в копейку» взято из L-Motor Shield). Конечно, количество серв можно было бы увеличить, но мне показалось, что это уже будет лишнее…
      На управление одним из двигателей отдаем три пина, два задают направление, третий — скорость. (2,4,9) — один канал, (7,8,10) — второй. Т.е., совместимость с Atmega-8 есть 🙂 Ну, а под сервы отдадим 5 и 6 пин. Тут, уже 8-ая Атмега, к сожалению, «курит в сторонке».
      Итак, окончательный вариант схемы LC-Motor Shield v.1.0 ниже…

      To be continued… (или по нашему) Продолжение следует.

      Библиотека для шагового двигателя Arduino v2.0

      ОБНОВЛЕНИЯ

      • v1.13 – исправлены мелкие баги, оптимизация
      • v1.14 – исправлены ошибки разгона и торможения в KEEP_SPEED
      • v1.15 – оптимизация, исправлены мелкие баги, stop() больше не сбрасывает maxSpeed
      • v2.0 – оптимизация. Ядро шаговика вынесено в отдельный класс Stepper. Добавлены многоосевые планировщики траекторий

      ТЕОРИЯ

      Для подключения шаговых моторов к Arduino нужно использовать драйверы. Очень дешёвые и популярные моторы 28byj-48-5v часто продаются вместе со своим драйвером (транзисторная сборка ULN2003), подключить можно к любым 4-м пинам Ардуино и использовать.

      Для работы с большими шаговиками (типа Nema 17) нужно использовать специализированные драйверы, ниже вы найдёте описания и схемы подключения для A4988, DRV8825 и TMC2208, драйверы такого формата подключаются и работают практически одинаково, т.к. разработаны для CNC шилдов и взаимозаменяемы. У этих драйверов нужно настроить ток при помощи крутилки на плате. Это можно сделать “на глаз”, заставив мотор вращаться и регулируя крутилку. Мотор должен вращаться, но не вибрировать как перфоратор и сильно не нагреваться. Лучше настроить ток по опорному напряжению Vref, у каждого драйвера оно считается по своей формуле (см. картинки ниже). Берём ток своего мотора из описания, подставляем в формулу вместо current, считаем, и накручиваем полученное напряжение крутилкой. Для измерения опорного напряжения нужно подключить щупы вольтметра к самой крутилке и пину GND.

      Главное преимущество дорогущих драйверов TMC – отсутствие шума/свиста/вибраций при работе, так как драйвер своими силами интерполирует сигнал до микрошага 1/256.

      БИБЛИОТЕКА

      GyverStepper v2.0

      Производительная библиотека для управления шаговыми моторами с Arduino

      • Поддержка 4х пинового (шаг и полушаг) и STEP-DIR драйверов
      • Автоматическое отключение питания при достижении цели
      • Режимы работы:
        • Вращение с заданной скоростью. Плавный разгон и торможение с ускорением
        • Следование к позиции с ускорением и ограничением скорости
        • Следование к позиции с заданной скоростью (без ускорения)
      • Быстрый алгоритм управления шагами
      • Два алгоритма плавного движения
        • Мой планировщик обеспечивает максимальную производительность: скорость до 30’000 шагов/сек с ускорением (активен по умолчанию)
        • Модифицированный планировщик из AccelStepper: максимальную плавность и скорость до 7’000 шагов/сек с ускорением (для активации пропиши дефайн SMOOTH_ALGORITHM)
      • Поддержка “виртуальных” драйверов
      • Встроенный планировщик скорости и траектории для ЧПУ
      Совместимость

      Совместима со всеми Arduino платформами (используются Arduino-функции)

      УСТАНОВКА

      • Библиотеку можно найти и установить через менеджер библиотек по названию GyverStepper в:
        • Arduino IDE (Инструменты/Управлять библиотеками)
        • Arduino IDE v2 (вкладка “Library Manager”)
        • PlatformIO (PIO Home, вкладка “Libraries”)
      • Про ручную установку читай здесь

      ДОКУМЕНТАЦИЯ

      Инициализация

      Время шага [NEW!]

      Медленные скорости (new!)

      Тик и тайминги

      Смена направления

      Режимы работы

      Режим FOLLOW_POS

      Режим KEEP_SPEED

      Алгоритм планировщика скорости

      Остановка и сброс

      • stop() — плавная остановка с заданным в setAcceleration() ускорением от текущего положения мотора. Можно вызвать в режиме KEEP_SPEED для плавной остановки вращения! Смотри пример accelDeccelButton
      • brake() — резкая остановка мотора. Если активен autoPower(true) — мотор будет отключен.
      • reset() — brake() + сброс текущей позиции в 0 . Удобно для остановки и калибровки начала координат по концевику (смотри пример endSwitch).

      Управление питанием

      Многоосевой планировщик траекторий для шаговых моторов и создания станка с ЧПУ

      • ОСТАНОВКА В КАЖДОЙ ТОЧКЕ. БУФЕР НА ОДНУ СЛЕДУЮЩУЮ ПОЗИЦИЮ
      • Макс. скорость: 37000 шаг/с на полной, 14000 шаг/с на разгоне
      • Трапецеидальный профиль скорости (планировщик 2-го порядка)
      • Настройка скорости и ускорения
      • Любое количество осей. Будут двигаться синхронно к заданным целям
      • Быстрая целочисленная модель планирования траектории и скорости
      • Режим постоянного вращения для одной оси (для движения к концевику например)
      • Тормоз/плавная остановка/пауза на траектории планировщика
      • Оптимизировано для работы по прерыванию таймера
      • Быстрый контроль пинов шаговика для Arduino AVR

      Как работает

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

      Инициализация

      Использование

      Пример

      Многоосевой планировщик траекторий для шаговых моторов и создания станка с ЧПУ

      • ПЛАНИРОВАНИЕ СКОРОСТИ НА МАРШРУТЕ. НАСТРАИВАЕМЫЙ БУФЕР
      • Макс. скорость: 37000 шаг/с на полной, 14000 шаг/с на разгоне
      • Трапецеидальный профиль скорости (планировщик 2-го порядка)
      • Настройка скорости и ускорения
      • Любое количество осей. Будут двигаться синхронно к заданным целям
      • Быстрая целочисленная модель планирования траектории и скорости
      • Режим постоянного вращения для одной оси (для движения к концевику например)
      • Тормоз/плавная остановка/пауза на траектории планировщика
      • Оптимизировано для работы по прерыванию таймера
      • Быстрый контроль пинов шаговика для Arduino AVR

      Как работает

      Планировщик управляет любым количеством моторов, вращая их к указанной позиции. В данной версии реализован буфер траектории, который можно наполнять точками, пока available() возвращает true. addTarget() принимает:

      • Массив точек указанного при инициализации размера
      • Флаг остановки. Если передать 1 — планировщик остановит мотор в этой точке и будет ждать дальнейшей команды resume()
      • Тип точки: ABSOLUTE (абсолютная координата) или RELATIVE (относительно предыдущей точки)

      Когда планировщик приезжает до точки остановки — он встаёт на паузу (например для включения выключения инструмента), после совершения нужных действий вызываем resume() и он продолжает движение.
      В отличие от предыдущего GPlanner, в GPlanner2 реализован просчёт траектории в буфере и планирование скорости для всех точек, что позволяет системе двигаться быстрее и не тормозить в каждой точке.

    Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector