«LC Motor Shield» для Arduino своими руками :). Часть 2


В прошлой части, мы выбрали схему, проверили ее на работоспособность и теперь полностью готовы перейти к этапу изготовления LC-Motor Shield.

Достоинства данного варианта:
— простота реализации в домашних условиях
— односторонняя разводка платы
— не содержит дефицитных деталей
— ток нагрузки более 1А (при установке доп. радиаторов)
— возможность переключения источника питания двигателей (внешнее/от Ардуино) с помощью перемычки.
— индикация направления вращения двигателей
— не занимает выводы интерфейсов – SPI(11,12,13), UART(0,1), I2C(А4,А5).
— совместимость с «самодельным» вариантом Ардуино (вариант на Atmega8)
и т.д.

Из недостатков:
— ВАЖНО!!! Не в полной мере совместим со стандартной библиотекой Servo. (После подключения этой библиотеки, становиться невозможным управление скоростью двигателей, т.к., блокируется ШИМ на выводах 9 и 10. Читать тут)!!! Т.е., при одновременном использовании коллекторных двигателей и сервомашинок (с библиотекой Servo) двигателя будут вращаться на максимальной скорости.
— только два канала
— «жесткая» привязка пинов
— всего два канала для сервоприводов
— три пина на один канал управления двигателем
— возможное «недовольство» администрации ресурса ROBOCRAFT.RU, за изделие повторяющее функционал L-Motor Shield (типа политики Apple) 🙂
(последний пункт, это шутка)

Итак, для изготовления LC-Motor Shield нам понадобится:
— кусок одностороннего текстолита 75х65 мм
— 2-е сборки дарлигтона STA434A
— 8 оптопар PC817 (навыпаивал из старых БП)
— 10 SMD-резисторов (размер 1206), 470 Ом (маркировка 471)
— 8 SMD-резисторов (размер 1206), 1kОм (маркировка 102)
— 1 SMD-резистор (размер 1206), 2.2kОм (маркировка 202)
— 8 SMD-конденсаторов (размер 1206), 100n
— 4 SMD-диода
— 3 болтовых клемника
— 2 резистора (выводных)на 2.2 кОм
— 5 светодиодов (3мм)
— стабилизатор LM338T
— 2 электролитических конденсатора с напряжением не менее 25V(у меня оказались 22mFx63V)
— 1 элетролит. конденсатор 100mFx16V
— стандартные (для Ардуино) штырьки и ответные части

Напомню схему:

Самое сложное, и времязатратное — это разведение печатной платы!!! (Короче говоря, самое сложное это разводка печатной платы и процесс написания статьи :))
После многих попыток/вариантов/переделок получилась следующая «загогулина»:

После проверки правильности разводки схемы, приступаем непосредственно к изготовлению шилда.
Перво-наперво — плата. Самый обычный (для самодельщиков) ЛУТ. Процесс широко и подробно описан на просторах интернета. Кому в новинку — гугл в помощь. Изображение печаталось на странице из журнала.

После травления в хлорном железе:

Далее необязательное лужение сплавом Розе. Просто, мне очень нравится как выглядит потом плата, да и паять намного приятнее. Тут видеоурок, кому интересно. (урок не мой)

Собираем необходимые детали до кучки.

Естественно, процедуру запайки начинаем с SMD-элементов и перемычек.

Теперь запаиваем остальные элементы.

Пришлось повозиться с запайкой контактных штырьков.. Я делал так. Сдвигал пластиковую гребенку, МАКСИМАЛЬНО аккуратно припаивал штырьки. Затем немного нагревал феном и опускал пластиковую часть. Вышло более-менее…
Крайне рекомендую запаянную плату ВНИМАТЕЛЬНО проверить на «коротыши» и «непропаи», а также откровенные «лажи», которые при подключении питания могут вылезти «боком»!!!

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

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

Примеряемся к Ардуино, радуемся и хлопаем в ладоши, что все хорошо подходит друг к дружке. И, главное, ничего нигде не «коротит» 🙂

На следующей картинке подписаны основные функциональные части LC-Motor Shield-а.

Фууууу…. Если Вы добрались до этой части, то спешу Вас обрадовать: теперь осталось самое интересное. Переходим, так сказать к «ходовым испытаниям». Иначе говоря, что же полезного может делать данный шилд?

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

Тестовый скетч от вышеуказанного видео:

/*
LC Motor Shield v. 1.0 Ghost D. 2013
====================================
для robocraft.ru (Кибервесна 2013)
Тест совместной работы двигателей и сервоприводов. Скетч "набросан" на скорую руку :)
Так, что строго не судите.....
!!!!!!!!!!!!!!
Обращаю внимание, что при подключении библиотеки Servo.h перестает работать управление
скоростью вращения двигателей. Т.е., двигатели на обоих каналах вращаются с максимальной
скоростью.
!!!!!!!!!!!!!!
*/

#include <Servo.h>

Servo myservo;
//Пины, управляющие первым каналом
byte FWD1=4;
byte RWD1=2;
byte ENB1=9;

//Пины, управляющие вторым каналом
byte FWD2=8;
byte RWD2=7;
byte ENB2=10;

void setup(){
  pinMode (FWD1,OUTPUT);
  pinMode (RWD1,OUTPUT);
  pinMode (ENB1,OUTPUT);
  pinMode (FWD2,OUTPUT);
  pinMode (RWD2,OUTPUT);
  pinMode (ENB2,OUTPUT);
  myservo.attach(6);
}

