Скетч Arduino — использование библиотеки AccelStepper
Управление шаговым двигателем без библиотеки идеально подходит для простых приложений с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, то вам понадобится библиотека.
Итак, для нашего следующего эксперимента мы будем использовать расширенную библиотеку шаговых двигателей под названием AccelStepper library. Она поддерживает:
- Ускорение и замедление.
- Одновременное управление несколькими шаговыми двигателями с независимым шагом для каждого двигателя.
Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.
Установка библиотеки
Чтобы установить библиотеку, перейдите в Эскиз> Include Library> Manage Libraries… Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте результаты поиска, набрав «Accelstepper». Щелкните первую запись и выберите «Установить».
Скетч Arduino
Вот простой код, который ускоряет шаговый двигатель в одном направлении, а затем замедляется, чтобы остановиться. Как только двигатель совершает один оборот, он меняет направление вращения. И он повторяет это снова и снова.
// Подключаем библиотеку AccelStepper #include <AccelStepper.h> // Устанавливаем выводы const int dirPin = 2; const int stepPin = 3; // Определение тип интерфейса двигателя #define motorInterfaceType 1 // Создаем экземпляр AccelStepper myStepper(motorInterfaceType, stepPin, dirPin); void setup() { // Устанавливаем максимальную скорость, коэффициент ускорения, // начальную скорость и целевую позицию myStepper.setMaxSpeed(1000); myStepper.setAcceleration(50); myStepper.setSpeed(200); myStepper.moveTo(200); } void loop() { // Изменение направления вращения, когда двигатель достигнет целевого положения if (myStepper.distanceToGo() == 0) myStepper.moveTo(-myStepper.currentPosition()); // Передвинуть на 1 шаг myStepper.run(); }
Пояснение к скетчу:
Мы начинаем с подключения недавно установленной библиотеки AccelStepper.
#include <AccelStepper.h>
Определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Устанавливаем motorInterfaceType значение 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).
const int dirPin = 2; const int stepPin = 3; #define motorInterfaceType 1
Затем мы создаем экземпляр библиотеки с именем myStepper.
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
В функции setup() мы сначала устанавливаем максимальную скорость двигателя 1000. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя.
Затем мы устанавливаем обычную скорость 200 и количество шагов, например, 200 (поскольку NEMA 17 совершает 200 шагов за оборот).
void setup() { myStepper.setMaxSpeed(1000); myStepper.setAcceleration(50); myStepper.setSpeed(200); myStepper.moveTo(200); }
В функции loop() мы используем оператор If, чтобы проверить, как далеко двигателю нужно проехать (путем чтения distanceToGo), пока он не достигнет целевой позиции (moveTo). Как только distanceToGo станет равен нулю мы переключаем двигатель в противоположное направление, изменив moveTo на противоположное значение относительно его текущего положения.
Теперь в конце цикла мы вызываем функцию run(). Это самая важная функция, поскольку шаговый двигатель не будет работать, пока эта функция не будет выполнена.
void loop() { if (myStepper.distanceToGo() == 0) myStepper.moveTo(-myStepper.currentPosition()); myStepper.run(); }
Общие принципы работы шаговых двигателей
Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:
Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.
Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.
Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.
Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.
На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.
Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).
Расчет шагов на оборот для шагового двигателя
Важно знать, как рассчитать количество шагов за один оборот для вашего шагового двигателя, потому что только тогда вы можете эффективно его запрограммировать. В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°
Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25)
В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).
Справедлива следующая формула:
Количество шагов за оборот = 360 / угол шага.
В нашем случае 360/11.25 = 32 шага за оборот.
Зачем нужен драйвер мотора для управления шаговым двигателем
Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.
About the driver
The TB6600 microstepping driver is built around the Toshiba TB6600HG IC and it can be used to drive two-phase bipolar stepper motors.
With a maximum current of 3.5 A continuous, the TB6600 driver can be used to control quite large stepper motors like a NEMA 23. Make sure that you do not connect stepper motors with a current rating of more than 3.5 A to the driver.
The driver has several safety functions built-in like over-current, under-voltage shutdown, and overheating protection.
You can find more specifications in the table below. Note that the exact specifications and dimensions can differ slightly between manufacturers. Always take a look at the datasheet of your particular driver, before connecting power.
TB6600 Specifications
Operating voltage | 9 – 42 V |
Max output current | 4.5 A per phase, 5.0 A peak1 |
Microstep resolution | full, 1/2, 1/4, 1/8 and 1/162 |
Protection | Low-voltage shutdown, overheating and over-current protection |
Dimensions | 96 x 72 x 28/36 mm |
Hole spacing | 88, ⌀ 5 mm |
Cost | Check price |
1 These are the specifications for the TB6600HG IC, the driver itself has a maximum current rating of 3.5 A and 4.0 A peak.2 See comment on fake/upgraded TB6600 drivers below.
For more information, you can check out the datasheet and manual below:
Toshiba TB6600 Datasheet
TB6600 Manual
Как подключить Motor Shield к Ардуино
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- Motor Shield L293D;
- сервомотор;
- двигатели постоянного тока;
- шаговый двигатель;
- провода «папа-мама», «папа-папа».
К Ардуино шилд подключается очень просто — он устанавливается на плату UNO прямо сверху
Обратите внимание, что без подключения внешнего источника питания к Motor Shield, логика и двигатели будут работать от 5 Вольт, что не всегда бывает достаточно. Поэтому скорость вращения моторов постоянного тока при подключении платы Ардуино от компьютера и блока питания будет значительно отличаться
Мотор Шилд Ардуино схема подключения
Обратите внимание, что даже если вы задали одинаковую скорость вращения в скетче, моторы в реальности могут вращаться с разной скоростью — на это оказывает влияние скорость самого двигателя, качество изготовления редуктора и колес. После подключения двигателей, как на схеме выше, загрузите следующий скетч (скачать библиотеку AFMotor и скетч можно здесь) для тестирования работы шилда:
Скетч для Motor Shield L293D Ардуино и моторов
#include <AFMotor.h> // подключаем библиотеку для шилда AF_DCMotor motor1(1); // подключаем мотор к клеммникам M1 AF_DCMotor motor2(2); // подключаем мотор к клеммникам M2 void setup() { motor1.setSpeed(255); // задаем максимальную скорость мотора motor1.run(RELEASE); // останавливаем мотор motor2.setSpeed(255); // задаем максимальную скорость мотора motor2.run(RELEASE); // останавливаем мотор } void loop() { motor1.run(FORWARD); // задаем движение вперед motor2.run(FORWARD); // задаем движение вперед motor1.setSpeed(255); // задаем скорость движения motor2.setSpeed(255); // задаем скорость движения delay(2000); // указываем время движения motor1.run(RELEASE); // останавливаем мотор M1 motor2.run(RELEASE); // останавливаем мотор M2 motor1.run(BACKWARD); // задаем движение назад motor2.run(BACKWARD); // задаем движение назад motor1.setSpeed(255); // задаем скорость движения motor2.setSpeed(255); // задаем скорость движения delay(2000); // указываем время движения motor1.run(RELEASE); // останавливаем мотор M1 motor2.run(RELEASE); // останавливаем мотор M2 }
Пояснения к коду:
- Для каждого мотора следует присваивать свое имя ;
- Максимальная скорость вращения равна 255;
- Без команды мотор продолжит вращаться.
Скетч для подключение серво и шаговых двигателей
Для управления сервоприводами используется стандартная библиотека Servo.h, сами сервоприводы подключаются к цифровым выходам 9 и 10 через штырьки на краю платы. К шилду можно подключить только два сервопривода и два шаговых двигателя. Первый шаговый двигатель подключается к клеммам M1 и M2, а второй к клеммам M3 и M4. Схема подключения двигателей к Motor Shield L293D изображена далее.
Подключение шаговых двигателей к Motor Shield L293D
После подключения Stepper Motor к шилду загрузите в плату следующий скетч:
#include <AFMotor.h> // подключаем библиотеку для шилда int i; // вводим переменную // подключаем шаговый двигатель к порту 1 - M1, M2 // 48 - количество шагов для полного оборота AF_Stepper stepper(48, 1); void setup() { } void loop() { // делаем 48 шагов в одном направлении, DOUBLE - тип шага for (i = 0; i <= 48; i++) { stepper.step(1, FORWARD, DOUBLE); delay(30); } // делаем 48 шагов в обратном направлении (BACKWARD) for (i = 48; i >= 0; i--) { stepper.step(1, BACKWARD, DOUBLE); delay(30); } }
Настройка тока DRV8825.
Перед использованием мотора нужно сделать небольшую настройку, необходимо ограничить максимальную величину тока, протекающего через катушки шагового двигателя, и ограничить его превышение номинального тока двигателя, регулировка осуществляется с помощью небольшого потенциометра.
Для настройки необходимо рассчитать значение напряжения Vref.
Vref = Current Limit / 2
где,
Current Limit — номинальный ток двигателя.
Для примера рассмотрим двигатель NEMA 17 17HS4401 с током 1,7 А.
Vref = 1,7 / 2 = 0,85 В.
Осталось только настроить, берем отвертку и вольтметр, плюсовый щуп вольтметра устанавливаем на потенциометр, а щуп заземления на вывод GND и выставляем нужное значение.
Подключение драйвера шагового двигателя DRV8825 к Arduino UNO.
Подключим двигатель DRV8825 к Arduino UNO по схеме.
Для этого подключаем GND LOGIC к GND на Arduino. Контакты DIR и STEP подключим к цифровым контактам 2 и 3 на Arduino. Подключение шагового двигателя к контактам B2, B1, A2 и A1.
Предупреждение: Подключение или отключение шагового двигателя при включенном приводе может привести к его повреждению.
Затем необходимо подключить контакт RST к соседнему контакту SLP к 5В на Arduino, чтобы включить драйвер. А контакты выбора микрошага необходимо оставить не подключенными, чтобы работал режим полный микрошаг. Теперь осталось подключить питание двигателя к контактам VMOT и GND MOT, главное не забудьте подключить электролитический конденсатор на 100 мкФ к контактам питания двигателя. В противном случае, при скачке напряжения модуль может выйти из строя.
Скетч вращения шагового двигателя NEMA 17, драйвер DRV8825.
Как уже было упомянуто выше, драйвер DRV8825 заменим драйвером A4988, поэтому и код вращения двигателем можно взять из предыдущей статьи: Драйвер шагового двигателя A4988. Но для увеличения кругозора сегодня будем использовать код вращения двигателя nema 17 без использования библиотеки.
const int dirPin = 2; const int stepPin = 3; const int stepsPerRevolution = 200; void setup() { pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); } void loop() { digitalWrite(dirPin, HIGH); // Установка вращения по часовой стрелки for(int x = 0; x > stepsPerRevolution; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(2000); digitalWrite(stepPin, LOW); delayMicroseconds(2000); } delay(1000); digitalWrite(dirPin, LOW); // Установка вращения против часовой стрелки for(int x = 0; x < stepsPerRevolution; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(1000); digitalWrite(stepPin, LOW); delayMicroseconds(1000); } delay(1000); }
Описание скетча:
Для работы данного скетча, не требуется никаких библиотек. Программа начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR. Так же указываем stepsPerRevolution количество шагов на оборот.
В функции void setup() указываем управляющие контакты как выход.
В основной функции void loop(), вращаем двигатель по часовой стрелке, затем против, с разной скоростью.
Подробнее о подключении шаговых двигателей к Ardiono смотрите на сайте Ардуино технологии.
Для более простого подключения шагового двигателя к Arduino или другому микроконтроллеру существуют модули. Модули бывают разные, на фото ниже приведен пример двух различных модулей.
Распиновку и как подключать модуль драйвера DRV8825 будем рассматривать в следующей статье.
Использование драйвера DRV8825 с CNC shield v3.
Драйвер DRV8825 можно установить на CNC shield v3. CNC shield используются для управления ЧПУ станками и облегчают сборку электроники.
Данный набор позволяет без пайки собрать электронику для двух осевых, трех осевых, четырех осевых ЧПУ станков, а также для самостоятельной сборки 3D принтеров. При реализации ЧПУ станков данные шилды используются достаточно часто благодаря своей низкой цене и простоте сборки. Более подробно CNC shield v3 будем рассматривать в следующих статьях.
Вывод можно сделать следующий. Драйвер DRV8825 обладает рядом преимуществ перед драйвером A4988. А также, при использовании драйвера шагового двигателя DRV8825, меньше шума от шаговых двигателей. Это актуально при сборке лазерного гравера, 3D принтера. Когда при работе главный источник шума — это механика и гул шаговых двигателей.
Понравился статья Драйвер шагового двигателя DRV8825? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу , в группу на .
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.
drv8825-datasheet.pdf | 743 Kb | 359 | Скачать |
БИБЛИОТЕКА ДЛЯ ШАГОВОГО ДВИГАТЕЛЯ ARDUINO
Для подключения шаговых моторов к Arduino нужно использовать драйверы. Очень дешёвые и популярные моторы 28byj-48-5v часто продаются вместе со своим драйвером (транзисторная сборка ULN2003), подключить можно к любым 4-м пинам Ардуино и использовать.
Для работы с большими шаговиками (типа Nema 17) нужно использовать специализированные драйверы, ниже вы найдёте описания и схемы подключения для A4988, DRV8825 и TMC2208, драйверы такого формата подключаются и работают практически одинаково, т.к. разработаны для CNC шилдов и взаимозаменяемы. У этих драйверов нужно настроить ток при помощи крутилки на плате. Это можно сделать “на глаз”, заставив мотор вращаться и регулируя крутилку. Мотор должен вращаться, но не вибрировать как перфоратор и сильно не нагреваться. Лучше настроить ток по опорному напряжению Vref, у каждого драйвера оно считается по своей формуле (см. картинки ниже). Берём ток своего мотора из описания, подставляем в формулу вместо current, считаем, и накручиваем полученное напряжение крутилкой. Для измерения опорного напряжения нужно подключить щупы вольтметра к самой крутилке и пину GND.
Главное преимущество дорогущих драйверов TMC – отсутствие шума/свиста/вибраций при работе, так как драйвер своими силами интерполирует сигнал до микрошага 1/256.
How to set the current limit?
Before you start programming your Arduino and start using the driver there is one very important thing you need to do that a lot of people forget: set the current limit!
This step is not very complicated but absolutely necessary to protect your stepper motor and the driver. If you do not set an appropriate current limit, your motor can draw more current than it or your driver can handle, this is likely to damage one or both of them.
To set the current limit you need to measure a reference voltage and adjust the on-board potentiometer accordingly. You will need a small screwdriver, a multimeter to measure the reference voltage, and alligator test leads (optional but very handy).
Current limit wiring diagram for DRV8825 driver.
To measure the reference voltage, the driver needs to be powered. The DRV8825 only needs power via VMOT (8.2-45 V) and you need to apply 5 V to RST and SLP otherwise, the driver won’t turn on. It’s best to disconnect the stepper motor while you do this.
If you have already wired up the driver as I have shown before, you can leave the Arduino connected to power the RST and SLP pins.
DRV8825 | Connection |
---|---|
VMOT | 8.2-45 V |
GND | Motor ground |
SLP | 5V |
RST | 5V |
GND | Logic ground |
Current limit formula
The next step is to calculate the current limit with the following formula:
Current Limit = Vref × 2
So this means that for a current limit of 1 A the Vref should be 0.5 V.
To select the right current limit, take a look at the datasheet of your stepper motor. If you can’t find the current rating of your motor, I recommend starting with a current limit of 1A. You can always increase it later if your motor/driver is missing steps.
Bonus info: When using the driver in full-step mode, the current through each coil is limited to approximately 70% of the set current limit. This means that you would need to set the current limit 40% higher or 1.4 A in full-step mode. When using microstepping, the formula above applies.
If your motor is making a lot of noise, try to lower the current limit. It’s best to set the current limit just high enough so the motor doesn’t miss steps.
Measuring Vref
Now you will need to measure the reference voltage (Vref) between the two points marked on the picture below (GND and the potentiometer) and adjust it to the value you calculated.
Vref probe points (GND and potentiometer).
I recommend using alligator test leads clamped to the screwdriver to set the current limit. This allows you to adjust the potentiometer and measure the reference voltage at the same time.
Note: There is another way to measure the current limit and that is to directly measure the current draw of the stepper motor. Personally I find the above method a lot easier.
Pololu mentions the following on their website:
Current limit FAQ
Do I need to have the stepper motor connected or not?No, you don’t need to connect the stepper motor to the driver when setting the current limit. To be on the safe side, disconnect your motor, it sometimes interferes with measuring the Vref voltage.
Do I need to turn the motor by running the Arduino motor sketch?No, see question above.
Do I need to turn the potentiometer clock- or counterclockwise to raise Vref?This depends on the manufacturer of the driver. If you have a genuine Polulu breakout board of the DRV8825 or A4988 you turn the potentiometer clockwise to raise Vref and counterclockwise to lower it.
БИБЛИОТЕКА GYVERSTEPPER
GyverStepper v1.5
GyverStepper – производительная библиотека для управления шаговыми моторами
- Поддержка 4х фазных (шаг и полушаг) и STEP-DIR драйверов
- Автоматическое отключение питания при достижении цели
- Режимы работы:
- Вращение с заданной скоростью
- Следование к позиции с ускорением и ограничением скорости
- Следование к позиции с заданной скоростью (без ускорения)
- Быстрый алгоритм управления шагами
- Два алгоритма плавного движения:
- Модифицированный планировщик из библиотеки AccelStepper: максимальная плавность и скорость до 7’000 шагов/сек с ускорением (для активации пропиши дефайн SMOOTH_ALGORITHM )
- Мой планировщик обеспечивает максимальную производительность: скорость до 30’000 шагов/сек с ускорением (активен по умолчанию). Т.е. на небольшой скорости экономит кучу процессорного времени для других задач.
Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)
Версия 1.1: добавлена возможность плавно менять скорость в режиме KEEP_SPEED. Добавлены примеры multiStepper и accelDeccelButton Версия 1.2: добавлена поддержка ESP и других Ардуино-совместимых плат Версия 1.3: исправлена логика setTarget(val, RELATIVE) Версия 1.4: добавлена задержка между STEP HIGH и STEP LOW
Подключение к Arduino
Напрямую к порту ардуино подключать нагрузку для диммирования нельзя, так как он может выдать всего 20 мА. То есть напрямую к порту можно подключать отдельные маломощные 5-мм светодиоды, во всех остальных случаях – используйте транзистор. В последнем случае максимальная нагрузка зависит от типа транзистора.
Как мы уже определились ШИМ у нас выдают только пины с номерами 3, 5, 6, 9, 10, 11. Значит, к ним и будем подключать нагрузку. В качестве транзистора предлагаю использовать полевой транзистор (MOSFET) IRF840 – он N-канальный со встроенным обратным диодом для защиты от всплесков противо-ЭДС, его характеристики:
- Предельно допустимое напряжение сток-исток (Uds): 500 V
- Предельно допустимое напряжение затвор-исток (Ugs): 20 V
- Пороговое напряжение включения Ugs(th): 4 V
- Максимально допустимый постоянный ток стока (Id): 8 A
Можно использовать и другие транзисторы с логическим уровнем включения затвора ( Ugs(th) до 5В), в противном случае придется использовать драйвер или промежуточный транзистор для его открытия.
Кроме транзистора нам нужно 2 резистора — первый между выходом платы и затвором на 240 Ом (если его у вас нет – возьмите соседние номиналы) для ограничения тока заряда затворной ёмкости, так мы снизим вероятность выхода из строя порта и просадок по питанию. Второй резистор на 10-12 кОм подключим между затвором и землёй. Он нужен для того, чтобы затвор не висел в воздухе, а также разряда затворной ёмкости и ускорения закрытия полевика. Схему подключения вы видите ниже.
Чтобы задавать обороты, добавим в схему потенциометр, его подключим к аналоговому входу так, как мы делали это в прошлых статьях о сервоприводах и шаговых двигателях .одключение по
Соберем эту схему.
Для ШИМ в родной библиотеке Arduino IDE есть специальная функция — analogWrite (pin, value), в ней pin – номер порта, на который нужно выдавать сигнал, а value – его величина от 0 до 255. То есть при значении value равном 255 коэффициент заполнения на выходе будет равен 1, т.е. будет непрерывный сигнал на входе, а при 127 — почти 50%.
Для нашего эксперимента достаточно простенького кода, который вы видите далее.
Функция map, которая используется в качестве второго аргумента функции analogWrite позволяет сократить код на несколько строчек. Её назначение преобразовать одни размерности в другие. Чтобы понять, как она работает рассмотрим её синтаксис:
То есть мы получаем любое число от 0 до 1023, а функция возвращает число от 0 до 255. Таким образом, у нас происходит преобразование, в общем-то, с сохранением величины в процентах (комментаторов прошу подсказать, как правильно назвать такое преобразование).
Wiring – Connecting DRV8825 to Arduino and stepper motor
Wiring diagram/schematic for DRV8825 stepper motor driver with Arduino and stepper motor.
The wiring diagram/schematic above shows you how to connect the DRV8825 driver to a stepper motor and the Arduino.
The connections are also given in the following table:
DRV8825 Connections
DRV8825 | Connection |
---|---|
VMOT | 8.2-45 V |
GND | Motor ground |
SLP | 5 V |
RST | 5 V |
GND | Logic ground |
STP | Pin 3 |
DIR | Pin 2 |
A1, A2, B1, B2 | Stepper motor |
- The motor power supply is connected to GND and VMOT (top right).
- The two coils of the stepper motor are connected to A1, A2 and B1, B2 (see below).
- The GND pin (lower right) is connected to the ground pin of the microcontroller and VDD is connected to 5V.
- The STP (step) and DIR (direction) pin are connected to digital pin 3 and 2 respectively. You can choose a different digital pin if you want, but these are the ones I used for this tutorial and the example code.
- You need to connect RST (reset) and SLP (sleep) to 5 V otherwise, the driver won’t turn on.
- The EN (enable) pin can be left disconnected, it is pulled low by default. When this pin is set high the driver is disabled.
- The DRV8825 also features a FAULT output that drives low whenever the H-bridge FETs are disabled as the result of over-current protection or thermal shutdown. This pin is left disconnected for this tutorial.
In the rest of this tutorial I have left M0, M1 and M3 disconnected, so the driver operates in full-step mode. This makes explaining the code a bit easier. Normally I would use 1/16 or 1/32 microstepping and connect the appropriate pins to 5 V (see table in the introduction).
Warning
The DRV8825 carrier board uses low-ESR ceramic capacitors, which makes it susceptible to destructive LC voltage spikes, especially when using power leads longer than a few inches.
To protect the driver you can connect an electrolytic capacitor between VMOT and GND. Pololu suggests a capacitor of 47µF or more (I used a 100 µF capacitor). I like these assortment boxes from Amazon, this way I always have some capacitors of the right size on hand.
How to determine the correct stepper motor wiring?
If you can’t find the datasheet of your stepper motor, it can be difficult to figure out how to wire your motor correctly. I use the following trick to determine how to connect 4 wire bipolar stepper motors:
The only thing you need to identify is the two pairs of wires which are connected to the two coils of the motor. The wires from one coil get connected to A1 and A2 and the other to B1 and B2, the polarity doesn’t matter.
To find the two wires from one coil, do the following with the motor disconnected:
- Try to spin the shaft of the stepper motor by hand and notice how hard it is to turn.
- Now pick a random pair of wires from the motor and touch the bare ends together.
- Next, try to spin the shaft of the stepper motor again.
If you feel a lot of resistance, you have found a pair of wires from the same coil. If you can spin the shaft freely, try another pair of wires. Now connect the two coils to the pins shown in the wiring diagram above.
(If it is still unclear, please leave a comment below, more info can also be found on the RepRap.org wiki)
Шаговый двигатель – принцип работы
Схема шагового двигателя Шаговый двигатель – это мотор, перемещающий свой вал в зависимости от заданных в программе микроконтроллера шагов и направления. Подобные устройства чаще всего используются в робототехнике, принтерах, манипуляторах, различных станках и прочих электронных приборах. Большим преимуществом шаговых двигателей над двигателями постоянного вращения является обеспечение точного углового позиционирования ротора. Также в шаговых двигателях имеется возможность быстрого старта, остановки, реверса.
Шаговый двигатель обеспечивает вращения ротора на заданный угол при соответствующем управляющем сигнале. Благодаря этому можно контролировать положение узлов механизмов и выходить в заданную позицию. Работа двигателя осуществляется следующим образом – в центральном вале имеется ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться. Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.
Упрощенные анимированные схемы работы шагового двигателя
Основные виды шаговых моторов:
- Двигатели с переменными магнитами (применяются довольно редко);
- Двигатели с постоянными магнитами;
- Гибридные двигатели (более сложные в изготовлении, стоят дороже, но являются самым распространенным видом шаговых двигателей).
Шаговый двигатель от CD-ROM — запуск на Arduino без драйвера
Добрый вечер ребята. У меня такой вопрос. Как правильно подключить и запустить на ардуино шаговый двигатель от дисковода без драйвера и как урправлять реверсом? Заранее всем откликнувшимся большое спасибо за помощь.
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Там нет шагового двигателя. Там три других двигателя: один обычный коллекторный моторчик, который открывает/закрывает каретку. И два трёхфазных бесколлекторных двигателя: один крутит диск (побольше), другой двигает лазерную головку (поменьше).
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Хмм . А я видел привод каретки и от коллекторного и от шагового движков.
шаговый был обычный биполярный. Подключение много раз обсуждалось
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Меня значит интересует тот который двигает лазерную головку ( у него 4 контакта). Как его можно подключить без драйвера к ардуино и сделать реверс программно??
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Похоже я ошибся и двигатель, который двигает головку всё-таки биполярный шаговый.
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Спасибо за ролики я первый смотрел уже, там через драйвер. Можно ли обойтись без драйвера?
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А как можно реализовать через ардуино реверс обычного постоянного мотора (например от лотка дисковода)? Мотор собираюсь запускать через транзистор подавая на базу сигнал с ардуино. Спасибо за вашу помощь заранее.
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Через транзистор реверсить не получится надо или мост или полумост.
вообщетто непонятно , как Вы нашли этот форум, если не умеете пользоваться поиском?
а если умеете то почему не ищете сами?
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Поиском я умею пользоваться но там советуют в других форумах через драйвер. Как вот можно обычный постоянный мотор реверсить без драйвера . Подключать хочу его к ардуино и задавать реверс цифровым выходом (пинами)
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Спасибо вам. через Н-мост попробую Но я так понимаю если случайно запусить оба транзистора то будет короткое замыкание цепи (например нажал на пульте две кнопки Вперед и Назад одновременно).
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да, будет коротыш. Именно роэтому лучше применить мелкосхему, там есть защита.
откуда такой антагонизм к драйверам? Драйвер на мелкосхеме — тот же Нмост с защитами и в одном корпусе. Очень удобно.
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да не антагонизм к драйверам. Просто нет в наличии пока. А так понимаю что очень удобно
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Хмм. L293 достаточно распрострненная и недорогая. На ебээ вообще копейки стоит.
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Заказать собираюсь либо на алике или а ебее
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Спасибо за совет вам. Вопрос такой L293 может управлять 12В моторами? Какое количество моторов можно задействовать максимально. Я так понимаю он служит вроде ключа для открывания (пропукскания) питания на моторы, а также реверсы делать.
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
В даташите всё написано:
Wide Supply-Voltage Range: 4.5 V to 36 V Output Current 1 A Per Channel (600 mA for L293D) Peak Output Current 2 A Per Channel (1.2 A for L293D)
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
БЛАГОДАРЮ ВСЕХ ЗА ОКАЗАННУЮ ВАМИ МНЕ ПОМОЩЬ))))))))))))))))))))))))))))))))))
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Там нет шагового двигателя. Там три других двигателя: один обычный коллекторный моторчик, который открывает/закрывает каретку. И два трёхфазных бесколлекторных двигателя: один крутит диск (побольше), другой двигает лазерную головку (поменьше).
Не будьте столь категоричны: недавно разбирал CD-Drive, так там головку двигает мотор, к которому идет ровно 2 провода — красный и черный. Вы уверены, что это трехфазный бесколлекторный?
Источник