motor shield

Тема в разделе "Arduino & Shields", создана пользователем kulver, 3 апр 2012.

  1. kulver

    kulver Нерд

    Есть ардуино уно, на него я насадил мотор шилд, в шилд воткнул моторчик на 6-24В (красный и чёрный провода на фото как раз к нему идут), скачал и закинул в папку с ардуиной библиотеку AFMotor.h для удобного управления мотором. Залил вот такой скетч, скопипастенный с одного сайта, заведомо вроде как рабочий:
    Код (Text):
    #include <AFMotor.h>  //Подключаем заголовочный файл библиотеки

    //Создаем объект для двигателя на 1 канале (M1)
    AF_DCMotor motor(1);

    void setup() {
    }

    void loop() {
      //Задаем направление движение вперед
      motor.run(FORWARD);
      //Устанавливаем скорость 50%
      motor.setSpeed(128);
      //пауза 3 секунды - двигатель крутится
      delay(3000);
      //увеличиваем скорость до 75%, и пауза 3 сек.
      motor.setSpeed(192);
      delay(3000);
      //Снижаем скорость до 50%, и пауза 3 сек.
      motor.setSpeed(128);
      delay(3000);
      //Останавливаем двигатель, и пауза 3 сек.
      motor.run(RELEASE);
      delay(3000);
      //Переключаем направление вращения
      //Двигатель начнет вращаться со скоростью 50%
      motor.run(BACKWARD);
      //пауза 3 секунды - двигатель крутится
      delay(3000);
      //увеличиваем скорость до 75%, и пауза 3 сек.
      motor.setSpeed(192);
      delay(3000);
      //Снижаем скорость до 50%, и пауза 3 сек.
      motor.setSpeed(128);
      delay(3000);
      //Останавливаем двигатель, и пауза 3 сек.
      motor.run(RELEASE);
      delay(3000);
    }
    Но моторчик не крутится. Вообще никаких признаков жизни. сам мотор живой, я проверял, на прямую от батарейки крутится. Что я делаю не так?
     

    Вложения:

  2. Dmitriy Kunin

    Dmitriy Kunin Гик

    Это библиотека не от этого моторшилда, потому и...
     
  3. nailxx

    nailxx Официальный Нерд Администратор

  4. kulver

    kulver Нерд

    Хм. Окей, я зааплоадил на контролер сей код:
    Код (Text):
    #define SPEED_RIGHT     5
    #define DIR_RIGHT       4

    void setup()
    {
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
    }

    void loop()
    {
        analogWrite(SPEED_RIGHT, 250);
        analogWrite(DIR_RIGHT, HIGH);
        delay(3000);
        analogWrite(SPEED_RIGHT, 250);
        analogWrite(DIR_RIGHT, LOW);
        delay(2000);
    }
    и получил противно пищащий моторчик, не крутящийся, и слабо горящий LED3, красный который. Вольтметр показал на выходных клеммах мотор шилда 1.5 В. Моторчик расчитан на 12В. Я явно что-то делаю не так всё ещё...
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    Сделайте на DIR digitalWrite вместо analogWrite. Иначе по сути вы открываете затвор питания на 1/255-ю.

    Я представил себя моторчиком в вашем случае. Сижу, противно пищу.
     
  6. kulver

    kulver Нерд

    Сделал. Не крутится. 1,5В.
    Код (Text):
    void loop()
    {
        analogWrite(SPEED_RIGHT, 250);
        digitalWrite(DIR_RIGHT, HIGH);
        delay(3000);
        analogWrite(SPEED_RIGHT, 250);
        digitalWrite(DIR_RIGHT, LOW);
        delay(2000);
    }
     
  7. nailxx

    nailxx Официальный Нерд Администратор

    О! А вы от USB прям питаетесь? Там тока и напряжения маловато (5 В, до 500 мА). Можете попробовать от батареек или блока питания?
     
  8. Dmitriy Kunin

    Dmitriy Kunin Гик

    Чего-то не так, оно и от USB должно подавать признаки жизни.
    Воткните вместо моторчика светодиод с ограничительным резистором в 220ом и посмотрите, что будет.
    Померяйте при разных значениях X напряжение. (analogWrite(SPEED_RIGHT, X);)
    Если оно меняется в пределах 1.5V то, что-то совсем не так...
     
  9. kulver

    kulver Нерд

    Питаюсь от USB, да. Блока питания не покупал, думал, что и ЮСБ хватит. Батарейки есть, но как их в цепочку из 6 штук обьединить, чтобы они в руках не разваливались, я придумать не смог.

    Светодиод с резистором воткнуть не могу, ибо нету.
    Залил это
    Код (Text):

    void loop()
    {
      analogWrite(DIR_RIGHT, HIGH);
      analogWrite(SPEED_RIGHT, 255);
      delay(5000);
      analogWrite(SPEED_RIGHT, 205);
      delay(5000);
      analogWrite(SPEED_RIGHT, 155);
      delay(5000);
      analogWrite(SPEED_RIGHT, 105);
      delay(5000);
      analogWrite(SPEED_RIGHT, 55);
      delay(5000);
      analogWrite(SPEED_RIGHT, 0);
      delay(5000);
    }
    Получил на клеммах М1+ / М1- следующие значения напряжения, соответственно: 1.7, 1.3, 0.9, 0.6, 0.3, 0В.
    Кстати, если написать циифровойВвод, а не аналоговый, как у меня тут, то напряжение вырастет на 0.1В при 255 и разница пропорционально уменьшается к 0.
     
    fact713 нравится это.
  10. nailxx

    nailxx Официальный Нерд Администратор

    Загадка. Если глянуть в мануал на ваш шилд, то выходит, что пины 4 и 5 вообще управляют каналом M2. С него пробовали показания снимать?
     
  11. kulver

    kulver Нерд

    Пробовал, заодно подключив и 2й мотор. На всех 4х пинах 4-7 при HIGH/255 значениях напряжение 4.1В (если конечно я правильно снимаю это значение - одну "иголку" вольтметра в "землю", т.е. в какой-нибудь из пинов GND, вторую в интересующий пин).

    Пины 4 и 5 по факту явно управляют М1, на М2 никакого напряжения нет, если 4 и 5 пины писать.

    Так же на всякий случай попробовал второй такой же мотор шилд и другой моторчик - всё то же самое. =(
     
  12. kulver

    kulver Нерд

    Мотор шилд у меня вот этот (в магазине 2 фото 2х разных шилдов), может в этом загвоздка?
    [​IMG]
     
  13. nailxx

    nailxx Официальный Нерд Администратор

    Стоп, вы сказали 4,1 В. Всё правильно. Было 5 В, после прохождения нескольких транзисторных ключей в Motor Shield осталось 4,1. Это падение фиксировано и неизбежно. Воткнёте 9 В — получите 8,1 В.
     
  14. kulver

    kulver Нерд

    Обнаружил у себя случайно подходящий по разъёму к ардуинке блок питания. Он на 15.5В, ток вых. 1,7А. Если я его в ардуину воткну, оно не сгорит там что-нибудь? И ещё, если всё вроде как правильно и 4.1 - это то, что и должно быть, то как мне тогда получить 12В? От USB получается никак?
     
  15. nailxx

    nailxx Официальный Нерд Администратор

    12 В от USB получить не удастся. Блок — нужно смотреть стабилизированный или нет. Если нет, то 15,5 В будет только при нагрузке ровно 1,7 А, а без нагрузки будет сильно больше.

    Попробуйте просто воткнуть его в розетку и мультиметром замерить выходное напряжение. Если оно не превышает 15,5 В — втыкайте в Arduino.
     
  16. kulver

    kulver Нерд

    Заработало. Спасибо за советы. Питание - сила. А, ну и случайно попавшийся под руку БП от кассового аппарата - тоже сила, конечно. =)
     
  17. Dmitriy Kunin

    Dmitriy Kunin Гик

    Попробовали, заработало и хватит!
    Вы там не увлекайтесь 15 вольт, для Ардуины, это очень много, на долго нельзя сгорит...
    Первый эксперимент прошёл, теперь чётко разбирайтесь с питанием.
    На вход Ардуины не больше 10ти вольт, на вход моторшилда (есть там отдельное питание) не больше 12ти!
    А то стабилизатор на ардуине спалите, придётся учиться паять :) Причём феном, паяльник его не возьмёт.
     
  18. nailxx

    nailxx Официальный Нерд Администратор

    На самом деле регулятор напряжения на Arduino будет жить при входном напряжении вплоть до 20 В, но после отметки в 12 В не гарантируется, что он самостоятельно сможет отводить генерируемое тепло. Если прям нужнанимагу — можно приклеить на регулятор маленький радиатор и всё будет ОК.
     
  19. Dmitriy Kunin

    Dmitriy Kunin Гик

    Ну радиатор ещё не приклеен, что к стати тоже не панацея, а эксперименты уже во всю, надо предупредить возможные сюрпризы.
     
  20. kulver

    kulver Нерд

    Спасибо за предупреждения. А где этот регулятор на схеме расположен?