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

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

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

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

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

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

Шаговый двигатель состоит из ротора — постоянного магнита, который вращается внутри, и статор — четыре катушки (север, восток, юг, запад), которые являются частью корпуса и не перемещаются. Ротор совершает вращение посредством последовательных импульсов напряжение постоянного тока подаваемого к одной или двум катушкам одновременно.

Программируемый контроллер шаговых двигателей SMSD-4.2

//optAd360 — 300×250 —> Многие, смотря на описание ЧПУ контроллера, задаются вопросом о таком параметре, как максимальная частота импульсов. Давайте попробуем разобраться, что это такое и на что это влияет? Влияет это, конечно, на конечную скорость станка. Разумеется, она зависит не только от электроники, но и от механики. Но в данном случае, мы будем рассматривать систему лишь с точки зрения электроники. Для понимания расчетов произведем их под разный шаг ШВП, возьмем шаг 5, 10, В конце это позволит нам определиться с тем, какой именно ШВП нам целесообразно использовать. Шаговый двигатель имеет свой шаг. У двигателей HS один шаг это 1,8 градуса, у HM в половину меньше то есть 0,9 градуса. Таким образом, для шагового двигателя HS при одном шаге в 1,8 градуса требуется импульсов на оборот. Любой драйвер позволяет производить деление шага. Это необходимо для точности позиционирования и плавности перемещения. Деление шага выставляется путем комбинации переключателей на драйвере, согласно таблице. В данной таблице деление шага указано уже в имп. К примеру, имп. По нашему мнению, самые оптимальные значения деления шага , , Помните, что чем выше деление шага, тем больше плавность перемещения, но тем большая потеря момента стоит учесть что потеря момента крайне незначительна, но есть. Поскольку наш шаговый двигатель может достичь максимальных оборотов в ,5 об. Подобным образом сделаем расчет для в винта с шагом И для винта с шагом Разумеется, это максимальные параметры, и, как я и говорил, реальная максимальная скорость зависит не только от электроники, но и от механики. Частота контроллера Hz — характеристика контроллера ЧПУ, указывается в описании и руководстве к плате. Обратите внимание, что частота в описании указывается в kHz. Для того, чтобы перевести в Hz необходимо умножить на Обратите внимание, что на некоторых драйвера указывается уже полученное значение деления шага, а не само дробление. К примеру, в таблице на драйвере DM значение есть ни что иное, как х 8. Вывод: надеюсь, данная статья поможет вам легко определить, стоит ли вам гнаться за платой с высокой частотой, или же вам достаточно бюджетного варианта со сравнительно низкими параметрами. Надеюсь, данная рубрика будет постоянно пополняться вашими вопросами и нашими ответами на них. Производителями большинства драйверов установлена максимальная частота входных сигналов в kHz. Однако, стоит сделать поправку. Она, как и большинство подобных плат по своей сути не является генератором импульсов. Она является всего лишь усилителем и элементом защиты. На самом деле импульсы в данном случае формирует компьютер. Делясь накопленным опытом, могу сказать, что большинство рядовых компьютеров могут поддерживать частоту в 45 kHz. Лишь некоторые, более мощные и совершенные, в 60 kHz. Компьютеров, стабильно работающих на частоте свыше 60 kHz, за всю историю встречено не было :. Дубнинская, 79Б , Москва. Приведённые цены и характеристики товаров носят исключительно ознакомительный характер и не являются публичной офертой. Производство и продажа фрезерно-гравировальных станков и комплектующих к ним. Что такое максимальная частота импульсов? Итак, с шагами двигателя и делением шага на драйвере разобрались, поехали дальше. Ранее мы говорили о том, что будем делать расчет для разных ШВП с шагом: 5, 10, Какая максимальная частота импульсов для драйвера шагового двигателя? Но, как вы успели убедиться в статье, kHz это более чем достаточно! Какая частота у LPT плат? Фрезы ARDEN для ручных и ЧПУ фрезеров Фрезы пазовые прямые Фрезы пазовые монолитные серия Фрезы пазовые с врезным зубом серия Фрезы пазовые с напайными ножами серия Фрезы пазовые с одним режущим ножом, серия Фрезы для выравнивания поверхности Фреза для выравнивания дна и слэбов Фреза для выравнивания поверхности, усиленная, серия Фрезы для выравнивания плоскости серия Фрезы V-образные Фреза пазовая с углом 60 гр. Комплектующие для плазменной резки Комплектующие Hypertherm Powemax Сопла для плазмотронов Источники плазмы Контроллеры Плазмотроны Аксессуары для плазменной резки. Оборудование для покраски Красконагнетательные баки Распылитель краски. Дубнинская, 79Б , Москва 8 12 47 8 33 60 info cnctechnology.

