Мотор-редуктор: различия между версиями
Ангелина (обсуждение | вклад) Нет описания правки |
Artecoll (обсуждение | вклад) (У Джека Воробья не было картинки кода) |
||
Строка 45: | Строка 45: | ||
== Пример программы == | == Пример программы == | ||
Рассмотрим программу, которая демонстрирует плавный разгон, торможение и реверс. | Рассмотрим программу, которая демонстрирует плавный разгон, торможение и реверс. | ||
<syntaxhighlight lang="c"> | |||
//выводы управления первым мотором | |||
#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; | |||
} | |||
} | |||
</syntaxhighlight> |
Текущая версия от 14:15, 11 июня 2021
Чтобы привести в движение шасси робота применяют моторы-редукторы. Они способны при небольших размерах обеспечивать достаточную силу тяги для реализации уверенного движения.
Редуктор данного мотора содержит шестерни из прочного пластика. Однако для управления массивными конструкциями использовать его не рекомендуется. Силиконовый хомут не даёт двигателю выпасть из редукторного корпуса, но он может быть отстёгнут вручную. Такой подход позволяет легко заменить двигатель на аналогичный при выходе последнего из строя.
Данный класс моторов с редуктором выпускается 4-х типов:
- Прямой одноосевой мотор-редуктор;
- Прямой двухосевой мотор-редуктор;
- Угловой одноосевой мотор-редуктор;
- Угловой двухосевой мотор-редуктор.
Вне зависимости от внешнего вида, все моторы имеют одинаковые характеристики.
Технические характеристики
Применительно к данным моторам-редукторам, можно выделить следующие технические характеристики:
- Диапазон напряжений питания: 3В – 8В;
- Номинальный ток потребления при напряжении 3,6В: 240 мА;
- Передаточное число редуктора: 1/48;
- Скорость вращения при напряжении 3,6В без нагрузки: 170 об/мин.
- Крутящий момент при напряжении 6В: 800 г/см;
- Диаметр вала: 5.4 мм;
- Габариты (для прямой модификации): 64мм х 20мм х 20мм;
- Масса: 26 грамм.
Подключение к плате Arduino
На рисунке представлена схема включения двух двигателей при использовании модуля L298N и Arduino Nano.
Ниже приведён перечень выводов модуля 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; } }