Arduino motor shield своими руками






Arduino motor shield своими руками

Плата улучшена. Смотрите Z- Motor Servo Shield своими руками (DIY)

Занимаясь роботостроением нам рано или поздно придется задуматься о сборке платы для управления двигателями. В случае если вам нужна фиксированная скорость моторов, без потери мощности, то лучше собрать реле шилд. В случае, если вам нужна плавная регулировка скорости вращения моторов и вы готовы ограничиться максимально потребляемым током мотора в 600мА, тогда читаем эту статью и собираем плату управления на широко известной микросхеме L293D. Встречайте Motor shield L293D.

Танк собранный на базе самодельной Ардуино

 

 

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

В данный момент шилды на этой микросхеме могут похвастаться сразу двумя L293D на борту, управляемыми сдвиговым регистром 74HC595.

Более ранние версии включают в себя L293D и микросхемку 74HC00.

Посмотрев даташит на последнюю микруху, можно понять, что она включает в себя 4 логических элемента И-НЕ. Возможна замена 74HC00 на советские аналоги К155ЛАЗ  К155ЛА8. Принцип его работы можно понять, посмотрев на рисунок приведенный ниже (в зависимости от подаваемых сигналов на входы а & b мы получаем значение на выходе с). На рисунке также приведена "таблица истинности" для данного элемента.

таблица истинности логических элементов входящий в состав микросхемы 74HC00 

 

Смыслом использования микросхемы 74HC00 в нашем устройстве является возможность менять единицу и ноль местами на выводах Output1 и Output2 микросхемы L292D, реверсируя этим направление вращения мотора, используя для этого только один вывод контроллера.

соединение логических элементов 74HC00

 

Направление вращения моторов мы задали, но без подачи питания на вывод Enable1 двигатель вращаться не будет. Подачей ШИМ сигнала именно на этот вывод мы и будем управлять скоростью вращения мотора. Более подробно про принцип работы L293D можно почитать здесь. 

Управление 1ым мотором  ( пин 4 – задаем направление вращения, пин 3  ( ШИМ ATmega 168,328 ) разрешение вращения и регулировка скорости )

Управление 2ым мотором  ( пин 7 – задаем направление вращения, пин 5  ( ШИМ ATmega 168,328 ) разрешение вращения и регулировка скорости )

В завершение вышесказанного, прикрепляю принципиальную схему (кликабельна). 

Принципиальная схема Arduino DIY L293D motor shield

Для управления скоростью моторов, выбраны оставшиеся ШИМ выводы ( 3, 5 ), которые, правда, доступны только на ATmega168, 328.

На мой взгляд, при использовании Мега8 лучше потерять возможность регулирования скорости движения, зато у вас будут доступны 3 свободных вывода ( ШИМ на ATMEGA8 ( 9, 10, 11 )) для управления сервоприводами, да и 8ую на 328ую можно заменить в любой момент, получив этим доступ к регулировке скорости.   

 

Работа с серво

На плату установлены четыре разъема для подключения сервоприводов (6, 9, 10, 11). 

На плате Ардуино уже имеется стабилизатор напряжения серии 7800, а именно 7805, который должен обеспечивать стабильное напряжение для работы контроллера. Во избежание просадки напряжения в цепи питания контроллера при резком запуске мощных сервоприводов - решено питать силовую серво часть от отдельного стабилизатора.

КР142ЕН5А является линейным стабилизатором, а это подразумевает, что вся преобразуемая энергия переводится в тепло и при подключении нагрузки стабилизатор начинает нагреваться прямо пропорционально величине потребляемого тока.  Ввиду этого рекомендуется посадить стабилизатор на радиатор.

При использовании маломощных сервоприводов типа 9G рекомендую использовать пятивольтовый стабилизатор с маркировкой 7805 он же КР142ЕН5А. Пяти вольт для питания сервоприводов такого типоразмера будет достаточно с головой.

Для более мощных, к примеру MG995, возможна установка шестивольтового стабилизатора с маркировкой 7806 он же КР142ЕН5Б. 

Подключение сервоприводов к самодельному мотор шилду

 

Монтаж стабилизатора на плату

Стабилизатор, крена, 7805

 

Прочее

Вдобавок ко всему на плате установлена дублирующая кнопка сброса МК (RST).

На плату выведен светодиод, подключенный к 13 пину, который можно отключить, сняв джампер  (JP LED13).

На плате имеются джамперы (JP1 и JP2), позволяющие выбирать схемы подключения питания

JP1 и JP2 замкнуты - Ардуина, стабилизатор и силовая часть реле шилда питаются от одного источника питания.

JP1 разомкнут, JP2 замкнут- Ардуина питается от одного источника, стабилизатор и силовая часть реле шилда от другого.

JP1 замкнут, JP2 разомкнут- Ардуина и стабилизатор питаются от одного источника, силовая часть реле шилда от другого. Сделано это с целью того, что:

- входное напряжение стабилизатора не должно превышать 15 Вольт, а то время как максимальное входное напряжение на L293D равно 36 Вольтам. 

- в обвязке стабилизатора установлены конденсаторы 100uFx16v, которые, при превышении максимального напряжения, могут взорваться.

JP1 разомкнут, JP2 разомкнут- питание Ардуины и силовой части шилда раздельное, стабилизатор не используется.

 

Примеры управления разными типами двигателей

1. Моторы постоянного тока

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

 

Пример программного кода

// Тестировалось на Arduino IDE 1.0.1

