Руководство про работе с платой расширения Arduino Motor Shield

Добавлено 24 февраля 2017 в 16:30

Руководство по работе с платой расширения Arduino Motor Shield с простым проектом.

Обзор

Arduino Motor Shield – это плата расширения, которая позволяет управлять различными нагрузками, которыми обычные выводы Arduino управлять не могут. Плата расширения управления электродвигателями имеет довольно много функций, таких как измерение тока и способность управлять одним шаговым двигателем. В основе этой платы расширения лежит двойной полный мостовой драйвер L298P, который может с токами до 3 ампер в течение очень короткого промежутка времени или до 2 ампер постоянно на канал. Для всех разделов статьи доступны подробные примеры.

Плата расширения Arduino Motor Shield
Плата расширения Arduino Motor Shield

Требования к источнику питания

Для электродвигателей, подключенных к плате расширения, необходим достаточный по мощности источник питания. При использовании USB соединения ток часто ограничен 500 мА или 1 ампером. Многие двигатели потребляют ток, больший, чем может обеспечить USB источник питания. Для снижения риска возможного повреждения USB порта необходимо использовать внешний источник питания.

Установка

Чтобы начать использовать данную плату расширения, необходимо сначала настроить несколько выводов, используемых платой. Этот код настройки обычно помещается в функцию setup(). Чтобы использовать все функциональные возможности данной платы расширения, выводы 8, 9, 12 и 13 платы Arduino необходимо настроить, как выходные выводы. Это можно выполнить с помощью следующего кода:

pinMode(8,OUTPUT);       // Настройка вывода тормоза канала A
pinMode(9,OUTPUT);       // Настройка вывода тормоза канала B
pinMode(12,OUTPUT);      // Настройка вывода направления канала A
pinMode(13,OUTPUT);      // Настройка вывода направления канала B

Управление направлением вращения

Для управления направлением вращения электродвигателя используются выводы 12 (канал A) и 13 (канал B). Для вращения двигателя вперед* на эти выводы необходимо вывести логическую единицу. Для того, чтобы двигатели начали вращаться в обратном направлении, на эти выводы может быть подан логический ноль.

Важное замечание: быстрое изменение направления вращения может привести к неожиданным результатам. С точки зрения механики, быстрый переход с прямого направления на обратное может повредить редуктор. С точки зрения электричества, быстрый переход может вызвать большие скачки тока и напряжения. Для решения этих проблем направление вращения двигателя с одного на другое необходимо менять с небольшой паузой между ними. Пример кода для такого переключения показан ниже.

* Так как «прямое» направление вращения двигателя зависит от конкретного приложения, в данном руководстве «прямое» направление будет соответствовать наличию положительного напряжения на винтовом зажиме «+» на плате расширения.

void setup() {
  pinMode(12,OUTPUT);     // Настройка вывода направления канала A
}

void loop() {
  
  analogWrite(3, 0);      // Скорость канала A 0%
  delay(100);             // Безопасная задержка 100 мс
  digitalWrite(12, HIGH); // Прямое направление канала A
  analogWrite(3, 255);    // Скорость канала A 100%
  delay(1000);            // Задержка 1 секунда
  
  analogWrite(3, 0);      // Скорость канала A 0%
  delay(100);             // Безопасная задержка 100 мс
  digitalWrite(12, LOW);  // Обратное направление канала A
  analogWrite(3, 255);    // Скорость канала A 100%
  delay(1000);
  
}

Управление скоростью

Для управления скорость электродвигателей выводы 3 (канал A) и 11 (канал B) могут использовать ШИМ сигналы. Чтобы использовать функцию ШИМ платы Arduino, необходимо вызвать функцию analogWrite. При вызове данной функции необходимо задать вывод и скорость в диапазоне 0–255. В примере выше показан код управления скоростью электродвигателя.

Торможение

Драйвер электродвигателя на плате расширения Arduino Motor Shield обладает возможностью торможения двигателя. Торможение работает путем закорачивания между собой выводов электродвигателя. Торможение управляется с помощью выводов 8 (канал A) и 9 (канал B).

Измерение тока

Еще одной особенностью платы расширения Arduino Motor Shield является возможность определения величины тока, который потребляется электродвигателем (или любой индуктивной нагрузкой). Измерение тока может быть полезно в приложениях робототехники, таких как контроль тяги и определения того, что робот толкает объект. Для измерения тока используются выводы A0 (канал A) и A1 (канал B). Плата расширения управления двигателями при достижении максимального тока в канале (2 ампера) выдает на вывод измерения тока 3,3 вольта.

После простых вычислений можно определить, что каждая единица будет соответствовать 2,96 мА. Так, например, если функция analogRead(A0) вернет значение 121, то двигатель (или нагрузка) потребляет ток 0,36 ампера. Ниже приведен пример кода.

void setup() {
  Serial.begin(19200);    // Настройка последовательного порта 
  
  pinMode(12,OUTPUT);     // Настройка вывода направления канала A
  digitalWrite(12, HIGH); // Направление канала A – прямое
  analogWrite(3, 255);    // Скорость канала A – 100%
  delay(1000);            // Задержка 1 секунда
}

void loop() {
  float current = 0.00296*analogRead(A0);  // Рассчитать ток 
  Serial.print(current);    // Напечатать значение тока в терминал
  Serial.println(" A");     // добавить в терминал единицу измерения "A"
  delay(500);  // Задержка полсекунды между печатью в терминал
}

Простой проект – управление скоростью и направлением вращения электродвигателя с помощью потенциометра

Используя плату расширения Arduino Motor Shield и потенциометр, можно управлять скоростью и направлением вращения небольшого электродвигателя.

Необходимые комплектующие

Необходимые комплектующие
Необходимые комплектующие
  • Arduino UNO (или аналог);
  • плата расширения Arduino Motor Shield;
  • небольшой двигатель постоянного тока;
  • потенциометр (я использую однооборотный на 5 кОм);
  • батарейный отсек 4 x AA (или аналогичный до 12 вольт) с аккумуляторами.

Этапы сборки

  1. Установка платы расширения управления электродвигателями на плату Arduino.
    Установка платы расширения управления электродвигателями на плату Arduino
  2. Подключение потенциометра. Средний вывод потенциометра подключается к выводу A2 платы Arduino, а остальные к выводам Vin (предполагается, что вы отключили питание через USB) и GND.
    Подключение потенциометра
  3. Подключение электродвигателя. В данном проекте используется канал A.
    Подключение электродвигателя
  4. Подключение батарейного отсека. Перепроверьте полярность с помощью мультиметра!
    Подключение батарейного отсека
  5. Ниже приведен код проекта. Используя Arduino IDE, загрузите код на свою плату Arduino. Для загрузки кода в плату Arduino нажмите круглую кнопку со стрелкой вправо.
    void setup() {  
      pinMode(12,OUTPUT);     // Настройка вывода направления канала A
    }
    
    void loop() {
      
      if (analogRead(A2) > 512)
      {
        digitalWrite(12, HIGH); // Направление канала A – прямое
        analogWrite(3, 0.5*analogRead(A2)-255);  // Скорость канала A 
      }
      
      if(analogRead(A2) <= 512) 
      {
        digitalWrite(12, LOW); // Направление канала A – обратное
        analogWrite(3, 255-0.5*analogRead(A2));  // Скорость канала A   
      }
      
    }
  6. Всё собрано! Покрутите потенциометр, чтобы подстроить скорость и направление вращения электродвигателя.
    управление скоростью и направлением вращения электродвигателя с помощью потенциометра

Теперь у вас есть отличный способ управления направлением вращения и скоростью электродвигателя с помощью платы Arduino. Это позволит значительно улучшить ваш следующий проект в робототехнике. Надеюсь, статья оказалась полезной! Оставляйте комментарии!

Теги

ArduinoArduino ShieldДвигательДвигатель постоянного токаДрайвер двигателяКоллекторный двигатель постоянного токаПлата расширенияРобототехникаЭлектродвигатель

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.