3 одинаковые мотора и разная скорость

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Sergey.di, 27 авг 2014.

  1. Sergey.di

    Sergey.di Нуб

    Здравствуйте

    Собираю первого робота и столкнулся с проблемой. Купил шасси с двумя моторами и еще один мотор отдельно. Подключил через 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) Что делать?

    IMG_0853.jpg IMG_0854.jpg
     
  2. geher

    geher Гуру

    1. Это естественно. Моторы имеют определенный разброс характеристик, по разному разгоняются, по разному останавливаются, по разному едут.
    2. Есть три решения этого вопроса:
    - Оставить на ведущую ось один мотор, а рулить рулевым колесом, присоединенным к серве (можно и к шаговику, но тогда возникает проблема определения нулевого положения при включении). Требует существенной переделки ходовой части.
    - Составить таблицу скоростей при каждом значении ШИМ и времен разгона и торможения при смене одного значения на другое. Долго, нудно, трудно
    - Как-то с энкодерами. Как, пока не знаю. Надо считать количество импульсов, определяющих поворот колеса на какой-то угол и, исходя из их разности для левого и правого колес, корректировать скорость каждого колеса (замедлять спешащее, ускорять отстающее). Считается правильным, но работающего примера так и не нашел, а руки сделать самому пока не доходят.
     
  3. Sergey.di

    Sergey.di Нуб

    походу проблема в редукторе. Если вынимаю двигатель, усилие на кручение разное...
     
  4. NR55RU

    NR55RU Гик

    Я так же при создании платформы столкнулся с такой же проблемой, у меня 4 мотора по 2 на одну сторону, при одинаковых значениях на канал платформу вело в сторону, изначально я просто экспериментально определил ту разницу и выставил ее в скетче, платформа стала ехать прямо, но если например одна сторона платформы нагружена ее один фиг начинает слега вести.

    Решил что лучшая идея это знать скорость вращения двигателей и создать функцию автоматической корректировки скоростей вращения двигателей которая бы запускалась как отдельная опция по команде (при включении платформу например) либо регулярно самостоятельно следила и подстреливала систему в режиме реального времени.

    Проблема была как узнать скорость вращения, так как у меня точно такие же моторы как у вас на фото.
    И тут я наткнулся на такие вещи:
    Диск датчика скорости
    Датчик скорости (надо сказать видов таких датчиков много, есть двойные сразу на два колеса ну и по виду и креплениям тоже встречал всякие)

    Собственно это позволяет решить вопрос с получением скорости ращения каждого двигателя а имея такие данные уже можно делать систему автоматической корректировки. :)
     
  5. Sergey.di

    Sergey.di Нуб

    Спасибо. Похоже это то что нужно.
     
  6. hzz

    hzz Нуб

    А насколько это рядовая ситуация, что моторы двигаются с таким разбросом? у меня просто такие-же и хочется понять, мутить определение скорости итд, или купить более толковые моторы?
     
  7. geher

    geher Гуру

    Разброс характеристик моторов - самое обычное и естественное дело.
    Это не сверхточная механика.
    А моторы с точными, одинаковыми характеристиками, если такие вообще имеются, будут стоить, скорее всего, очень больших денег.
     
  8. hzz

    hzz Нуб

    т.е. получается все сталкиваются с разной скоростью и подсторойка скорости для например, правой/левой стороны робо платформы, это естественный процесс?