#define EN_RIGHT 5 #define EN_LEFT 3 #define M_RIGHT 7 #define M_LEFT 4 #define LED 13 void setup() { pinMode (EN_RIGHT, OUTPUT); pinMode (EN_LEFT, OUTPUT); pinMode (M_RIGHT, OUTPUT); pinMode (M_LEFT, OUTPUT); digitalWrite (EN_RIGHT, LOW); digitalWrite (EN_LEFT, LOW); pinMode (LED, OUTPUT); digitalWrite (LED, HIGH); } void loop() { digitalWrite (M_RIGHT, HIGH); digitalWrite (M_LEFT, HIGH); analogWrite (EN_RIGHT, 90); analogWrite (EN_LEFT, 90); delay(1000); digitalWrite (M_RIGHT, HIGH); digitalWrite (M_LEFT, HIGH); analogWrite (EN_RIGHT, 190); analogWrite (EN_LEFT, 190); delay(1700); digitalWrite (M_RIGHT, HIGH); digitalWrite (M_LEFT, HIGH); digitalWrite (EN_RIGHT, LOW); digitalWrite (EN_LEFT, LOW); delay(2000); digitalWrite (M_RIGHT, LOW); digitalWrite (M_LEFT, LOW); analogWrite (EN_RIGHT, 90); analogWrite (EN_LEFT, 90); delay(1000); digitalWrite (M_RIGHT, LOW); digitalWrite (M_LEFT,LOW); analogWrite (EN_RIGHT, 190); analogWrite (EN_LEFT, 190); delay(1700); digitalWrite (M_RIGHT, HIGH); digitalWrite (M_LEFT, HIGH); digitalWrite (EN_RIGHT, LOW); digitalWrite (EN_LEFT, LOW); delay(6000); }

 

 

2. Сервоприводы

Просто порулим четырьмя сервоприводами от 0 до 180 градусов

 

Пример программного кода // Тестировалось на Arduino IDE 1.0.1 #include <Servo.h> Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; void setup() { // устанавливаем пин как вывод управления сервой myservo1.attach(6); myservo2.attach(9); myservo3.attach(10); myservo4.attach(11); } void loop() { // устанавливаем угол 0° myservo1.write(0); delay(2000); myservo2.write(0); myservo3.write(0); myservo4.write(0); delay(2000); // устанавливаем угол 90° myservo1.write(180); delay(2000); myservo2.write(180); myservo3.write(180); myservo4.write(180); delay(2000); }

 

 

3. Шаговый двигатель

В данном скетче мы повернем выводной вал на 360 градусов ( сделаем 48 шагов из даташита) в обе стороны с определенной скоростью.

 

Пример программного кода // Тестировалось на Arduino IDE 1.0.1 #include <Stepper.h> #define STEPS 48 // количество шагов на 360 градусов (из документации к шаговику) // задаем пины которые будут программно чередоваться, без использования 74HC00 их будет 4 Stepper stepper(STEPS, 7, 4); void setup() { pinMode(5, OUTPUT); // вывод отвечающий за ENABLE pinMode(3, OUTPUT); // вывод отвечающий за ENABLE digitalWrite(3, HIGH); // разрешаем вращение мотора digitalWrite(5, HIGH); // разрешаем вращение мотора stepper.setSpeed(20); //скорость поворота шагового двигателя pinMode(13, OUTPUT); digitalWrite(13, HIGH); // индикация включения } void loop() { // делаем один оборот(48 шагов) stepper.step(1STEPS); delay(1); digitalWrite(3, LOW); // запрещаем подачу напряжения на мотор digitalWrite(5, LOW); // запрещаем подачу напряжения на мотор delay(5000); // даем L293D чуток остыть digitalWrite(3, HIGH); digitalWrite(5, HIGH); / делаем один оборот назад (48 раз выводы 7, 4, чередовали значения HIGH и LOW, тем самым меняя полярность в обмотках шагового двигателя) / stepper.step(-1STEPS); delay(1); digitalWrite(3, LOW); digitalWrite(5, LOW); delay(10000); // даем L293D основательно остыть digitalWrite(3, HIGH); digitalWrite(5, HIGH); }

 


скачать архив

В архиве лежат две папки  и список деталей 

Папка MSV1DIY1 включает в себя шаблон ПП совместимой ТОЛЬКО с Arduino DIY ( USB, COM ), имеющими дополнительный выход VTG INPUT, напряжение на котором берется еще до защитного диода. При такой совместимости возможно запитывать и Ардуину от шилда, и силовую часть шилда от Ардуины, и стабилизатор для питания сервоприводов от Ардуино.

Папка MSV1DIY2 включает в себя шаблон платы совместимой с оригинальными Arduino.

Открываем фото => Печать => Во всю страницу

Разница состоит в том, что возможное соединение питаний происходит на пине Vin Arduino. Напряжение на этом выходе получается равным входному минус потеря напряжения на защитном диоде (подаем к примеру 8 Вольт на разъем питания Ардуино, получаем примерно 7.4 Вольт на выходе Vin, а, следовательно, и на питание силовой части реле шилда), также и максимальный ток через диод ограничен 1000мА. Терять 0.7 вольта впустую не всегда позволительно. Выход из этой ситуации прост: запитывать не шилд от Ардуины, а Ардуину от шилда,тем самым минуя защитный диод. 

Этот вариант также можно использовать и с самодельными версиями Ардуино по тому же принципу.

 

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

MSV1DIY1

Монтажная схема SMD компонентов

MSV1DIY2

Монтажная схема SMD компонентов

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.








Arduino motor shield своими руками

Arduino motor shield своими руками

Arduino motor shield своими руками

Arduino motor shield своими руками

Arduino motor shield своими руками

Arduino motor shield своими руками

Похожие новости: