Custom stepper ардуино

Custom stepper ардуино

Четырех фазный шаговый двигатель (28BYJ-48) — это бесколлекторный двигатель, вращение вала осуществляется шагами (дискретное перемещение). На роторе (валу), расположен магнит, а вокруг него расположены катушки, если поочередно подавать ток на эти катушки, создается магнитное поле, которое отталкивает или притягивает магнитный вал, тем самым заставляя двигатель вращаться. Такая конструкция позволяет с большой точностью управлять валом, относительно катушек. Принципиальная схема четырехфазного шагового двигателя 28BYJ-48 приведена ниже.

в двигателе содержится две обмотки, которые в свою очередь разделены на четыре, из-за этого и название 4-х фазный. Центральные отводы катушек подключены вместе и служат для питания двигателя, так-как каждая обмотка подключена к питанию, такие двигатели называют униполярный. На валу 28BYJ-48 расположено 8 магнитов, с чередующими полюсами (то есть, четыре магнита с двумя полюсами). Внутри расположен редуктор, с примерным передаточным числом в 1:63,68395. Это означает, что двигатель за один оборот осуществляет 4075.7728395 шага. Данный двигатель поддерживает полушаговый режим и за один полный оборот может совершать 4076 шага, а точнее за 1° делает примерно 11,32 шага. (4076 / 360 = 11,32).

Режим работы:
Чаще всего, при использовании шагового двигателя 28BYJ 48, используют два режима подключения.
Полношаговый режим — за 1 такт, ротор делает 1 шаг.
Полушаговый режим — за 1 такт, ротор делает ½ шага.

Когда используется полношаговый метод управления, две из четырех обмоток запитываются на каждом шаге. Идущая вместе с Arduino IDE библиотека Stepper использует такой способ. В техническом руководстве к 28BYJ-48 сказано, что предпочтительным является использование метода полушага, при котором сначала запитывается только 1 обмотка, затем вместе первая и вторая обмотки, затем только вторая обмотка и так далее. С 4 обмотками это дает 8 различных сигналов, как показано в таблице ниже.

Модуль шагового двигателя ULN2003:
Цифровой вывод микроконтроллера может выдать ток

40 мА, а одна обмотка 28BYJ-48 в пике потребляем

320 мА, следовательно если подключить двигатель напрямую, микроконтроллер сгорит. Для защиты был разработан «Модуль шагового двигателя ULN2003″, в котором используется микросхема ULN2003A (по сути, состоящая из 7 ключей), позволяющая управлять нагрузкой до 500 мА (один ключ). Данный модуль может работать с 5В и 12В двигателем 28BYJ-48, для переключения необходимо установить или убрать перемычку (по умолчанию перемычка установлена, питание 5В).

Принципиальную схему модуля ULN2003 можно посмотреть на рисунке ниже

Назначение X1
IN1 . . . IN7: Вход 1 … 7

Назначение X2
► 1 — GND: «-» питание модуля
► 2 — Vcc: «+» питание модуля (5В или 12В)
► 3 — Vcc: «+» питание модуля (перемычка, только при 5В)
► 4 — Vcc: «+» питание модуля (перемычка, только при 5В)

Назначение X3
► A: Выход 1
► B: Выход 2
► C: Выход 3
► D: Выход 4
► E: Выход 5
► F: Выход 6
► G: Выход 7

Назначение X3
► 1 — Питание
► 2 — A
► 3 — B
► 4 — C
► 5 — D

Внешний вид платы модуля

Помимо самой микросхемы ULN2003AN, на плате имеется пятиконтактный разъем для подключения к шаговику и четыре светодиода, показывающих, какая из обмоток запитана в текущий момент времени.

Также сбоку расположен джампер (два вывода под четырьмя резисторами), установка которого позволяет подавать питание на шаговый двигатель. Замечу, что питать мотор от 5 В Arduino не рекомендуется, так как мотор может потреблять ток, превышающий возможности Arduino. Лучше использовать внешний 5-12 В источник питания, выдающий ток не менее 1 А. Четыре управляющих входа помечены как IN1-IN4 и должны быть подключены к четырем цифровым выводам Arduino.

