Arduino Motor Shield

Arduino MotorShield вигляд спереду
Arduino MotorShield вигляд ззаду

Загальні відомості

Плата розширення Arduino Motor побудована на базі мікросхеми L298, що представляє собою подвійний мостовий драйвер для управління різним індуктивним навантаженням, таким, як реле, соленоїди, крокові двигуни і двигуни постійного струму. Плата розширення дозволяє Arduino управляти двома двигунами постійного струму, контролюючи швидкість і напрямок обертання кожного з них незалежно один від одного. Серед інших можливостей пристрою можна виділити можливість вимірювання струму, споживаного кожним двигуном. Плата розширення Arduino Motor сумісна з пристроями TinkerKit, що дозволяє швидко збирати проекти, просто підключивши готові модулі TinkerKit до плати.

Характеристики

  • Робоча напруга від до 12В
  • Драйвер двигуна L298P, дозволяє управляти 2 двигунами постійного струму або 1 кроковим двигуном
  • Максимальний вихідний струм на кожен канал або максимум (за умови використання зовнішнього джерела живлення)
  • Вимірювання струму 1.65В / А

Живлення

Мікросхема L298, розташована на платі розширення, має два виводи для живлення - один з них призначений для живлення цифрових ланцюгів, інший - для живлення двигунів. Струм, споживаний двигуном, часто перевищує максимальний вихідний струм USB, тому для живлення плати розширення необхідно використовувати тільки зовнішні джерела живлення.

В якості зовнішнього джерела живлення (не USB) може використовуватися мережевий AC / DC-адаптер або акумулятор. Штекер адаптера необхідно вставити у відповідний роз'єм живлення на основній платі Arduino, до якої підключена плата розширення, або приєднати дроти від джерела живлення до клем Vin і GND, дотримуючись необхідної полярності.

Для запобігання виходу з ладу Arduino, через який живиться плата розширення, рекомендується використовувати зовнішнє джерело живлення, вихідна напруга якого лежить в межах від 7 до 12В. У тому випадку, якщо для роботи підключеного двигуна потрібна напруга більше , рекомендується організувати роздільне живлення Arduino і плати розширення. Для цього достатньо розімкнути перемичку "Vin Connect", розташовану на звороті друкованої плати. Максимальна напруга Vin, яку можна подавати на гвинтові клемники, становить 18В.

Нижче перераховані виводи живлення, передбачені на гвинтовому клемнику:

  • Vin. Напруга Vin використовується для живлення двигунів підключених до плати розширення. Напруга, що надходить на цей вивід від зовнішнього джерела живлення, також використовується для живлення Arduino, до якого підключена плата розширення. Для того, щоб дане джерело використовувалося тільки для живлення двигунів, необхідно розімкнути перемичку "Vin Connect".
  • Gnd. Максимальний вихідний струм, який здатна забезпечити плата розширення, становить (по на кожен канал).

Входи і виходи

Для управління двигунами в Arduino Motor передбачено два незалежні канали, A і B, кожен з яких пов'язаний з 4 виводами Arduino. Відповідно, для управління платою розширення всього задіяно 8 виводів. Кожен канал можна використовувати окремо (наприклад, для управління двома двигунами постійного струму), або функціонально об'єднати їх в один канал для управління кроковим двигуном. У наступній таблиці перераховані виводи, які відносяться до кожного каналу Arduino Motor:

Функція Виводи каналу A Виводи каналу В
Напрямок обертання D12 D13
Швидкість обертання D3 D11
Зупинка двигуна D9 D8
Вимірювання струму A0 A1

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

Нижче перераховані додаткові роз'єми, присутні на платі розширення:

  • Гвинтовий клемник для підключення двигунів і джерела живлення для них.
  • 2 білих роз'єми TinkerKit - два аналогових входи, з'єднані з лініями A2 і A3.
  • 2 помаранчевих роз'єми TinkerKit - два аналогових виходи, з'єднані з ШІМ-виходами D5 і D6.
  • 2 білих роз'єми TinkerKit (чотирьохконтактних) - інтерфейс TWI, один роз'єм використовується в якості входу, інший - в якості виходу.

Підключення двигунів

Колекторний двигун постійного струму.

Arduino Motor дозволяє управляти двома колекторними двигунами постійного струму. Для підключення кожного двигуна до каналу A або B необхідно під'єднати його провода до клем (+) і (-) відповідного каналу. При правильному підключенні пристрій дозволяє контролювати напрям і швидкість обертання кожного двигуна. Для зміни напрямку обертання досить подати високий (HIGH) або низький (LOW) рівень сигналу на виводи DIR A або DIR B. Зміна швидкості обертання двигунів здійснюється шляхом зміни коефіцієнта заповнення ШІМ-сигналу на виводах PWM A і PWM B. Для різкої зупинки кожного двигуна необхідно подати високий рівень сигналу (HIGH) на виводи Brake A і Brake B . Для повільної зупинки - досить просто припинити подачу живлення. Щоб дізнатися величину постійного струму, споживаного кожним двигуном, необхідно поміряти напругу на виводах SNS0 і SNS1. Для цього можна застосувати функцію analogRead (), вказавши їй як параметр аналоговий вхід A0 або A1. Напруга на цих виводах буде пропорційна струму, що протікає через кожен канал плати розширення, і обмежена величиною в 3.3В, яка відповідає максимальному струму в .

