• - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!
подписаться на RSS-ленту

L-Motor Shield


Долго, нереально долго шёл к свету этот шилд. Неприятности и грабли преследовали и тормозили. Но всё же, наконец, мы его сделали! Встречайте – L-Motor Shield.
Ничего особенного вобщем-то в нём нет, просто моторшилд на «Эль-ке» (L293) каких много напридумывали. Мы вот тоже решили свой такой сделать, с некоторыми улучшениями, дополнениями и фишечками.

Итак:

Два канала для управления (скорость и направление) коллекторными двигателями с током потребления до 1А и напряжением питания до 40В.
Или один канал для управления шаговым двигателем.
Светодиоды — индикатор питания (логической части) и режима работы двигателей – направление вращения и скорость(удобно при отладке без подключения двигателей)
Помимо стандартных сигналов – DIR и PWM (направление и скорость) для каждого канала имеется дополнительный сигнал – BRK (тормоз), который переводит двигатель в режим торможения не зависимо от состояния остальных входов.
Четыре канала управления сервомашинками(могут работать одновременно с двигателями).
Входы шылда не занимает выводов интерфейсов – SPI(почти), UART, I2C.
Входы шылда не закреплены жёстко за определёнными пинами ардуины и могут быль, при необходимости, легко переключены.
Мощный (до 5А), регулируемый (по умолчанию 5В, переключается на 4.8В или 6В) стабилизатор для питания сервомашинок.

Возможность питания:
— Силовой части двигателей — как от входного питания ардуины, так и от внешнего источника (до 40В)
— Стабилизатора серво части(опция) — как от входного питания ардуины, так и от внешнего источника (до 40В)
— Логической части управления двигателями — как от 5В выхода Ардуины, так и от стабилизатора серво части (таким образом шылд можно превратить в самостоятельную плату не зависимую от ардуины)

Несколько вариантов удешевления:
— с незапаянными пин экстендерами — для самостоятельной запайки дргих видов разъёмов или использования отдельно от ардуино.
— с незапаянной серво частью — если нет необходимости управлять сервомашинками.


Теперь развёрнуто, с картинками и по-порядку.

Сначала про входы.
Изучив существующие варианты моторшилдов, я с удивлением обнаружил ряд странностей. Во первых нет ничего напоминающего стандарт на расположение выводов для моторшылда – входы у всех одинаковые (DIR и PWM – направление и скорость) но использует их кто во что горазд. Точнее сожает куда попало – так что подражать оказалось нечему =\. Так же многие моторшилды занимают выходы интерфейсв UART (0 и 1 пины) или SPI (11, 12, 13 пины), что вообще ни в какие ворота не лезет =\.
Ни один моторшылд не сможет без переделок работать с ардуиной на 8-й меге (выходы ШИМ у неё только на 9, 10, 11 ), а ведь 8кб флеша хватит многим =)
Ну и всегда меня удручала жёсткая фиксированость входов у шилдов – чтоб собрать двух-трёх этажный бутерброд придётся попотеть выбирая производителей — так чтоб не возникли конфликты. Ну а если мне надо несколько одинаковых шылдов набутербродить?
Вобщем вооружившись этими, без сомнения, сомнительными доводами выбрали именно такое расположение – чтоб и интерфейсы свободны, и на восьмой меге заработало, и чтоб перекинуть без осложнений можно было.

Надо всего лишь обрезать тонкую дорожку соединяющую площадки паяльного джампера и припаять проводок к интересующему пину (вот, например, взяли и перебросили вход DIR1 на A1).


Для удобства подобных модернизаций, входы шилда снабжены отверстиями. Так же, отверстия дублируют все пины ардуины (с подписями).
Обрезанная перемычка может быть легко восстановлена – просто посадите соплю (каплю припоя) на площадки =).

Управляться всё это дело может обычными библиотеками, только подправить их придётся(под наше расположение входов) или входы перекомутировать на шилде.
Но чтоб ничего этого не делать уважаемый Burjui написал трушную библиотеку полную синтаксического сахара (документация в архиве).
Самую свежую версию из репозитория всегда можно скачать zip-архивом по фиксированной ссылке