Подключите выводы IN1, IN2, IN3 и IN4 к пинам 3, 4, 5 и 6 Arduino Uno. Положительный контакт источника питания необходимо подключить к выводу, помеченному как «+», а землю источника питания к выводу «-» на плате контроллера. Если для питания Arduino и мотора используются различные источники питания, то необходимо объединить выводы «земля» источников вместе.

Подключение:
В данном примере буду использовать модуль ULN2003, Arduino UNO R3 и двигатель 28BYJ-48-5V. Схема не сложная, необходимо всего шесть провода, сначала подключаем интерфейсные провода, IN1 (ULN2003) в 11 (Arduino UNO), IN2 (ULN2003) в 10 (Arduino UNO), IN3 (ULN2003) в 9 (Arduino UNO) и IN4 (ULN2003) в 8 (Arduino UNO), осталось подключить питание GND к GND и VCC к VIN (не для постоянного использовании), подключаем разъем двигателя в модуль ULN2003.

Стандартная библиотека Stepper, идущая с Arduino IDE, поддерживает только полношаговый метод управления и имеет сильно ограниченные возможности. Использовать ее можно только в очень простых приложениях, в которых используется только один мотор. Применение библиотеки Stepper для управления 28BYJ-48 является не самым эффективным решением.

Библиотека CustomStepper

Для вращения двигателя по часовой и против часовой стрелки, используем библиотеку «CustomStepper«. Данная библиотека не входит в стандартную среду разработки Arduino IDE, так что скачиваем и добавляем ее.

#include // Подключаем библиотеку CustomStepper

CustomStepper stepper(8, 9, 10, 11); // Указываем пины, к которым подключен драйвер шагового двигателя

boolean rotate1 = false; // Переменная для смены режимов

boolean rotatedeg = false; // Переменная для смены режимов

boolean crotate = false; // Переменная для смены режимов

stepper.setRPM(12); // Устанавливаем количество оборотов в минуту

stepper.setSPR(4075.7728395); // Устанавливаем колочество шагов на полный оборот. Максимальное значение 4075.7728395

if (stepper.isDone() && rotate1 == false)

stepper.setDirection(CCW); // Устанавливает направление вращения (по часовой)

stepper.rotate(2); // Устанавливает вращение на заданное количество оборотов

if (stepper.isDone() && rotate1 == true && rotatedeg == false)

stepper.setDirection(CW); // Устанавливает направление вращения (против часовой)

stepper.rotateDegrees(90); // Поворачивает вал на заданное кол-во градусов

if (stepper.isDone() && rotatedeg == true && crotate == false)

stepper.setDirection(CCW); // Устанавливает направление вращения (по часовой)

stepper.rotate(); // Будет вращать пока не получит команду о смене направления или STOP

stepper.run(); // Этот метод обязателен в блоке loop. Он инициирует работу двигателя, когда это необходимо

Скачать библиотеку можно здесь

