Робот на основе Arduino. Часть I – управление двигателями

Arduino – настолько распространенная и простая плата, что сложно не сделать на ее основе какого-нибудь незамысловатого робота. Например, такого:

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/121-robot-na-osnove-arduino-chast-i-upravlenie-dvigatelyami/images/Arduinobot.JPG

Сегодня мы рассмотрим связь с драйвером TB6612FNG и управление двигателем с помощью этого драйвера.

Но почему мы должны использовать драйвер? Нельзя ли просто соединить двигатель напрямую с Arduino, как, например, соединить светодиод или любой другой компонент? К сожалению, нельзя. Выходные порты просто не смогут выдать столько тока, сколько нужно для вращения двигателя. В данном проекте используется контроллер платы Arduino, максимальный ток вывода которого составляет 40 мА, а небольшой двигатель может потреблять уже 500 мА.

Двигатели Mabuchi FA-130RA-18100

Двигатели, которые использовались для построения вышеприведенного робота, называются FA-130RA-18100. Это компактные игрушечные моторы. Они могут потреблять около 0.1 – 0.2 А на холостых оборотах. В реальной работе их токопотребление может составить 0.5 А. Если вы боитесь, что ваше приложение будет потреблять больше тока, то следует предусматривать какую-нибудь защиту от превышения тока, например, можно поставить предохранитель или организовать в микроконтроллере обратную связь по току.

Контроллер двигателя Toshiba TB6612FNG

Контроллер TB6612FNG является недорогим и легко монтируемым на плату решением. Некоторые компании продают этот контроллер уже в виде готового модуля, например, Pololu TB6612FNG Motor Driver Carrier. Он может стоить около $5.

Основные характеристики драйвера:

  • Два независимых канала двунаправленного управления двигателем

  • Диапазон логического напряжения 2.7 - 5.5 В

  • Диапазон напряжения питания двигателя 2.5 - 13.5 В

  • Непрерывный выходной ток 1 А, максимум на канал 3 А; можно соединять каналы, чтобы удвоить выходной ток.

Соединение TB6612FNG с микроконтроллером, источником питания и двигателями

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/121-robot-na-osnove-arduino-chast-i-upravlenie-dvigatelyami/images/robot-na-osnove-arduino-chast-i-upravlenie-dvigatelyami-1.jpg

Левая сторона:

  • GND – земля микроконтроллера

  • VCC – питание от микроконтроллера (2.7-5.5 В)

  • AO1 – выход к контакту (-) двигателя A

  • AO2 - выход к контакту (+) двигателя A

  • BO2 - выход к контакту (+) двигателя B

  • BO1 - выход к контакту (-) двигателя B

  • VMOT – положительная полярность источника питания двигателя

  • GND - отрицательная полярность источника питания двигателя

Правая сторона:

  • PWMA – на ШИМ-вывод микроконтроллера

  • AIN2 - на цифровой вывод микроконтроллера

  • AIN1 - на цифровой вывод микроконтроллера

  • STBY – на цифровой вывод микроконтроллера или соединить с питанием

  • BIN1 - на цифровой вывод микроконтроллера

  • BIN2 - на цифровой вывод микроконтроллера

  • PWMB – на ШИМ-вывод микроконтроллера

  • GND – земля микроконтроллера

Итак, как нам этим управлять?

Во-первых, ничего работать не станет, если вывод STBY не будет в высоком логическом состоянии. Его можно «навечно» подтянуть к питанию, или управлять им с помощью микроконтроллера.

Если вы хотите, чтобы двигатель A крутился по часовой стрелке, установите AIN1 в лог. «1», AIN2 в лог. «0», PWMA >0. Для вращения против часовой стрелки AIN1 в лог. «0», AIN2 в лог. «1», PWMA >0. Если вы не хотите регулировать скорость с помощью ШИМ (PWM), то можете выводы PWMA и PWMB соединить с питанием. В случае с Arduino это будет эквивалентно AnalogWrite(5,255);. В случае управления скоростью с помощью ШИМ нужно озаботиться минимальной шириной импульса, при которой будет обеспечиваться минимальная скорость. Низкие значения ШИМ могут привести также к прерывистой работе двигателя. В данном случае минимальное значение ШИМ, при котором двигатель бесперебойно вращался на минимальных оборотах, составило 35. В целом, это значение зависит от выбранного источника питания двигателя, мощности двигателя и веса робота.

Теперь, когда вы можете контролировать направление и скорость вращения каждого двигателя, вы можете легко управлять роботом. Равномерное вращение двигателей A и B приведет к движению робота по прямой. При этом для организации ровного движения робота могут потребоваться эксперименты со значениями ШИМ. Так, например, для одного мотора может потребоваться значение 255, а для другого 249. Вращая только один двигатель можно осуществлять повороты.

Документация на драйвер

Документация на двигатель

Робот на основе Arduino. Часть II – шасси, средства передвижения и питание

Робот на основе Arduino. Часть III – подключение, программирование и пробный пуск

Робот на основе Arduino. Часть IV – ультразвуковой датчик HC-SR04