Программирование для управления шаговым двигателем 28BYJ-48-5V в среде ARDUINO IDE.
В предыдущей статье =>> мы подробно разобрали свойства шагового двигателя 28BYJ-48-5V, драйвера на базе ULN2003 и их подключение к плате Arduino.
ПРОГРАММИРОВАНИЕ В ARDUINO IDE
Библиотеки для управления шаговыми двигателями в ARDUINO IDE.
1. Библиотека Stepper - программная библиотека входит в стандартную среду разработки Arduino IDE. Библиотека Stepper предназначенная для работы с шаговыми двигателями без редуктора. Библиотека Stepper поддерживает только полношаговый метод управления и имеет сильно ограниченные возможности. Предназначена для решения простых задач при управлении одним двигателем.
Если Вы установили среду Arduino IDE, библиотека Stepper у Вас уже есть.
Но все же приводим ссылку для скачивания.
Посмотреть/скачать последнюю версию библиотеки Stepper бесплатно =>>
Применение библиотеки Stepper для управления шаговым двигателем 28BYJ-48-5V является не самым эффективным решением. Но на ее основе можно написать собственную библиотеку для Arduino IDE.
2. Библиотека AccelStepper. Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48-5V (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.
- Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
- Поддержка ускорения и замедления
- Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
- Функции API не используют функцию delay и не прерывают работу
- Поддержка выбора функции для реализации шага позволяет работать совместно с библиотекой AFMotor
- Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
- Поддержка низких скоростей
- Расширяемый API
- Поддержка подклассов
Данная библиотека не входит в стандартную среду разработки Arduino IDE.
Посмотреть/скачать последнюю версию библиотеки AccelStepper бесплатно =>>
3. Библиотека CustomStepper– библиотека может быть использована для управления различными шаговиками, но настройки по умолчанию для шагового двигателя 28BYJ-48-5V.
Данная библиотека не входит в стандартную среду разработки Arduino IDE.
Посмотреть/скачать последнюю версию библиотеки CustomStepper бесплатно =>>
4. Собственная библиотека для управления шаговым двигателем 28BYJ-48
Посмотреть/скачать версию библиотеки Stepper_28BYJ (архив zip 9.9 КБ) бесплатно =>>
За основу берется стандартная библиотека Stepper среды Arduino IDE.
Именно этот пример мы рассмотрим подробно.
Но сначала вернемся еще раз к режимам работы шагового двигателя 28BYJ 48.
Чаще всего, при использовании шагового двигателя 28BYJ 48, используют два режима подключения.
- Полношаговый режим — за 1 такт, ротор делает 1 шаг.
- Полушаговый режим — за 1 такт, ротор делает ½ шага.
Библиотека Stepper, стандартная библиотека среды Arduino IDE, поддерживает только полношаговый метод управления мотором.
Таблица последовательности тактов:

Мы реализуем в примере полушаговую схему коммутации двигателя 28BYJ-48.
Таблица последовательности тактов:

Приступаем к написанию библиотеки (модификации стандартной библиотеки Stepper).
Смотрим состав библиотеки Stepper
- Stepper.cpp
- Stepper.h
- keywords.txt
- папка с примерами использования библиотеки
Создаём новую папку. Называем её Stepper_28BYJ (расположение папки на данный момент не важно).
Копируем файлы в нашу новую папку.
Переименовываем файлы Stepper.h в Stepper_28BYJ.h и Stepper.cpp в Stepper_28BYJ.cpp
Вносим следующие изменения в файл Stepper_28BYJ.h
Все вхождения Stepper заменяем на Stepper_28BYJ (тут очень поможет команда Ctrl+H любого текстового редактора).
Так подключается конкретный шаговый двигатель 28BYJ-48-5V с использованием 4-х проводов, удаляем 2-х проводной конструктор класса,
<font color="#993300">Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2); </font>
а так же переменную, которая в библиотеке Stepper использовалась для запоминания, каким конструктором экземпляр класса был создан.
<font color="#993300">int pin_count;</font>
В файле Stepper_28BYJ.cpp производим замену с использованием Ctrl+H. У нас должна получиться библиотека которая от стандартной отличается только названием класса.
Удаляем реализацию 2-х проводного конструктора.
В 4-x проводном конструкторе удаляем сроку, которая инициализирует переменную pin_count, так как мы её не используем.
<font color="#993300">this->pin_count = 4;</font>
Вносим изменения в метод void Stepper_28BYJ::step(int steps_to_move)
Заменим строку
<font color="#993300">stepMotor(this->step_number % 4);</font>
На строку
<font color="#993300">stepMotor(this->step_number % 8);</font>
Так как используем полушаговый режим работы шагового двигателя 28BYJ-48, а он различает 8 различных состояний управляющих сигналов.
Изменим метод void Stepper_28BYJ::stepMotor(int thisStep)
<font color="#993300">void Stepper_28BYJ::stepMotor(int thisStep) { switch (thisStep) { case 0: // 0001 digitalWrite(motor_pin_1, LOW); digitalWrite(motor_pin_2, LOW); digitalWrite(motor_pin_3, LOW); digitalWrite(motor_pin_4, HIGH); break; case 1: // 0011 digitalWrite(motor_pin_1, LOW); digitalWrite(motor_pin_2, LOW); digitalWrite(motor_pin_3, HIGH); digitalWrite(motor_pin_4, HIGH); break; case 2: //0010 digitalWrite(motor_pin_1, LOW); digitalWrite(motor_pin_2, LOW); digitalWrite(motor_pin_3, HIGH); digitalWrite(motor_pin_4, LOW); break; case 3: //0110 digitalWrite(motor_pin_1, LOW); digitalWrite(motor_pin_2, HIGH); digitalWrite(motor_pin_3, HIGH); digitalWrite(motor_pin_4, LOW); break; case 4: // 0100 digitalWrite(motor_pin_1, LOW); digitalWrite(motor_pin_2, HIGH); digitalWrite(motor_pin_3, LOW); digitalWrite(motor_pin_4, LOW); break; case 5: // 1100 digitalWrite(motor_pin_1, HIGH); digitalWrite(motor_pin_2, HIGH); digitalWrite(motor_pin_3, LOW); digitalWrite(motor_pin_4, LOW); break; case 6: //1000 digitalWrite(motor_pin_1, HIGH); digitalWrite(motor_pin_2, LOW); digitalWrite(motor_pin_3, LOW); digitalWrite(motor_pin_4, LOW); break; case 7: //1001 digitalWrite(motor_pin_1, HIGH); digitalWrite(motor_pin_2, LOW); digitalWrite(motor_pin_3, LOW); digitalWrite(motor_pin_4, HIGH); break; } } </font>
На этом изменения стандартной библиотеки Stepper можно считать законченным.
Небольшое замечание к примерам использования библиотеки:
В описании шагового двигателя сказано, что коэффициент деления редуктора равен 64. В редукторе скорость вращения вала самого двигателя понижается 4 раза со следующими коэффициентами - 32/9, 22/11, 26/9 и 31/10. Перемножив данные дроби, получаем число 63,6839506173. Если пересчитать количество шагов на 1 полный оборот вала, то получим, 360 градусов /(5,625 градусов/63,6839506173)=4075,7728395062. Поэтому в примерах я использовал число 4076.
Посмотреть/скачать версию библиотеки Stepper_28BYJ (архив zip 9.9 КБ) бесплатно =>>
Установить библиотеку Stepper_28BYJ в среду Arduino IDE Вам поможет статья «Установка библиотек в Arduino IDE» =>>