Шаговые двигатели, и как ими управлять с помощью микроконтроллера

Просмотр полной версии : Управление двигателем с ПЛК. Количество импульсов — это угол поворота двигателя, частота импульсов — скорость. Я — новичок, руководство ПЛК — читал, имею догадки как это исполнить, но хочу услышать спецов. Посмотрите на др. Так что есть и вариант поискать другой драйвер. А насчет аппаратного генератора импульсов, то это ПЛКК 11 выход , сейчас рассматриваю возможность его использования..

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

Ручное управление шаговым мотором.

Статьи и видео. Другие измерительные приборы, платы и электронные компоненты. Что такое шаговый двигатель и как им управлять. При этом вращение ротора осуществляется пошагово с фиксацией в конечной позиции. Каждый шаг представляет собой угол, величина которого зависит от устройства соответствующего двигателя. Кроме того, величиной угла можно управлять. Шаговые двигатели используются в самых разных областях: в автомобилестроении, приборостроении, везде, где требуется механическое движение с высокой точностью позиционирования.

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

Интерфейс ET предназначен для независимого управления двумя 4-фазными униполярными шаговыми двигателями ШД. Интерфейс предполагает использование 2 напряжений питания ШД — основного и форсировочного, причем форсировочное напряжение подается на обмотки ШД в течении некоторого времени в начале каждого шага. Длительность импульса форсировки устанавливается подстроечными резисторами независимо для каждого двигателя. Такое решение позволяет сочетать высокий вращающий момент при вращении с низким нагревом ШД при стоянке.

Агрегаты позволяют вырезать плоские детали, делать красивую резьбу по дереву и многое другое.

Справка:

Двигатель NEMA17 сконструирован таким образом, что совершает 200 шагов за оборот в стандартном полношаговом режиме. Каждый шаг поворачивает ротор на 1,8 градуса.

Для обеспечения работы двигателя в разных режимах на плате расширения есть переключатели. Разное положение переключателей задаёт разный режим работы. Это удобно при решении некоторых задач. Режимы работы смотрите в таблице ниже:

Рис. 5 Режимы работы шагового двигателя в соответствии с расположением переключателей на плате расширения.

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

Примечание: Изменяя режим работы шагового двигателя можно менять скорость вращения и количество оборотов.

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

Кнопку подключаем двумя проводами. К шестому пину D6 на плате микроконтроллера подключаем управляющий разъем кнопки, обозначенный буквой S. Контакт, обозначенный «-» мы подключаем к GND на плате микроконтроллера.

Питание микроконтроллера производится от блока питания 9В.

Далее подключаем микроконтроллер к компьютеру и переходим к его программированию.

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

Вы можете скачать полный скетч, который мы здесь используем по этой ссылке.

Первые строки нашего кода определяют, какие пины мы используем для управления шаговиком и для управления кнопкой:

//Пины управления шаговиком

#define STEP_PIN 2 #define DIR_PIN 3 #define ENABLE_PIN 4 //Пин кнопки #define start_button 6

Далее необходимо определить переменные для управления временем поворота и паузы, то есть задержки между импульсами. Задержка считается в микросекундах (1000 мксек = 1 мсек = 0.001 сек.). Обратите внимание, что, чем больше задержка между импульсами, тем медленнее вращается двигатель. И ещё один важный момент, не рекомендуется устанавливать время меньше 100 мксек.

В этой части кода можно настроить время поворота и паузы.

#define move_forward_time 3000 //время прямого хода в мсек #define move_back_time 3000 //время обратного хода в мсек #define pause_time 4000 //время паузы в мсек #define frequency 2250 //Время между импульсами в мксек.

Определяем переменную для хранения времени.

//Таймер для millis() uint32_t timer = 0;

Необходимо определить переменную для рабочего режима, чтобы программа понимала, когда двигатель включён, а когда нет, то есть эта переменная будет менять своё значение в зависимости от нажатия кнопки. Обратите внимание, что переменная может иметь всего два значения – один и ноль.

//Логический флаг для рабочего режима bool flag = 0;

После определения переменных необходимо настроить микроконтроллер для работы.

В разделе setup производится первичная настройка:

void setup() pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления pinMode(DIR_PIN , OUTPUT); pinMode(ENABLE_PIN , OUTPUT); digitalWrite(ENABLE_PIN , HIGH); //Выключаем мотор, чтобы не грелся >

Здесь мы задаём режим работы пинов, к которым мы подключили кнопку и плату расширения драйвера двигателя. Обратите внимание на последнюю строчку кода, данной командой мы выключаем двигатель. Шаговик будет выключен тогда, когда мы подаём напряжение на Pin ENABLE. В противном случае мотор будет греться.

Далее в программе следует основной цикл loop, где происходит вся обработка событий. Напомню, что смысл нашей задачи сводится к тому, чтобы при нажатии на кнопку двигатель совершил вращение. Поэтому первым условием в основном цикле будет проверка нажата ли кнопка. Соответственно, если кнопка нажата, то переменная flag становится равна единице. Это будет означать, что у нас рабочий режим. В этом же условии мы включаем мотор и запускаем таймер присваивая переменной timer значение функции millis().

void loop () if (!digitalRead(start_button)) //Если нажали на кнопку digitalWrite(ENABLE_PIN , LOW); //Включаем мотор flag = 1; //Активируем флаг рабочего режима timer = millis(); //Запускаем таймер >

Управление по времени при нажатии на кнопку

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

Эти параметры мы настроили в самом начале программы:

  • move_forward_time 3000 время прямого хода в мсек по часовой стрелке.
  • define move_back_time 3000 время обратного хода в мсек против часовой стрелки.
  • define pause_time 4000 время паузы в мсек.
  • define frequency 2250 Время между импульсами в мксек.

Эти параметры можно менять в зависимости от условия задачи.

Далее будет следующий цикл:

if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения

Если мы нажали на кнопку и у нас включился рабочий режим, то есть переменная flag равна единице, то сначала задаём направление вращения двигателю подавая на управляющий Pin DIR напряжение.

Далее в цикле будем использовать ещё один цикл do while, условие которого проверяется в конце цикла.

do //Крутим движок move_forward_time мсек digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > while (millis() — timer move_forward_time);

Задача этого цикла заставить двигатель вращаться три секунды по часовой стрелке. Мы попеременно подаём и отключаем напряжение на управляющем Pin STEP с задержкой frequency = 2250 микросекунд. Это примерно соответствует 10 оборотам в минуту для двигателя NEMA17, который мы используем в проекте. Чем меньше частота задержки, тем быстрее будет вращаться двигатель. Цикл будет работать до тех пор, пока заданное время в переменной move_forward_time будет больше величины millis() – timer. Такая формула применяется по причине того, что функция millis() уже запущена и в момент нажатия кнопки мы фиксируем её значение записывая в переменную timer. Именно от этого значения нам нужно отсчитать время три секунды. Таким образом функция millis() всё время увеличивает своё значение, а timer остаётся постоянной. Когда разница между millis() – timer составит три секунды, условие сработает и цикл завершится.

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

delay(pause_time); //Пауза pause_time мсек timer = millis(); //Снова запускаем таймер digitalWrite(DIR_PIN , LOW); //Крутим движок move_back_time мсек

Пауза у нас задавалась переменной pause_time. Для паузы используем функцию delay. Далее снова фиксируем новое значение функции millis() в момент начала следующего цикла. Теперь нам необходимо поменять направление вращения двигателя подавая на управляющий Pin DIR сигнал LOW – это будет соответствовать вращению двигателя против часовой стрелки.

do digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > while (millis() — timer move_back_time); flag = 0; //Гасим флаг digitalWrite(ENABLE_PIN , HIGH); //Выключаем движок, чтобы не грелся > >

Данный цикл вращения практически повторяет предыдущий за исключением последних двух строк. После завершения вращения в обратную сторону, нам необходимо обнулить переменную flag, чтобы основной цикл программы не повторялся и снова ждал нажатия на кнопку. Для этого присваиваем переменной flag значение ноль. Этим мы даём понять программе, что двигатель завершил программу и находится в нерабочем режиме. И в целях экономии энергии выключаем двигатель.

Поздравляем! Вы научились управлять шаговым двигателем задавая ему параметры времени и направление вращения.

Управление по числу шагов

А теперь научимся управлять двигателем с заданным количеством шагов. Для этого поменяем основный цикл программы на такой:

void loop () if (!digitalRead(start_button)) //Если нажали на кнопку digitalWrite(ENABLE_PIN , LOW); //Включаем мотор flag = 1; //Активируем флаг рабочего режима timer = millis(); //Запускаем таймер > if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения for (int i = 0; i 200; i++) //Выполняем нужное число шагов 200*16 = 3200 шагов оборот digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > flag = 0; > >

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

if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения

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

for (int i = 0; i 3200; i++)

