Arduino и двигатели
Одно из самых интересных в хобби-электронике – это использование двигателей для «оживления» ваших проектов.
Однако добавление мотора в ваш проект может оказаться непростой задачей, особенно, если вы до этого с приводами не работали.
Данная статья даст вам понимание принципов работы двигателей различных типов и пояснит многие необходимые нюансы и их особенности.
Принцип работы двигателей
Перед тем как разбираться, как именно моторы работаю, давайте сосредоточимся на том, для чего они используются. Моторы используют электромагнитные силы для обеспечения движения, преобразования электроэнергии в механическую.
Магнитные поля создают силу, которая может перемещать объекты. Каждый магнит имеет магнитное поле с северным и южным полюсом. Если вы попробуете приблизить два северных полюса двух магнитов, они будут отталкиваться.
То же самое произойдет, если вы попытаетесь приблизить два южных полюса. Если полюса одинаковые, они будут отталкиваться друг от друга. Если же вы приблизите северный полюс одного с южному полюсу другого магнита, они притянутся с определенным усилием.
То есть, противоположные полюса притягиваются друг к другу.
Электродвигатель использует свойства магнитов отталкиваться и притягиваться для генерации движения. В обычном электродвигателе два магнита: постоянный и переменный. Переменный магнит называется электромагнитом. Электромагнит создается с помощью пропускания электрического тока через проводник.
Постоянный магнит постоянно имеет магнитное поле (северный и южный полюса), а электромагнит генерирует магнитное поле только, когда через него пропускают электрический ток.
Сила магнитного поля электромагнита может быть увеличена с помощью повышения тока, проходящего через проводник или методом формирования нескольких обмоток проводника.
В электродвигателе электромагнит устанавливается на ось таким образом, что он может свободно вращаться внутри магнитного поля постоянного магнита. В момент, когда через проводник проходит электрический ток, переменное магнитное поле взаимодействует со статическим магнитным полем магнита, возникают силы отталкивания и притяжения. Это заставляет электромагнит вращаться, возникает движение.
Основные узлы электродвигателя:
— Постоянный магнит (магниты), в случае, когда он установлен неподвижно, называется статором;
— внутри статора есть катушка, которая установлена на оси и вращается, называется ротором.
Двигатели постоянного тока
Двигатели постоянного тока (DC motor) во многом являются самыми простыми электродвигателями. Большинство «щеточных» двигателей работают одинаково. Есть ротор и статор. Есть магниты на статоре и катушка на роторе с магнитным полем, которое генерируется с помощью подачи на нее силы тока. Есть щетки внутри мотора, которые заставляют двигаться ротор.
При использовании источника постоянного тока, для управления подобным двигателем практически ничего не надо. Скорость его вращения зависит от силы тока, которая поступает на катушки от источника питания к коммутатору.
Для вращения оси двигателя в противоположном направлении, достаточно подключить контакты от источника питания к двигателю наоборот.
Шаговые двигатели
Как и двигатели постоянного тока, шаговые двигатели состоят из ротора и статора. Но, в отличие от других двигателей, ротор шагового двигателя представляет из себя постоянный магнит, который вращается внутри полей, создаваемых электромагнитами. Статор состоит из нескольких катушек, которые расположены в корпусе мотора.
Когда ток проходит через катушки, подвижный вал двигателя (который является, по сути, постоянным магнитом) располагается в соответствии с генерируемым электромагнитной катушкой полем. Когда катушки заряжаются в определенной последовательности, вал двигателя выбирает новые положения и, соответственно, начинает вращаться.
Ротор приводится в движение последовательной подачей напряжения на катушки. Шаговый двигатель имеет возможность проворачивать ротор на определенный шаг в зависимости от разрешения импульса.
Шаговые двигатели являются отличным выбором для проектов на Arduino (и не только) по нескольким причинам. Они стоят относительно недорого, у них маленькая погрешность, следовательно – это идеальный выбор для управления с разомкнутой системой управления (без дополнительных датчиков положения рабочего органа). Шаговые двигатели будут обеспечивать заданное положение ротора исключительно в зависимости от поданной силы тока.
Эти двигатели предназначены для вращения в одном и противоположном направлении. Если вы подключите источник питания к контактам шагового двигателя, вал начнет вращаться. Если вы подключите проводники наоборот, он будет вращаться в противоположном направлении. Правда, стоит учесть, что в некоторых шаговых двигателях вращение в противоположную сторону невозможно. Перед его запуском, уточняйте этот момент.
Серводвигатели
Обычные серводвигатели для моделистов используются для поворота и удерживания определенной позиции в диапазоне от 0 до 180 градусов. Благодаря этому они находят широкое применение в робототехнике, приводах позиционирования. В производстве серводвигатели используются в модулях рулевого управления автомобилями, лодками, в механизмах фокусировки современных видеокамер.
В большинстве случаем серводвигатели имеют три провода: питание, земля и сигнал. Обычно провод питания красного цвета, земля – черного или коричневого. Сигнал – желтый, оранжевый или белый.
В серводвигателях, которые, например, используются в системах управления радиоуправляемых машин, электродвигатель подключен к потенциометру. Стандартный приемник/передатчик посылает ШИМ-сигналы на серву.
Электроника (небольшая плата-контроллер) внутри серводвигателя, переводит ширину импульса в положение.
Когда на серву поступает сигнал к повороту, питание будет подаваться на мотор до тех пор, пока потенциометр не достигнет положения, которое будет соответствовать заданному предварительно через приемник/передатчик.
Сигнал управления является цифровым ШИМ сигналом с частотой 50 Гц. Каждые 20 миллисекунд подается цифровой импульс управления. Продолжительность (ширина) импульса находится в диапазоне от 1.0 миллисекунды до 2.0 миллисекунд. 1.5 – середина диапазона. Большая ширина импульса может использоваться для дополнительного хода, который выходит за нормальный рабочий диапазон. ШИМ (широтно-импульсная модуляция) сигнал иногда называют ШПМ (широтно-позиционная модуляция), хотя это не корректно.
Импульс шириной 1.5 миллисекунды обычно устанавливает серводвигатель в «нейтральное» положение или 90 градусов. Импульс шириной 1.25 миллисекунд может установить его в 0 градусов, а импульс 1.75 миллисекунды в 180 градусов. Физические ограничения и время для различных серводвигателей могут отличаться, но его нейтральное положение всегда соответствует 1.5 миллисекундам.
Вибрационные двигатели
Вибрационные двигатели часто используются в мобильных устройствах для регистрации наличия движения.
Вибрационные моторы по конструктивному исполнению похожи на большинство шаговых двигателей и двигателей постоянного тока. Отличием является то, что на конце ротора установлен эксцентрик. При движении ротора, эксцентрик заставляет механизм внутри корпуса двигателя вибрировать. Интенсивность вибрации зависит как от размеров двигателя, так и от размеров эксцентрика.
Источник: http://arduino-diy.com/arduino-dvigateli
Двигатель постоянного тока (DC Motor)
Управляем через транзистор 2N2222/P2N2222
Драйвер L293D
Поработаем с двигателем постоянного тока, который обычно входит в состав стартового набора с пропеллером.
Двигатели весьма часто применяются в Arduino-проектах. Они приводят в действие колеса, крутят пропеллеры, вращают манипуляторы промышленного робота и перемещают каретку 3D-принтера.
Каждый начинающий робототехник сталкивается с проблемой подключения двигателя к микроконтроллеру. У мотора всего два вывода, и кажется, что двигатель можно подключить к цифровым выводам Arduino, а затем включать и выключать по программе. Но не тут-то было.
Даже небольшой двигатель, часто используемый в разного рода игрушках, для своей работы требует ток силой от 200 мА до 1 Ампера. А цифровой выход Arduino может дать нам только 20мА. Большинству мощных двигателей требуется напряжение более 5 Вольт, привычных для Arduino. Распространены двигатели на 12, на 24 и на 48 Вольт.
Другими словами, Arduino очень слаба для прямого управления двигателями. Нужен какой-то мощный посредник!
Самый простой посредник — это транзистор. Подойдут и полевые транзисторы, и биполярные, работающие в режиме ключа.
Управляем через транзистор 2N2222/P2N2222
Для сборки схемы понадобятся транзистор 2N2222 (как вариант P2N2222, BC547, 2N3904, N2222A, TIP120), диод 1N4001 (как вариант 1N4148, 1N4007).
Собираем по схеме. Будьте внимательные при соединении транзистора и диода, соблюдайте их стороны.
Скетч. Возможно, питания от USB будет недостаточно для работы мотора, используйте питание от сети.
int motorPin = 3; void setup(){ pinMode(motorPin, OUTPUT); Serial.begin(9600); while (!Serial); Serial.println(«Speed 0 to 255»);} void loop(){ if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed
В Serial Monitor нужно ввести значение от 0 до 255, чтобы задать скорость мотора. В моём случае мотор начинал нормально вращаться от значения 30 и выше.
Есть урок с использованием транзистора IRF530N.
Драйвер L293D
Существует множество готовых микросхем, которые позволяют управлять разными типами двигателей. Мы рассмотри драйвер L293D.
Микросхема представляет собой два H-моста, а значит можно управлять сразу двумя двигателями. Каждый мост снабжён четырьмя защитными диодами и защитой от перегрева. Максимальный ток, который может передать L293D на двигатель — 1.2А. Рабочий ток — 600мА. Максимальное напряжение — 36 В.
Микросхема L293D имеет DIP-корпус с 16-ю выводами. Схема выводов ниже. Отсчёт выводов ведётся против часовой стрелки и начинается от выемки в корпусе микросхемы.
+V — питание микросхема, 5В;+Vmotor — питание двигателей, до 36В;0V — земля;En1, En2 — выводы включения/выключения H-мостов;In1, In2 — управляющие выводы первого H-моста;Out1, Out2 — выводы для подключения первого двигателя;In3, In4 — управляющие выводы второго H-моста;
Out3, Out4 — выводы для подключения второго двигателя.
Выводы En1 и En2 служат для отключения или включения мостов. Если мы подаём 0 на En, соответствующий мост полностью выключается и двигатель перестаёт вращаться. Эти сигналы пригодятся нам для управления тягой двигателя при помощи ШИМ-сигнала.
Схема подключения двух двигателей:
L293D | Arduino —————— In1 | 7 In2 | 8 In3 | 2 In4 | 3 En1 | 6 En2 | 5 V+ | 5VVmotor+ | 5V 0v | GND
Подключим один двигатель по схеме.
Скетч для вращения двигателя, меняя направление каждую секунду. Функция analogWrite() с помощью ШИМ-сигнала управляет мощностью двигателя. Мы командуем драйверу вращать двигатель с максимальной скоростью, что соответствует ШИМ-сигналу — 255. Здесь следует отметить, что уменьшение ШИМ-сигнала в два раза не даст в два раза меньшую скорость. Скорость и тяга двигателей постоянного тока зависят от входного напряжения нелинейно.
const int in3 = 2;const int in4 = 3;const int en2 = 5; void setup() { pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(en2, OUTPUT); analogWrite(en2, 255);} void loop() { digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(1000); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(1000);}
Усложним программу. Будем кроме направления менять ещё и мощность.
Источник: http://developer.alexanderklimov.ru/arduino/dc-motor.php
Подключение Motor Shield L293D к плате Arduino и управление электромоторами
Доброго времени суток, читатели нашего сайта. Сегодня мы с вами познакомимся с очень интересным и полезным устройством, которое называется Motor Shield L293D. С помощью этого чуда вы сможете управлять электродвигателями, сервоприводами, а в перспективе сделать свой крутой проект.
На мой взгляд, это один из самых нужных шилдов, которые существуют на сегодняшний день. Чтобы практически познакомиться с ним, мы будем использовать электродвигатель, а если точнее, будем управлять скоростью и направлением его движения. Ну что ж, перейдем, непосредственно, от слов к делу.
Чем эта статья может быть вам полезна
Целью статьи является научиться практически, связывая Motor Shield L293D и Arduino, научиться управлять электромоторами. В этой статье вы познакомитесь с базовыми знаниями, которые будут необходимы для создания более серьезного проекта. Также мы узнаем из каких элементов состоит Motor Shield L293D и его технические характеристики.
Технические характеристики Motor Shield L293D
Motor Shield L293D имеет следующие характеристики :
- Максимальный продолжительный ток в каждом канале: 0,6 А;
- Допустимый ток нагрузки 600мА на канал, пиковый ток — 1.2A
- Питание моторов от 4.5 В до 36 В
- 4-х канальное управление
- Присутствует защита от перегрева
- Присутствует контакт для дополнительного питания платы
Разберемся же, из чего состоит этот motor shield. На фотографии ниже вы можете найти цифры, на которые мы будем опираться.
1. Под цифрой «1» на плате находятся микросхемы, обеспечивающие работу шилда. Две крайние микросхемы называются L293D, они позволяют управлять слаботочными двигателями с током потребления до 600 мА на канал. По центру же находится микросхема, которая уменьшает количество управляющих выводов.
2. Под вторым номером находятся выводы, отвечающие за подключение сервоприводов. На плате обозначены контакты питания, так что подключить сервопривод не составит труда.
3. Под цифрой 3 обозначены клемма, к которым нужно подключать электродвигатели. Имеются 4 клемма под названиями: M1, M2, M3, M4. Следовательно, подключить к плате возможно только 4 электромотора.
4. Здесь размещены клемма, через которые вы можете запитать ваш шилд, ведь для работы моторов необходимо большее напряжение, чем напряжение от Arduino. Хотелось бы отметить важный момент, чтобы запитывать Motor Shield L293D иным источником необходимо снять перемычку, которая находится под цифрой 5
5. Под цифрой пять находится перемычка, отвечающая за питание шилда.
Также на motor shield L293D находится светодиод, который горит только тогда, когда подсоединенные электромоторы запитанны и могут выполнять свое предназначение. А если светодиод не проявляет признаков жизни, то ваши электромоторы работать не будут, так как источника питания не хватает на работу моторов или его совсем нет.
После того, как мы познакомились с технической информацией устройства, перейдем к практической части.
Необходимые компоненты для подключения
Для подключения нам необходимы следующие компоненты:
Все эти элементы можно приобрести по низкой цене и с высоким качеством в интернет магазине SmartElements.
Для большего удобства вы можете кликнуть мышкой по названию в списке выше, чтобы перейти к покупке товара.
После того, как вы подготовили все необходимые компоненты, можно перейти к подключению. Сначала рассмотрим схему подключения нашего мини-проекта.
Схема подключения Motor Shield L293D и Arduino
Присоединение шилда к Arduino воспроизводится стандартным способом, а именно прямым подключением, сделав «бутерброд». Как это сделать, вы можете увидеть на фотографии ниже.
После подключения Motor Shield L293D к Arduino, нам необходимо присоединить оставшиеся компоненты. Правильное подключение показано на фотографии ниже.
Скорее всего, подключение не вызвало у вас проблем, так как оно очень даже простое. Пришло время перейти к более важной процедуре — к программированию.
Готовый программный код для управления Motor Shield L293D
Для работы датчика на Arduino нужно скачать и установить библиотеку AFMotor .
Скачать библиотеку можно здесь .
После того, как мы скачали нужную библиотеку, ее нужно правильно установить. Скачанные файлы нужно переместить по следующему пути :
Диск C Progtam Files Arduino Libraries
После того, как мы все сделали перейдем к самой важной ступеньке, а именно к программированию.
Мы рассмотрим два программных кода с подключением одного и нескольких электродвигателей к L293D . Рассмотрим два случая для того, чтобы вы увидели тонкости и особенности этого программного кода..
Для начала рассмотрим подключение одного мотора к Motor Shield L293D и Arduino.
#include // Подключаем библиотеку для работы с шилдом int i; AF_DCMotor motor1(1);// Подключаем моторы к клеммникам M1 void setup() { motor1.setSpeed(255);// Задаем максимальную скорость вращения моторов motor1.run(RELEASE); } void loop() { motor1.run(FORWARD); // Задаем движение вперед motor1.setSpeed(255); // Задаем скорость движения delay(3000); //Указываем время движения motor1.run(RELEASE); // Останавливаем двигатели delay(500); // Указываем время задержки motor1.run(BACKWARD); // Задаем движение назад motor1.setSpeed(255); // Задаем скорость движения delay(3000); // Указываем время движения motor1.run(RELEASE); // Останавливаем двигатели delay(500); // Указываем время задержки // Разгоняем двигатели в одном направлении от нулевой скорости, до максимальной motor1.run(FORWARD); for (i=0; i=0; i—) { motor1.setSpeed(i); delay(10); } motor1.run(RELEASE); // Останавливаем двигатели delay(500); // Указываем время задержки }
Перейдем ко второму коду, для управления уже несколькими электромоторами.
#include // Подключаем библиотеку для работы с шилдом int i; AF_DCMotor motor1(1);// Подключаем моторы к клеммникам M1 AF_DCMotor motor2(2);// Подключаем моторы к клеммникам M2 AF_DCMotor motor3(3);// Подключаем моторы к клеммникам M3 AF_DCMotor motor4(4);// Подключаем моторы к клеммникам M4 void setup() { motor1.setSpeed(255);// Задаем максимальную скорость вращения моторов motor1.run(RELEASE); motor2.setSpeed(255); motor2.run(RELEASE); motor3.setSpeed(255); motor3.run(RELEASE); motor4.setSpeed(255); motor4.run(RELEASE); } void loop() { motor1.run(FORWARD); motor1.setSpeed(255); motor2.run(FORWARD); motor2.setSpeed(255); motor3.run(FORWARD); motor3.setSpeed(255); motor4.run(FORWARD); motor4.setSpeed(255); delay(3000); //Указываем время движения motor1.run(RELEASE); // Останавливаем двигатели motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Указываем время задержки motor1.run(BACKWARD); // Задаем движение назад motor1.setSpeed(255); // Задаем скорость движения motor2.run(BACKWARD); motor2.setSpeed(255); motor3.run(BACKWARD); motor3.setSpeed(255); motor4.run(BACKWARD); motor4.setSpeed(255); delay(3000); // Указываем время движения motor1.run(RELEASE); // Останавливаем двигатели motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Указываем время задержки // Разгоняем двигатели в одном направлении от нулевой скорости, до максимальной motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); for (i=0; i=0; i—) { motor1.setSpeed(i); motor2.setSpeed(i); motor3.setSpeed(i); motor4.setSpeed(i); delay(10); } motor1.run(RELEASE); // Останавливаем двигатели motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Указываем время задержки }
Разбор програмного скетча для управления электромоторами с помощью Motor Shield L293D и Arduino
Схему соединений мы собрали. Скетч вставили и загрузили. У нас все получилось, но мне кажется, что мы что-то забыли. Мы забыли разобраться в том, как же работает наша установка! Рассматривать мы будем участки кода, которые могут вызвать у вас непонимание. Перейдем к изучению написанного кода.
В участке кода, представленном ниже, мы задаем максимальную скорость, для электромоторов. Мы указали максимальное значение скорости равное «255».
motor1.setSpeed(255);// Задаем максимальную скорость вращения моторов
В данном участке кода мы командой «motor1.run(FORWARD);» задаем движение электродвигателям вперед, а командой «motor1.setSpeed(255);» указываем, с какой скоростью будут они работать. Если вы захотите установить максимальную скорость, то ее значение должно быть таким, которое указано в строчке «motor1.setSpeed(255);» (в нашем случае значение максимальной скорости равно 255).
motor1.run(FORWARD); // Задаем движение вперед motor1.setSpeed(255); // Задаем скорость движения
Вы можете заметить строчки, в которых указана функция «delay»(Пример такого кода указан ниже). Эта функция отвечает за продолжительность действия того или иного действия. В нашем случае «delay» указывает, какое количество времени двигатель будет бездействовать.
motor1.run(RELEASE); // Останавливаем двигатели delay(500); // Указываем время задержки
Источник: http://helpduino.ru/Arduino_Motor_Shield_L293D.html
Модуль драйвера двигателей L298N
22.04.2014 23:00:00
Модуль драйвера двигателей L298N позволяет управлять двумя моторами постоянного тока, либо шаговым двигателем с потребляемым током до 2 Ампер.
https://www.youtube.com/watch?v=i4_eYf0Sj4E
Одной из первых статей на нашем блоге была статья о драйвере двигателей L293D. В данной же статье мы рассмотрим более мощный драйвер двигателей L298N, но уже собранный на платке в виде модуля.
Используемые компоненты (купить в Китае):
• Управляющая плата
Arduino UNO 16U2, либо более дешевая Arduino UNO CH340G,
Arduino Nano CH340G, либо Arduino MEGA 16U2, либо более дешевая Arduino MEGA CH340G,
Arduino PRO mini, либо Arduino Micro
• Плата управления моторами
Модуль L298N
• Соединительные провода
Соединительные провода (папа-мама)
По функционалу L298N полностью идентична L293D. Мы видим те же управляющие выводы. Чередование разноименных сигналов (высокий логический уровень или низкий) на парах выводов IN1, IN2 и IN3, IN4 задают направление вращения моторов.
Выводы ENABLE A, B (ENA привязан к IN1, IN2. ENB к IN3, IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:
Условно «активном» режиме (рис.а1), когда ими будет управлять контроллер — высокий логический уровень разрешает вращение моторов, низкий запрещает вне зависимости от состояния выводов «IN». Для регулировки скорости моторов, на «EN» выводы подается ШИМ (PWM) сигнал.
Условно «пассивном» режиме (рис.а2), притянув выводы «EN» к высокому уровню (+5V). Для этого на плате, рядом с выводами ENA и ENB находятся штырьки соединенные с +5V. Замыкаем выводы с помощью джамперов .
В данном режиме мы не сможем регулировать скорость двигателей, они будут всегда вращаться на полную скорость (за то для управления экономится 2 вывода контроллера). Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль.
Для остановки нужно будет подавать одноименные сигналы на выводы «IN».
В программных кодах в продолжении статьи все будет прокомментировано.
Клеммник подачи питания и работа стабилизатора.
Экономичное подключение одного мотора без регулировки скорости вращения
Для этого замыкаем джампер как показано на рисунке, тем самым соединяя вывод EN с +5V
Как уже говорилось ранее, при таком способе мы не можем регулировать скорость вращения, однако для управления одним каналом модуля будет задействованно два цифровых вывода вместо трех.
Заставим моторчик вращаться «вправо» 4 секунды, остановиться на 0.5 секунды, вращаться «влево» 4 секунды, остановка 5 секунд и снова цикл повторяется.
// Тестировалось на Arduino IDE 1.0.5int IN3 = 5; // Input3 подключен к выводу 5 int IN4 = 4; void setup(){ pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT);}void loop(){ // На пару выводов «IN» поданы разноименные сигналы, мотор вращается digitalWrite (IN4, HIGH); digitalWrite (IN3, LOW); delay(4000); // На пару выводов «IN» поданы одноименные сигналы, мотор не вращается digitalWrite (IN4, LOW); delay(500); // На пару выводов «IN» поданы разноименные (и уже противоположные относительно первого случая) сигналы, мотор вращается // относительно первого случая) сигналы, мотор вращается в другую сторону digitalWrite (IN3, HIGH); delay(4000); // Снова на выводах «IN» появились одноименные сигналы, мотор не вращается digitalWrite (IN3, LOW); delay(5000); }
Подключение одного мотора с регулировкой скорости вращения
В данном примере мы подсоединили ENB к выводу ШИМ (D3). Теперь становится возможно управлять скоростью мотора, изменяя скважность посылаемого ШИМ сигнала.
Значения скважности задаются функцией analogWrite(pin, число), где число изменяется от 0 до 255, прямо пропорционально скважности сигнала. Для наглядности, подобраны четыре значения при которых двигатель стартует с низких оборотов, набирает средние, выходит на максимальные и не вращается.
// Тестировалось на Arduino IDE 1.0.5int IN3 = 5; // Input3 подключен к выводу 5 int IN4 = 4;int ENB = 3;void setup(){ pinMode (ENB, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT);}void loop(){ // На пару выводов «IN» поданы разноименные сигналы, мотор готов к вращаению digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); // подаем на вывод ENB управляющий ШИМ сигнал analogWrite(ENB,55); delay(2000); analogWrite(ENB,105); delay(2000); analogWrite(ENB,255); delay(2000); // Останавливаем мотор повад на вывод ENB сигнал низкого уровеня. // Состояние выводов «IN» роли не играет. analogWrite(ENB,0); delay(5000);}
Финальный пример. Подключение двух моторов с регулировкой скорости вращения
В приведенном ниже скетче два мотора будут вращаться в обе стороны с плавным нарастанием скорости.
// Тестировалось на Arduino IDE 1.0.5int IN1 = 5; // Input1 подключен к выводу 5 int IN2 = 4;int IN3 = 3;int IN4 = 2;int ENA = 9;int ENB = 3;int i;void setup(){ pinMode (EN1, OUTPUT); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (EN2, OUTPUT); pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT);}void loop(){ digitalWrite (IN2, HIGH); digitalWrite (IN1, LOW); digitalWrite (IN4, HIGH); digitalWrite (IN3, LOW); for (i = 50; i
Источник: http://zelectro.cc/Motor_shield_L298N_Arduino
Драйверы двигателя L298N, L293D и Arduino Motor Shield
Драйвер двигателя выполняет крайне важную роль в проектах ардуино, использующих двигатели постоянного тока или шаговые двигатели. C помощью микросхемы драйвера или готового шилда motor shield можно создавать мобильных роботов, автономные автомобили на ардуино и другие устройства с механическими модулями. В этой статье мы рассмотрим подключение к ардуино популярных драйверов двигателей на базе микросхем L298N и L293D.
Для чего нужен драйвер двигателя?
Как известно, плата ардуино имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода – и того меньше, 40mA. Мы не можем подключить напрямую к Arduino Uno, Mega или Nano даже самый маленький двигатель постоянного тока. Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока, превышающие этот предел.
Как же тогда подключить двигатель к ардуино? Есть несколько вариантов действий:
Использовать реле. Мы включаем двигатель в отдельную электрическую сеть, никак не связанную с платой Arduino. Реле по команде ардуино замыкает или размыкает контакты, тем самым включает или выключает ток. Соответственно, двигатель включается или выключается. Главным преимуществом этой схемы является ее простота и возможность использовать Главным недостатком данной схемы является то, что мы не можем управлять скоростью и направлением вращения.
Использовать силовой транзистор. В данном случае мы можем управлять током, проходящим через двигатель, а значит, можем управлять скоростью вращения шпинделя. Но для смены направления вращения этот способ не подойдет.
Использовать специальную схему подключения, называемую H-мостом, с помощью которой мы можем изменять направление движения шпинделя двигателя. Сегодня можно без проблем найти как микросхемы, содержащие два или больше H-моста, так и отдельные модули и платы расширения, построенные на этих микросхемах.
В этой статье мы рассмотрим последний, третий вариант, как наиболее гибкий и удобный для создания первых роботов на ардуино.
Микросхема или плата расширения Motor Shield
Motor Shield – плата расширения для Ардуино, которая обеспечивает работу двигателей постоянного тока и шаговых двигателей. Самыми популярными платами Motor Shield являются схемы на базе чипов L298N и L293D, которые могут управлять несколькими двигателями. На плате установлен комплект сквозных колодок Ардуино Rev3, позволяющие устанавливать другие платы расширения.
Также на плате имеется возможность выбора источника напряжения – Motor Shield может питаться как от Ардуино, так и от внешнего источника. На плате имеется светодиод, который показывает, работает ли устройство. Все это делает использование драйвера очень простым и надежным – не нужно самим изобретать велосипеды и решать уже кем-то решенные проблемы.
В этой статье мы будем говорить именно о шилдах.
Принцип действия H-моста
Принцип работы драйвера двигателя основан на принципе работы H-моста. H-мост является электронной схемой, которая состоит из четырех ключей с нагрузкой. Название моста появилось из напоминающей букву H конфигурации схемы.
Схема моста изображена на рисунке. Q1Q4 0 полевые, биполярные или IGBT транзисторы. Последние используются в высоковольтных сетях. Биполярные транзисторы практически не используются, они могут присутствовать в маломощных схемах. Для больших токов берут полевые транзисторы с изолированным затвором. Ключи не должны быть замкнуты вместе одновременно, чтобы не произошло короткого замыкания источника. Диоды D1D4 ограничительные, обычно используются диоды Шоттки.
С помощью изменения состояния ключей на H-мосте можно регулировать направление движения и тормозить моторы. В таблице приведены основные состояния и соответствующие им комбинации на пинах.
Q1 | Q2 | Q3 | Q4 | Состояние |
1 | 1 | Поворот мотора вправо | ||
1 | 1 | Поворот мотора влево | ||
Свободное вращение | ||||
1 | 1 | Торможение | ||
1 | 1 | Торможение | ||
1 | 1 | Короткое замыкание | ||
1 | 1 | Короткое замыкание |
Драйвер двигателя L298N
Модуль используется для управления шаговыми двигателями с напряжением от 5 до 35 В. При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2 А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4 А.
Плата выглядит следующим образом:
Распиновка микросхемы L298N:
- Vcc – используется для подключения внешнего питания;
- 5В;
- Земля GND;
- IN1, IN2, IN3, IN4 – используется для плавного управления скоростью вращения мотора;
- OUT1, OUT2 – используется для выхода с первого двигателя;
- OUT3, OUT4 – используется для выхода со второго двигателя;
- S1 – переключает питание схемы: от внешнего источника или от внутреннего преобразователя;
- ENABLE A, B – требуются для раздельного управления каналами. Используются в двух режимах – активный, при котором каналами управляет микроконтроллер и имеется возможность изменения скорости вращения, и пассивный, в котором невозможно управлять скоростью двигателей (установлено максимальное значение).
При подключении двух двигателей, нужно проверить, чтобы у них была одинаковая полярность. Если полярность разная, то при задании направления движения они будут вращаться в противоположные стороны.
Драйвер двигателя L293D
L293D – является самой простой микросхемой для работы с двигателями. L293D обладает двумя H-моста, которые позволяют управлять двумя двигателями. Рабочее напряжение микросхемы – 36 В, рабочий ток достигает 600 мА. На двигатель L293D может подавать максимальный ток в 1,2 А.
В схеме имеется 16 выходов. Распиновка:
- +V – питание на 5 В;
- +Vmotor – напряжение питания для мотором до 36 В;
- 0V – земля;
- En1, En2 –включают и выключают H-мосты;
- In1, In2 – управляют первым H-мостом;
- Out1, Out2 – подключение первого H-моста;
- In3, In4 – управляют вторым H-мостом;
- Out3, Out4 – подключение второго H-моста.
Для подключения к микроконтроллеру Arduino Uno нужно соединить выходы In1 на L293D и 7 пин на Ардуино, In2 – 8, In3 – 2, In4 – 3, En1 – 6, En2 – 5, V – 5V, Vmotor – 5 V, 0V – GND. Пример подключения одного двигателя к Ардуино показан на рисунке.
Драйвер двигателя на микросхеме HG7881
HG7881 – двухканальный драйвер, к которому можно подключить 2 двигателя или четырехпроводной двухфазный шаговый двигатель. Устройство часто используется из-за своей невысокой стоимости. Драйвер используется только для изменения направления вращения, менять скорость он не может.
Плата содержит 2 схемы L9110S, работающие как H-мост.
Характеристики драйвера HG7881:
- 4-контактное подключение;
- Питание для двигателей от 2,5 В до 12 В;
- Потребляемый ток менее 800 мА;
- Малые габариты, небольшой вес.
Распиновка:
- GND – земля;
- Vcc – напряжение питания 2,5В – 12В;
- A-IA – вход A(IA) для двигателя A;
- A-IB – вход B (IB) для двигателя A;
- B-IA – вход A(IA) для двигателя B;
- B-IB – вход B (IB) для двигателя B.
В зависимости от поданного сигнала на выходах IA и IB будет разное состояние для двигателей. Возможные варианты для одного из моторов приведены в таблице.
IA | IB | Состояние мотора |
Остановка | ||
1 | Двигается вперед | |
1 | Двигается назад | |
1 | 1 | Отключение |
Подключение одного двигателя к Ардуино изображено на рисунке.
Сравнение модулей
Модуль L293D подает максимальный ток в 1,2А, в то время как на L298N можно добиться максимального тока в 4 А. Также L293D обладает меньшим КПД и быстро греется во время работы. При этом L293D является самой распространенной платой и стоит недорого. Плата HG7881 отличается от L293D и L298N тем, что с ее помощью можно управлять только направлением вращения, скорость менять она не может. HG7881 – самый дешевый и самый малогабаритный модуль.
Подключение L298N к Arduino
Как уже упоминалось, в первую очередь нужно проверить полярность подключенных двигателей. Двигатели, вращающиеся в различных направлениях, неудобно программировать.
Нужно присоединить источник питания. + подключается к пину 4 на плате L298N, минус (GND) – к 5 пину. Затем нужно соединить выходы с L298N и пины на Ардуино, причем некоторые из них должны поддерживать ШИМ-модуляцию. На плате Ардуино они обозначены ~. Выходы с L298N IN1, IN2, IN3 и IN4 подключить к D7, D6, D5 и D4 на Ардуино соответственно. Подключение всех остальных контактов представлено на схеме.
Направление вращения задается с помощью сигналов HIGH и LOW на каждый канал. Двигатели начнут вращаться, только когда на 7 пине для первого мотора и на 12 пине для второго на L298N будет сигнал HIGH. Подача LOW останавливает вращение. Чтобы управлять скоростью, используются ШИМ-сигналы.
Для управления шаговым двигателем в Arduino IDE существует стандартная библиотека Stepper library. Чтобы проверить работоспособность собранной схемы, можно загрузить тестовый пример stepper_oneRevolution. При правильной сборке вал двигателя начнет вращаться.
При работе с моторами Ардуино может периодически перезагружаться. Это возникает из-за того, что двигателям требуются большие токи при старте и в момент торможения. Для решения этой проблемы в плату встроены конденсаторы, диоды и другие схемы. Также для этих целей на шидле имеется раздельное питание.
Источник: https://arduinomaster.ru/datchiki-arduino/drajver-dvigatelya-i-motor-shield-arduino/
Управление двигателем постоянного тока с применением драйвера L298N и Arduino UNO
В данном примере мы рассмотрим один из способов управления электродвигателем постоянного тока, который осуществляется посредством платы Arduino и драйвера L298N. Несмотря на большое многообразие вариантов управления работой электрических машин постоянного тока, куда большей популярностью пользуется именно эта схема. Так как с ее помощью можно осуществлять достаточно широкий спектр различных операций, в сравнении со схемами, использующими другие драйвера и микроконтроллеры.
Введение
Электрическая машина постоянного тока является одной из самых простых в эксплуатации, благодаря чему ее так часто применяют в устройствах радиоэлектроники и робототехники. Такая популярность обусловлена простотой питания и управления – для этого подаются два полюса от источника эдс (отрицательный и положительный), и при протекании тока по обмоткам происходит вращение вала. При смене полярности двигатель совершает реверсивное движение.
В системах радиоэлектроники такие способы управления работой двигателя получили название широтно-импульсной модуляции (ШИМ). Такой процесс характеризуется изменением продолжительности подаваемого напряжения или формы его сигнала.
Как можно изменять скорость вращения при помощи ШИМ?
Применяя способ ШИМ, вы производите попеременную подачу и отключение напряжения на обмотки двигателя с большой частотой. Частота импульсов при этом может достигать нескольких килогерц.
Величина среднего напряжения, подаваемого на двигатель, напрямую зависит от формы сигнала ШИМ .
Форма сигнала, в свою очередь, определяется рабочим циклом, который можно представить в виде отношения времени подачи сигнала к общему периоду (сумме времени подачи напряжения и его отключения).
В результате получается безразмерная величина, которую выражают в процентном отношении – сколько времени от общего периода напряжение подавалось на двигатель. В слаботочных системах на 5, 12, 24 или 36 В применяется цикл на 25%, 50%, 75% и 100%.
Широтно-импульсная модуляци
Управление двигателем при помощи Arduino и сгенерированным сигналом ШИМ
Для запуска процесса плата генерирует сигнал, который подается на обмотки двигателя. Чтобы контролировать величину подаваемого сигнала в рабочую схему включается транзистор. Который включается в разрыв питающей сети, а на его базу подается управляющий импульс от Arduino. Задавая определенные параметры работы набором команд для Arduino, транзистор будет переходить в открытое, закрытое или приоткрытое состояние.
На рисунке ниже вы можете увидеть пример схемы, на которой питание двигателя контролируется Arduino через транзистор. Как видите, здесь от ШИМ выхода подается сигнал на базу транзистора, а через его коллектор и эмиттер будет подаваться напряжение на обмотку.
Принципиальная схема управления dc мотором
Программирование ардуино может выполняться с помощью компьютера, для этого используются как специальные утилиты, так и классические языки программирования. При программировании работы устройства вы можете использовать стандартный набор команд, который предоставит доступ к наиболее простым командам. Или собирать их в комбинации для формирования специфической логики работы устройства.
Пример программных команд для работы вышеприведенной схемы включения Arduino вы можете скачать по ссылке ниже. Применяя их, вы сможете управлять скоростью вращения, постепенно наращивая ее до максимального значения, и так же плавно снижая до полной остановки.
Полный скетч проекта:
Управление DC мотором с помощью Arduino Uno
Используемые команды:
- void setup – поле для установки рабочего выхода с ШИМ порта;
- void loop – поле для формирования рабочего процесса;
- motorSpeed – задает скорость вращения двигателя;
- analogWrite – задает работу конкретного вывода платы;
- delay – устанавливает величину временного промежутка.
При помощи этой программы и вышеприведенной схемы вы сможете легко изменять скорость вращения двигателя постоянного тока, но менять направление его вращения будет достаточно сложно. Так как потребуется изменить направление протекание электрического тока по обмоткам. Поэтому менять направление вращения куда удобнее при помощи Н-моста на полупроводниковых преобразователях.
Управление двигателем постоянного тока с использованием Н-моста
Если рассмотреть принцип действия, то Н-мост представляет собой логическую схему из четырех логических элементов (релейного или полупроводникового типа), способных переходить в два состояния (открытое и закрытое). В данном примере рассматривается мост собранный на полупроводниках. Простым изменением попарного состояния этих элементов двигатель будет вращаться то в одну, то в другую сторону без необходимости переключения его контактов.
Свое название данное устройство получило за счет внешнего сходства с буквой «Н», где каждая пара транзисторов находится в вертикальных элементах буквы, а непосредственно сам управляемый мотор в горизонтальном. Пример элементарного Н-моста из четырех транзисторов приведен на рисунке ниже. Попарно открывая и закрывая нужные элементы схемы, вы сможете пропускать ток через обмотки в противоположных направлениях.
Схема H-моста
Посмотрите на рисунок, в этой схеме управление питанием двигателя происходит от выводов А и В, на которые подается управляющий потенциал.
Принцип определения направления вращения в Н-мосте происходит следующим образом:
- при подаче на базы транзисторов Q1 и Q4 импульса для открытия перехода происходит протекание тока по обмоткам двигателя в одном направлении;
- при подаче на базы транзисторов Q2 и Q3 импульса для открытия перехода ток будет протекать в противоположном направлении, в сравнении с предыдущим и произойдет реверсивное движение;
- попарное открытие транзисторов Q1 и Q3, Q2 и Q4 приводит к торможению ротора;
- открытие транзисторов в последовательности Q1 и Q2 или Q3 и Q4 совершенно недопустимо, поскольку оно приведет к возникновению короткого замыкания в цепи.
Применяя схему Н-моста для управления работой двигателя постоянного тока, вы сможете реализовать полный набор операций для электрической машины без необходимости переподключения ее выводов. В виду сложности подбора транзисторов и подключения их в схему Н-моста, гораздо проще использовать уже существующие драйвера, имеющие такую функцию. Среди них наиболее популярными являются драйверы L293D и L298N.
Сравнивая оба драйвера, следует отметить, что L298N превосходит L293D как по параметрам работы, так и по доступным опциям. Несмотря на то, что L293D более дешевая модель, L298N, ввиду значительных преимуществ, стал использоваться куда чаще. Поэтому в данном примере мы рассмотрим принцип управления двигателем при помощи драйвера L298N и платы Arduino.
Что представляет собой драйвер L298N?
Данная плата содержит микросхему и 15 выходов для генерации управляющих сигналов. Предназначено для передачи сигналов к рабочим элементам индуктивного типа – обмоткам двигателя, катушкам реле и т.д. Конструктивно L298N позволяет подключать в работу до двух таких элементов, к примеру, через нее можно одновременно управлять двумя шаговыми двигателями.
На схеме ниже приведен пример распределения выводов L298N от рабочей микросхемы.
L298N. Выводы
- Vss – вывод питания для логических цепей в 5В;
- GND – нулевой вывод (он же корпус);
- INPUT1, INPUT 2, INPUT 3, INPUT 4 – позволяют плавно наращивать и уменьшать скорость вращения двигателя;
- OUTPUT1, OUTPUT2 – выводы для питания первой индуктивной нагрузки;
- OUTPUT3, OUTPUT4 – выводы для питания второй индуктивной нагрузки;
- Vs – вывод для переключения питания;
- ENABLE A, B – выводы, при помощи которых осуществляется раздельное управление каналами, могут устанавливать активный и пассивный режим (с регулируемой скоростью вращения и с установленной);
- CURRENT SENSING A, B – выводы для установки текущего режима.
Принцип управления двигателем при помощи Arduino и драйвера L298N
Благодаря наличию в драйвере L298N встроенного моста данная плата позволяет осуществлять одновременное управление сразу двумя электрическими машинами от двух пар выводов. Логическая схема в данном устройстве работает от напряжения в 5В, а питание самих электрических машин можно осуществлять до 45В включительно. Максимально допустимый ток для одного канала платы составляет 2А.
Как правило, этот драйвер имеет модульное исполнение, за счет чего в комплект модуля уже включены рабочие элементы, выводы и разъемы, необходимые для передачи управляющих сигналов. Пример такого драйвера показан на рисунке ниже:
Пример драйвера L298N
Теперь разберем, как осуществляется управление двигателем с помощью драйвера L298N. Подключение двигателя производится к винтовым клеммным зажимам – по паре для питания каждого моторчика.
Остальные клеммные зажимы предназначены для подачи питания плюс и минус, а также получения пониженного напряжения (на них подается определенный уровень питающего напряжения, от которого работают двигатели, а внутренний преобразователь понижает его до 5В для собственных логических цепей).
Штекерные выводы платы осуществляют широтно-импульсную модуляцию при формировании рабочих сигналов.
Зажимы, куда подключать моторы
Следует отметить, что клеммный зажим с тремя выводами не только подводит к плате питающее напряжение, но и позволяет получить его уже преобразованное для собственных нужд драйвера величиной в 5В, как показано на рисунке выше. Этот выход можно использовать для запитки того же Ардуино или для любых других устройств, которые питаются от 5В.
Немаловажным моментом для получения 5В от этого клеммного вывода является установка черной перемычки, которая отвечает за преобразование отличного от 5 В уровня напряжения, при условии, что его уровень ниже 12В. Если уровень питающего напряжения выше 12В, перемычку необходимо снять, так как внутренний преобразователь на него не рассчитан, а сама плата должна запитываться от 5В через третий вывод этого же клеммника.
Простой пример работы Arduino с драйвером L298N
Сейчас мы рассмотрим пример простой схемы совместного использования Arduino и L298N. Такой вариант позволяет управлять скоростью вращения вала и его направлением у двигателя постоянного тока.
Для этого задается специальная программа на ПК, которая будет определять генерацию ШИМ сигнала от L298N и направление протекания электрического тока через Н-мост.
Разумеется, для формирования схемы потребуются еще несколько дополнительных компонентов, которые позволят соединить между собой драйвер, Ардуино, компьютер и двигатели.
Схема совместного использования Arduino и L298N
Перечень необходимых компонентов для сборки схемы:
- Arduino UNO — наиболее простая модель из линейки, но его функционала будет более чем достаточно. Если вы используете более продвинутый вариант, то он также хорошо справится с этой задачей.
- Драйвер L298N – не самый доступный драйвер, но заменить его другим не получится, так как принцип работы похожих моделей может в корне отличаться.
- Двигатель на 12 В – в данном примере используется электрическая машина постоянного тока.
- Потенциометр 100 кОм.
- Кнопка для коммутации цепи.
Источник: https://www.asutpp.ru/arduino-l298n-dc-motor-driver.html
Adafruit motor shield подключение к Arduino
В данном уроке рассмотрим устройство Motor Shield’а, разработанного компанией Adafruit, а также научимся управлять с его помощью различными типами двигателей
На борту данного шилда имеется две микросхемы L293D (1). L-ка позволяет управлять слаботочными двигателями с током потребления до 600 мА на канал. На двух пятипиновых клеммниках (2) можно насчитать 4 разъема для подключения двигателей (M1, M2, M3, M4), центральные выводы на пятипиновых клеммниках соединены с землей и служат для удобства при подключении пятипроводных шаговый двигателей.
Использование двух микросхем L293D позволяет одновременно подключить 4 моторчика постоянного тока либо 2 шаговых мотора либо два моторчика и шаговый. Для управления на прямую выводами L-ки (IN1, IN2, IN3, IN4), отвечающими за выбор направления вращения, необходимо 4 вывода, а для двух микросхем целых 8. Для уменьшения количества управляющих выводов в игру вступает сдвиговый регистр 74НС595 (3).
Благодаря регистру управление сводится с 8ми пинов к 4ем. Также, на плату выведены 2 разъема для подключения сервоприводов (4). Управление сервоприводами стандартное с помощью библиотеки Servo.h и никак не связано с библиотекой которую мы будем рассматривать далее.
Питание силовой части производится либо от внешнего клеммника (6) либо замыканием джампера (5) ( питанием моторов +M соединяется с выводом Vin Arduino). Напряжение для объединенного питания 6 — 12 Вольт
К явным минусам данного шилда можно отнести то, что он задействует практически все цифровые пины:
Выводы, отвечающие за скорость вращения двигателей (подключены к выводам Enable L-ек)
Цифровой вывод 11— DC Мотор №1 / Шаговый №1
Цифровой вывод 3— DC Мотор №2 / Шаговый №1
Цифровой вывод 5— DC Мотор №3 / Шаговый №2
Цифровой вывод 6— DC Мотор №4 / Шаговый №2
Выводы для управления сервоприводами (выведены на штырьки на краю платы):
Цифровой вывод 9- Сервопривод №1
Цифровой вывод 10- Сервопривод №2
В итоге незадействованными цифровыми выводами остаются только пины 2, 13 и пины интерфейса UART- 0, 1.
Однако есть выход из данной ситуации. Остались незадействованные аналоговые входы A0-A5, их можно использовать как цифровые. В коде они будут записываться как цифровые с 14 по 19.
Ну что, перейдем непосредственно к управлению моторами.
Для начала необходимо скачать библиотеку AFMotor.h, закинуть в папку с библиотеками и открыть среду.
Втыкаем шилд в плату, подключаем моторы и поехали!
Подключение моторов
Подключение моторов постоянного тока (2 DC Motors)
Пример программного кода
#include // Подключаем библиотеку для работы с шилдом // Подключаем моторы к клеммникам M3, M4 AF_DCMotor motor3(3); AF_DCMotor motor4(4); void setup() { // Задаем максимальную скорость вращения моторов (аналог работы PWM) motor3.setSpeed(255); motor3.run(RELEASE); motor4.setSpeed(255); motor4.run(RELEASE); } int i; void loop() { // Двигаемся условно вперед одну секунду motor3.
run(FORWARD);// Задаем движение вперед motor4.run(FORWARD); motor3.setSpeed(255); // Задаем скорость движения motor4.setSpeed(255); delay(1000); // Останавливаем двигатели /* Очень не рекомендуем резко переключать направление вращения двигателей. Лучше дать небольшой промежуток времени.*/ motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Двигаемся в обратном направлении motor3.
run(BACKWARD); // Задаем движение назад motor4.run(BACKWARD); motor3.setSpeed(255); // Задаем скорость движения motor4.setSpeed(255); delay(1000); // Останавливаем двигатели motor3.run(RELEASE); motor4.run(RELEASE); delay(500); // Разгоняем двигатели в одном направлении motor3.run(FORWARD); motor4.run(FORWARD); for (i=0; i=0; i—) { motor3.setSpeed(255); motor4.
setSpeed(255); delay(10); } // Останавливаем движение motor3.run(RELEASE); motor4.run(RELEASE); delay(500); }
Делаем на основе Arduino двигатель своими руками
Для автоматизации электронных устройств разработчики прибегают к использованию такого приспособления, как Arduino двигатель.
Включение детали в проект – непростая задача, которая требует максимума усилий и внимания. Особенно сложно дело обстоит у начинающих электронщиков, не разбирающихся с приводами.
Ниже мы подробно расскажем читателю о моторе, сконструированном на микропроцессоре Aрдуино, и поможем построить прибор правильно.
Назначение двигателя Aрдуино и принцип работы
PWM или широтно-импульсная модуляция – это метод, позволяющий нам скорректировать среднее значение напряжения, которое поступает на электронное устройство, путем быстрого включения и выключения питания. Среднее напряжение зависит от рабочего цикла или количества времени, в течение которого сигнал включен, в зависимости от времени, в течение которого сигнал выключен за один промежуток времени.
Поэтому, в зависимости от размера прибора, мы можем просто подключить выход PWM Arduino к базе транзистора или к затвору MOSFET и управлять скоростью двигателя, контролируя выход PWM. Сигнал PWM с низким уровнем мощности Arduino включает и выключает затвор на MOSFET, через который приводится прибор высокой мощности. Ардуино GND и источник питания двигателя GND должны быть соединены вместе.
Сборка двигателя
Транзистор – это электрический выключатель, который активирует цифровые контакты или пины микропроцессора Aрдуино. В этом примере он управляется выводом 9, таким же образом, как и светодиод, за исключением того, что транзистор включает и выключает схему приспособления.
Эта схема работает, но она по-прежнему создает обратный ток из-за импульса прибора, по мере его замедления, или из-за того, что двигатель повернется другой стороной. Если генерируется обратный ток, он перемещается с отрицательной стороны и пытается найти простой путь к земле.
Маршрут проходит через транзистор или платформу, описанную выше. Невозможно точно вычислить, что произойдет, поэтому необходимо обеспечить способ контроля избыточного тока.
Чтобы обеспечить полную безопасность устройства, устанавливается диод через прибор. Диод обращен к источнику напряжения, это означает, что напряжение подается через устройство. Если ток генерируется в противоположном направлении, он блокируется от поступления в микропроцессор.
Внимание! Если поместить диод неправильно, ток обходит двигатель и происходит короткое замыкание. Короткое замыкание пытается заземлить весь доступный ток и может сломать USB-порт или, по крайней мере, отобразить предупреждающее сообщение, информирующее вас о том, что USB-порт потребляет слишком много энергии.
Для проекта понадобится простая схема управления, чтобы включить и выключить прибор.
Список необходимых инструментов и материалов для конструирования:
- Arduino Uno.
- Макет.
- Транзистор.
- Двигатель постоянного тока.
- Диод.
- Резистор 2,2 кОм.
- Переходные провода.
Для питания прибора подается 5V через него, а затем на землю. Это напряжение вращает устройства, но пользователь контролирует его. Чтобы передать Arduino управление мощностью прибора и, следовательно, вращение, устанавливается транзистор сразу после мотора.
Значения драйвера в составе устройства и работа с ним
L298N – это двойной драйвер H-Bridge, который позволяет одновременно управлять скоростью и направлением двух приспособлений постоянного тока. Модуль может приводить в действие приборы постоянного тока с напряжением от 5 до 35 В с пиковым током до 2А.
Давайте подробнее рассмотрим распиновку модуля L298N и объясним, как это работает. Модуль имеет два винтовых клеммных блока для A и B и еще одну винтовую клеммную колодку для заземляющего контакта, VCC для двигателя и вывод 5 В, который может быть либо входом, либо выходом.
Это зависит от напряжения, используемого на двигателях VCC. Модуль имеет встроенный 5V-регулятор, который либо включен, либо выключен с помощью перемычки.
Если напряжение питания двигателя до 12 В, мы можем включить регулятор 5V, а вывод 5V можно использовать в качестве выхода, например, для питания платы Arduino. Но если напряжение двигателя больше 12 В, мы должны отключить перемычку, поскольку эти напряжения могут повредить встроенный регулятор 5 В.
В этом случае вывод 5V будет использоваться в качестве входного сигнала, так как мы должны подключить его к источнику питания 5 В, чтобы IC работал правильно.
Здесь можно отметить, что эта ИС уменьшает падение напряжения примерно на 2 В. Так, например, если мы используем источник питания 12 В, напряжение на клеммах двигателей будет составлять около 10 В, а это означает, что мы не сможем получить максимальную скорость от нашего 12-вольтового двигателя постоянного тока.
Далее следуют логические управляющие входы. Для включения и управления скоростью двигателя используются кнопки включения и включения B. Если на этом контакте имеется перемычка, двигатель будет включен, и работать с максимальной скоростью, и если мы удалим перемычку, мы сможем подключить вход ШИМ к этому выводу и, таким образом, контролировать скорость двигателя. Если мы подключим этот контакт к заземлению, двигатель отключится.
Затем штифты Input 1 и Input 2 используются для управления направлением вращения двигателя A, а входы 3 и 4 – для двигателя B. Используя эти контакты, мы фактически управляем переключателями H-Bridge внутри IC L298N. Если вход 1 LOW, а вход 2 – HIGH, приспособление будет двигаться вперед, и наоборот, если вход 1 HIGH, а вход 2 LOW, агрегат будет двигаться назад. Если оба входа одинаковы, либо LOW, либо HIGH, прибор остановится. То же самое относится ко входам 3,4 прибора B.
Установка программного обеспечения
Постройте схему, как показано на рисунке, и откройте новый эскиз Arduino. Выберите кнопку «Сохранить» и сохраните эскиз с запоминающимся именем, например myMotor; введите следующий код:
int motorPin = 9; void setup (){ pinMode (motorPin, OUTPUT ); } void loop () { digitalWrite (motorPin, HIGH); delay(1000); digitalWrite (motorPin, LOW ); delay(1000); }
После того, как вы набрали эскиз, сохраните его и нажмите кнопку «Скомпилировать», чтобы проверить свой код. Arduino Environment проверяет ваш код на любые синтаксические ошибки (грамматику для вашего кода) и выделяет их в области сообщений. Наиболее распространенные ошибки включают опечатки, отсутствующие точки с запятой и чувствительность к регистру.
Если эскиз скомпилирован правильно, нажмите «Загрузить», чтобы загрузить эскиз на микропроцессор. Вы должны видеть, что ваш двигатель вращается в течение одной секунды и останавливается в течение одной секунды.
Если это не так, вам следует дважды проверить свою проводку:
- Убедитесь, что вы используете вывод № 9.
- Убедитесь, что ваш диод обращен правильно, при этом лента обращена к соединению 5v.
- Проверьте соединения на макете. Если провода или компоненты не подключены с использованием правильных строк в макете, они не будут работать.
Запуск и настройка устройства
Для начала соединяем провода для питания и земли. На иллюстрации красный означает мощность, а черный означает заземление; они соединяются с двумя длинными вертикальными рядами на стороне макета. Это обеспечивает доступ к источнику питания и напряжению на 5 вольт.
Помещаем кнопку на макет, оседлав центр. Провод соединяет цифровой контакт 2 с одной ногой кнопки. Ножка кнопки, не подключенная к плате Aрдуино, должна быть подключена к источнику питания на 5 вольт.
Подключаем контакт или пин 9 на Arduino к базовому выходу TIP120 . Если смотрите на транзистор, чтобы металлический язычок был обращен от вас, базовый штифт находится на левой стороне транзистора. Это контакт, который управляет открытием или закрытием. Транзисторный коллектор соединяется с одним выводом двигателя.
Другой конец двигателя подключается к положительному выводу 9-вольтовой батареи. Подключаем заземление аккумулятора к земле Arduino и запускаем проект.
Тестирование
Arduino может обеспечивать только 40 мА при 5 В на цифровых контактах. Для большинства двигателей требуется больше тока или напряжения. Транзистор выступает в качестве цифрового переключателя, позволяя Arduino контролировать нагрузку с более высокими требованиями к электричеству. Транзистор в этом примере завершает схему двигателя на землю.
В этом примере используется TIP120, который может переключаться до 60 В на 5 А.
Источник: https://arduinoplus.ru/arduino-dvigatel/
Руководство про работе с платой расширения Arduino Motor Shield
Руководство по работе с платой расширения Arduino Motor Shield с простым проектом.
Обзор
Arduino Motor Shield – это плата расширения, которая позволяет управлять различными нагрузками, которыми обычные выводы Arduino управлять не могут.
Плата расширения управления электродвигателями имеет довольно много функций, таких как измерение тока и способность управлять одним шаговым двигателем.
В основе этой платы расширения лежит двойной полный мостовой драйвер L298P, который может с токами до 3 ампер в течение очень короткого промежутка времени или до 2 ампер постоянно на канал. Для всех разделов статьи доступны подробные примеры.
Плата расширения Arduino Motor Shield
Требования к источнику питания
Для электродвигателей, подключенных к плате расширения, необходим достаточный по мощности источник питания. При использовании USB соединения ток часто ограничен 500 мА или 1 ампером. Многие двигатели потребляют ток, больший, чем может обеспечить USB источник питания. Для снижения риска возможного повреждения USB порта необходимо использовать внешний источник питания.
Установка
Чтобы начать использовать данную плату расширения, необходимо сначала настроить несколько выводов, используемых платой. Этот код настройки обычно помещается в функцию setup(). Чтобы использовать все функциональные возможности данной платы расширения, выводы 8, 9, 12 и 13 платы Arduino необходимо настроить, как выходные выводы. Это можно выполнить с помощью следующего кода:
pinMode(8,OUTPUT); // Настройка вывода тормоза канала A pinMode(9,OUTPUT); // Настройка вывода тормоза канала B pinMode(12,OUTPUT); // Настройка вывода направления канала A pinMode(13,OUTPUT); // Настройка вывода направления канала B
Управление направлением вращения
Для управления направлением вращения электродвигателя используются выводы 12 (канал A) и 13 (канал B). Для вращения двигателя вперед* на эти выводы необходимо вывести логическую единицу. Для того, чтобы двигатели начали вращаться в обратном направлении, на эти выводы может быть подан логический ноль.
Важное замечание: быстрое изменение направления вращения может привести к неожиданным результатам. С точки зрения механики, быстрый переход с прямого направления на обратное может повредить редуктор. С точки зрения электричества, быстрый переход может вызвать большие скачки тока и напряжения. Для решения этих проблем направление вращения двигателя с одного на другое необходимо менять с небольшой паузой между ними. Пример кода для такого переключения показан ниже.
* Так как «прямое» направление вращения двигателя зависит от конкретного приложения, в данном руководстве «прямое» направление будет соответствовать наличию положительного напряжения на винтовом зажиме «+» на плате расширения.
void setup() { pinMode(12,OUTPUT); // Настройка вывода направления канала A } void loop() { analogWrite(3, 0); // Скорость канала A 0% delay(100); // Безопасная задержка 100 мс digitalWrite(12, HIGH); // Прямое направление канала A analogWrite(3, 255); // Скорость канала A 100% delay(1000); // Задержка 1 секунда analogWrite(3, 0); // Скорость канала A 0% delay(100); // Безопасная задержка 100 мс digitalWrite(12, LOW); // Обратное направление канала A analogWrite(3, 255); // Скорость канала A 100% delay(1000); }
Управление скоростью
Для управления скорость электродвигателей выводы 3 (канал A) и 11 (канал B) могут использовать ШИМ сигналы. Чтобы использовать функцию ШИМ платы Arduino, необходимо вызвать функцию analogWrite. При вызове данной функции необходимо задать вывод и скорость в диапазоне 0–255. В примере выше показан код управления скоростью электродвигателя.
Торможение
Драйвер электродвигателя на плате расширения Arduino Motor Shield обладает возможностью торможения двигателя. Торможение работает путем закорачивания между собой выводов электродвигателя. Торможение управляется с помощью выводов 8 (канал A) и 9 (канал B).
Измерение тока
Еще одной особенностью платы расширения Arduino Motor Shield является возможность определения величины тока, который потребляется электродвигателем (или любой индуктивной нагрузкой).
Измерение тока может быть полезно в приложениях робототехники, таких как контроль тяги и определения того, что робот толкает объект. Для измерения тока используются выводы A0 (канал A) и A1 (канал B).
Плата расширения управления двигателями при достижении максимального тока в канале (2 ампера) выдает на вывод измерения тока 3,3 вольта.
После простых вычислений можно определить, что каждая единица будет соответствовать 2,96 мА. Так, например, если функция analogRead(A0) вернет значение 121, то двигатель (или нагрузка) потребляет ток 0,36 ампера. Ниже приведен пример кода.
void setup() { Serial.begin(19200); // Настройка последовательного порта pinMode(12,OUTPUT); // Настройка вывода направления канала A digitalWrite(12, HIGH); // Направление канала A – прямое analogWrite(3, 255); // Скорость канала A – 100% delay(1000); // Задержка 1 секунда } void loop() { float current = 0.00296*analogRead(A0); // Рассчитать ток Serial.print(current); // Напечатать значение тока в терминал Serial.println(» A»); // добавить в терминал единицу измерения «A» delay(500); // Задержка полсекунды между печатью в терминал }
Простой проект – управление скоростью и направлением вращения электродвигателя с помощью потенциометра
Используя плату расширения Arduino Motor Shield и потенциометр, можно управлять скоростью и направлением вращения небольшого электродвигателя.
Необходимые комплектующие
Необходимые комплектующие
- Arduino UNO (или аналог);
- плата расширения Arduino Motor Shield;
- небольшой двигатель постоянного тока;
- потенциометр (я использую однооборотный на 5 кОм);
- батарейный отсек 4 x AA (или аналогичный до 12 вольт) с аккумуляторами.
Этапы сборки
- Установка платы расширения управления электродвигателями на плату Arduino.
- Подключение потенциометра. Средний вывод потенциометра подключается к выводу A2 платы Arduino, а остальные к выводам Vin (предполагается, что вы отключили питание через USB) и GND.
- Подключение электродвигателя. В данном проекте используется канал A.
- Подключение батарейного отсека. Перепроверьте полярность с помощью мультиметра!
- Ниже приведен код проекта. Используя Arduino IDE, загрузите код на свою плату Arduino. Для загрузки кода в плату Arduino нажмите круглую кнопку со стрелкой вправо. void setup() { pinMode(12,OUTPUT); // Настройка вывода направления канала A } void loop() { if (analogRead(A2) > 512) { digitalWrite(12, HIGH); // Направление канала A – прямое analogWrite(3, 0.5*analogRead(A2)-255); // Скорость канала A } if(analogRead(A2)
Источник: https://radioprog.ru/post/169
Как подключить коллекторный двигатель к Arduino
Как известно, электродвигатели бывают трёх основных типов: коллекторные, шаговые и сервоприводы. В данной статье мы рассмотрим подключение коллекторного электродвигателя к Arduino с помощью драйвера двигателей на основе микросхемы L9110S или аналогичной.
Напрямую подключить электродвигатель к выводам Arduino нельзя: есть риск сжечь вывод, к которому подключён двигатель. Для безопасного подключения электродвигателей разных типов к Arduino необходим самодельный или промышленно изготовленный т.н.
драйвер двигателей. Драйверы двигателей бывают разные, для их работы часто используются микросхемы типа HG788, L9110S, L293D, L298N и другие.
Драйверы двигателей имеют выводы подачи питания, выводы для подключения электродвигателей, а также управляющие выводы.
Различные варианты исполнения драйверов двигателей
В данной статье мы будем использовать драйвер для управления двигателями, сделанный на основе микросхемы L9110S. Обычно выпускаются платы, которые поддерживают подключение нескольких двигателей. Но для демонстрации мы обойдёмся одним.
2Схема подключения коллекторного двигателяи драйвера двигателей к Arduino
Самые простые электродвигатели – коллекторные двигатели. У таких моторов всего два управляющих контакта. В зависимости от полярности приложенного к ним напряжения меняется направление вращения вала двигателя, а величина приложенного напряжения изменяет скорость вращения.
Давайте подключим двигатель по приложенной схеме. Питание драйвера двигателя – 5 В от Arduino, для управления скоростью вращения ротора мотора управляющие контакты подключаем к выводам Ардуино, поддерживающим ШИМ (широтно-импульсную модуляцию).
Схема подключения коллекторного двигателя к Arduino с помощью драйвера двигателей
Должно получиться что-то подобное:
Двигатель подключён к драйверу двигателей и Arduino
3Скетч для управления коллекторным двигателем
Напишем скетч для управления коллекторным двигателем. Объявим две константы для ножек, управляющих двигателем, и одну переменную для хранения значения скорости. Будем передавать в последовательный порт значения переменной Speed и менять таким образом скорость (значением переменной) и направление вращения двигателя (знаком числа).
int Speed = 0; const int IA1 = 5; // Управляющий вывод 1 const int IA2 = 6; // Управляющий вывод 2 void setup() { pinMode(IA1, OUTPUT); pinMode(IA2, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { String s = Serial.readString(); Speed = s.toInt(); // преобразуем считанную строку в число } if (Speed > 0) { // если число положительное, вращаем в одну сторону analogWrite(IA1, Speed); analogWrite(IA2, LOW); } else { // иначе вращаем ротор в другую сторону analogWrite(IA1, LOW); analogWrite(IA2, -Speed); } }
Максимальная скорость вращения – при наибольшем значении напряжения, которое может выдать драйвер двигателя. Мы можем управлять скоростью вращения, подавая напряжения в диапазоне от 0 до 5 Вольт.
Так как мы используем цифровые ножки с ШИМ, напряжение на них регулируется командой analogWtirte(pin, value), где pin – номер вывода, на котором мы хотим задать напряжение, а аргумент value – коэффициент, пропорциональный значению напряжения, принимающий значения в диапазоне от 0 (напряжение на выводе равно нулю) до 255 (напряжение на выводе равно 5 В).
4Управление коллекторным двигателем с помощью Arduino
Загрузим скетч в память Arduino. Запустим его. Вал двигателя не вращается. Чтобы задать скорость вращения, нужно передать в последовательный порт значение от 0 до 255. Направление вращения определяется знаком числа.
Подключимся с помощью любой терминалки к порту, передадим число «100» – двигатель начнёт вращаться со средней скоростью. Если подадим «минус 100», то он начнёт вращаться с той же скоростью в противоположном направлении.
Управление электромотором с помощью драйвера двигателей и Arduino
Источник: https://soltau.ru/index.php/arduino/item/415-arduino
Arduino — двигатель постоянного тока
В этой главе мы будем связывать различные типы двигателей с платой Arduino (UNO) и покажем вам, как подключить двигатель и управлять им с вашей платы.
Есть три разных типа двигателей –
- Двигатель постоянного тока
- Серводвигатель
- Шаговый двигатель
Двигатель постоянного тока (двигатель постоянного тока) является наиболее распространенным типом двигателя. Двигатели постоянного тока обычно имеют только два провода, один положительный и один отрицательный. Если вы подключите эти два провода напрямую к аккумулятору, двигатель будет вращаться. Если вы переключите провода, двигатель будет вращаться в противоположном направлении.
Предупреждение. Запрещается приводить двигатель в движение непосредственно от выводов платы Arduino. Это может повредить доску. Используйте схему драйвера или IC.
Мы разделим эту главу на три части –
- Просто сделай мотор крутится
- Контроль скорости двигателя
- Контролировать направление вращения двигателя постоянного тока
Необходимые компоненты
Вам понадобятся следующие компоненты –
- 1x Arduino UNO доска
- 1x PN2222 Транзистор
- 1x малый 6В постоянного тока
- 1x 1N4001 диод
- 1x 270 Ом Резистор
Процедура
Следуйте электрической схеме и выполните соединения, как показано на рисунке ниже.
Меры предосторожности
При подключении соблюдайте следующие меры предосторожности.
-
Сначала убедитесь, что транзистор подключен правильно. Плоская сторона транзистора должна быть обращена к плате Arduino, как показано на схеме.
-
Во-вторых, полосатый конец диода должен быть направлен к линии питания + 5 В в соответствии с расположением, показанным на рисунке.
Сначала убедитесь, что транзистор подключен правильно. Плоская сторона транзистора должна быть обращена к плате Arduino, как показано на схеме.
Во-вторых, полосатый конец диода должен быть направлен к линии питания + 5 В в соответствии с расположением, показанным на рисунке.
Spin ControlArduino Code
int motorPin = 3; void setup() { } void loop() { digitalWrite(motorPin, HIGH);}
Код для заметки
Транзистор действует как переключатель, управляющий питанием двигателя. Контакт 3 Arduino используется для включения и выключения транзистора, и на эскизе ему присваивается название «motorPin».
Результат
Двигатель будет вращаться на полной скорости, когда вывод Arduino № 3 поднимется высоко.
Контроль скорости двигателя
Ниже приведена принципиальная схема двигателя постоянного тока, подключенного к плате Arduino.
Arduino Code
int motorPin = 9; void setup() { pinMode(motorPin, OUTPUT); Serial.begin(9600); while (! Serial); Serial.println(«Speed 0 to 255»);} void loop() { if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed
Источник: https://coderlessons.com/tutorials/kompiuternoe-programmirovanie/izuchite-programmirovanie-arduino/arduino-dvigatel-postoiannogo-toka