Фізичні характеристики

Максимальна довжина і ширина друкованої плати Arduino Motor становить 6.9 см і 5.4 см відповідно. Чотири кріпильних отвори дозволяють закріпити плату в корпусі або на якій-небудь поверхні. Зверніть увагу, що відстань між цифровими виводами 7 і 8 не кратна традиційним 2.54 мм і становить 4 мм.

Схема

Arduino MotorShield Rev3-schematic-1.jpg

Приклади підключення

Крок 1: Встановлення в основну плату

FQJBZSVH05NKJXO.LARGEPidklycenna.jpg

Крок 2. Особливості плати

Arduino Motor має 2 канали, що дозволяє керувати двома двигунами постійного струму або одним кроковим двигуном.

Крок 3: Програма

FBXR4WXH05NSWPF.LARGEcomp.jpg

Підключіть Arduino до USB-порту комп'ютера та відкрийте середовище розробки Arduino. Щоб зробити що-небудь, потрібно ініціалізувати моторний канал, перемикаючи три параметри:

  • Спочатку потрібно встановити напрямок обертання двигуна (полярність джерела живлення), встановивши його як HIGH, або LOW.
  • Потім потрібно роз'єднати гальмівний штифт для моторного каналу, встановивши його на LOW.
  • Нарешті, щоб двигун почав рухатися, потрібно встановити швидкість, надіславши команду PWM (analogWrite) на відповідний штифт.

Якщо ви не зробите всі ці три дії, двигун не включиться.

Крок 4: Підключення одного двигуна

FQB2TFLH05NKJYQ.LARGEonedvigun.jpg

Щоб керувати двигуном, спочатку підключіть позитивний (червоний) провід двигуна до контакту каналу A + та (чорний) провід двигуна до каналу А - . Зовнішній блок живлення не завжди є необхідним, але він різко покращує продуктивність двигуна. Рекомендується завжди використовувати його. Для підключення зовнішнього джерела живлення підключіть позитивний (червоний) провід від джерела живлення до термінала "Vin" та провід (чорний) до термінала "GND". Нарешті, завантажте код для керування двигуном до Arduino.

Ось код для керування одним двигуном:

void setup() {

 //Setup Channel A
 pinMode(12, OUTPUT); //Initiates Motor Channel A pin
 pinMode(9, OUTPUT); //Initiates Brake Channel A pin

} void loop(){

 //forward @ full speed
 digitalWrite(12, HIGH); //Establishes forward direction of Channel A
 digitalWrite(9, LOW);   //Disengage the Brake for Channel A
 analogWrite(3, 255);   //Spins the motor on Channel A at full speed
 delay(3000);
 digitalWrite(9, HIGH); //Eengage the Brake for Channel A
 delay(1000);
 //backward @ half speed
 digitalWrite(12, LOW); //Establishes backward direction of Channel A
 digitalWrite(9, LOW);   //Disengage the Brake for Channel A
 analogWrite(3, 123);   //Spins the motor on Channel A at half speed
 delay(3000);
 digitalWrite(9, HIGH); //Eengage the Brake for Channel A
 delay(1000);

}

Крок 5: Підключення двох двигунів

F2BSERSH05O285W.LARGEtwodvigune.jpg

Взаємодія двома двигунами майже така ж, як взаємодія одним двигуном. Просто підключіть двигун до каналу B. Єдина різниця за кодом полягає в тому, що вам потрібно задіяти другий канал для керування другим двигуном.

Ось код, який дає змогу керувати двома двигунами:

void setup() {

 //Setup Channel A
 pinMode(12, OUTPUT); //Initiates Motor Channel A pin
 pinMode(9, OUTPUT); //Initiates Brake Channel A pin
 //Setup Channel B
 pinMode(13, OUTPUT); //Initiates Motor Channel A pin
 pinMode(8, OUTPUT);  //Initiates Brake Channel A pin
 }

