понедельник, 13 августа 2012 г.

Электропроводка робота Мити


Электропроводка в Мите несложная, но чтобы было куда подглядывать я нарисовал схемку и сфотографировал монтажный вариант разводки.
Вот принципиальная схема питания контроллера:




Мне не хотелось припаивать аккумуляторы намертво и не оказалось подходящих разъёмов, поэтому я использовал клеммник, привинтив его на днище тележки.
Сейчас мы проектируем свой шилд, одной из задач которого, будет контроль состояния аккумулятора и тока его заряда. По этой причине разрыв положительного провода, идущего от разъёма зарядки к плюсу аккумулятора выведен на клеммник. Пока шилд не готов, поэтому на клеммнике установлена перемычка.
Чтобы ничего не напутать перед сборкой я набросал и монтажную схему:




Теперь о питании двигателей. Вот помесь принципиальной и монтажной схем:


Здесь видно, что клеммники моторов, установленные на Ромео, будут располагаться в задней части робота. Причём, клеммник М1 управляет левыми двигателями, а М2 - правыми. Конденсаторы вообще-то можно не ставить, но я решил поберечь щётки моторов и подстраховался. И последнее: чтобы минимизировать наводки от моторов, Сергей Китель предложил использовать витую пару, что я и сделал. Причём он, кстати, использовал обычный сетевой кабель.
Ну и вот результат:




14 комментариев:

  1. "Сетевой" всмысле локальной сети, а не сети 220В :)

    ОтветитьУдалить
  2. Хорошо расписано! Новички, я думаю поймут без проблем.

    ОтветитьУдалить
  3. Добрый день. Не столкнулись ли Вы с проблемой разной скорости вращения двигателей? Если да, то как решали? Мой первый робот собран на Turtle - 2WD Mobile Platform заметно забирал в сторону, причем эта проблема изменялась в зависимости от заряда аккумуляторов. Поэтому регулировка разной скоростью моторов программно не имела смысла.
    Двигателя запитал микрофонным кабелем с экраном, который припаял к корпусам моторов.

    ОтветитьУдалить
    Ответы
    1. У нас таких проблем не было, по крайней мере из нашей комманды никто с таким не столкнулся, судя по молчанию.
      Могу посоветовать подключить движки напрямую к аккумулятору и посмотреть как будет двигаться тележка, если так же будет крениться в одну из сторон, то скорее всего разные параметры у движков (сечения провода якоря, кол-во витков или возможно даже намагниченности магнитов статора) тут проблема решается поиском двигателей с максимально идентичными характеристиками.
      Если при прямом подключении движков к аккумулятору все норм, то проблема в драйвер шилде или в коде :)

      Удалить
    2. Да, проблема именно в двигателях, но шли они в комплекте с платформой, что и удивило. Буду пробовать решить проблему с помощью энкодеров

      Удалить
    3. По моему проще движки поменять.

      Удалить
    4. При наличии двигателей действительно проще. Но у меня возможность покупки только через почту - интернет. С какими параметрами они приедут хз, а энкодеры есть.

      Удалить
    5. Подтверждаю, что я с такой проблемой не сталкивался, но у нас на тележках на каждой стороне по два запараллеленных двигателя. Поэтому отклонение менее вероятно.

      Я подумывал об использовании энкодеров, но так и не придумал им применения. При поворотах на нашей тележке всё равно будут проскальзывания колёс, поэтому тут энкодеры не помогут. А вы подсказали интересную мысль - использовать энкодеры при прямолинейном движении.

      Удалить
    6. Не могу удержаться и не посоветовать вам простое в реализации программное решение. Можно определить коэффициент для коррекции скорости более быстрого мотора для двух состояний аккумулятора: полностью заряженного и разряженного. Зависимость, думаю, будет линейная. Поэтому, зная уровень напряжения, всегда можно определить коэффициент. А уровень на аккумуляторе можно получить с помощью делителя напряжения и одного аналогового входа микроконтроллера.
      Думаю, это решение проще использования энкодеров, правда не универсальное. Зато экономите на используемых входных пинах - один против двух.

      Удалить
    7. я игрался с таким 2WD turtle в школе. дело не в двигателях, не в драйверах, и не в проводах. дело в том что движки развернуты в разные стороны, а у этих движков скорость в разные стороны разная + разброс от движка к движку ( погрешность изготовления).

      без энкодеров прямо не поедет, можно попробовать регулировать ШИМ-ом по таблице - "напряжение аккумулятора- коэффициент". для этого нужно к роботу добавить 2 резистора - делитель напряжения ( на нашем сайте где то есть ) и конечно составить таблицу. но лучше сразу энкодеры. - если купить сложно, то можноо сделать из шариковой мышки или в принерах и сканерах тоже есть готовые оптопары, или вообще из фотодиод+светодиод. колесо я вырезал из двд-бокса. можно на просвет, можно вариант с отраженным светом ( легче с креплением). для крепежа ищи пластик "полиморфус" (продается в магазинах радиомоделей) - вещь номер 1 в домашнем арсенале любого самоделкина.

      энкодер вообще много для чего нужен. для учебы и эксперисентов - вообще незаменимая весчь.

      на нашем 4WD таких проблем нет потому что нужно приложить много усилий чтоб изменить траекторию с прямой. зато мы теряем в поворотах.


      Дима, у меня энкодеры стоят как раз для прямолинейного движения. в паре с дальномером для реализации "slam" - навигации.
      я не поворачиваю на ходу. только прямолинейное движение и повороты на месте.

      Удалить
    8. Робот Митя двигается вполне прямолинейно без энкодеров. Поэтому их установку я считал перебором. Но сейчас вы меня убедили :) - можно довернуть наш скетч для опционального использования энкодеров. На случай двухколёсной тележки, например.

      Удалить
    9. это как раз то, что мы планировали при создании платформы - у меня все эти кусочки есть, есть даже для схемы с поворотной сервой.



      L_enc = digitalRead(ENC_LEFT); //сигнал с энкодера
      R_enc = digitalRead(ENC_RIGHT);

      // если сигнал изменился -> Dist++
      if (L_enc != L_enc_last) {L_dist++;}
      if (R_enc != R_enc_last) {R_dist++;}

      L_enc_last=L_enc;
      R_enc_last=R_enc;

      if (L_dist > R_dist)
      {
      left_speed = 255-2*(L_dist - R_dist);
      analogWrite(SPEED_LEFT, left_speed);
      }

      else
      {
      right_speed = 255-2*(R_dist - L_dist);
      analogWrite(SPEED_RIGHT, right_speed);
      }

      Удалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить