Здравствуйте Собираю первого робота и столкнулся с проблемой. Купил шасси с двумя моторами и еще один мотор отдельно. Подключил через MotorShield. Питание 5V от Arduino UNO. Скетч: const int M1Pin = 5; const int M2Pin = 6; void setup() { Serial.begin(9600); Serial.setTimeout (100); pinMode(M1Pin, OUTPUT); pinMode(M2Pin, OUTPUT); } byte mspeed; void loop() { if (Serial.available()) { mspeed = Serial.parseInt(); analogWrite(M1Pin, mspeed); analogWrite(M2Pin, mspeed); } } При подаче через serial-порт значений от 0-255 у всех трех моторов разная скорость. Возникло два вопроса: 1) Почему такое может быть? 2) Что делать?
1. Это естественно. Моторы имеют определенный разброс характеристик, по разному разгоняются, по разному останавливаются, по разному едут. 2. Есть три решения этого вопроса: - Оставить на ведущую ось один мотор, а рулить рулевым колесом, присоединенным к серве (можно и к шаговику, но тогда возникает проблема определения нулевого положения при включении). Требует существенной переделки ходовой части. - Составить таблицу скоростей при каждом значении ШИМ и времен разгона и торможения при смене одного значения на другое. Долго, нудно, трудно - Как-то с энкодерами. Как, пока не знаю. Надо считать количество импульсов, определяющих поворот колеса на какой-то угол и, исходя из их разности для левого и правого колес, корректировать скорость каждого колеса (замедлять спешащее, ускорять отстающее). Считается правильным, но работающего примера так и не нашел, а руки сделать самому пока не доходят.
Я так же при создании платформы столкнулся с такой же проблемой, у меня 4 мотора по 2 на одну сторону, при одинаковых значениях на канал платформу вело в сторону, изначально я просто экспериментально определил ту разницу и выставил ее в скетче, платформа стала ехать прямо, но если например одна сторона платформы нагружена ее один фиг начинает слега вести. Решил что лучшая идея это знать скорость вращения двигателей и создать функцию автоматической корректировки скоростей вращения двигателей которая бы запускалась как отдельная опция по команде (при включении платформу например) либо регулярно самостоятельно следила и подстреливала систему в режиме реального времени. Проблема была как узнать скорость вращения, так как у меня точно такие же моторы как у вас на фото. И тут я наткнулся на такие вещи: Диск датчика скорости Датчик скорости (надо сказать видов таких датчиков много, есть двойные сразу на два колеса ну и по виду и креплениям тоже встречал всякие) Собственно это позволяет решить вопрос с получением скорости ращения каждого двигателя а имея такие данные уже можно делать систему автоматической корректировки.
А насколько это рядовая ситуация, что моторы двигаются с таким разбросом? у меня просто такие-же и хочется понять, мутить определение скорости итд, или купить более толковые моторы?
Разброс характеристик моторов - самое обычное и естественное дело. Это не сверхточная механика. А моторы с точными, одинаковыми характеристиками, если такие вообще имеются, будут стоить, скорее всего, очень больших денег.
т.е. получается все сталкиваются с разной скоростью и подсторойка скорости для например, правой/левой стороны робо платформы, это естественный процесс?