void loop(){

 //Motor A forward @ full speed
 digitalWrite(12, HIGH); //Establishes forward direction of Channel A
 digitalWrite(9, LOW);   //Disengage the Brake for Channel A
 analogWrite(3, 255);   //Spins the motor on Channel A at full speed
 //Motor B backward @ half speed
 digitalWrite(13, LOW);  //Establishes backward direction of Channel B
 digitalWrite(8, LOW);   //Disengage the Brake for Channel B
 analogWrite(11, 123);    //Spins the motor on Channel B at half speed
 delay(3000);
 digitalWrite(9, HIGH);  //Engage the Brake for Channel A
 digitalWrite(9, HIGH);  //Engage the Brake for Channel B
 delay(1000);
 //Motor A forward @ full speed
 digitalWrite(12, LOW);  //Establishes backward direction of Channel A
 digitalWrite(9, LOW);   //Disengage the Brake for Channel A
 analogWrite(3, 123);    //Spins the motor on Channel A at half speed
 //Motor B forward @ full speed
 digitalWrite(13, HIGH); //Establishes forward direction of Channel B
 digitalWrite(8, LOW);   //Disengage the Brake for Channel B
 analogWrite(11, 255);   //Spins the motor on Channel B at full speed
 delay(3000);
 digitalWrite(9, HIGH);  //Engage the Brake for Channel A
 digitalWrite(9, HIGH);  //Engage the Brake for Channel B
 delay(1000);
 }

Крок 6: Підключення крокового двигуна

F0E7ZDOH05NOPAH.LARGEkrokovui.jpg

Є цілий ряд різних типів крокових двигунів , але в даному прикладі ми будемо конкретно звертатися до біполярних крокових двигунів. Біполярні крокові двигуни зазвичай мають 4 штифти, які відповідають двом котушкам. Щоб скористатися кроковим двигуном, вам потрібно ввімкнути ці дві котушки у фазу з змінною полярністю. Щоб з'ясувати, які дві шпильки складають одну катушку, вставте світлодіод у будь-які дві шпильки на гнізді та оберніть вал двигуна. Якщо загориться світлодіод, ви знайшли одну котушку. Інші дві шпильки повинні скласти іншу котушку. Щоб змінити напрям біполярного крокового двигуна, просто поміняйте полярність другої котушки.

Ось код, який дає змогу зробити кроки в одному напрямку:

int delaylegnth = 30; void setup() {

 //establish motor direction toggle pins
 pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
 pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
 //establish motor brake pins
 pinMode(9, OUTPUT); //brake (disable) CH A
 pinMode(8, OUTPUT); //brake (disable) CH B

} void loop(){

 digitalWrite(9, LOW);  //ENABLE CH A
 digitalWrite(8, HIGH); //DISABLE CH B
 digitalWrite(12, HIGH);   //Sets direction of CH A
 analogWrite(3, 255);   //Moves CH A
 delay(delaylegnth);
 digitalWrite(9, HIGH);  //DISABLE CH A
 digitalWrite(8, LOW); //ENABLE CH B
 digitalWrite(13, LOW);   //Sets direction of CH B
 analogWrite(11, 255);   //Moves CH B
 delay(delaylegnth);
 digitalWrite(9, LOW);  //ENABLE CH A
 digitalWrite(8, HIGH); //DISABLE CH B
 digitalWrite(12, LOW);   //Sets direction of CH A
 analogWrite(3, 255);   //Moves CH A
 delay(delaylegnth);
 digitalWrite(9, HIGH);  //DISABLE CH A
 digitalWrite(8, LOW); //ENABLE CH B
 digitalWrite(13, HIGH);   //Sets direction of CH B
 analogWrite(11, 255);   //Moves CH B
 delay(delaylegnth);

}

Ось код, для обертання крокового двигуна у зворотному напрямку:

int delaylegnth = 30; void setup() {

 //establish motor direction toggle pins
 pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
 pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
 //establish motor brake pins
 pinMode(9, OUTPUT); //brake (disable) CH A
 pinMode(8, OUTPUT); //brake (disable) CH B

} void loop(){

 digitalWrite(9, LOW);  //ENABLE CH A
 digitalWrite(8, HIGH); //DISABLE CH B
 digitalWrite(12, HIGH);   //Sets direction of CH A
 analogWrite(3, 255);   //Moves CH A
 delay(delaylegnth);
 digitalWrite(9, HIGH);  //DISABLE CH A
 digitalWrite(8, LOW); //ENABLE CH B
 digitalWrite(13, HIGH);   //Sets direction of CH B
 analogWrite(11, 255);   //Moves CH B
 delay(delaylegnth);
 digitalWrite(9, LOW);  //ENABLE CH A
 digitalWrite(8, HIGH); //DISABLE CH B
 digitalWrite(12, LOW);   //Sets direction of CH A
 analogWrite(3, 255);   //Moves CH A
 delay(delaylegnth);
 digitalWrite(9, HIGH);  //DISABLE CH A
 digitalWrite(8, LOW); //ENABLE CH B
 digitalWrite(13, LOW);   //Sets direction of CH B
 analogWrite(11, 255);   //Moves CH B
 delay(delaylegnth);

}

Перелік літератури


1. https://www.arduino.cc/
2. https://www.allaboutcircuits.com/projects/arduino-motor-shield-tutorial/
3. http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/
4. https://doc.arduino.ua/ru/hardware/MotorShield