Закрыть ... [X]

Нам один драйвер два шаговых двигателя

Рассмотрим сегодня примеры использования одного из самых популярных драйверов двигателей Motor Shield L293D, разработанного в свое время компанией Adafruit.

Драйвер позволяет одновременно управлять четырьмя коллекторными двигателя и двумя сервоприводами. Вместо четырех коллекторных двигателей можно подключить два шаговых биполярных двигателя или, к примеру, оставить два коллекторных двигателя и подключить один шаговый двигатель. Каждый силовой канал рассчитан на нагрузку в 0,6А, поэтому каждый ваш моторчик должен потреблять ток не более 0,6А. Данный Motor Shield полностью совмести с платами Arduino Mega 2560 и Arduino Uno, то есть вставляется в них прямо сверху. При использовании с другими платами соединение происходит стандартно с помощью проводов.

Стоит обратить внимание на один момент. Если вы будете использовать Motor Shield L293D вместе с платой Arduino Uno, он перекроет вам доступ ко всем пинам платы. Для подсоединения других датчиков вам придется поработать с паяльником, припаяв гребенку в предусмотренном месте на драйвере двигателей для доступа к аналоговым пинам (которые можно использовать как цифровые). Или вам придется подсоединять Motor Shield с помощью проводов для макетирования к плате Arduino Uno, чтобы оставить доступ к свободным пинам. Подумайте, нужны ли вам эти лишние телодвижения, связанные с дополнительной пайкой или кучей лишних проводов? Если вы читаете эту статью, значит, скорей всего находитесь на стадии обучения, и подобные неудобства будут лишние для вас. Поэтому повторюсь ещё раз и в этой статье. Если вы только начинаете изучать работу с микроконтроллерами, берите плату Arduino Mega 2560, чтобы случайно не столкнуться с ситуацией, когда вам не будет хватать пинов для подключения дополнительных датчиков.

И так приступим. Возьмем плату Arduino Mega 2560 и сверху аккуратно вставляем Motor Shield L293D, после чего подключаем двигатели как показано на рисунке.

Подключение драйвера двигателей Motor Shield L293D к плате Arduino

Обратите внимание на подключение питания к внешнему клеммнику (+M GND) и на замкнутый джампер PWR. При таком подключении, мы одновременно подаем энергию, как на силовую часть драйвера двигателей, так и на саму плату Ардуино. Подключая питание, не перепутайте плюс с минусом, так как на плате драйвера двигателей нет защитного диода, и подобные действия её быстро выведут из строя. Джампер PWR соединяет внешний клеммник драйвера двигателей с входом VIN платы Arduino, поэтому если вы подключите питание к разъему 2,1мм платы Arduino, вы также обеспечите совместное питание обоих плат.

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

Правильным решением будет раздельное питание. То есть мозги и силовая часть должны питаться от разных источников питания.

Подключение драйвера двигателей Motor Shield L293D к плате Arduino - раздельное питание

Плату Arduino мы питаем через разъем 2,1мм (к примеру, от батарейки крона или от сети через блок питания). А силовую часть Motor Shield L293D мы питаем через клеммник (+M GND), при этом необходимо снять джампер PWR.

Двигатели мы подсоединяем к клеммникам M1, M2, M3, M4, как показано на рисунке. Между клеммниками M1 и M2, как и между клеммниками M3 и M4 расположены клеммники GND, предназначены они исключительно для удобства при подключении пяти проводных шаговых двигателей.

 

В совмещенном состоянии с платами Arduino Mega 2560 и Arduino Uno, пины плат задействованы следующим образом:

пины управления нам один драйвер два шаговых двигателя скоростью вращения двигателей

  • пин 11 платы Ардуино -> Мотор №1 / Шаговый двигатель №1
  • пин 3 платы Ардуино -> Мотор №2 / Шаговый двигатель №1
  • пин 5 платы Ардуино -> Мотор №3 / Шаговый двигатель №2
  • пин 6 платы Ардуино -> Мотор №4 / Шаговый двигатель №2

пины управления отвечающие за направление вращения двигателей

  • пин 4 платы Ардуино -> Мотор №1 / Шаговый двигатель №1
  • пин 7 платы Ардуино -> Мотор №2 / Шаговый двигатель №1
  • пин 8 платы Ардуино -> Мотор №3 / Шаговый двигатель №2
  • пин 12 платы Ардуино -> Мотор №4 / Шаговый двигатель №2

