Управление двигателем постоянного тока

Ардуино: управление двигателем постоянного тока, L293D

Двигатели есть практически в каждом роботе. В одних роботах они приводят в действие колеса, заставляя машину перемещаться в нужном направлении. В других — двигатели крутят пропеллеры, создавая вертикальную тягу для полета. Двигатели позволяют вращаться суставам промышленного робота-манипулятора, и перемещают каретку 3D-принтера . В общем, без хорошего двигателя робота не сделать.

DSC01178

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

На этом уроке мы разберем, как управлять обычным двигателем постоянного тока (DC Motor), а именно жёлтым мотор-редуктором на основе моторчика F130. Двигатели этого типа части применяются в роботах на колесных и гусеничных платформах. И начнем мы с самого простого способа управления — с помощью транзистора.

Компоненты для урока "Ардуино: управление двигателем постоянного тока, L293D" на shop.robotclass.ru
В корзину
В корзину
В корзину
В корзину
В корзину
В корзину

Изменено:

Ардуино: управление двигателем постоянного тока, L293D: 22 комментария

  1. На эмуляторе не работает, в коде ошибок не показывает, но ничего не происходит.

  2. Поправочка, работает с жутким падением напряжения управляющего сигнала.

  3. Игорь, скорее всего дело в том, что в данном примере напряжение питания двигателя подано с Ардуины. Используйте второй (другой) источник тока для питания двигателей.

  4. А у меня всё заработало, как на примере, с первого раза. Никаких проблем не было.

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

    • digitalWrite(in3, LOW);
      digitalWrite(in4, HIGH);
      delay(1000);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      delay(1000);
      значение (1000) это 1 секунда. меняешь на 5000 и будет 5 секунд работать

  6. В реальности -схема и скетч работаеют-использовал микросхему.В эмуляторе не пробывал.

  7. Добрый день. Собирал как на схеме, не работает. Транзистор использовал 2222а, резистор 1 кОм, питание от платы 5В. Питание платы от USB от ноутбука. Скетч нижеследующий (взят из книги):
    const int motor=9;
    void setup() {
    pinMode (motor, OUTPUT);
    }
    void loop() {
    for (int i=0; i=0; i—)
    {
    analogWrite (motor, i);
    delay (10);
    }
    delay (2000);
    }
    Итог, не работает. Один раз, правда заработал, но двигатель работал на полных оборотах вместо плавного затухания, а транзистор моментально нагревался. Другой раз, что-то с платой случилось а ноут выдал сообщение, падение напряжения на концентраторе USB.
    Вообще не понимаю чего не хватает.

    • Смотря что за двигатель. Но я подразумеваю для ваших целей транзистор 2n2222 слабоват, рекомендую попробовать полевой транзистор IRF540, к примеру.
      Ну и насчет того, что работает всегда на 100%, но попробуйте delay(200) сделать, вместо delay(10). Может он слишком быстро выходит на макс обороты и вы не замечаете.

  8. Подскадите, а как запрограмировать обычный двигатель постоянного тока (не шаговый) , так что бы он вращался в одну и другую сторону не по времени, а по количеству оборотов?

    • Для этого нужно будет считать обороты. Делается это с помощью энкодера: магнитного или оптического. То есть к мотору нужно приделать колесо с магнитом, и установить мотор так, чтобы колесо это крутилось рядом с датчиком магнитного поля (датчик Холла).

      Каждый раз, когда магнит будет пролетать мимо датчика, последний будет срабатывать и контроллер будет фиксировать один оборот. Собственно, зная сколько оборотов сделано, можно уже будет остановить мотор в нужный момент!

      Рекомендую просто поискать моторы уже со встроенным магнитным энкодером.

  9. В этом и многих других проектах не рассматривается задача защиты двигателя и блока управления от перегрузки при механической остановке двигателя во время его работы.
    Такая ситуация вероятна и её необходимо предусмотреть. Есть ли у Вас решение такой задачи? Наверное такое решение есть, но я его никак не найду. Предполагаю, что нужно измерять напряжение на шунте в цепи питания и при его критическом увеличении останавливать двигатель.
    Удачи! С уважением!

    • Вероятно вам подойдет драйвер с ограничением по току. Просто настраиваете нужный максимальный ток и при его превышении питание мотора отрубается.
      Или как вариант, можно использовать драйвер с датчиком тока, тот же:
      https://shop.robotclass.ru/index.php?route=product/product&path=63_114&product_id=402
      контроллер будет считывать значение тока и принимать решение, что дальше делать.

  10. Вопрос — почему, если сначала запустить двигатель, потом после остановки его проиграть какую-нибудь мелодию (команда tone) на пищалке (на другом пине), то потом команда на запуск двигателя не работает? При перезагрузке Ардуино двигатель запускается, но после проигрывания мелодии запуска двигателя опять нет…

  11. Здравствуйте. Объясните пожалуйста про Н мост. У меня получается КЗ. Если допустим на схеме напряжение VCC 12в, а INA 5в (как с пина ардуины) то оба левых транзистора на схеме открываются. У PNP тразисторе на базе 5в на эмиттере 12в — он открыт, у NPN на базе 5 на эмиттере 0 тоже открыт — КЗ.

Добавить комментарий

Ваш адрес email не будет опубликован.