#include <Servo.h>
#include <LMotorShield.h>

LMotorShield lms;

void setup()
{// инициализируем библиотеку для управления и моторами и сервами
  lms.begin(LMS_MOTORS | LMS_SERVOS); 
}

void loop()
{
  lms.motorSpeed(1, 30); // первому двигателю ставим скорость 30
  lms.motorDirection(1, LMS_FORWARD); //первому двигателю задаём направление вращения - прямо
  lms.motorSpeed(2, 30); // второму двигателю ставим скорость 30
  lms.motorBackward(2);  // второй двигатель запускаем назад
  
  lms.multipleServoWrite(LMS_SERVOS, 90); // все сервы повернуть на 90 градусов
  
  delay(2000);
  
  lms.multipleMotorSpeed(LMS_MOTORS, 60); // обоим моторам задаём скорость 60
  
  lms.servoWrite(1, 30); // выставляем сервы по-одной, на разные углы
  lms.servoWrite(2, 60); // вторая на 60 градусов
  lms.servoWrite(3, 120); // третья на 120
  lms.servoWrite(4, 150); // ...ну я надеюсь понятно, да?=)
  
  delay(2000);
  
  lms.multipleMotorStop(LMS_MOTORS); // затормаживаем оба мотора сразу
  lms.multipleServoWrite(LMS_SERVO1 | LMS_SERVO2, 0); // первую и вторую сервы в 0 градусов
  lms.multipleServoWrite(LMS_SERVO3 | LMS_SERVO4, 180); // 3 и 4 на 180
  
  delay(2000);
  
  lms.motorRun(1); //растормаживаем 1 мотор (поедет со скоростью 60 вперёд)
  lms.motorRun(2); //растормаживаем 2 мотор (поедет со скоростью 60 назад)
}
Шаговым двигателем управлять можно стандартной библиотекой (Stepper www.arduino.cc/en/Reference/Stepper) только надо выставить HIGH на входах PWM (3 и 11) или если надо сэкономить пины — просто обрежьте джампера идущие к ним и посадите PWMы на питание, через 1к резистор. Управляется двигатель через входы DIR (8 и 7).

#include <Stepper.h> //подключим библиотеку

const int stepsPerRevolution = 48;  // число шагов на оборот вашего шаговика

// инициализируем библиотеку, устанавливаем входы управления шаговикомy - 8 и 7:
Stepper myStepper(stepsPerRevolution, 8,7);            

void setup() {
  // зададим скорость вращения:
  myStepper.setSpeed(50);
 // для работы с нашим моторшылдом надо выставить еденички на входах PWM1 и PWM2 
    digitalWrite(3, HIGH); // т.е на 3 и 11 выводах
    digitalWrite(11, HIGH); 
}

void loop() {
  // прошагаем полный оборот в одну сторону:
  myStepper.step(stepsPerRevolution);
  delay(500);// постоим пол-секунды
  
  // и прошагаем полный оборот в другую сторону:
   myStepper.step(-stepsPerRevolution);
  delay(500); 
}
Для отладки без моторов выходы L293 снабжены индикацией – светодиоды показывают направление вращения (зелёный или красный) а по яркости свечения можно оценить скорость двигателя.

Иногда это бывает удобно – чтоб отлаживаемая платформа никуда не сбегала, не разряжались аккумуляторы или ничего не намоталось. Да и слушать вой движков в процессе доводки невсегда приятно=)
Ещё меня угнетало неполное использование возможностей L298 в шылдах, ведь ни один не задействует такую замечательную фичу как динамическое торможение – а затормозить двигатель почти без выбега иногда ооочень полезно. Пришлось выдумать замудрёную схему управления на 74HCT240 и добавить вход BRK подав на который 1 можно резко затабанить движок.

Причём, что там на остальных входах творится уже не важно. Сняли 1 и снова двигатель бодро рванул в том же направлении и с прежней скоростью. А кому не нужен этот вход – можете смело про него забыть и вообще отрезать перемычку для экономии выводов – всё будет работать как в обычном моторшылде =).
Но на плате оставалась ещё куча места, и туда решено было воткнуть что-нибудь для серв. А чего сервам вечно не хватает? Питания! Вот и возник в серво части 5-амперный стабилизатор, да не простой а регулируемый. Можно как обычно 5-ю вольтами сервы питать, можно их пожалеть и дать 4.8В (для SG90 это номинальное напряжение, кстати), а можно разогнать подав 6В (что для крупных серв в пределах нормы)

