Каталог
|
Monster Moto Shield2016-03-25 Все статьи →Петр Мой вариант подключения Monster Moto Shield к ардуино Mega 2560 и управление высокотоковыми моторами через джойстики.
Соединяем такие пины шилда и контроллера:
7 8 5
4 9 6
И понятное дело соединяем пины питания. Кроме того на шилд подаем отдельное питание – для высокотоковых моторов.
Первая строка (три пина) будет управлять мотором А шилда, а вторая – мотором Б шилда.
Первые два пина характеризируют полярность подключения мотора и дают возможность управлять направлением вращения мотора (это делается меняя значения LOW и HIGH),
а третий пин через ШИМ управляет скоростью вращения мотора.
Для запуска мотора надо на первые два пина подать разные логические значения LOW и HIGH, а для смены направления вращения надо их поменять местами на HIGH и LOW. При подаче одинаковых значений мотор остановится.
Значения ШИМ лежат в пределах от 0 до 255.
Еще подключим два джойстика для управления моторами по отдельности. На видео упрощенный вариант управления двумя моторами (они будут синхронными) одним джойстиком:
Подключаем пины питания джойстиков и один пин оси, например по оси х, соединяем с аналоговым входом ардуино – пин 3 и пин 4 от каждого джойстика.
В эксперименте была замечена некорректная работа моторов в своих средних оборотах (были перебои) – оказалось что частота замыкания ламелей мотора совпадала с частотой ШИМ (моторы колекторные), чтобы этого избежать пришлось увеличить частоту ШИМ.
Дальше представлю скетч, в котором комментарии дополнительно раскрывают все нюансы программы:
#define pwmmax 255 //значение максимальной мощности моторов - для возможности ее уменьшения програмно
int y = 0; //значение шим одного мотора
int x = 0; //значение шим другого мотора
void setup() {
//TCCR0B = TCCR0B & 0b11111000 | 0x01;
//TCCR2B = TCCR2B & 0b11111000 | 0x01;
//TCCR1B = TCCR1B & 0b11111000 | 0x01;
TCCR3B = TCCR1B & 0b11111000 | 0x01; //увеличиваем частоту ШИМ для наших управляющих пинов
TCCR4B = TCCR1B & 0b11111000 | 0x01;
pinMode(4, OUTPUT); //все пины устанавливаем как выход
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(4, LOW); //все пины устанавливаем на логический ноль - моторы стоят
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void loop() {
int yVal = analogRead(4); //читаем значения с джойстиков
int xVal = analogRead(3);
if (yVal < 1023 && yVal > 524) //условие когда мы увеличиваем скорость мотора вперед для одного мотора
y = map (yVal,524,1023,0,pwmmax); //переводим диапазон значений джойстика в диапазон значений шим
digitalWrite(8, LOW); //вращение вперед
digitalWrite(7, HIGH); //вращение вперед
analogWrite(5, y); //включаем мотор на скорость у в выбранном направлении
if (xVal < 1023 && xVal > 524) //условие когда мы увеличиваем скорость мотора вперед для другого мотора
x = map (xVal,524,1023,0,pwmmax);
digitalWrite(9, HIGH);
digitalWrite(4, LOW); //вращение вперед
analogWrite(6, x);
if (yVal < 500 && yVal > 0) //условие когда мы увеличиваем скорость мотора назад для одного мотора
y = map (yVal,500,0,0,pwmmax);
digitalWrite(7, LOW);
digitalWrite(8, HIGH); //вращение назад
analogWrite(5, y);
if (xVal < 500 && xVal > 0) //условие когда мы увеличиваем скорость мотора назад для другого мотора
x = map (xVal,500,0,0,pwmmax);
digitalWrite(4, HIGH);
digitalWrite(9, LOW); //вращение назад
analogWrite(6, x);
}
На все дополтительные вопросы отвечу в комментариях под видео.
Решил предоставить вам видео материал по подключению и логике работы Monster Moto Shield в моем исполнении, думаю это будет полезно другим любителям ардуино.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Павел
27.11.2020 12:49:50
Не совсем понятна схема подключения. Можно разрисовать схематически? И еще, возможно ли дополнительными резисторами ограничивать скорость вращения мотора?Если можно, ответ на p.veselkov@gmail.com
|