Полнофункциональная библиотека для управления биполярным шаговым двигателем на Arduino
Компоненты и материалы
| Arduino UNO | 1 шт. |
| Драйвер двигателя L293D (двухканальный H-мост, Texas Instruments) | 1 шт. |
Приложения и сервисы
- Arduino IDE
О проекте
Ранее я публиковал библиотеку для униполярных шаговых двигателей. Она идеально управляла скоростью, направлением, числом оборотов, углом поворота и другими параметрами, но только для униполярных двигателей. Биполярные шаговые двигатели также широко используются, поэтому я разработал отдельную библиотеку для них.
Представляю библиотеку bi_polar_Stepper для Arduino, предназначенную для всех типов биполярных шаговых двигателей. Библиотека содержит 9 функций для вращения и управления двигателем по требованиям промышленногоmotion control. Основные возможности:
- Управление любым биполярным шаговым двигателем.
- Управление направлением вращения.
- Точное управление числом оборотов (1, 2, 3, 4…).
- Точная установка скорости в об/мин (RPM) с точностью до 95%.
- Точный поворот на заданный угол 0–360° с точностью 80–100%.
- Совместимость со всеми платами Arduino.
Для использования скопируйте папку bi_polar_Stepper в директорию библиотек Arduino (например, C:\arduino-1.6.7\libraries).
Описание функций библиотеки
bi_polar_Stepper(int pin1, int pin2, int pin3, int pin4)— создаёт экземпляр с указанием пинов Arduino, подключенных к драйверу.set_step_per_rev(int steps)— задаёт количество шагов на один оборот (угол шага / разрешение). Введите угол шага двигателя для точного управления.set_RPM(int rpm)— устанавливает скорость в об/мин, двигатель вращается с заданной скоростью (до 95% точности).rotate_CW()— запускает вращение по часовой стрелке. Для непрерывного вращения вызывайте в цикле.rotate_CCW()— запускает вращение против часовой стрелки. Для непрерывного — в цикле.rotate(int dir)— вращает в заданном направлении: 1 — по часовой, 0 — против.rotate_one_rev(int dir)— поворачивает ровно на 1 оборот в заданном направлении.rotate_n_rev(int dir, int num)— поворачивает на заданное число оборотов в заданном направлении.rotate_x_deg(int deg)— поворачивает на заданный угол 0–360° в любую сторону с точностью 80–100%.
Примеры использования
1. Непрерывное вращение в одну сторону на 60 об/мин
#include <bi_polar_Stepper.h>
#define steps 200 // измените под ваш двигатель
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 60;
void setup() {
Serial.begin(9600);
Serial.println("bipolar stepper motor library test program");
my_step_motor.set_step_per_rev(steps);
my_step_motor.set_RPM(rpm);
Serial.println("motor rotates clockwise");
}
void loop() {
my_step_motor.rotate_CW();
}
2. Поочерёдный поворот на 1 оборот по и против часовой стрелки на 30 об/мин
#include <bi_polar_Stepper.h>
#define steps 200
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup() {
Serial.begin(9600);
Serial.println("bipolar stepper motor library test program created by Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
my_step_motor.set_RPM(rpm);
}
void loop() {
Serial.println("motor rotates clockwise");
my_step_motor.rotate_one_rev(1);
delay(1000);
Serial.println("motor rotates anti-clockwise");
my_step_motor.rotate_one_rev(0);
delay(1000);
}
3. По часовой на 100 об/мин (2 оборота), против — на 50 об/мин (2 оборота) циклически
#include <bi_polar_Stepper.h>
#define steps 200
bi_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup() {
Serial.begin(9600);
Serial.println("Bipolar stepper motor library test program created by Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
}
void loop() {
my_step_motor.set_RPM(100);
for(i=0;i<100;i++) my_step_motor.rotate(1);
delay(2000);
my_step_motor.set_RPM(50);
for(i=0;i<100;i++) my_step_motor.rotate(0);
delay(2000);
}
4. 4 оборота по часовой на 20 об/мин, 2 оборота против на 10 об/мин
#include <bi_polar_Stepper.h>
#define steps 200
bi_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup() {
Serial.begin(9600);
Serial.println("Unipolar stepper motor library test program created by Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
}
void loop() {
my_step_motor.set_RPM(20);
my_step_motor.rotate_n_rev(1, 4);
delay(2000);
my_step_motor.set_RPM(10);
my_step_motor.rotate_n_rev(0, 2);
delay(2000);
}
5. Поворот на 90° по и против часовой стрелки на 30 об/мин
#include <bi_polar_Stepper.h>
#define motor_steps 200
bi_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup() {
Serial.begin(9600);
Serial.println("bipolar stepper motor library test program");
my_step_motor.set_step_per_rev(motor_steps);
my_step_motor.set_RPM(rpm);
Serial.println("motor rotates 90 deg back and forth");
}
void loop() {
my_step_motor.rotate_x_deg(90);
delay(2000);
my_step_motor.rotate_x_deg(270); // 270° против = 90° по часовой с другой стороны
delay(2000);
}
Примечание: Для двигателей с большим током и напряжением вместо L293D можно использовать L298 или комплект из 4 отдельных транзисторов Дарлингтона (TIP122, TIP142 и др.).
Библиотека и примеры тестировались на:
- 2-фазный биполярный двигатель 5 В, макс. 100 об/мин, 200 шагов/об (1,8°).
- 2-фазный биполярный двигатель 5 В, макс. 60 об/мин, 200 шагов/об (1,8°).
Код библиотеки
Библиотека управляет RPM, направлением, оборотами, углом поворота всех типов биполярных шаговых двигателей с точностью 95%.
Нет предпросмотра (только скачивание).
Схемы
Эта схема управляет RPM, направлением, углом поворота, числом оборотов биполярного шагового двигателя.
Производственный процесс
- Двигатели переменного магнитного сопротивления: типы, работа и применение
- Шаговые двигатели: типы, характеристики и практические применения
- Интегрированные драйверы упрощают дизайн высокомощных шаговых двигателей
- Sensor Telemetry 2.0.1 — продвинутый мониторинг температуры с Azure IoT Hub
- Raspoulette: Прототип солнечной автономной системы двери курятника
- DIY автономная турель Nerf — умный Nerf-пушка на шаговых двигателях, камере и Arduino
- Автоматизированный свайпер для Tinder и Bumble на Arduino UNO и шаговом двигателе
- Сервоприводы vs Шаговые двигатели: проясняем современную серую зону
- Понимание линейных моторов: от электрической энергии к точному линейному движению
- Серводвигатели: принцип работы и значение