Итого соответствие выводов получилось такое:

1Мотор
PWM1 — 11
DIR1 — 8
BRK1 — 4

2Мотор
PWM2 — 3
DIR2 — 7
BRK2 — 2

Сервы
Серва 1 — 10
Серва 2 — 9
Серва 3 — 6
Серва 4 — 5

Как видно с 8-й АТМегой всё не так гладко вышло – нащупались грабли.
Как известно у восьмёрки ШИМятся только 9,10 и 11 выводы – логично расположить PWM-ы именно там, вот только на 10 и 9 выводах ШИМ отключается при подключении стандартной библиотеки «Servo» =(
То есть ради совместимости с восьмёркой пришлось бы придумывать програмные велосипеды и извращения с сервами или ШИМ-ами, что не радовало.
Поэтому сжав зубы пришлось пожертвовать идеалами демократии и разместить именно так.
Кому нужна восьмёрка и не нужны сервы – берите плату с незапаяной серво частью, перебрасывайте PWM2 на 9-й или 10-й пин и будет вам счастье. Ну а кому нужно всё и сразу – и сервы и моторы и всё на восьмёрке – библиотеку SoftwareServo (в конце статьи) в руки и в бой=)
Ну и SPI, тоже пришлось укоротить — ШИМов не хватало, 11пин (MOSI) отдали на PWM1. Логичнее его конечно, было бы кинуть на управлние сервой какой-нибудь(чтоб хоть три сервы и моторы могли никому не мешая работать), но глаз замылился, и обратил я на это внимание только при написании документации=( Конечно пользуясь гибкостью данного шылда, можно и это дело поправить, если кому хочется. В следующей версии, (если она будет=) исправлюсь.

Питать шилд можно несколькими способами.
Во-первых, питание моторшилда разделено на три группы – силовое питание серво части – то что идёт на стабилизатор, силовое питание моторной части – то что идёт на ЭЛЬ-ку и крутит моторы и питание логической части – как самой ЭЛЬ-ки так и микросхемы управления.
Силовое питание можно брать от отдельное – от разъёма установленого на шилде, а можно воспользоваться внешним питанием ардуины (но только через защитный диод, установленый на самой ардуине, т.е. чтоб его не спалить не стоит оттуда брать более ). Варианты силового питания выбираются джамперами раздельно для моторной и сервочасти.

Логическая часть, по-умолчанию, запитана от 5В ардуины, но можно переключится на напряжение выход стабилизатора серво части. Т.к. не ожидается что эта фича будет сильно востребованна джампер выполнен паяльным.

Ну и никой такие сложности и разнообразности, спросит пытливый читатель. Отвечаем – для гибкости.
Так, например, ардуину можно запитать от 9-вольтовой кроны, а силовой аккумулятор (на 12, 24В) подключить на шилд. А можно, если не хочется перегружать устройство батарейками(и если позволяют токи и напряжения питания моторов) посадить 12В аккум на разъём дуины и кормить всех оттуда. А можно вообще выкинуть дуину, перебросить джампер питания логической части и использовать шылд как самостоятельное устройство. Например, подключив фоторезисторы на PWM-ы получим безконторллерного лайттрейсера =)

В общем, такая вот получилась загогулина =)



Документация (PDF)

Далее:
Багрепорт по L-Motor Shield
Подготовка L-Motor Shield-а к работе
  • +3
  • 30 ноября 2011, 14:12
  • Zoltberg

Комментарии (18)

RSS свернуть / развернуть
+
0
Ассортимент ваших творений ширится))) Хотелось бы увидеть в нем еще одно простое, но на мой взгляд весьма востребованное — шилд для управления (16, 24, 32, 48) сервами.
avatar

execom

  • 1 декабря 2011, 14:38
+
0
Есть такие мысли и планы, хотелось бы узнать что именно нужно.