Библиотека AccelStepper

Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48 (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.

  • Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
  • Поддержка ускорения и замедления
  • Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
  • Функции API не используют функцию delay и не прерывают работу
  • Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
  • Поддержка низких скоростей
  • Расширяемый API
  • Поддержка подклассов

Представленный ниже код медленно ускоряет мотор 28BYJ-28 в одном направлении, затем замедляется до остановки и вновь ускоряется, но уже вращаясь в противоположном направлении.

#define HALFSTEP 8

// Определение пинов для управления двигателем

#define motorPin1 3 // IN1 на 1-м драйвере ULN2003

#define motorPin2 4 // IN2 на 1-м драйвере ULN2003

#define motorPin3 5 // IN3 на 1-м драйвере ULN2003

#define motorPin4 6 // IN4 на 1-м драйвере ULN2003

// Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4

// для использования AccelStepper с 28BYJ-48

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

Источник

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

Программирование для управления шаговым двигателем 28BYJ-48-5V в среде ARDUINO IDE.

В предыдущей статье =>> мы подробно разобрали свойства шагового двигателя 28BYJ-48-5V, драйвера на базе ULN2003 и их подключение к плате Arduino.

ПРОГРАММИРОВАНИЕ В ARDUINO IDE
Библиотеки для управления шаговыми двигателями в ARDUINO IDE.

1. Библиотека Stepper — программная библиотека входит в стандартную среду разработки Arduino IDE. Библиотека Stepper предназначенная для работы с шаговыми двигателями без редуктора. Библиотека Stepper поддерживает только полношаговый метод управления и имеет сильно ограниченные возможности. Предназначена для решения простых задач при управлении одним двигателем.

Если Вы установили среду Arduino IDE, библиотека Stepper у Вас уже есть.
Но все же приводим ссылку для скачивания.

Применение библиотеки Stepper для управления шаговым двигателем 28BYJ-48-5V является не самым эффективным решением. Но на ее основе можно написать собственную библиотеку для Arduino IDE.

2. Библиотека AccelStepper. Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48-5V (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.

  • Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
  • Поддержка ускорения и замедления
  • Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
  • Функции API не используют функцию delay и не прерывают работу
  • Поддержка выбора функции для реализации шага позволяет работать совместно с библиотекой AFMotor
  • Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
  • Поддержка низких скоростей
  • Расширяемый API
  • Поддержка подклассов

Данная библиотека не входит в стандартную среду разработки Arduino IDE.

3. Библиотека CustomStepper– библиотека может быть использована для управления различными шаговиками, но настройки по умолчанию для шагового двигателя 28BYJ-48-5V.
Данная библиотека не входит в стандартную среду разработки Arduino IDE.

4. Собственная библиотека для управления шаговым двигателем 28BYJ-48

За основу берется стандартная библиотека 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-х проводной конструктор класса,

а так же переменную, которая в библиотеке Stepper использовалась для запоминания, каким конструктором экземпляр класса был создан.

В файле Stepper_28BYJ.cpp производим замену с использованием Ctrl+H. У нас должна получиться библиотека которая от стандартной отличается только названием класса.

Удаляем реализацию 2-х проводного конструктора.

В 4-x проводном конструкторе удаляем сроку, которая инициализирует переменную pin_count, так как мы её не используем.

Вносим изменения в метод void Stepper_28BYJ::step(int steps_to_move)

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

Изменим метод void Stepper_28BYJ::stepMotor(int thisStep)

На этом изменения стандартной библиотеки Stepper можно считать законченным.

Небольшое замечание к примерам использования библиотеки:

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

Установить библиотеку Stepper_28BYJ в среду Arduino IDE Вам поможет статья «Установка библиотек в Arduino IDE» =>>

Источник

Arduino Library – CustomStepper

Installatie van Arduino IDE libraries: Arduino info

Informatie (ENG):

CustomStepper is a library for controlling stepper motors. I’ve decided to make this library after having some troubles with my stepper motor and the regular Stepper library. It comes with functions to make the motor rotate a given number of times, a given angle (in degrees) or rotate until you send another command. I plan to use it to build an Arduino controlled CNC. The library default parameters are the ones of the 28BYJ-48 5-Volt stepper motor with 283712/4455 gear ratio I have.

Methods & Usage

CustomStepper (Constructor)

pin1-pin4
The constructor has from 4 to 8 parameters, the first 4 are mandatory, they are the 4 pins where the motor is connected at.

steps[]
The 5th parameter is the stepping sequence, which is an array, the 1st element is the number of steps in the sequence, it can be up to 8.

spr
The 6th parameter is the number of steps the motor takes per rotation (Note that if your motor is geared, the number of steps per rotation of the axis will be equal to the number of steps per rotation of the motor times the gear ratio). This parameter accepts float because there are some motors (like mine) with weird gear ratios that would translate in a non-integer number of spr.

rpm
The 7th parameter is self-explanatory, the motor RPMs . This parameter is also float in case you want to control the rotation more accurately, although it doesn’t have an 100% guaranteed precision because the time is controlled by microseconds which are of long time.

rotation
The 8th parameter is the rotation orientation, which can be one of the defined constants of the library: STOP, CW and CCW, the last two standing for clockwise and counterclockwise respectively.

The optional parameters defaults are the following:

CustomStepper(byte pin1, byte pin2, byte pin3, byte pin4, byte steps[] = (byte[])<8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001>, float spr = 4075.7728395, float rpm = 12, byte direction = CW);

setRPM
This method allows you to set the RPM of the motor, it must be greater than 0, if you want to stop the motor, use the setDirection(STOP). The type is float:

void setRPM(float RPM);

setSPR
This method allows you to set the SPR (Steps Per Rotation of the motor, it must be greater than 0. The type is float.

Источник

Adblock
detector