Цикл for будет выполняться до тех пор, пока переменная i будет меньше 3200. Откуда взялась цифра 3200 и что она означает? Наш двигатель работает с расчётом, что один шаг равен 1,8 градуса. Соответственно полный оборот двигателя (360 градусов) будет совершён за 200 шагов. Поскольку мы переключили режим работы двигателя в микрошаговый режим, а это 1/16 шага, то, соответственно, умножаем 200 шагов на 16 и получаем 3200 шагов за оборот. Таким образом нижеследующий код, который попеременно подаёт и отключает напряжение на управляющем Pin STEP с задержкой frequency = 2250 микросекунд, будет выполнен 3200 раз и цикл for завершится, а двигатель совершит один оборот.

digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); >

Как только цикл for завершился, то необходимо присвоить переменной flag нулевое значение, чтобы завершить рабочий режим.

flag = 0; >

Теперь вы научились управлять шаговым двигателем задавая количество шагов!

Для работы данного скетча не нужно устанавливать дополнительных библиотек. Скетч вы можете скачать по этой ссылке.

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

Вы можете скачать полный скетч, который мы здесь используем по этой ссылке.

Первые строки нашего кода определяют, какие пины мы используем для управления шаговиком и для управления кнопкой:

//Пины управления шаговиком

#define STEP_PIN 2 #define DIR_PIN 3 #define ENABLE_PIN 4 //Пин кнопки #define start_button 6

Далее необходимо определить переменные для управления временем поворота и паузы, то есть задержки между импульсами. Задержка считается в микросекундах (1000 мксек = 1 мсек = 0.001 сек.). Обратите внимание, что, чем больше задержка между импульсами, тем медленнее вращается двигатель. И ещё один важный момент, не рекомендуется устанавливать время меньше 100 мксек.

В этой части кода можно настроить время поворота и паузы.

#define move_forward_time 3000 //время прямого хода в мсек #define move_back_time 3000 //время обратного хода в мсек #define pause_time 4000 //время паузы в мсек #define frequency 2250 //Время между импульсами в мксек.

Определяем переменную для хранения времени.

//Таймер для millis() uint32_t timer = 0;

Необходимо определить переменную для рабочего режима, чтобы программа понимала, когда двигатель включён, а когда нет, то есть эта переменная будет менять своё значение в зависимости от нажатия кнопки. Обратите внимание, что переменная может иметь всего два значения – один и ноль.

//Логический флаг для рабочего режима bool flag = 0;

После определения переменных необходимо настроить микроконтроллер для работы.

В разделе setup производится первичная настройка:

void setup() pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления pinMode(DIR_PIN , OUTPUT); pinMode(ENABLE_PIN , OUTPUT); digitalWrite(ENABLE_PIN , HIGH); //Выключаем мотор, чтобы не грелся >

Здесь мы задаём режим работы пинов, к которым мы подключили кнопку и плату расширения драйвера двигателя. Обратите внимание на последнюю строчку кода, данной командой мы выключаем двигатель. Шаговик будет выключен тогда, когда мы подаём напряжение на Pin ENABLE. В противном случае мотор будет греться.

Далее в программе следует основной цикл loop, где происходит вся обработка событий. Напомню, что смысл нашей задачи сводится к тому, чтобы при нажатии на кнопку двигатель совершил вращение. Поэтому первым условием в основном цикле будет проверка нажата ли кнопка. Соответственно, если кнопка нажата, то переменная flag становится равна единице. Это будет означать, что у нас рабочий режим. В этом же условии мы включаем мотор и запускаем таймер присваивая переменной timer значение функции millis().

void loop () if (!digitalRead(start_button)) //Если нажали на кнопку digitalWrite(ENABLE_PIN , LOW); //Включаем мотор flag = 1; //Активируем флаг рабочего режима timer = millis(); //Запускаем таймер >

Управление по времени при нажатии на кнопку

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

Эти параметры мы настроили в самом начале программы:

  • move_forward_time 3000 время прямого хода в мсек по часовой стрелке.
  • define move_back_time 3000 время обратного хода в мсек против часовой стрелки.
  • define pause_time 4000 время паузы в мсек.
  • define frequency 2250 Время между импульсами в мксек.

Эти параметры можно менять в зависимости от условия задачи.

Далее будет следующий цикл:

if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения

Если мы нажали на кнопку и у нас включился рабочий режим, то есть переменная flag равна единице, то сначала задаём направление вращения двигателю подавая на управляющий Pin DIR напряжение.

Далее в цикле будем использовать ещё один цикл do while, условие которого проверяется в конце цикла.