void loop(){
  //Крутим вперед первый
  myservo.write(0);
  m1_fwd(200);
  delay(5000);
  m1_stop();

  myservo.write(90);
  m2_fwd(200);
  delay(5000);

 myservo.write(180);
 m2_stop();
 m1_rwd(200);
 delay(5000);
 m1_stop();
 delay(20);

 myservo.write(45);
 m1_rwd(200);
 m2_rwd(200);
 delay(5000);

 myservo.write(175);
 m1_stop();
 m2_stop();
 delay(2000);

}


//подпрограммы управления двигателями

//Первый двигатель вперед
void m1_fwd (byte sp){
  digitalWrite(FWD1,HIGH);
  digitalWrite(RWD1,LOW);
  analogWrite(ENB1,sp);
}

//второй двигатель вперед
void m2_fwd (byte sp){
  digitalWrite(FWD2,HIGH);
  digitalWrite(RWD2,LOW);
  analogWrite(ENB2,sp);
}

//первый двигатель назад
void m1_rwd (byte sp){
  digitalWrite(FWD1,LOW);
  digitalWrite(RWD1,HIGH);
  analogWrite(ENB1,sp);
}

//второй двигатель назад
void m2_rwd (byte sp){
  digitalWrite(FWD2,LOW);
  digitalWrite(RWD2,HIGH);
  analogWrite(ENB2,sp);
}

//первый двигатель СТОП
void m1_stop(){
  digitalWrite(FWD1,LOW);
  digitalWrite(RWD1,LOW);
}

//второй двигатель СТОП
void m2_stop(){
  digitalWrite(FWD2,LOW);
  digitalWrite(RWD2,LOW);
}

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

Код управления шаговым двигателем:

/*
LC Motor Shield v. 1.0 Ghost D. 2013
====================================
для robocraft.ru (Кибервесна 2013)
Тест работы шагового двигателя. Скетч "набросан" на скорую руку :)
Так, что строго не судите.....
*/

byte FWD1=4;
byte RWD1=2;
byte ENB1=9;
byte FWD2=8;
byte RWD2=7;
byte ENB2=10;

int my_deley=3;
void setup(){
  pinMode (FWD1,OUTPUT);
  pinMode (RWD1,OUTPUT);
  pinMode (ENB1,OUTPUT);
  pinMode (FWD2,OUTPUT);
  pinMode (RWD2,OUTPUT);
  pinMode (ENB2,OUTPUT);
}

void loop(){
  for(int i=0;i<30;i++){
 Step_down();
 delay (50);
  }
  delay(2000);

  for(int i=0;i<30;i++){
 Step_up();
 delay (20);
  }

  delay(2000);

}


//Подпрограмма одного "шажка вперед" для шаговика
void Step_up(){
  m1_forward();
 delay(my_deley);
 m1_stop();
 m2_forward();
 delay(my_deley);
 m2_stop();
 m1_rever();
 delay(my_deley);
 m1_stop();
 m2_rever();
 delay(my_deley);
 m2_stop();
}

//Подпрограмма одного "шажка назад" для шаговика
void Step_down(){
  m1_forward();
 delay(my_deley);
 m1_stop();
 m2_rever();
 delay(my_deley);
 m2_stop();
 m1_rever();
 delay(my_deley);
 m1_stop();
 m2_forward();
 delay(my_deley);
 m2_stop();
}


void m1_forward(){
digitalWrite(FWD1,HIGH);
digitalWrite(RWD1,LOW);
analogWrite(ENB1,0);
}

void m1_rever(){
digitalWrite(FWD1,LOW);
digitalWrite(RWD1,HIGH);
analogWrite(ENB1,0);
}

void m2_forward(){
digitalWrite(FWD2,HIGH);
digitalWrite(RWD2,LOW);
analogWrite(ENB2,0);
}

void m2_rever(){
digitalWrite(FWD2,LOW);
digitalWrite(RWD2,HIGH);
analogWrite(ENB2,0);
}

void m1_stop(){
digitalWrite(FWD1,LOW);
digitalWrite(RWD1,LOW);
analogWrite(ENB1,0);
}

void m2_stop(){
digitalWrite(FWD2,LOW);
digitalWrite(RWD2,LOW);
analogWrite(ENB2,0);
}

Ну вот и все. Но есть ложка гов дегтя. При длительном прогоне, очень хорошо нагрелся LM338. Пока не понял, то ли моя сервомашинка "глюкАвая", то ли это дефект установленного стабилизатора, то ли еще что... Интересно, а в L-Motor Shield наблюдаются такие же проблемы? Но, я думаю, что при непродолжительном использовании каналов сервомашинок, все будет хорошо.

Пользуемся на здоровье. Весь материал (фото, даташиты, скетчи, схему и печатную плату) по этой статье можете забирать тут. Если кто-то решится повторить - буду только рад 🙂

P.S. Для реализации использовал следующее ПО и оборудование:
- фотоаппарат Casio (фотал весь процесс)
- моб. телефон (записывал видео)
- утюг (для ЛУТ-а)
- паяльные прибамбасы

- Gimp (редактирование фотографий)
- Splan 7 (рисовал схему)
- Sprintlayout (5 версия) (разводил печатную плату)
- Arduino IDE 1.0.3 (писал скетчи)


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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение