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

Существует множество типов двигателей. К самым распространенным в робототехнике можно отнести двигатель постоянного тока, шаговый двигатель, и бесколлекторный двигатель. У каждого типа есть свои особенности, плюсы и минусы. Одни больше подходят для точных перемещений, другие позволяют легко поднять в небо мультикоптер. Под каждый проект нужно тщательно выбирать нужный тип двигателей.
На этом уроке мы разберем, как управлять обычным двигателем постоянного тока (DC Motor), а именно жёлтым мотор-редуктором на основе моторчика F130. Двигатели этого типа части применяются в роботах на колесных и гусеничных платформах. И начнем мы с самого простого способа управления — с помощью транзистора.
Список необходимых компонентов
Для выполнения всех примеров из этого урока потребуется контроллер Arduino Uno или любой его аналог, двигатель постоянного тока с рабочим напряжением от 3 до 6 В, мощный полевой транзистор, микросхема драйвера L293D, макетная плата и немного проводов вилка-вилка.
Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
На эмуляторе не работает, в коде ошибок не показывает, но ничего не происходит.
Я конкретно про схему с L293D.
И схема Н-моста тоже не работает в симуляторе.
Поправочка, работает с жутким падением напряжения управляющего сигнала.
Игорь, скорее всего дело в том, что в данном примере напряжение питания двигателя подано с Ардуины. Используйте второй (другой) источник тока для питания двигателей.
Схема Н-моста не верна. Нужно поставить управление на крест
А у меня всё заработало, как на примере, с первого раза. Никаких проблем не было.
Чего нужно в программе дописать что бы моторчик менял вращение не через секунду а например через 5 секунд
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(1000);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(1000);
значение (1000) это 1 секунда. меняешь на 5000 и будет 5 секунд работать
Заменяешь delay(1000); на delay(5000);
В реальности -схема и скетч работаеют-использовал микросхему.В эмуляторе не пробывал.
Добрый день. Собирал как на схеме, не работает. Транзистор использовал 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). Может он слишком быстро выходит на макс обороты и вы не замечаете.
for (int i=0; i=0; i—) не правильно
for (int i=255; i>0; i—) правильно
Подскадите, а как запрограмировать обычный двигатель постоянного тока (не шаговый) , так что бы он вращался в одну и другую сторону не по времени, а по количеству оборотов?
Для этого нужно будет считать обороты. Делается это с помощью энкодера: магнитного или оптического. То есть к мотору нужно приделать колесо с магнитом, и установить мотор так, чтобы колесо это крутилось рядом с датчиком магнитного поля (датчик Холла).
Каждый раз, когда магнит будет пролетать мимо датчика, последний будет срабатывать и контроллер будет фиксировать один оборот. Собственно, зная сколько оборотов сделано, можно уже будет остановить мотор в нужный момент!
Рекомендую просто поискать моторы уже со встроенным магнитным энкодером.
Все работает на обоих программах ! Спасибо
В этом и многих других проектах не рассматривается задача защиты двигателя и блока управления от перегрузки при механической остановке двигателя во время его работы.
Такая ситуация вероятна и её необходимо предусмотреть. Есть ли у Вас решение такой задачи? Наверное такое решение есть, но я его никак не найду. Предполагаю, что нужно измерять напряжение на шунте в цепи питания и при его критическом увеличении останавливать двигатель.
Удачи! С уважением!
Вероятно вам подойдет драйвер с ограничением по току. Просто настраиваете нужный максимальный ток и при его превышении питание мотора отрубается.
Или как вариант, можно использовать драйвер с датчиком тока, тот же:
https://shop.robotclass.ru/index.php?route=product/product&path=63_114&product_id=402
контроллер будет считывать значение тока и принимать решение, что дальше делать.
Вопрос — почему, если сначала запустить двигатель, потом после остановки его проиграть какую-нибудь мелодию (команда tone) на пищалке (на другом пине), то потом команда на запуск двигателя не работает? При перезагрузке Ардуино двигатель запускается, но после проигрывания мелодии запуска двигателя опять нет…
Нужна программа.
Здравствуйте. Объясните пожалуйста про Н мост. У меня получается КЗ. Если допустим на схеме напряжение VCC 12в, а INA 5в (как с пина ардуины) то оба левых транзистора на схеме открываются. У PNP тразисторе на базе 5в на эмиттере 12в — он открыт, у NPN на базе 5 на эмиттере 0 тоже открыт — КЗ.