do //Крутим движок move_forward_time мсек digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > while (millis() — timer move_forward_time);

Задача этого цикла заставить двигатель вращаться три секунды по часовой стрелке. Мы попеременно подаём и отключаем напряжение на управляющем Pin STEP с задержкой frequency = 2250 микросекунд. Это примерно соответствует 10 оборотам в минуту для двигателя NEMA17, который мы используем в проекте. Чем меньше частота задержки, тем быстрее будет вращаться двигатель. Цикл будет работать до тех пор, пока заданное время в переменной move_forward_time будет больше величины millis() – timer. Такая формула применяется по причине того, что функция millis() уже запущена и в момент нажатия кнопки мы фиксируем её значение записывая в переменную timer. Именно от этого значения нам нужно отсчитать время три секунды. Таким образом функция millis() всё время увеличивает своё значение, а timer остаётся постоянной. Когда разница между millis() – timer составит три секунды, условие сработает и цикл завершится.

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

delay(pause_time); //Пауза pause_time мсек timer = millis(); //Снова запускаем таймер digitalWrite(DIR_PIN , LOW); //Крутим движок move_back_time мсек

Пауза у нас задавалась переменной pause_time. Для паузы используем функцию delay. Далее снова фиксируем новое значение функции millis() в момент начала следующего цикла. Теперь нам необходимо поменять направление вращения двигателя подавая на управляющий Pin DIR сигнал LOW – это будет соответствовать вращению двигателя против часовой стрелки.

do digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > while (millis() — timer move_back_time); flag = 0; //Гасим флаг digitalWrite(ENABLE_PIN , HIGH); //Выключаем движок, чтобы не грелся > >

Данный цикл вращения практически повторяет предыдущий за исключением последних двух строк. После завершения вращения в обратную сторону, нам необходимо обнулить переменную flag, чтобы основной цикл программы не повторялся и снова ждал нажатия на кнопку. Для этого присваиваем переменной flag значение ноль. Этим мы даём понять программе, что двигатель завершил программу и находится в нерабочем режиме. И в целях экономии энергии выключаем двигатель.

Поздравляем! Вы научились управлять шаговым двигателем задавая ему параметры времени и направление вращения.

Управление по числу шагов

А теперь научимся управлять двигателем с заданным количеством шагов. Для этого поменяем основный цикл программы на такой:

void loop () if (!digitalRead(start_button)) //Если нажали на кнопку digitalWrite(ENABLE_PIN , LOW); //Включаем мотор flag = 1; //Активируем флаг рабочего режима timer = millis(); //Запускаем таймер > if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения for (int i = 0; i 200; i++) //Выполняем нужное число шагов 200*16 = 3200 шагов оборот digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > flag = 0; > >

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

if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения

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

for (int i = 0; i 3200; i++)

Цикл for будет выполняться до тех пор, пока переменная i будет меньше 3200. Откуда взялась цифра 3200 и что она означает? Наш двигатель работает с расчётом, что один шаг равен 1,8 градуса. Соответственно полный оборот двигателя (360 градусов) будет совершён за 200 шагов. Поскольку мы переключили режим работы двигателя в микрошаговый режим, а это 1/16 шага, то, соответственно, умножаем 200 шагов на 16 и получаем 3200 шагов за оборот. Таким образом нижеследующий код, который попеременно подаёт и отключает напряжение на управляющем Pin STEP с задержкой frequency = 2250 микросекунд, будет выполнен 3200 раз и цикл for завершится, а двигатель совершит один оборот.

digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); >

Как только цикл for завершился, то необходимо присвоить переменной flag нулевое значение, чтобы завершить рабочий режим.

flag = 0; >

Теперь вы научились управлять шаговым двигателем задавая количество шагов!

Для работы данного скетча не нужно устанавливать дополнительных библиотек. Скетч вы можете скачать по этой ссылке.

Быстрые движения под высоким напряжением, или почти вся правда об управлении шаговым мотором

Доброго вам времени суток, уважаемые гики и сочувствующие!

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

Что же такое этот самый шаговый электродвигатель? В принципе, в плане функциональности этот мотор можно представить как обычный электромотор, каждый оборот вала которого разбит на множество одинаковых, точно фиксированных шагов. Перемещением на определённое количество шагов мы можем позиционировать вал шагового мотора с высокой точностью и хорошей повторяемостью. Каждый шаг можно разбить на множество ступенек (так называемый микростеппинг), что увеличивает плавность хода мотора, способствует подавлению резонансов, а также увеличивает угловое разрешение. Различия между полношаговым режимом (слева), 1/2 микростеппингом (в центре) и 1/16 микростеппингом (справа) видны невооружённым глазом:

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

