Как подключить шаговый двигатель к arduino uno?
Содержание:
- Минимальная задержка между шагами.
- Библиотека AccelStepper.h
- Constructor & Destructor Documentation
- Провода
- ◆ AccelStepper() [1/2]
- Подключение L298N к Arduino
- Ограничение тока
- ◆ AccelStepper() [2/2]
- Motor Shield L293D: схема, характеристики
- Технические характеристики A4988
- Скетчи для «Ардуино» Stepper h
- Драйвер двигателя в проектах ардуино
Минимальная задержка между шагами.
По результатам тестов выделяю 4 основные состояния мотора в зависимости от выставленной задержки:https://github.com/1i7/stepper_h/blob/master/test-sketches/step_dir_test/step_dir_test.ino
- мотор пищит и не крутится
- мотор гудит и не крутится
- мотор крутится, но, если остановить его пальцем, сам движение не продолжает
- мотор крутится и, если остановить его пальцем, сам продолжает движение
Чем меньше делитель шага, тем более размыта граница между состояниями. Например, пограничное состояние «если остановить его пальцем, сам движение не продолжает» иногда воспроизводится стабильно, а иногда мотор может взять и продолжить. Если «мотор гудит и не крутится», то можно его немного крутануть пальцем и он начинает крутиться. Или в режиме без деления при задержке 600 микросекунд мотор вроде как пищит и даже при попытке крутануть пальцем не начинает вращаться, но если плавно провернуть его 3-4 раза, то все равно начинает вращение.
Скорее всего режимы «сам движение не продолжает» можно будет включить в рабочий диапазн в том случае, если стартовать мотор не сразу на максимальной скорости, а применить к нему плавное ускорение. Сопротивление при вращении мотор все равно оказывает, стопор может произойти только при полной остановке.
Так же, скорее всего, границы состояний будут плавать при разных настройках драйвера (все текущие тесты производились в одном положении регулятора).
Оптимальные задержки между шагами для разных делителей (крутится ок, если притормозить, то продолжает полюбому):
- 1/1: 1500 мкс
- 1/2: 650 мкс
- 1/4: 330 мкс
- 1/8: 180 мкс
- 1/16: 80 мкс
- 1/32: 40 мкс
Библиотека AccelStepper.h
В библиотеке примеров IDE есть программы и библиотеки для шаговых двигателей. Но намного удобнее использовать стороннюю библиотеку <AccelStepper.h>. Ее легко установить через Library Manager. Комбинация клавиш Ctrl+Shift+I
Подробно об этой библиотеке поговорим позже, пока разберем простейшую программу.
# include <AccelStepper.h># define IN1 8# define IN2 9# define IN3 10# define IN4 11AccelStepper stepper(8, IN1, IN3, IN2, IN4);void setup(){ stepper.setMaxSpeed(900.0); stepper.setAcceleration(100.0); stepper.setSpeed(200); stepper.moveTo(2000);}void loop(){ if(stepper.distanceToGo()==0){ stepper.moveTo(-stepper.currentPosition());} stepper.run();}
Здесь мы используем несколько методов, но они позволяют использовать большой функционал библиотеки.
Сначала подключаем библиотеку и создаем экземпляр библиотеки с заданными настройками.
Объявляем переменные с номерами пинов, к которым подключаем контакты драйвера двигателя.
В функции setup() задаем параметры нашего класса для двигателя.
stepper.setMaxSpeed(900.0); // Максимальную скорость двигателя.stepper.setAcceleration(100.0); // Ускорение.stepper.setSpeed(200); // Скорость. Шаг в секунду.stepper.moveTo(2000); // Переместить вал в конкретное положение.
В функции loop() программируем смену направления движения вала, когда достигнута заданная позиция вала.
if(stepper.distanceToGo()==0){ stepper.moveTo(-stepper.currentPosition());
И запускаем работу библиотеки.
Работа шагового двигателя и ардуино
Constructor & Destructor Documentation
AccelStepper | ( | uint8_t | interface, |
PinName | pin1 = , | ||
PinName | pin2 = , | ||
PinName | pin3 = , | ||
PinName | pin4 = , | ||
bool | enable = | ||
) |
Constructor.
You can have multiple simultaneous steppers, all moving at different speeds and accelerations, provided you call their functions at frequent enough intervals. Current Position is set to 0, target position is set to 0. MaxSpeed and Acceleration default to 1.0. The motor pins will be initialised to OUTPUT mode during the constructor by a call to .
- Parameters:
-
interface Number of pins to interface to. 1, 2, 4 or 8 are supported, but it is preferred to use the symbolic names. (1) means a stepper driver (with Step and Direction pins). If an enable line is also needed, call after construction. You may also invert the pins using . (2) means a 2 wire stepper (2 pins required). (3) means a 3 wire stepper, such as HDD spindle (3 pins required). (4) means a 4 wire stepper (4 pins required). (6) means a 3 wire half stepper, such as HDD spindle (3 pins required) (8) means a 4 wire half stepper (4 pins required) Defaults to (4) pins. pin1 Arduino digital pin number for motor pin 1. Defaults to pin 2. For a (interface==1), this is the Step input to the driver. Low to high transition means to step) pin2 Arduino digital pin number for motor pin 2. Defaults to pin 3. For a (interface==1), this is the Direction input the driver. High means forward. pin3 Arduino digital pin number for motor pin 3. Defaults to pin 4. pin4 Arduino digital pin number for motor pin 4. Defaults to pin 5. enable If this is true (the default), will be called to enable the output pins at construction time.
Definition at line of file AccelStepper.cpp.
AccelStepper | ( | void(*)() | forward, |
void(*)() | backward | ||
) |
Alternate Constructor which will call your own functions for forward and backward steps.
You can have multiple simultaneous steppers, all moving at different speeds and accelerations, provided you call their functions at frequent enough intervals. Current Position is set to 0, target position is set to 0. MaxSpeed and Acceleration default to 1.0. Any motor initialization should happen before hand, no pins are used or initialized.
- Parameters:
-
forward void-returning procedure that will make a forward step backward void-returning procedure that will make a backward step
Definition at line of file AccelStepper.cpp.
Провода
Моторы подключаются к драйверу 4-жильным шлейфом. Так получилось, что порядок проводов на стороне мотора и на стороне драйвера отличается (хотя в купленном проводе они скорее всего будут идти по порядку — в этом случае их нужно переставить).
На стороне мотора должно быть: синий, красный, зеленый, черный.
На стороне драйвера при этом: синий, зеленый, черный, красный.
По умолчанию провода приехали с одинаковым порядком с обоих концов, поэтому управляющие сигналы на обмотки шли непонятным образом, драйвер грелся, мотор грелся, хотя и подавал признаки жизни.
Спасибо Игорю Герасимову за фикс, всё отлично крутится.
◆ AccelStepper() [1/2]
AccelStepper::AccelStepper | ( | uint8_t | interface = , |
uint8_t | pin1 = , | ||
uint8_t | pin2 = , | ||
uint8_t | pin3 = , | ||
uint8_t | pin4 = , | ||
bool | enable = | ||
) |
Constructor. You can have multiple simultaneous steppers, all moving at different speeds and accelerations, provided you call their functions at frequent enough intervals. Current Position is set to 0, target position is set to 0. MaxSpeed and Acceleration default to 1.0. The motor pins will be initialised to OUTPUT mode during the constructor by a call to .
- Parameters
-
interface Number of pins to interface to. Integer values are supported, but it is preferred to use the symbolic names. (1) means a stepper driver (with Step and Direction pins). If an enable line is also needed, call after construction. You may also invert the pins using . Caution: DRIVER implements a blocking delay of minPulseWidth microseconds (default 1us) for each step. You can change this with . (2) means a 2 wire stepper (2 pins required). (3) means a 3 wire stepper, such as HDD spindle (3 pins required). (4) means a 4 wire stepper (4 pins required). (6) means a 3 wire half stepper, such as HDD spindle (3 pins required) (8) means a 4 wire half stepper (4 pins required) Defaults to (4) pins. pin1 Arduino digital pin number for motor pin 1. Defaults to pin 2. For a (interface==1), this is the Step input to the driver. Low to high transition means to step) pin2 Arduino digital pin number for motor pin 2. Defaults to pin 3. For a (interface==1), this is the Direction input the driver. High means forward. pin3 Arduino digital pin number for motor pin 3. Defaults to pin 4. pin4 Arduino digital pin number for motor pin 4. Defaults to pin 5. enable If this is true (the default), will be called to enable the output pins at construction time.
References , , , and .
Подключение L298N к Arduino
Как уже упоминалось, в первую очередь нужно проверить полярность подключенных двигателей. Двигатели, вращающиеся в различных направлениях, неудобно программировать.
Нужно присоединить источник питания. + подключается к пину 4 на плате L298N, минус (GND) – к 5 пину. Затем нужно соединить выходы с L298N и пины на Ардуино, причем некоторые из них должны поддерживать ШИМ-модуляцию. На плате Ардуино они обозначены ~. Выходы с L298N IN1, IN2, IN3 и IN4 подключить к D7, D6, D5 и D4 на Ардуино соответственно. Подключение всех остальных контактов представлено на схеме.
Направление вращения задается с помощью сигналов HIGH и LOW на каждый канал. Двигатели начнут вращаться, только когда на 7 пине для первого мотора и на 12 пине для второго на L298N будет сигнал HIGH. Подача LOW останавливает вращение. Чтобы управлять скоростью, используются ШИМ-сигналы.
Для управления шаговым двигателем в Arduino IDE существует стандартная библиотека Stepper library. Чтобы проверить работоспособность собранной схемы, можно загрузить тестовый пример stepper_oneRevolution. При правильной сборке вал двигателя начнет вращаться.
При работе с моторами Ардуино может периодически перезагружаться. Это возникает из-за того, что двигателям требуются большие токи при старте и в момент торможения. Для решения этой проблемы в плату встроены конденсаторы, диоды и другие схемы. Также для этих целей на шидле имеется раздельное питание.
Ограничение тока
Перед использованием драйвера нам нужно сделать небольшую настройку. Нам нужно ограничить максимальный ток, протекающий через катушки шагового двигателя, и предотвратить превышение номинального тока двигателя.
На драйвере A4988 есть небольшой потенциометр, который можно использовать для установки ограничения тока. Вы должны установить ограничение по току равным или ниже номинального тока двигателя.
Для этого есть два метода:
Способ 1:
В данном случае мы собираемся установить ограничение тока путем измерения напряжения (Vref) на выводе «ref».
- Взгляните на техническое описание вашего шагового двигателя. Запишите его номинальный ток. В нашем случае мы используем NEMA 17 200 шагов/об, 12 В 350 мА.
- Переведите драйвер в полношаговый режим, оставив три контакта выбора микрошага отключенными.
- Удерживайте двигатель в фиксированном положении, не синхронизируя вход STEP.
- Во время регулировки измерьте напряжение Vref (один щуп мультиметра на минус питания, а другой к металлическому корпусу потенциометра).
- Отрегулируйте напряжение Vref по формуле:
ограничение тока = Vref x 2,5
Например, если ваш двигатель рассчитан на 350mA, вы должны установить опорное напряжение 0,14В.
Способ 2:
В данном случае мы собираемся установить ограничение тока, измеряя ток, протекающий через катушку двигателя.
- Взгляните на техническое описание вашего шагового двигателя. Запишите его номинальный ток. В нашем случае мы используем NEMA 17 200 шагов / оборот, 12 В 350 мА.
- Переведите драйвер в полношаговый режим, оставив три контакта выбора микрошага отключенными.
- Удерживайте двигатель в фиксированном положении, не синхронизируя вход STEP. Не оставляйте вход STEP висящим в воздухе, подключите его к источнику питания логики (5 В)
- Подключите амперметр последовательно с одной из катушек шагового двигателя и измерьте фактический ток.
- Возьмите небольшую отвертку и отрегулируйте потенциометр ограничения тока, пока не установите номинальный ток шагового двигателя.
◆ AccelStepper() [2/2]
AccelStepper::AccelStepper | ( | void(*)() | forward, |
void(*)() | backward | ||
) |
Alternate Constructor which will call your own functions for forward and backward steps. You can have multiple simultaneous steppers, all moving at different speeds and accelerations, provided you call their functions at frequent enough intervals. Current Position is set to 0, target position is set to 0. MaxSpeed and Acceleration default to 1.0. Any motor initialization should happen before hand, no pins are used or initialized.
- Parameters
-
forward void-returning procedure that will make a forward step backward void-returning procedure that will make a backward step
References , , and .
Motor Shield L293D: схема, характеристики
Микроконтроллер Ардуино позволяет любому начинающему радиолюбителю изготавливать сложные автоматизированные устройства и проекты. Использование Motor Shield может стать полезным дополнением во в многих проектах на Arduino, так как позволяет подключить сразу 2 сервопривода, 2 шаговых двигателя и до 4 двигателей постоянного тока (с реверсом направления вращения ротора).
Схема и подключение Motor Control Shield for Arduino
Характеристики Мотор Шилд L293D
— для работы нужна библиотека AFMotor.h (скачать библиотеку);
— возможность подключения 2-х сервоприводов на 5 Вольт;
— возможность подключения 2-х шаговых двигателей от 6 до 12 Вольт;
— подключение до 4-х моторов с возможностью реверса направления вращения;
— контакты для подключения внешнего питания для двигателей;
— Motor Shield for Arduino совместим с платами Uno и Mega.
При подключении серводвигателей и моторов к Ардуино используются различные порты, к которым нельзя подключать другую периферию. Так, для серво используются цифровые порты 9 и 10, для шаговых двигателей и моторов используются порты с 3 по 8 и 12. Если вы желаете еще что-то подключить, то используйте 0 и 1 порт, 2 и 13, а также аналоговые входы (порты A0-A5 можно использовать как цифровые выходы).
Технические характеристики A4988
Конструктивно это выглядит как два круглых полюса, на поверхности которых расположены зубцы ротора из магнитомягкого материала. Можно увеличить количество шагов в 16, 32, 64 раза и т.
Поддержка такого режима для указанного драйвера осуществляется микропроцессором, управляющим входами ЦАП. Таким образом, выполняется один шаг.
Шаговые двигатели.
Для изменения направления вращения достаточно изменить очередность подачи импульсов в соответствующие обмотки. Режим управления двигателем задается коммутатором. Шаговые двигатели.
Рекомендуем: Необходимый метериал для проведения электричества
Данный двигатель можно не только использовать как биполярный или униполярный, но и самим определять, как соединить электромагниты обмоток, последовательно или параллельно. Из-за чего обеспечивается максимальный момент, в случае параллельного соединения или последовательного включения обмоток будет создаваться максимальное напряжение или ток. Этот метод использует в два раза больше шагов, чем полный шаг, но он также имеет меньший крутящий момент.
А принцип работы этого всего очень прост: конденсатор формирует сдвиг фаз на одной из обмоток, в результате обмотки работают почти попеременно и шаговый двигатель крутится. В таком двигателе сечение отдельных обмоток вдвое больше, а омическое сопротивление — соответственно вдвое меньше. Так, пожалуй, можно дать строгое определение. Готовые шаговые двигатели с редукторами хотя и существуют, однако являются экзотикой. Иногда двигатели с постоянными магнитами имеют 4 раздельных обмотки.
Общие сведения:
Микрошаговый режим. Режим удержания уменьшает максимальный ток, потребляемый обмотками двигателя, с двух до одного ампера. Диаграммы, диаграммы
В пределе, шаговый двигатель может работать как синхронный электродвигатель в режиме непрерывного вращения. Схема контроллера униполярного шагового двигателя с драйвером на биполярных транзисторах. Описание библиотеки для работы с шаговым двигателем В среде разработки Ардуино IDE существует стандартная библиотека Strepper. Гибридный двигатель.
Обзор копеечной платы управления шаговым двигателем.
https://youtube.com/watch?v=Zqbz-mI04Xk
Скетчи для «Ардуино» Stepper h
Алгоритм управления представлен ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include Stepper.h const int stepsPerRevolution = 100; // Определение числа шагов на полный оборот. Stepper myStepper(stepsPerRevolution, x, y, z, n); // Указаны пины на плате Arduino. Вместо символов x, y, z, n следует задать числовые значения, например 8, 9, 10, 11. void setup() { myStepper.setSpeed(40); // Задание скорости вращения ротора, об./мин. Serial.begin(9600); // Инициализация последовательного порта и установка скорости передачи, бит/с. } void loop() { Serial.println("Move right"); myStepper.step(stepsPerRevolution); // Выполнение поворота на шаг вправо. delay(1000); // Задержка после поворота в 1000 мс. Serial.println("Move left"); myStepper.step(-stepsPerRevolution); // Выполнение поворота на шаг влево. delay(1000); // Задержка в 1000 мс. } |
Если необходимо переопределить режим функционирования пинов платы Arduino, то в стартовый блок добавляется инструкция setup pinMode.
Драйвер двигателя в проектах ардуино
Для чего нужен драйвер двигателя?
Как известно, плата ардуино имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода – и того меньше, 40mA. Мы не можем подключить напрямую к Arduino Uno, Mega или Nano даже самый маленький двигатель постоянного тока. Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока, превышающие этот предел.
Как же тогда подключить двигатель к ардуино? Есть несколько вариантов действий:
Использовать реле. Мы включаем двигатель в отдельную электрическую сеть, никак не связанную с платой Arduino. Реле по команде ардуино замыкает или размыкает контакты, тем самым включает или выключает ток. Соответственно, двигатель включается или выключается. Главным преимуществом этой схемы является ее простота и возможность использовать Главным недостатком данной схемы является то, что мы не можем управлять скоростью и направлением вращения.
Использовать силовой транзистор. В данном случае мы можем управлять током, проходящим через двигатель, а значит, можем управлять скоростью вращения шпинделя. Но для смены направления вращения этот способ не подойдет.
Использовать специальную схему подключения, называемую H-мостом, с помощью которой мы можем изменять направление движения шпинделя двигателя. Сегодня можно без проблем найти как микросхемы, содержащие два или больше H-моста, так и отдельные модули и платы расширения, построенные на этих микросхемах.
В этой статье мы рассмотрим последний, третий вариант, как наиболее гибкий и удобный для создания первых роботов на ардуино.
Микросхема или плата расширения Motor Shield
Motor Shield – плата расширения для Ардуино, которая обеспечивает работу двигателей постоянного тока и шаговых двигателей. Самыми популярными платами Motor Shield являются схемы на базе чипов L298N и L293D, которые могут управлять несколькими двигателями. На плате установлен комплект сквозных колодок Ардуино Rev3, позволяющие устанавливать другие платы расширения. Также на плате имеется возможность выбора источника напряжения – Motor Shield может питаться как от Ардуино, так и от внешнего источника. На плате имеется светодиод, который показывает, работает ли устройство. Все это делает использование драйвера очень простым и надежным – не нужно самим изобретать велосипеды и решать уже кем-то решенные проблемы. В этой статье мы будем говорить именно о шилдах.
Принцип действия H-моста
Принцип работы драйвера двигателя основан на принципе работы H-моста. H-мост является электронной схемой, которая состоит из четырех ключей с нагрузкой. Название моста появилось из напоминающей букву H конфигурации схемы.
Схема моста изображена на рисунке. Q1…Q4 0 полевые, биполярные или IGBT транзисторы. Последние используются в высоковольтных сетях. Биполярные транзисторы практически не используются, они могут присутствовать в маломощных схемах. Для больших токов берут полевые транзисторы с изолированным затвором. Ключи не должны быть замкнуты вместе одновременно, чтобы не произошло короткого замыкания источника. Диоды D1…D4 ограничительные, обычно используются диоды Шоттки.
С помощью изменения состояния ключей на H-мосте можно регулировать направление движения и тормозить моторы. В таблице приведены основные состояния и соответствующие им комбинации на пинах.
Q1 | Q2 | Q3 | Q4 | Состояние |
1 | 1 | Поворот мотора вправо | ||
1 | 1 | Поворот мотора влево | ||
Свободное вращение | ||||
1 | 1 | Торможение | ||
1 | 1 | Торможение | ||
1 | 1 | Короткое замыкание | ||
1 | 1 | Короткое замыкание |