пины управления сервоприводами

  • пин 9 платы Ардуино - Сервопривод №1
  • пин 10 платы Ардуино - Сервопривод №2

 

С питанием разобрались, моторы подключили, перейдем к написанию простейшего скетча для управления нашими двигателями. Для начала нам необходимо скачать и установить специально разработанную библиотеку AFMotor.h предназначенную для работы с Motor Shield L293D. Разархивируем скачанный архив в папку libraries программы Arduino IDE, перезагружаем программу. Всё готово, библиотека установлена, можно приступать к написанию скетча.

Напишем минимальный скетч для управления всего одним двигателем, чтобы было понятней.

#include <AFMotor.h> // Подключаем библиотеку для работы с Motor Shield L293D // Придумываем имя мотору и объявляем клеммник к которому он подсоединен AF_DCMotor my_motor1(1); void setup() // НАСТРОЙКИ { my_motor1.setSpeed(250); // задаем скорость вращения двигателя } void loop() // ОСНОВНОЙ ЦИКЛ { my_motor1.run(FORWARD); // вращаем вперед delay(5000); // делаем 5 секунд my_motor1.run(RELEASE); // остановка delay(3000); // делаем 3 секунды my_motor1.run(BACKWARD); // вращаем назад delay(5000); // делаем 5 секунд my_motor1.run(RELEASE); // остановка delay(3000); // делаем 3 секунды }

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

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

#include <AFMotor.h> // Подключаем библиотеку для работы с Motor Shield L293D // Придумываем имена моторам и объявляем клеммники к которым они подсоединены AF_DCMotor my_motor1(1); AF_DCMotor my_motor2(2); AF_DCMotor my_motor3(3); AF_DCMotor my_motor4(4); // Чтобы код не получался слишком громоздким, лучше всего создавать функции // для тех действий, которые будут применяться в нашем скетче неоднократно void set_speed(int speed) // функция СКОРОСТЬ { my_motor1.setSpeed(speed); my_motor2.setSpeed(speed); my_motor3.setSpeed(speed); my_motor4.setSpeed(speed); } void motor_forward() // функция ПЕРЕДНИЙ ХОД { my_motor1.run(FORWARD); my_motor2.run(FORWARD); my_motor3.run(FORWARD); my_motor4.run(FORWARD); delay(100); } void motor_backward() // функция ЗАДНИЙ ХОД { my_motor1.run(BACKWARD); my_motor2.run(BACKWARD); my_motor3.run(BACKWARD); my_motor4.run(BACKWARD); delay(100); } void motor_release() // функция ОСТАНОВКА ДВИГАТЕЛЕЙ { my_motor1.run(RELEASE); my_motor2.run(RELEASE); my_motor3.run(RELEASE); my_motor4.run(RELEASE); delay(100); } void setup() // НАСТРОЙКИ { // Посмотрите насколько проще работать с кодом после создания функций // нам нужна всего лишь одна строка вызова нужной функции, с помощью которой мы дадим команду сразу четырем двигателям set_speed(200); // вызываем функцию СКОРОСТЬ - устанавливаем начальную скорость двигателей } void loop() // ОСНОВНОЙ ЦИКЛ { motor_forward(); // вызываем функцию ПЕРЕДНИЙ ХОД delay(5000); // выполняем функцию ПЕРЕДНИЙ ХОД в течение 5 секунд motor_release(); // вызываем функцию ОСТАНОВКИ ДВИГАТЕЛЕЙ delay(3000); // держим остановленными двигатели в течении 3 секунд set_speed(255); // вызываем функцию СКОРОСТЬ - увеличиваем скорость двигателей до 255 motor_backward(); // вызываем функцию ЗАДНИЙ ХОД delay(5000); // выполняем функцию ЗАДНИЙ ХОД в течение 5 секунд motor_release(); // вызываем функцию ОСТАНОВКИ ДВИГАТЕЛЕЙ delay(3000); // держим остановленными двигатели в течении 3 секунд }