Из этой картинки видно, что шаговый мотор в электрическом плане представляет собой два или более электромагнита, которые необходимо переключать в определённой последовательности для приведения ротора в движение.
Лирическое отступление: На настоящий момент существуют два основных типа шаговых моторов: униполярный и биполярный. Поскольку униполярные моторы имеют меньший крутящий момент и худшие скоростные характеристики, в данной публикации они рассматриваться не будут.
Итак, вернёмся к управлению биполярным мотором. Как это ни парадоксально звучит, но зачастую проще обсуждать общие принципы на конкретных примерах. В качестве примера мы возьмём шаговый мотор ST4118L1804-A производителя Nanotec. Почему именно этот мотор и производитель? Причина проста: по основным характеристикам это типичный представитель моторов типоразмера NEMA 17, широко применяющихся в радиолюбительской практике, и имеет к тому же довольно подробную техдокументацию (которая начисто отсутствует у китайских noname-моторов).

Основные характеристики данного мотора:
Рабочее напряжение 3,15 В
Рабочий ток 1,8 А
Активное сопротивление обмотки 1,75 Ом
Индуктивность обмотки 3,3 мГн
Момент удержания 0,5 Нм
Угловой размер шага 1,8° (200 шагов на один оборот ротора)

В данном случае самое главное — это правильная интерпретация данных. Применив закон Ома, выясняем, что производитель указал рабочий ток и напряжение для постоянного тока, протекающего через обмотки двигателя, без учёта индуктивности.
Проверка: I = U/R, или 1,8 А = 3,15 В/1,75 Ом. Всё сходится.
Какой же будет мощность рассеяния при питании обмоток постоянным током?
Всё просто: P=I x U, или 1,8 А х 3,15 В = 5,67 Вт. В полушаговом режиме возможна ситуация, когда ток течёт через обе обмотки мотора, соответственно рассеиваемую мощность нужно удвоить: 5,67 Вт х 2 = 11,34 Вт. Это достаточно много, и может привести к перегреву мотора. Эта же величина является минимальной мощностью блока питания для этого мотора. Обыкновенный 3D принтер имеет пять подобных моторов, соответственно для питания драйверов необходим источник питания с минимальной мощностью 11,34 Вт х 5 = 56,7 Вт. К этой цифре необходимо добавить электрическую мощность, превращённую мотором в кинетическую или потенциальную энергию при работе принтера. Точный расчёт этой мощности — дело достаточно сложное, на практике проще всего добавить 75% к рассчитанной тепловой мощности и на том завершить расчёты. Почему именно 75%? Дело в том, что обычный шаговый мотор способен совершить полезную работу на величину примерно 2/3 от максимальной тепловой мощности. В данном случае для создания какого-либо узла или устройства сначала подбирается подходящий мотор (например, по крутящему моменту), а после этого рассчитывается мощность блока питания.
Итоговая мощность блока питания для пяти шаговых моторов: 56,7 Вт х 1,75 = 99,225 Вт.
Конечно, на практике ни в одном любительском устройстве не используются моторы под максимальной нагрузкой, и реальная мощность потребления будет, скорее всего, намного ниже расчётной. Я же, как человек ленивый и скаредный, крайне не люблю делать одно и то же два раза, поэтому беру блок питания всегда с некоторым запасом (то есть, согласно вышеприведённым расчётам).
Теперь пришла пора приступить к определению минимально необходимого напряжения блока питания. К сожалению, этому параметру уделяется незаслуженно маленькое внимание в тематических публикациях. Почему этот параметр так важен? Дело в том, что при вращении ротора шагового мотора через катушки течёт переменный ток, ограниченный не только активным, но также и индуктивным сопротивлением обмоток.
Рассмотрим предоставленный производителем график зависимости крутящего момента нашего мотора от частоты вращения:

