Мотор-редуктор

Материал из me-robotics wiki
Мотор постоянного тока с редуктором 1:48

Чтобы привести в движение шасси робота применяют моторы-редукторы. Они способны при небольших размерах обеспечивать достаточную силу тяги для реализации уверенного движения.

Редуктор данного мотора содержит шестерни из прочного пластика. Однако для управления массивными конструкциями использовать его не рекомендуется. Силиконовый хомут не даёт двигателю выпасть из редукторного корпуса, но он может быть отстёгнут вручную. Такой подход позволяет легко заменить двигатель на аналогичный при выходе последнего из строя.

Данный класс моторов с редуктором выпускается 4-х типов:

  • Прямой одноосевой мотор-редуктор;
  • Прямой двухосевой мотор-редуктор;
  • Угловой одноосевой мотор-редуктор;
  • Угловой двухосевой мотор-редуктор.

Raznovidnosti motorov reduktorom.jpg

Вне зависимости от внешнего вида, все моторы имеют одинаковые характеристики.

Технические характеристики

Применительно к данным моторам-редукторам, можно выделить следующие технические характеристики:

  • Диапазон напряжений питания: 3В – 8В;
  • Номинальный ток потребления при напряжении 3,6В: 240 мА;
  • Передаточное число редуктора: 1/48;
  • Скорость вращения при напряжении 3,6В без нагрузки: 170 об/мин.
  • Крутящий момент при напряжении 6В: 800 г/см;
  • Диаметр вала: 5.4 мм;
  • Габариты (для прямой модификации): 64мм х 20мм х 20мм;
  • Масса: 26 грамм.

Подключение к плате Arduino

На рисунке представлена схема включения двух двигателей при использовании модуля L298N и Arduino Nano. Obzor-drayvera-motora-na-l298n-6.jpg


Ниже приведён перечень выводов модуля L298N с кратким описанием каждого из них:

  • IN1, IN2 – эти контакты предназначены для управления Мотором №1 (А). В зависимости от логических уровней, установленных на этих контактах, двигатель будет вращаться в ту или иную сторону. Для получения вращения, логические уровни на этих контактах должны быть противоположны друг другу. Например: IN1=1, IN2=0 → двигатель вращается по часовой стрелке; IN1=0, IN2=1 → двигатель вращается против часовой стрелки.
  • IN2, IN3 – функционал контактов аналогичен IN1 и IN2, но только для Мотора №2 (В).
  • ENA – логическая «1» на этом выводе разрешает вращение Мотора №1 (А). Также на этот контакт можно подавать ШИМ-сигнал, что позволит управлять скоростью вращения двигателя.
  • ENB – функционал контакта аналогичен ENA, но только для Мотора №2 (В).
  • OUT1, OUT2 – колодка для подключения Мотора №1 (А).
  • OUT3, OUT4 – колодка для подключения Мотора №2 (В).

Драйвер L298N и Arduino Nano питаются от напряжения 7В. Этого достаточно, для того чтобы крутить два мотор-редуктора. Для возможности регулировки скорости выводы ENA и ENB модуля L298N подключены к пинам Arduino, которые способны генерировать ШИМ-сигнал.

Пример программы

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

//выводы управления первым мотором
#define PIN_IN1 8
#define PIN_IN2 7
#define PIN_ENA 9

//выводы управления вторым мотором
#define PIN_IN3 6
#define PIN_IN4 5
#define PIN_ENB 3

//переменная длу регулировки скорости вращения моторов
uint8_t SPEED = 0;

//переменная общего состояния системы
uint8_t state = 0;

void setup() {
  //все пины на выход
  pinMode(PIN_IN1, OUTPUT);
  pinMode(PIN_IN2, OUTPUT);
  pinMode(PIN_ENA, OUTPUT);
  pinMode(PIN_IN3, OUTPUT);
  pinMode(PIN_IN4, OUTPUT);
  pinMode(PIN_ENB, OUTPUT);
}

void loop() {
  analogWrite(PIN_ENA, SPEED);
  analogWrite(PIN_ENB, SPEED);
  
  //вращение моторов в одну сторону с постепенным наращиванием скорости
  if (state == 0){
    SPEED += 17;
    if (SPEED == 255) state = 1;
    digitalWrite(PIN_IN1, HIGH);
    digitalWrite(PIN_IN2, LOW);
    digitalWrite(PIN_IN3, HIGH);
    digitalWrite(PIN_IN4, LOW);
    delay(500);
    }

  //вращение моторов на максимальной скорости 5 секунд
  else if (state == 1){
    delay(5000);
    state = 2;
    }

  //вращение моторов в противоположную сторону с постепенным уменьшением скорости
  else if (state == 2){
    SPEED -= 17;
    if (SPEED == 0) state = 3;
    digitalWrite(PIN_IN1, LOW);
    digitalWrite(PIN_IN2, HIGH);
    digitalWrite(PIN_IN3, LOW);
    digitalWrite(PIN_IN4, HIGH);
    delay(500);
    }

  //остановка моторов на 5 секунд
  else if (state == 3){
    delay(5000);
    state = 0;
    }
  }