Просто разведённые разъёмы под сервы?
Питание на 16...48 серв (15...50А)?
Сдвиговые регистры?
Более интелектуальные функции управления?

avatar

Zoltberg

  • 7 декабря 2011, 21:15
+
0
Нужен моторшилд для 5координатного фрезерного станка (моторы от 380 запитаны и ампераж у них не модельерный). Для как бы ёМобиля (там привод на каждом колесе и задача синхронизации есть, ампераж высокий). Для промышленной руки-привода с тоже не хилыми моторами (более чёткое управление, стопорить обязательно). Моторшилды работающие от xbee, для автоматизации производства, чтоб протягивать к ним только основное питание, а управлять по беспроводу (повышен ампераж к томуже, частая и постоянная остановка двигателей, что даёт некие скачки в сети, моторов много 50-100). Моторшилды для управления катушками зажигания в авто (задача программной настройки ампеража). В общем если отдалиться от роботостроения игрушек и приблизиться к реальной жизни, то моторшилды нужны всякие и разные. А и ещё микродубликаторы — то есть: перед тем как всё это имплантировать в реальное железо товарищ юзер должен иметь возможность показать (боссам, себе) это всё на макете, а потом просто поменяв плату и подключаемые мощности работать без изменения программы на мощных приводах.
avatar

lU5esdYP

  • 4 февраля 2012, 17:16
+
0
Безусловно, полезный шилд!) А вот появится ли у вас в продаже интернет-шилд?
avatar

blackhand999

  • 6 декабря 2011, 16:46
+
0
Появится. Стоит в очереди на разработку=)
avatar

Zoltberg

  • 7 декабря 2011, 21:16
+
0
А зачем на шилдах всегда столько деталей? По-моему для L293D не надо почти ни какой обвязки…
avatar

MAFia

  • 7 декабря 2011, 17:27
+
0
Для удобства пользователей.
Назначение всех деталей расписано в статье;)
Нууу=) тогда (без обвязки) нужно обязательно по 3пина дуины задействовать для управления каждым каналом.
avatar

Zoltberg

  • 7 декабря 2011, 21:20
+
0
Подскажите, все никак не могу понять, зачем последовательно со светодиодами режима работы двигателей стоят диоды (похоже 1n4148)?
avatar

SeriousNikos

  • 12 декабря 2011, 12:22
+
0
Для защиты светодиодов от обратного напряжения. Светодиоды его сииильно не любят=)
Типичное допустимое — вольт 5, а шилд может на выходе дать до 40.
avatar

Zoltberg

  • 12 декабря 2011, 12:48
+
0
Спасибо, протупил.
avatar

SeriousNikos

  • 12 декабря 2011, 13:08
+
0
Привет всем!
Я новичок в этом деле и хотел спросить, совместим ли он с Arduibo UNO?
avatar

JyraFF

  • 13 февраля 2012, 18:22
+
0
Да, полностью.
avatar

Zoltberg

  • 15 февраля 2012, 20:02
+
0
Здравствуте)
Я полный новичок в этом деле, поэтому прочев эту статью не доконца понял(
Мне требуется осуществить управление, двумя тактовыми двигателями, можно ли это сделать по средсвом данной схемы?)
avatar

Virusolog

  • 30 апреля 2012, 15:25
+
0
осталось выяснить что такое тактовый двигатель ;)
avatar

Zoltberg

  • 30 апреля 2012, 15:37
+
0
Т.е. шаговый)
avatar

Virusolog

  • 30 апреля 2012, 15:39
+
0
Или один канал для управления шаговым двигателем.
Одна плата — один шаговик, две платы — два шаговика.
avatar

Zoltberg

  • 30 апреля 2012, 15:43
+
0
А можно как нить реализовать управление двумя шаговыми двигателемя, посредством одной схемы?
avatar

Virusolog

  • 3 мая 2012, 08:57
+
0
Только если шаговики униполярные,
вроде где-то попадались варианты управления такими одним мостом(да и по логике, можно).
Но я не пробовал и на вскидку ничего более подробного сказать не могу.
avatar

Zoltberg

  • 7 мая 2012, 14:50

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.