Долго, нереально долго шёл к свету этот шилд. Неприятности и грабли преследовали и тормозили. Но всё же, наконец, мы его сделали! Встречайте – .
Ничего особенного вобщем-то в нём нет, моторшилд на «Эль-ке» () каких много напридумывали. Мы вот тоже решили свой такой сделать, с некоторыми улучшениями, дополнениями и фишечками.
Итак:
Два канала для управления (скорость и направление) коллекторными двигателями с током потребления до 1А и напряжением питания до 40В.
Или один канал для управления шаговым двигателем.
Светодиоды — индикатор питания (логической части) и режима работы двигателей – направление вращения и скорость(удобно при отладке без подключения двигателей)
Помимо стандартных сигналов – DIR и PWM (направление и скорость) для каждого канала имеется дополнительный сигнал – BRK (тормоз), который переводит двигатель в режим торможения не зависимо от состояния остальных входов.
Четыре канала управления сервомашинками(могут работать одновременно с двигателями).
Входы шылда не занимает выводов интерфейсов – (почти), UART, I2C.
Входы шылда не закреплены жёстко за определёнными и могут быль, при необходимости, легко переключены.
Мощный (до 5А), регулируемый (по умолчанию 5В, переключается на 4.8В или 6В) стабилизатор для питания сервомашинок.
Возможность питания:
— Силовой части двигателей — как от входного питания ардуины, так и от внешнего источника (до 40В)
— Стабилизатора серво части(опция) — как от входного питания ардуины, так и от внешнего источника (до 40В)
— Логической части управления двигателями — как от 5В выхода Ардуины, так и от стабилизатора серво части (таким образом шылд можно превратить в самостоятельную плату не зависимую от ардуины)
Несколько вариантов удешевления:
— с незапаянными пин экстендерами — для самостоятельной запайки дргих видов разъёмов или использования отдельно от ардуино.
— с незапаянной серво частью — если нет необходимости управлять сервомашинками.
Теперь развёрнуто, с картинками и по-порядку.
Сначала про входы.
Изучив существующие варианты моторшилдов, я с удивлением обнаружил ряд странностей. Во первых нет ничего напоминающего стандарт на расположение выводов для моторшылда – входы у всех одинаковые (DIR и – направление и скорость) но использует их кто во что горазд. Точнее сожает куда попало – так что подражать оказалось нечему =\. Так же многие моторшилды занимают выходы интерфейсв UART (0 и 1 пины) или SPI (11, 12, 13 пины), что вообще ни в какие ворота не лезет =\.
Ни один моторшылд не сможет без переделок работать с ардуиной на 8-й меге (выходы у неё только на 9, 10, 11 ), а ведь 8кб флеша хватит многим =)
Ну и всегда меня удручала жёсткая фиксированость входов у шилдов – чтоб собрать двух-трёх этажный бутерброд придётся попотеть выбирая производителей — так чтоб не возникли конфликты. Ну а если мне надо несколько одинаковых шылдов набутербродить?
Вобщем вооружившись этими, без сомнения, сомнительными доводами выбрали именно такое расположение – чтоб и интерфейсы свободны, и на восьмой меге заработало, и чтоб перекинуть без осложнений можно было.
Надо всего лишь обрезать тонкую дорожку соединяющую площадки паяльного джампера и припаять проводок к интересующему пину (вот, например, взяли и перебросили вход DIR1 на A1).
Для удобства подобных модернизаций, входы шилда снабжены отверстиями. Так же, отверстия дублируют все пины ардуины (с подписями).
Обрезанная перемычка может быть легко восстановлена – просто посадите соплю (каплю припоя) на площадки =).
Управляться всё это дело может обычными библиотеками, только подправить их придётся(под наше расположение входов) или входы перекомутировать на шилде.
Но чтоб ничего этого не делать уважаемый написал трушную полную синтаксического сахара (документация в архиве).
Самую свежую версию из репозитория всегда можно скачать 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 ) только надо выставить 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В (что для крупных серв в пределах нормы)
Итого соответствие выводов получилось такое:
Как видно с 8-й АТМегой всё не так гладко вышло – нащупались грабли.
Как известно у восьмёрки ШИМятся только 9,10 и 11 выводы – логично расположить PWM-ы именно там, вот только на 10 и 9 выводах ШИМ отключается при подключении стандартной библиотеки «» =(
То есть ради совместимости с восьмёркой пришлось бы придумывать програмные велосипеды и извращения с сервами или ШИМ-ами, что не радовало.
Поэтому сжав зубы пришлось пожертвовать идеалами демократии и разместить именно так.
Кому нужна восьмёрка и не нужны сервы – берите плату с незапаяной серво частью, перебрасывайте PWM2 на 9-й или 10-й пин и будет вам счастье. Ну а кому нужно всё и сразу – и сервы и моторы и всё на восьмёрке – библиотеку SoftwareServo (в конце ) в руки и в бой=)
Ну и SPI, тоже пришлось укоротить — ШИМов не хватало, 11пин (MOSI) отдали на PWM1. Логичнее его конечно, было бы кинуть на управлние сервой какой-нибудь(чтоб хоть три сервы и моторы могли никому не мешая работать), но глаз замылился, и обратил я на это внимание только при написании документации=( Конечно пользуясь гибкостью данного шылда, можно и это дело поправить, если кому хочется. В следующей версии, (если она будет=) исправлюсь.
Питать шилд можно несколькими способами.
Во-первых, питание моторшилда разделено на три группы – силовое питание серво части – то что идёт на стабилизатор, силовое питание моторной части – то что идёт на ЭЛЬ-ку и крутит моторы и питание логической части – как самой ЭЛЬ-ки так и микросхемы управления.
Силовое питание можно брать от отдельное – от разъёма установленого на шилде, а можно воспользоваться внешним питанием ардуины (но только через защитный диод, установленый на самой ардуине, т.е. чтоб его не спалить не стоит оттуда брать более 1А). Варианты силового питания выбираются джамперами раздельно для моторной и сервочасти.
Логическая часть, по-умолчанию, запитана от 5В ардуины, но можно переключится на напряжение выход стабилизатора серво части. Т.к. не ожидается что эта фича будет сильно востребованна джампер выполнен паяльным.
Ну и никой такие сложности и разнообразности, спросит пытливый читатель. Отвечаем – для гибкости.
Так, например, ардуину можно запитать от 9-вольтовой кроны, а силовой аккумулятор (на 12, 24В) подключить на шилд. А можно, если не хочется перегружать устройство батарейками(и если позволяют токи и напряжения питания моторов) посадить 12В аккум на разъём дуины и кормить всех оттуда. А можно вообще выкинуть дуину, перебросить джампер питания логической части и использовать шылд как самостоятельное устройство. Например, подключив фоторезисторы на PWM-ы получим безконторллерного лайттрейсера =)
Ассортимент ваших творений ширится))) Хотелось бы увидеть в нем еще одно простое, но на мой взгляд весьма востребованное — шилд для управления (16, 24, 32, 48) сервами.
Нужен моторшилд для 5координатного фрезерного станка (моторы от 380 запитаны и ампераж у них не модельерный). Для как бы ёМобиля (там привод на каждом колесе и задача синхронизации есть, ампераж высокий). Для промышленной руки-привода с тоже не хилыми моторами (более чёткое управление, стопорить обязательно). Моторшилды работающие от xbee, для автоматизации производства, чтоб протягивать к ним только основное питание, а управлять по беспроводу (повышен ампераж к томуже, частая и постоянная остановка двигателей, что даёт некие скачки в сети, моторов много 50-100). Моторшилды для управления катушками зажигания в авто (задача программной настройки ампеража). В общем если отдалиться от роботостроения игрушек и приблизиться к реальной жизни, то моторшилды нужны всякие и разные. А и ещё микродубликаторы — то есть: перед тем как всё это имплантировать в реальное железо товарищ юзер должен иметь возможность показать (боссам, себе) это всё на макете, а потом просто поменяв плату и подключаемые мощности работать без изменения программы на мощных приводах.
Для удобства пользователей.
Назначение всех деталей расписано в статье;)
Нууу=) тогда (без обвязки) обязательно по 3пина дуины задействовать для управления каждым каналом.
Здравствуте)
Я полный новичок в этом деле, поэтому прочев эту статью не доконца понял(
Мне требуется осуществить управление, двумя тактовыми двигателями, можно ли это сделать по средсвом данной схемы?)
Только если шаговики ,
вроде где-то попадались варианты управления такими одним мостом(да и по логике, можно).
Но я не пробовал и на вскидку ничего более подробного сказать не могу.
Комментарии (18)
RSS свернуть / развернутьexecom
Просто разведённые разъёмы под сервы?
Питание на 16...48 серв (15...50А)?
Сдвиговые ?
Более интелектуальные функции управления?
Zoltberg
lU5esdYP
blackhand999
Zoltberg
MAFia
Назначение всех деталей расписано в статье;)
Нууу=) тогда (без обвязки) обязательно по 3пина дуины задействовать для управления каждым каналом.
Zoltberg
SeriousNikos
Типичное допустимое — вольт 5, а шилд может на выходе дать до 40.
Zoltberg
SeriousNikos
Я новичок в этом деле и хотел спросить, совместим ли он с Arduibo UNO?
JyraFF
Zoltberg
Я полный новичок в этом деле, поэтому прочев эту статью не доконца понял(
Мне требуется осуществить управление, двумя тактовыми двигателями, можно ли это сделать по средсвом данной схемы?)
Virusolog
Zoltberg
Virusolog
Zoltberg
Virusolog
вроде где-то попадались варианты управления такими одним мостом(да и по логике, можно).
Но я не пробовал и на вскидку ничего более подробного сказать не могу.
Zoltberg
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.