Данный код демонстрирует пример создания и применения собственных функций для управления двигателями, что впоследствии существенно сократит количество строк в вашем скетче. Проще один раз прописать какое-то действие в функции и вызывать её потом постоянно с помощью одной строки, чем постоянно писать одни и те же строки с кодом для повторяющихся действий.

С подсоединением и управлением коллекторных двигателей вроде разобрались, если что-то не понятно, задавайте вопросы в комментариях под этой статьей.

 

Давайте теперь подключим шаговый двигатель и напишем для него скетч управления.

Управление биполярным шаговым двигателем с помощью драйвера двигателей Motor Shield L293D

При подключении шагового двигателя применяем опять же раздельное питание, чтобы не напрягать сильно плату Ардуино и в тоже время быть уверенными в корректной работе шаговика. К клеммам расположенным с левой стороны аналогично можно подключить еще один шаговый двигатель. Теперь напишем простейший скетч управления нашим шаговиком.

#include <AFMotor.h> // Подключаем библиотеку для работы с Motor Shield L293D // Придумываем имя шаговому двигателю (например: stepper_motor), // указываем количество шагов для полного оборота (48) и номер порта к которому подсоединен шаговик // порт №1 - клеммы M1 и M2, порт №2 клеммы M3 и M4 AF_Stepper stepper_motor(48, 2); void setup() // НАСТРОЙКИ { // можем ничего здесь не писать, если нет необходимости задать какие-то предварительные настройки // но сама функция void setup() должна присутствовать в коде в любом случае, даже пустая } int s; // объявляем переменную, которая нам будет служить в качестве счетчика шагов (имя переменной можете придумать любое) void loop() // ОСНОВНОЙ ЦИКЛ { // Делаем вращение в одном направлении // SINGLE - тип шага for (s=0; s<48; s++) { stepper_motor.step(1, FORWARD, SINGLE); delay(50); } // Делаем вращение в другом направлении for (s=48; s!=0; s--) { stepper_motor.step(1, BACKWARD, SINGLE); delay(50); } }

Здесь мы рассмотрели пример управления шаговым двигателем с помощью библиотеки AFMotor. На самом деле существует библиотека AccelStepper предоставляющая гораздо большие возможности (управление методом полушага, удобное управление одновременно несколькими шаговыми двигателям, контроль темпов разгона и т.д). Библиотеку AccelStepper мы рассматривали на примере управления униполярным шаговым двигателем в статье "Подключение униполярного шагового двигателя 28BYJ-48 через драйвер ULN2003". Для первых более серьезных ваших проектов с применением шаговых двигателей, рекомендую обратить внимание именно на работу с этой библиотекой. Но, так как в этой статье речь идет о драйвере двигателей Motor Shield L293D и библиотеке AFMotor.h, написанной специально для него, не будет заострять здесь внимание на других библиотеках.

 

Нам осталось рассмотреть принцип подключения сервоприводов к драйверу двигателей Motor Shield L293D

Подключение сервоприводов к драйверу двигателей Motor Shield L293D

Как видим тут все просто. Черный провод к минусу, красный к плюсу и желтый к пину S. Штырьки S отвечающие за управление сервоприводами соединены с выходами платы Arduino следующим образом:

пин 9 платы Ардуино - Сервопривод №1
пин 10 платы Ардуино - Сервопривод №2

Если вы подключаете к драйверу двигателей Motor Shield L293D только сервоприводы, смысла в раздельном питании нет, так как сервоприводы в любом случаю будут брать питание от платы Ардуино.

Управление сервоприводами стандартное с помощью библиотеки Servo.h, с примером которого вы можете познакомиться в статье "Подключение к плате Arduino cервопривода TowerPro SG90".

 

 

 

Добавить комментарий

JComments


Источник: http://voltom.ru/project/89-podklyuchenie-


Поделись с друзьями



Рекомендуем посмотреть ещё:



Драйвер шагового двигателя A4988 купить, установить системы безопасности Связан перевести на английский

Нам один драйвер два шаговых двигателя Нам один драйвер два шаговых двигателя Нам один драйвер два шаговых двигателя Нам один драйвер два шаговых двигателя Нам один драйвер два шаговых двигателя Нам один драйвер два шаговых двигателя

ШОКИРУЮЩИЕ НОВОСТИ