На графике присутствуют две линии, показывающие зависимость крутящего момента от частоты вращения для напряжения питания 24 В (красная линия) и 48 В (зелёная линия). Нетрудно заметить, что спад крутящего момента начинается примерно с 300 об/мин для 24 В и примерно с 600-700 об/мин для напряжения 48 В. При этом необходимо упомянуть, что производитель использует недоступные любителям дорогостоящие промышленные драйверы. Почему же так важно напряжение питания драйвера, если оно даже в случае питания от 12 В заведомо выше паспортной величины напряжения питания шагового мотора (3,15 В)? Дело в том, что шаговый мотор управляется током, а не напряжением, и именно источниками тока являются все современные драйверы. В идеальном случае драйвер обеспечивает заданный ток в обмотках двигателя вне зависимости от частоты вращения ротора, нагрузки, изменения температуры и других параметров. Это организовано за счёт работы ШИМ-регулятора, управляемого зачастую довольно сложными алгоритмами. Из технической документации нашего мотора видно, что для полного оборота ротору необходимо совершить 200 шагов, при 300 об/мин это составит 60 000 шагов в минуту, или 1000 шагов в секунду. Это, проще говоря, соответствует переменному току частотой 1 кГц. На этой частоте индуктивное сопротивление обмотки составит (R(L)=2π×F×L): 2π х 1 кГц х 3,3 мГн = 20,73 Ом. Какое же напряжение необходимо для обеспеченияя тока в 1,8 А при этом сопротивлении? Закон Ома не дремлет (U=IR): 1,8 А х 20,73 Ом = 37,31 В. Неудивительно, что выше частоты вращения 300 об/мин наблюдается спад крутящего момента: драйверу банально не хватает напряжения питания. Почему же при таком вопиющем недостатке питания (37 — 24 =13 В) спад не наступает при более низкой частоте вращения? Дело в том, что в современных драйверах используется мостовая схема выходных каскадов, что позволяет «удваивать» напряжение, прикладываемое к обмоткам мотора. То есть, теоретически драйвер способен приложить «виртуальные» 48 В к обмоткам при напряжении питания 24 В, что создаёт теоретический запас по напряжению 48 — 37 = 11 В. На практике же этот запас будет нивелирован потерями в драйвере, сопутствующих цепях и активным сопротивлением обмоток мотора (активное сопротивление обмоток присутствует постоянно, и даже несколько возрастает при нагреве мотора). При увеличении частоты вращения ротора свыше 300 об/мин пропорционально растёт частота импульсов и, соответственно, увеличивается индуктивное сопротивление обмотки. При питании от 24 В драйверу перестаёт хватать напряжения питания для поддержания тока в обмотках, и крутящий момент неуклонно снижается. То же самое происходит при питании драйвера от 48 В, но уже гораздо значительно позже, при частоте вращения 600-700 об/мин.
Итак, с мощностью и величиной напряжения блока питания всё ясно, теперь необходимо переходить к практической реализации универсального драйвера, способного как к филигранной работе при помощи крохотных NEMA 11, так и к сотрясению основ мира в паре с могучими NEMA 23. Какими же основными качествами должен иметь драйвер моей мечты?

1. Высокое напряжение питания. Поскольку в техдокументации к моторам крайне редко указано максимальное напряжение питания, лучше будет ограничиться напряжением 48 В.
2. Важнейший параметр: высокий выходной ток. NEMA 23 имеют рабочие токи вплоть до 3,5 А, драйвер должен обеспечивать этот ток с запасом 30%. Путём нехитрых расчётов получаем максимальный рабочий ток около 4,5 А.
3. Простая и оперативная подстройка силы выходного тока.
4. Наличие микростеппинга, как минимум 1/8 шага
5. Наличие защиты от КЗ, перегрева, и т.д.
6. Небольшой размер, возможность крепления произвольного радиатора.
7. Исполнeние в виде интегральной схемы. XXI век на дворе!
8. Простая схема включения с минимальным количеством дискретных компонентов.
9. Низкая цена.

После множества бессонных ночей пятиминутного копания в Google выяснилось, что единственной доступной микросхемой драйвера с подходящими параметрами является TB6600HG. Покупка готового китайского драйвера на eBay показала, что не всё ладно в датском королевстве, далеко не всё. В частности, китайский драйвер отказался напрямую работать с выходами Arduino Due, и «завёлся» только через буферный преобразователь уровней. При работе с трёхамперной нагрузкой драйвер грелся и терял шаги десятками. Вскрытие пациента показало, что в нём не только была установлена микросхема предыдущего поколения (TB6560), а даже и термопаста не смогла найти себе места в списке компонентов. К тому же размерами и весом китайский драйвер наводил меня на мысли о моей молодости… о прошлом веке, если быть совсем точным. Ну нафиг, сказал во мне интеллигент в третьем поколении, мы сделаем свой драйвер, с преферансом и поэтессами. Если бы разработчики KiCAD видели, как я обращаюсь с их детищем, я разорился бы на одних только адвокатах:


