Motor Shield (2 канала)

Motor Shield (2 канала) - используется для управления до двух коллекторных моторов постоянного тока или одним биполярным шаговым двигателем.

Видео:


Общие сведения:

Motor Shield построен на базе чипа L298, позволяет использовать любые входы Arduino (по умолчанию D5-D7), а также на нем разведены аналоговые и цифровые выводы, для удобства подключения других модулей, как в Trema Shield. Позволяет управлять, как скоростью движения, так и направлением подключённых двигателей.

Спецификация:

  • Напряжение питания на входе клеммника Vin: 2,5 ... 35 В.
  • Ток потребляемый логической частью: до 36 мА.
  • Общий ток нагрузки на выходах: до 2 А (без ШИМ), при этом чип L298 нагревается выше 60 °C.
  • Частота коммутаций: до 40 кГц.
  • Задержка между сигналами на входе и выходе: до 3 мкс.
  • Рабочая температура: -25 … 130 °C.
  • Температура хранения: -40 ... 150 °C.

Подключение:

Motor Shield устанавливается на Arduino UNO и управляется через 4 входа: H1, E1, E2, H2, они соединены перемычками с цифровыми выводами: D5 - D7. Если требуется использовать другие выводы Arduino, то нужно снять перемычку и соединить освободившийся вход с нужным выводом Arduino.
Моторы постоянного тока подключаются следующим образом: первый, к клеммнику M1 (управляется через входы H1 и E1), второй, к клеммнику M2 (управляется через входы H2 и E2). Можно подключить только один мотор, к любому из клеммников.
Биполярный шаговый двигатель подключается следующим образом: выводы одной обмотки к клеммнику M1, выводы второй обмотки к клеммнику M2. (управляется через входы H1 и H2, а на входы E1 и E2 требуется подать уровень логической «1»).

Схема подключения моторов к MotorShield на базе чипа L298

Питание:

Выходы Motor Shield работают только от внешнего источника питания 2,5 - 35 В, который должен подключаться к клеммнику питания Vin.
Рядом с клеммником питания Vin расположены три контакта с перемычкой.

  • Общее питание: если перемычка замыкает контакты расположенные ближе к клеммнику «Общ. Пит.», то питание с Motor Shield подаётся на вход Arduino «Vin» (общее питание берется с Motor Shield). Не требуется отдельного питания Arduino.
    В данном режиме, напряжение на входе клеммника Vin Motor Shield, не должно превышать 12 В.
  • Раздельное питание: Если перемычка расположена на контактах дальше от клеммника, или отсутствует, то питание должно подаваться и на Arduino и на Motor Shield (раздельное питание).
    В данном режиме, напряжение на входе клеммника Vin Motor Shield, может достигать 35 В.

Назначение выводов motorShield на базе чипа L298

Работа с Motor Shield:

Управление моторами постоянного тока: осуществляется при помощи функций: digitalWrite() и analogWrite().

  • Управление первым мотором постоянного тока M1, осуществляется через вход H1 (направление) и E1 (скорость).
  • Управление вторым мотором постоянного тока M2, осуществляется через вход H2 (направление) и E2 (скорость).
  • Направление устанавливается подачей логического уровня LOW или HIGH.
  • Скорость устанавливается подачей сигнала ШИМ, коэффициент заполнения которого, прямо пропорционален скорости.

Управление биполярным шаговым двигателем: осуществляется при помощи стандартной библиотеки «Stepper».

  • Motor Shield использует два вывода, H1 и H2, для управления шаговым двигателем.
  • На выводы, E1 и E2, требуется подать уровень логической «1» (программно или аппаратно).

Примеры:

Управление моторами постоянного тока:
const uint8_t pinH1   = 7;                                   // Создаём константу указывая номер вывода H1 MotorShield (он управляет направлением 1 мотора)
const uint8_t pinE1   = 6;                                   // Создаём константу указывая номер вывода E1 MotorShield (он управляет скоростью    1 мотора)
const uint8_t pinE2   = 5;                                   // Создаём константу указывая номер вывода E2 MotorShield (он управляет скоростью    2 мотора)
const uint8_t pinH2   = 4;                                   // Создаём константу указывая номер вывода H2 MotorShield (он управляет направлением 2 мотора)
      uint8_t mSpeed  = 0;                                   // Создаём переменную для хранения скорости    моторов
      bool    mDirect = HIGH;                                // Создаём переменную для хранения направления моторов
void setup(){
  pinMode(pinH1, OUTPUT); digitalWrite(pinH1, LOW);          // Конфигурируем вывод pinH1 как выход и устанавливаем на нём уровень логического «0»
  pinMode(pinE1, OUTPUT); digitalWrite(pinE1, LOW);          // Конфигурируем вывод pinE1 как выход и устанавливаем на нём уровень логического «0»
  pinMode(pinE2, OUTPUT); digitalWrite(pinE2, LOW);          // Конфигурируем вывод pinE2 как выход и устанавливаем на нём уровень логического «0»
  pinMode(pinH2, OUTPUT); digitalWrite(pinH2, LOW);          // Конфигурируем вывод pinH2 как выход и устанавливаем на нём уровень логического «0»
}
void loop(){
/*M1*/             digitalWrite(pinH1, mDirect );            // Устанавливаем направление
  while(mSpeed<255){analogWrite(pinE1, mSpeed++); delay(5);} // Увеличиваем скорость
  while(mSpeed>  0){analogWrite(pinE1, mSpeed--); delay(5);} // Уменьшаем скорость
/*M2*/             digitalWrite(pinH2, mDirect );            // Устанавливаем направление
  while(mSpeed<255){analogWrite(pinE2, mSpeed++); delay(5);} // Увеличиваем скорость
  while(mSpeed>  0){analogWrite(pinE2, mSpeed--); delay(5);} // Уменьшаем скорость
  mDirect=!mDirect;                                          // Меняем направление
}

В этом примере, два мотора, поочерёдно, плавно увеличивают и уменьшают свою скорость, после чего меняют направление.

Управление шаговым двигателем:
#include <Stepper.h>                                         // Подключаем библиотеку, для работы с шаговыми двигателями
const uint8_t pinH1    = 7;                                  // Создаём константу указывая номер вывода H1 MotorShield
const uint8_t pinE1    = 6;                                  // Создаём константу указывая номер вывода E1 MotorShield
const uint8_t pinE2    = 5;                                  // Создаём константу указывая номер вывода E2 MotorShield
const uint8_t pinH2    = 4;                                  // Создаём константу указывая номер вывода H2 MotorShield
Stepper       motor(200, pinH1, pinH2);                      // Создаём объект    для работы с библиотекой Stepper
                                                             // Указывая количество шагов в полном обороте двигателя (200) и номера выводов которыми он управляется (pinH1 и pinH2)
void setup(){
  pinMode(pinE1, OUTPUT); digitalWrite(pinE1, HIGH);         // Конфигурируем вывод pinE1 как выход и устанавливаем на нём уровень логической «1»
  pinMode(pinE2, OUTPUT); digitalWrite(pinE2, HIGH);         // Конфигурируем вывод pinE2 как выход и устанавливаем на нём уровень логической «1»
  motor.setSpeed(150);                                       // Указываем скорость вращения двигателя (150 об/мин)
}
void loop(){
  motor.step( 200); delay(1000);                             // Выполняем поворот ротора на 200 шагов, в одну   сторону, после чего, ждём 1 секунду
  motor.step(-200); delay(1000);                             // Выполняем поворот ротора на 200 шагов, в другую сторону, после чего, ждём 1 секунду
}

В этом примере, шаговый двигатель делает полный оборот, в одну и другую сторону, с интервалом в 1 секунду.

Применение:

Ссылки:

Обсуждение

Присоединяйся

На главную