Подключение шагового двигателя 28BYJ-48-5V к Arduino

Подключаем 5-ти вольтовый шаговый двигатель с редуктором 28BYJ-48-5V к Arduino. Для подключения шагового двигателя используется драйвер на базе UNL2003A.



Небольшое замечание по драйверу. Плата согласования Arduino и шагового двигателя на основе UNL2003A имеет всего одну перемычку, которая замыкает 3 и 4 выводы. Данная перемычка подаёт питание на светодиоды с вывода 2 (так как выводы 2 и 3 спаяны вместе). Если на шаговый двигатель подаётся питание +5 В (как в нашем случае), то данная перемычка позволяет наблюдать за переключением выводов управления шаговым двигателем. Если для кого-то важен потребляемый ток (например, для увеличения времени работы от батареи) и не нужна индикация, то перемычку можно смело снимать.

Для управления шаговым двигателем 28BYJ-48-5V используется стандартная библиотека Arduino, которая называется Stepper. Используя пример из библиотеки Stepper, удается запустить двигатель и менять скорость вращения, но при этом не получается управлять направлением вращения.

Для определения причины нежелания шагового двигателя вращаться в нужном направлении пришлось заглянуть в код библиотеки Stepper, а так же прочитать datasheet к 5-вольтовому шаговому двигателю 28BYJ-48.

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

Последовательность управляющих сигналов для 5-вольтового шагового двигателя 28BYJ-48

Мною было принято написать библиотеку для управления шаговым двигателем 28BYJ-48. Разумеется изобретать велосипед у меня нет желания, поэтому за основу была взята стандартная библиотека Stepper.

Приступаем к написанию библиотеки (модификации стандартной библиотеки Stepper).
  1. Смотрим состав библиотеки Stepper (у меня она расположена в папке /usr/share/arduino/libraries/Stepper)
    • Stepper.cpp
    • Stepper.h
    • keywords.txt
    • папка с примерами использования библиотеки
  2. Создаём новую папку. Называем её Stepper_28BYJ (расположение папки на данный момент не важно).
  3. Копируем файлы в нашу новую папку.
  4. Переименовываем файлы Stepper.h в Stepper_28BYJ.h и Stepper.cpp в Stepper_28BYJ.cpp.
  5. Вносим следующие изменения в файл Stepper_28BYJ.h все вхождения Stepper заменяем на Stepper_28BYJ (тут очень поможет команда Ctrl+H любого текстового редактора).
  6. Так как я подключается конкретный шаговый двигатель с использованием 4-х проводов, удалим 2-х проводной конструктор класса,
    Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2); 
    а так же переменную, которая в библиотеке Stepper использовалась для запоминания, каким конструктором экземпляр класса был создан.
    int pin_count;
  7. В файле Stepper_28BYJ.cpp производим замену с использованием Ctrl+H. У нас должна получиться библиотека которая от стандартной отличается только названием класса.
  8. Удаляем реализацию 2-х проводного конструктора.
  9. В 4-x проводном конструкторе удаляем сроку, которая инициализирует переменную pin_count, так как мы её не используем.
  10. this->pin_count = 4;
  11. Вносим изменения в метод void Stepper_28BYJ::step(int steps_to_move)
    Заменим строку
    stepMotor(this->step_number % 4);
    На строку
    stepMotor(this->step_number % 8);
    Так как в руководстве на 5-вольтовый шаговый двигатель 28BYJ-48 написано, что он различает 8 различных состояний управляющих сигналов.
  12. Изменим метод void Stepper_28BYJ::stepMotor(int thisStep)
    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;
    	}
    }
    
  13. На этом изменения стандартной библиотеки Stepper можно считать законченным.
Небольшое замечание к примерам использования библиотеки:

При создании объекта класса Stepper_28BYJ в конструктор передается количество шагов на 1 полный оборот вала. Данное значение получается из формулы 360 градусов /(5,625 градусов/64), где 5,625 - угол поворота вала двигателя (без редуктора), 64 - коэффициент деления редуктора. Таким образом, получается 4096 шагов на 1 полный оборот.

В описании шагового двигателя сказано, что коэффициент деления редуктора равен 64. Читая форумы по данной теме, натолкнулся на описание редуктора. В редукторе скорость вращения вала самого двигателя понижается 4 раза со следующими коэффициентами - 32/9, 22/11, 26/9 и 31/10. Перемножив данные дроби, получаем число 63,6839506173. Если пересчитать количество шагов на 1 полный оборот вала, то получим, 360 градусов /(5,625 градусов/63,6839506173)=4075,7728395062. Поэтому в примерах я использовал число 4076.

Просмотров: 19388

Дата: Четверг, 21 Августа 2014

Обратите внимание на следующие товары:

Обратная связь

Телефон магазина:
м. "Жулебино"
(499) 796-69-91
(499) 796-06-63

Быстрый заказ
Укажите код товара.