Arduino и шаговый двигатель 28byj-48
Содержание
- 1 Скетчи для «Ардуино» Stepper h
- 2 Контроль направления вращения
- 3 Описание кода программы
- 4 Общие принципы работы шаговых двигателей
- 5 Как настроить ток на шаговом двигателе.
- 6 Управление скоростью двигателя с помощью ШИМ сигнала
- 7 Что такое шаговый двигатель?
- 8 Драйвер шагового двигателя
- 9 1Что такое драйвер двигателей и для чего он нужен
- 10 Подключение драйвера шагового двигателя к arduino
- 11 Настройка тока двигателя на A4988
Скетчи для «Ардуино» Stepper h
Алгоритм управления представлен ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include Stepper.h const int stepsPerRevolution = 100; // Определение числа шагов на полный оборот. Stepper myStepper(stepsPerRevolution, x, y, z, n); // Указаны пины на плате Arduino. Вместо символов x, y, z, n следует задать числовые значения, например 8, 9, 10, 11. void setup() { myStepper.setSpeed(40); // Задание скорости вращения ротора, об./мин. Serial.begin(9600); // Инициализация последовательного порта и установка скорости передачи, бит/с. } void loop() { Serial.println("Move right"); myStepper.step(stepsPerRevolution); // Выполнение поворота на шаг вправо. delay(1000); // Задержка после поворота в 1000 мс. Serial.println("Move left"); myStepper.step(-stepsPerRevolution); // Выполнение поворота на шаг влево. delay(1000); // Задержка в 1000 мс. } |
Если необходимо переопределить режим функционирования пинов платы Arduino, то в стартовый блок добавляется инструкция setup pinMode.
Контроль направления вращения
Для управления направлением вращения двигателя постоянного тока без замены проводов можно использовать схему, называемую H-мостом . H-мост — это электронная схема, которая может управлять двигателем в обоих направлениях. H-мосты используются во многих различных приложениях. Одним из наиболее распространенных приложений является управление двигателями в роботах. Он называется H-мостом, потому что он использует четыре транзистора, соединенных таким образом, что принципиальная схема выглядит как «H».
Мы будем использовать L298 H-Bridge IC здесь. L298 может контролировать скорость и направление двигателей постоянного тока и шаговых двигателей, а также может управлять двумя двигателями одновременно. Его текущий рейтинг составляет 2А для каждого двигателя. Однако при таких токах вам необходимо использовать радиаторы.
Необходимые компоненты
Вам понадобятся следующие компоненты —
- 1 × L298 мостовая ИС
- 1 × двигатель постоянного тока
- 1 × Arduino UNO
- 1 × макет
- 10 × перемычек
Процедура
Ниже приведена принципиальная схема интерфейса двигателя постоянного тока с платой Arduino Uno.
На схеме выше показано, как подключить микросхему L298 для управления двумя двигателями. Для каждого двигателя имеется три входных контакта: Вход1 (IN1), Вход2 (IN2) и Разрешить1 (EN1) для Двигателя1 и Вход3, Вход4 и Разрешить2 для Двигателя2.
Поскольку в этом примере мы будем управлять только одним двигателем, мы подключим Arduino к IN1 (контакт 5), IN2 (контакт 7) и Enable1 (контакт 6) микросхемы L298. Контакты 5 и 7 являются цифровыми, т. Е. Входы ВКЛ или ВЫКЛ, а для вывода 6 требуется сигнал с широтно-импульсной модуляцией (ШИМ) для контроля скорости двигателя.
В следующей таблице показано направление вращения двигателя на основании цифровых значений IN1 и IN2.
В 1 | IN2 | Мотор Поведение |
---|---|---|
ТОРМОЗНАЯ | ||
1 | ВПЕРЕД | |
1 | BACKWARD | |
1 | 1 | ТОРМОЗНАЯ |
Контакт IN1 микросхемы L298 подключен к контакту 8 Arduino, а IN2 подключен к контакту 9. Эти два цифровых контакта Arduino контролируют направление двигателя. EN Контакт IC подключен к выводу 2 ШИМ Arduino. Это будет контролировать скорость двигателя.
Чтобы установить значения выводов Arduino 8 и 9, мы использовали функцию digitalWrite (), а для установки значения вывода 2 мы должны использовать функцию analogWrite ().
Шаги подключения
- Подключите 5V и заземление IC к 5V и заземлению Arduino соответственно.
- Подключите двигатель к контактам 2 и 3 микросхемы.
- Подключите IN1 IC к контакту 8 Arduino.
- Подключите IN2 IC к контакту 9 Arduino.
- Подключите EN1 IC к контакту 2 Arduino.
- Подключите SENS A контакт IC к земле.
- Подключите Arduino с помощью USB-кабеля Arduino и загрузите программу в Arduino с помощью программного обеспечения Arduino IDE.
- Подайте питание на плату Arduino с помощью блока питания, аккумулятора или USB-кабеля.
Arduino Code
constint pwm =2;//initializing pin 2 as pwmconstint in_1 =8;constint in_2 =9;//For providing logic to L298 IC to choose the direction of the DC motorvoid setup(){ pinMode(pwm,OUTPUT);//we have to set PWM pin as output pinMode(in_1,OUTPUT);//Logic pins are also set as output pinMode(in_2,OUTPUT);}void loop(){//For Clock wise motion , in_1 = High , in_2 = Low digitalWrite(in_1,HIGH); digitalWrite(in_2,LOW); analogWrite(pwm,255);/* setting pwm of the motor to 255 we can change the speed of rotation by changing pwm input but we are only using arduino so we are using highest value to driver the motor *///Clockwise for 3 secs delay(3000);//For brake digitalWrite(in_1,HIGH); digitalWrite(in_2,HIGH); delay(1000);//For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH digitalWrite(in_1,LOW); digitalWrite(in_2,HIGH); delay(3000);//For brake digitalWrite(in_1,HIGH); digitalWrite(in_2,HIGH); delay(1000);}
Результат
Двигатель будет сначала вращаться в направлении по часовой стрелке (CW) в течение 3 секунд, а затем в течение 3 секунд против часовой стрелки (CCW).
Описание кода программы
Листинг управления ШД
Arduino
#include<AccelStepper.h> #define HALFSTEP 7 // Определение пинов для управления двигателем #define motorPin1 8 // IN1 на 1-м драйвере ULN2003 #define motorPin2 9 // IN2 на 1-м драйвере ULN2003 #define motorPin3 10 // IN3 на 1-м драйвере ULN2003 #define motorPin4 11 // IN4 на 1-м драйвере ULN2003 // Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4 // для использования AccelStepper с 28BYJ-48 AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); void setup(){ // Задаём максимальную скорость двигателя stepper1.setMaxSpeed(1000.0); // Задаём ускорение двигателя stepper1.setAcceleration(100.0); // Установим скорость в шагах за секунду stepper1.setSpeed(200); // Перемещаем в абсолютно указанное положение stepper1.moveTo(360); } void loop(){ // Изменяем направление, если шаговик достигает заданного положения if(stepper1.distanceToGo()==0) stepper1.moveTo(-stepper1.currentPosition()); stepper1.run(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include<AccelStepper.h> // Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4 AccelStepperstepper1(HALFSTEP,motorPin1,motorPin3,motorPin2,motorPin4); voidsetup(){ // Задаём максимальную скорость двигателя stepper1.setMaxSpeed(1000.0); // Задаём ускорение двигателя stepper1.setAcceleration(100.0); // Установим скорость в шагах за секунду stepper1.setSpeed(200); // Перемещаем в абсолютно указанное положение stepper1.moveTo(360); } voidloop(){ // Изменяем направление, если шаговик достигает заданного положения if(stepper1.distanceToGo()==) stepper1.moveTo(-stepper1.currentPosition()); stepper1.run(); } |
И напоследок небольшое видео демонстрации работы сборки:
Общие принципы работы шаговых двигателей
Внешний вид шагового двигателя 28-BYJ48 представлен на следующем рисунке:
Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 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. В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.
Как настроить ток на шаговом двигателе.
У каждого двигателя свой ток работы. Для того, что-бы он правильно работал, необходимо правильно ограничить ток на плате драйвера. Для этого на платах есть потенциометр.
Настройка Vref drv8825
Для начала нужно рассчитать VRef, делается это очень просто.
Current Limit = Vref * 2
Vref = Current Limit / 2
Например для шагового двигателя 17HS4401: Vref = 1,7 / 2 = 0,85В
Что-бы двигатель не перегревался часто Vref снижают.
Ставим щупы мультиметра так, как показано на картинке выше, меряем, что у нас там и крутим в ту или иную сторону для достижения нужного результата. Двигатель в этот момент будет менять свой звук работы.
Отлично! Ток настроен, а драйвер правильно подключен!
Управление скоростью двигателя с помощью ШИМ сигнала
Программа | Комментарии | |
---|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
ldi r16, 0b11111111 |
Записываем 1-цы в регистр r16 Настроили порт B на вывод Записываем 0-ли в регистр r16 Настроили порт D на ввод Начало основной программы Записываем в r16 то что на порте D (читаем) Записываем в порт B прочтенные данные Задерживаем (для включения ШИМ на порт D надо подать 1) Записываем 0-ли в r16 Записываем в порт B эти 0-ли Задерживаем данные (это всегда 0) Переход на начало основной программы Начало функции delay1, которая задерживает 1 Держим 1-цу 200 операций Конец функции delay1 Начало функции delay0, которая задерживает 0 Держим 0-ль 120 операций Конец функции delay0 |
Что такое шаговый двигатель?
Прежде чем перейти к статье, давайте сразу договоримся, что статья не направлена на специалистов, а её цель – донести любознательным любителям техники и технологий о таком устройстве, как шаговый двигатель и об основах работы с ними. Поэтому умников и критиков, жаждущих поговорить о великом многообразии управляемого и регулируемого электропривода, прошу идти общаться на тематические ресурсы по ЧПУ-станкам и 3D-принтерам.
Формулировка достаточно понятна, но её последнее предложение может вызвать некоторое недопонимание. Поэтому я предлагаю провести небольшое сравнение.
Всем известно что ротор «обычного» электродвигателя, будь то асинхронного, синхронного, коллекторного или любого другого будет вращаться до тех пор, пока на него подают напряжение питания, и после отключения питания он будет вращаться еще какое-то время по инерции, если же не используются какие-либо средства для его торможения.
Ротор такого двигателя вращается просто вокруг своей оси без каких-либо ограничений, на 360 градусов, и остановится он в любом месте. Зафиксировать его положением можно только механически (тормозом). По этой причине не получится добиться точного позиционирования исполнительных механизмов, что требуется в робототехнике, ЧПУ-станках и другом автоматизированном оборудовании.
Но шаговые двигатели разработаны для применения в механизмах, где детали поворачиваются точно на требуемый угол.
Питание такого двигателя невозможно без системы управления, или как его еще называют, драйвера — он подаёт импульсы в нужные обмотки, чтобы повернуть ротор на нужный угол. Это наглядно иллюстрирует приведенная ниже анимация.
Кроме того, что можно поворачивать двигатель на определенный угол и фиксировать его в этом положении, делать это всё можно без схемы обратной связи (датчиков положения и прочего).
Рассматривать типы шаговых двигателей в пределах этой статьи мы не будем, лишь кратко перечислим, какими они бывают. По конструкции:
1. Реактивные.
2. С постоянными магнитами.
3. Гибридные.
По способу питания:
- Униполярные (однополярные — ток пропускают через обмотки только в одну сторону).
- Биполярные (ток пропускают через обмотки в обе стороны). Здесь драйвер должен подавать напряжение различной полярности, что несколько усложняет схемотехнику. При тех же размерах развивают бОльшую мощность по сравнению с униполярными.
В униполярном двигателе зачастую 5 проводов — 1 общий, от середины каждой из двух обмоток, и 4 от концов обмоток. Иногда говорят «4 обмотки» — это также правильно, поскольку фактически мы получаем 4 обмотки соединенных в общей точки.
Униполярный шаговый двигатель
Также ШД могут отличаться и по количеству проводов, это зависит от того, как соединены обмотки и какое питание предполагается, некоторые варианты вы видите в таблице ниже.
Варианты схем соединения обмоток в шаговых двигателях
Управление шаговым двигателем
Различают два способа управления шаговым двигателем:
1. Полношаговое. Одновременно включается только пара обмоток (без перекрытия с другими). Достигается максимальный момент на валу, но точность установления угла меньше, чем в других способах.
2. Полушаговое. В этом случае увеличивается количество шагов, соответственно повышается точность установки положения вала. На каждый первый шаг включается одна обмотка, на каждый второй шагами (полушаг) – пара обмоток. Но когда включена одна обмотка момент на валу снижается вдвое.
На анимациях ниже наглядно продемонстрировано
Полношаговое управление
В некоторых источниках отдельно обозначают микрошаговое управление. Используется, когда необходимо максимальное количество шагов и точность управления. По способу управления оно похоже на полушаговый режим, между шагами включаются две обмотки, а отличие в том, что токи в них распределяются не равномерно. Главный недостаток такого подхода — усложняется коммутация (система управления).
Драйвер шагового двигателя
Краткое введение в теорию и типы драйверов, советы по подбору оптимального драйвера для шагового двигателя.
Некоторые сведения, которые могут помочь вам выбрать драйвер шагового двигателя.
Шаговый двигатель – двигатель со сложной схемой управления, которому требуется специальное электронное устройство – драйвер шагового двигателя.
Драйвер шагового двигателя получает на входе логические сигналы STEP/DIR, которые, как правило, представлены высоким и низким уровнем опорного напряжения 5 В, и в соответствии с полученными сигналами изменяет ток в обмотках двигателя, заставляя вал поворачиваться в соответствующем направлении на заданный угол. >Сигналы STEP/DIR генерируются ЧПУ-контроллером или персональным компьютером, на котором работает программа управления типа Mach3 или LinuxCNC.
Задача драйвера – изменять ток в обмотках как можно более эффективно, а поскольку индуктивность обмоток и ротор гибридного шагового двигателя постоянно вмешиваются в этот процесс, то драйверы весьма отличаются друг от друга своими характеристиками и качеством получаемого движения. Ток, протекающий в обмотках, определяет движение ротора: величина тока задает крутящий момент, его динамика влияет на равномерность и т.п.
Типы (виды) драйверов ШД
Драйверы делятся по способу закачки тока в обмотки на несколько видов:1) Драйверы постоянного напряжения
Эти драйверы подают постоянный уровень напряжения поочередно на обмотки, результирующий ток зависит от сопротивления обмотки, а на высоких скоростях – и от индуктивности. Эти драйверы крайне неэффективны, и могут быть использованы только на очень малых скоростях.
2) Двухуровневые драйверы
В драйверах этого типа ток в обмотке сперва поднимается до нужного уровня с помощью высокого напряжения, затем источник высокого напряжения отключается, и нужная сила тока поддерживается источником малого напряжения. Такие драйверы достаточно эффективны, помимо прочего они снижают нагрев двигателей, и их все еще можно иногда встретить в высококлассном оборудовании. Однако, такие драйверы поддерживают только режим шага и полушага.
3) Драйверы с ШИМ.
На текущий момент ШИМ-драйверы шаговых двигателей наиболее популярны, практически все драйверы на рынке – этого типа. Эти драйверы подают на обмотку шагового мотора ШИМ-сигнал очень высокого напряжения, которое отсекается по достижению током необходимого уровня. Величина силы тока, по которой происходит отсечка, задается либо потенциометром, либо DIP-переключателем, иногда эта величина программируется с помощью специального ПО. Эти драйверы достаточно интеллектуальны, и снабжены множеством дополнительных функций, поддерживают разные деления шага, что позволяет увеличить дискретность позиционирования и плавность хода. Однако, ШИМ-драйверы также весьма сильно отличаются друг от друга. Помимо таких характеристик, как питающее напряжение и максимальный ток обмотки, у них отличается частота ШИМ. Лучше, если частота драйвера будет более 20 кГц, и вообще, чем она больше – тем лучше. Частота ниже 20 кГц ухудшает ходовые характеристики двигателей и попадает в слышимый диапазон, шаговые моторы начинают издавать неприятный писк. Драйверы шаговых двигателей вслед за самими двигателями делятся на униполярные и биполярные. Начинающим станкостроителям настоятельно рекомендуем не экспериментировать с приводами, а выбрать те, по которым можно получить максимальный объем технической поддержки, информации и для которых продукты на рынке представлены наиболее широко. Такими являются драйверы биполярных гибридных шаговых двигателей.
Ниже будут описаны только практические рекомендации по выбору ШИМ-драйвера биполярного шагового двигателя. При этом предполагается, что Вы уже определились с моделью двигателя, его характеристиками и т.п.
1Что такое драйвер двигателей и для чего он нужен
Максимальный ток на выводах Arduino слаб (около 50 мА) для такой мощной нагрузки как электромотор (десятки и сотни миллиампер). Поэтому напрямую к выводам Arduino подключать электродвигатель нельзя: есть риск сжечь вывод, к которому подключён двигатель. Для безопасного подключения электродвигателей разных типов к Arduino необходим самодельный или промышленно изготовленный т.н. драйвер двигателей. Драйверы двигателей бывают разные, для их работы часто используются микросхемы типа HG788, L9110S, L293D, L298N и другие. Драйверы двигателей имеют выводы подачи питания, выводы для подключения электродвигателей, а также управляющие выводы.
Различные варианты исполнения драйверов двигателей
В данной статье мы будем использовать драйвер для управления двигателями, сделанный на основе микросхемы L9110S. Обычно выпускаются платы, которые поддерживают подключение нескольких двигателей. Но для демонстрации мы обойдёмся одним.
Подключение драйвера шагового двигателя к arduino
У каждого радиолюбителя возникает тот момент, когда ему необходимо подключить к своему микроконтроллеру шаговый двигатель. Конечно, скажете вы, в «Интернетах» есть куча схем, готовых библиотек и все уже разжевано давным давно. Однако, когда я решил подключить к своей arduino nano драйвер DRV8825 и полез в интернет за схемкой, то обнаружил, что схем несколько. Если быть точным я нашел их 2.
Минимальная схема подключения драйвера DRV8825
( почему то НЕ РАБОТАЕТ ) Альтернативная схема подключения DRV8825
Посмотрев несколько статей, устройств, схем, я пришел к выводу, что вторя схема правильная (нет) и растравил плату. Собрав ее, долго думал почему на двигатель не поступает питание. Я менял драйвера как перчатки, но после 4 штук подумал, что дело не может быть в драйверах. Решил подать питание так как показано на первой схеме. И о чудо! Оно живое!
Возможно, только у меня такие драйвера ( или кривые руки ), однако запустилась только первая схема, которую я теперь постоянно и использую.
Настройка тока двигателя на A4988
На плате драйвера предусмотрен потенциометр для регулировки тока. Для настройки понадобиться мультиметр, для замера напряжения на потенциометре.
Расположение токоограничительных резисторов и потенциометра Vref
Формула Vref для A4988 изменяется от номинала токочувствительных резисторов (Обведены на фото выше). . Обычно подписаны R050 или R100.
Vref = Imax * 8 * (RS)
Imax — максимальный ток двигателя;
RS — сопротивление резистора. В моем случае RS = 0,100. Для 17HS4401 Vref = 1,7 * 8 * 0,100 = 1,36 В.
Рабочий ток двигателя равен 70% от тока удержания. Умножим полученные значения чтобы двигатель не грелся при простое.
Для 17HS4401 Vref ист. = 1,36*0,7 = 0,952 В.
Подключаем драйвер к микроконтроллеру, включаем и меряем напряжение Vref на драйвере. Если оно не соответствует нужному нам номиналу, а оно скорее всего будет не будет соответствовать, крутим потенциометр в какую то сторону и смотрим что поменялось. Доводим до нужного нам значения и радуемся, ведь ток на драйвере теперь настроен!