С целью минимизации размеров была спроектирована четырёхслойная печатная плата. Этот факт, к сожалению, исключает её изготовление в домашних условиях. Посему на берлинской фирме LeitOn были заказаны 36 таких плат, каждая из которых обошлась в итоге около пяти евро. Часть этих плат были впоследствии выкуплены у меня собратьями по увлечению, и в итоге изготовление плат вышло не слишком накладным предприятием. Микросхемы TBB6600HG были заказаны на Aliexpress по 4 евро за штуку, остальные компоненты были заказаны на eBay, в пересчёте на один драйвер цена дискретных компонентов составила 2 евро. В качестве радиаторов были взяты пятисантиметровые отрезки П-образного алюминиевого профиля, пластиковые каркасы были отпечатаны на 3D принтере. Итого цена одного драйвера составила около 12 евро. Это справедливая цена за драйвер со следующими характеристиками:

Напряжение питания от 8 до 42 Вольт
Максимальный долговременный рабочий ток 4,5 Ампер, устанавливается потенциометром
Микростеппинг вплоть до 1/16 шага
Защита: КЗ, перегрев, низкое напряжение питания
Компактные размеры и низкий вес
Работа с уровнями входных сигналов от 3,3 до 5,5 вольт
Простая установка микростеппинга с помошью микропереключателей — к чёрту перемычки!

Готовые печатные платы:

Собранные и недособранные драйверы.

Видео работы драйвера в моём старом 3D принтере. Здесь трёхамперный NEMA 17 бодро гоняет подогреваемую рабочую площадку принтера размером 45 х 25 см через шестнадцатимиллиметровый шпиндель длиной 60 см:

Финальное фото: самодельные драйвера на своём рабочем месте в моём новом 3D принтере.

Публикуется под лицензией WTFPL

Ну, и традиционное: Have fun!

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

Независимо от того, какая схема управления использована, управление шаговым двигателем может осуществляться в одном из трёх режимов:

– полношаговом;
– полушаговом;
– микрошаговом.

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

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

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

Купить шаговые двигатели и средства управления ШД в Stepmotor

В каталоге Stepmotor представлен широчайший ассортимент шаговых двигателей, а также систем управления шаговыми двигателями. Если вам необходимо купить шаговый двигатель, контроллер шагового двигателя или блок управления шаговым двигателем в наличии по доступней цене, удобнее всего оформить заказ на нашем сайте. Обратите внимание: используйте только те модели коммутационных устройств, которые совместимы с выбранной вами моделью ШД! Если вы не знаете, как выбрать контроллер для шагового двигателя, проконсультируйтесь у технического специалиста, позвонив по телефону по России (звонок бесплатный) 8 800 5555 068 либо по электронной почте.
Купите шаговый двигатель и коммутатор шагового двигателя в Stepmotor. Все шаговые двигатели, блоки управления и драйверы ШД есть в наличии, отгрузка сразу после оплаты. Звоните 8 800 5555 068.

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

Чем меньше сопротивление R4 тем больше скорость вращения !

В данном включении запитывать двигатель лучше напряжением 9±2В, при меньшем он начинает проскальзывать, при большем – греется. Максимальная частота генератора, которая не приводит к проскальзыванию – 400 Гц (при Uпит=7В). Транзисторы – можно использовать любые MOSFET, с током стока не менее 0,5 А. Переключатель направления – тумблер ТП1-2 или кнопка П2К. П2К вообще-то не рекомендую. Отстой. Сколько не видел схем с ними — везде неисправность одна — не работают именно они. В принципе, для этих шаговых двигателей рекомендуютсхему с запускающим импульсом длиной 150 мкс и амплитудой 15-18В, но это приводит к усложнению схемы, а наша цель – простота. Для тех, кто интересуется шаговыми двигателями, можно сходитьсюда, здесь много полезной информации.
Генератор импульсов можно сделать, например, на 555 таймере. Вариант с регулируемой частотой от 1,5 до 450 Гц приведен на рис.

Схема подключения 6-ти выводного двигателя типа — АХ05 :

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

Сообщения Форума Ответов
3D Модели для Авто0
Бакометр 2335
Touch Start-Stop Engine.587
Кодграберр17
Исправляем AVR фьюзы при помощ .109
Автоматическая зарядка для Ni- .84
LEDstairs0
Бакометр — измеритель остатка .4
IR конструктор на PIC12F62977
Универсальное зарядное устройс .103
бaкoмeтр1974
Двунаправленный автомобильный .2
Программатор GENIUS G8401
Светодиодный тахометр34
Индикаторы ГРИ ИН1 — ИН141
Multiprog1
Управляющая программа LED CUB959
Универсальное зарядное устройс .9
Изготовлю печатные платы.29
Простой автоматический выключа .25
Оцените статью
TutShema
Добавить комментарий