====== Драйвер моторов TB6612 ======
===== Описание =====
Драйвер моторов представляет из себя плату с микросхемой, позволяющей управлять моторами. 

Напрямую, подключать моторы к контроллерам очень опасно, так как моторы потребляют значительно больший ток, чем может выдать контроллер. Для решения задачи разделения питания и управления моторами и существуют драйверы моторов.

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

Модуль имеет два управляющих канала, каждый из которых позволяет управлять нагрузкой до 1,2 А. Два канала можно объединить в один и управлять одним мощным мотором до 2,4 А.

Микросхема имеет встроенную защиту по температуре, перенапряжению и короткому замыканию.

==== Технические характеристики: ====
  * Рабочее напряжение (логическая часть): 2,7 - 5,5 В
  * Рабочее напряжение (силовая часть): 4,5 - 13,5 В
  * Номинальный ток на 1 канал: 1,2 А
  * Максимальный (пиковый) ток на 1 канал: 3,2 А
  * Количество каналов: 2
  * Максимальная частота ШИМ: 100 кГц

==== Физические размеры: ====
  * Модуль (Д х Ш х В): 30 х 21 х 12 мм

==== Преимущества драйвера: ====
  * Имеет два канала для подключения моторов
  * Компактность исполнения платы (небольшие размеры)
  * Встроенная защита от перенапряжения
  * Встроенная защита от температуры
  * Встроенная защита от короткого замыкания

==== Ресурсы для загрузки: ====
  * [[http://files.smartelements.ru/datasheet/TB6612.pdf|Даташит TB6612]]
  * [[http://files.smartelements.ru/know_libs/TB6612SE.zip|Библиотека для Arduino]]

===== Модуль драйвера =====

На рисунке ниже представлен модуль драйвера и описание его компонентов:
{{ :главная:моторы_драйверы_шасси:компоненты_драйвера.png?nolink |}}

  - Выводы управления драйвером и питание микросхемы драйвера
  - Микросхема драйвера TB6612
  - Клеммы подключения питания моторов
  - Клеммы подключения мотора А
  - Клеммы подключения мотора Б

**//Помните, что выводы PWMA и PWMB должны быть подключены к контактам ШИМ.//**

===== Библиотека для работы с драйвером =====
==== Описание работы с библиотекой ====
Для более удобной и простой работы с драйвером моторов воспользуйтесь [[http://files.smartelements.ru/know_libs/TB6612SE.zip|Библиотекой для Arduino]]. Данная библиотека содержит все основные функции и методы, необходимы для вращения моторов.

==== Создание объекта драйвера ====
Для создания объекта, для работы с драйвером, воспользуйтесь одним из двух вариантов. Выберите нужный вариант в зависимости от количества подключенных моторов.

=== Подключен один мотор ===
<file Arduino>
TB6612SE driver(pinPwmA, pinAin1, pinAin2);
</file>

Параметры:
  * **pinPwmA** (uint8_t) - номер вывода ардуино, куда подключен контакт PMA драйвера
  * **pinAin1** (uint8_t) - номер вывода ардуино, куда подключен контакт AIN1 драйвера
  * **pinAin2** (uint8_t) - номер вывода ардуино, куда подключен контакт AIN2 драйвера

=== Подключены два мотора ===
<file Arduino>
TB6612SE driver(pinPwmA, pinAin1, pinAin2, pinPwmB, pinBin1, pinBin2);
</file>

Параметры:
  * **pinPwmA** (uint8_t) - номер вывода ардуино, куда подключен контакт PMA драйвера
  * **pinAin1** (uint8_t) - номер вывода ардуино, куда подключен контакт AIN1 драйвера
  * **pinAin2** (uint8_t) - номер вывода ардуино, куда подключен контакт AIN2 драйвера
  * **pinPwmB** (uint8_t) - номер вывода ардуино, куда подключен контакт PMB драйвера
  * **pinBin1** (uint8_t) - номер вывода ардуино, куда подключен контакт BIN1 драйвера
  * **pinBin2** (uint8_t) - номер вывода ардуино, куда подключен контакт BIN2 драйвера

==== Команды (методы) драйвера ====

=== Движение (вращение) вперёд ===

Вращает один или оба мотора вперёд (вращение вала против часовой стрелки).

{{ :главная:моторы_драйверы_шасси:вращение_мотора_против_чс.png?nolink |}}

<file Arduino>
forward(speed, ms)
</file>

Параметры:
  * **speed** (int) - скорость вращения мотора/ов (от минимальной 0 до максимальной 255). При скорости 0 - не вращается. При скорости 255 - вращается с максимально - возможной скоростью.
  * **ms** (unsigned long) - __необязательный__ - время задержки вращения. Запускает функцию delay() после начала вращения. По окончании заданного времени вызывает метод brake(), который останавливает вращение. Если параметр не указан, то запускается только вращение с заданной скоростью. 

=== Движение (вращение) назад ===

Вращает один или оба мотора назад (вращение вала по часовой стрелке).

{{ :главная:моторы_драйверы_шасси:вращение_мотора_по_чс.png?nolink |}}

<file Arduino>
back(speed, ms)
</file>

Параметры:
  * **speed** (int) - скорость вращения мотора/ов (от минимальной 0 до максимальной 255). При скорости 0 - не вращается. При скорости 255 - вращается с максимально - возможной скоростью.
  * **ms** (unsigned long) - __необязательный__ - время задержки вращения. Запускает функцию delay() после начала вращения. По окончании заданного времени вызывает метод brake(), который останавливает вращение. Если параметр не указан, то запускается только вращение с заданной скоростью. 

=== Остановка (тормоз) мотора ===

<file Arduino>
brake(ms)
</file>

Параметры:
  * **ms** (unsigned long) - __необязательный__ - время задержки остановки. Запускает функцию delay() после остановки вращения. Если параметр не указан, то запускается только остановка. 

=== Поворот вправо ===

Имеет смысл только при подключении двух моторов. Вращает правый мотор (мотор А) назад, а левый мотор (мотор B) вперёд.

<file Arduino>
right(speed, ms);
</file>

Параметры:
  * **speed** (int) - скорость вращения мотора/ов (от минимальной 0 до максимальной 255). При скорости 0 - не вращается. При скорости 255 - вращается с максимально - возможной скоростью.
  * **ms** (unsigned long) - __необязательный__ - время задержки вращения. Запускает функцию delay() после начала вращения. По окончании заданного времени вызывает метод brake(), который останавливает вращение. Если параметр не указан, то запускается только вращение с заданной скоростью. 

=== Поворот влево ===

Имеет смысл только при подключении двух моторов. Вращает левый мотор (мотор B) назад, а правый мотор (мотор A) вперёд.

<file Arduino>
left(speed, ms);
</file>

Параметры:
  * **speed** (int) - скорость вращения мотора/ов (от минимальной 0 до максимальной 255). При скорости 0 - не вращается. При скорости 255 - вращается с максимально - возможной скоростью.
  * **ms** (unsigned long) - __необязательный__ - время задержки вращения. Запускает функцию delay() после начала вращения. По окончании заданного времени вызывает метод brake(), который останавливает вращение. Если параметр не указан, то запускается только вращение с заданной скоростью. 

===== Примеры подключения и использования =====
==== Пример №1. Вентилятор ====

Соберём простейший вентилятор, который запускается при нажатии кнопка и вращает мотор пока кнопка нажата.

=== Шаг 1. Соберите компоненты для урока. ===
^ Что нужно:                                                                                                                                       ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер SmartUno]]| 1           |
| [[https://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]]| 1           |
| [[https://smartelements.ru/collection/motory-dravery-shassi/product/drayver-motorov-tb6612|Драйвер моторов TB6612]]| 1           |
| [[https://smartelements.ru/collection/motory-dravery-shassi/product/kollektornyy-motor-fa-130|Коллекторный мотор FA-130]]| 1           |
| [[https://smartelements.ru/collection/moduli/product/modul-knopki-chernyy|Модуль кнопки (черный)]]                                                      | 1           |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-mama-mama|Провода мама-мама]]                           | 8           |
| [[https://smartelements.ru/collection/elementy-pitaniya/product/otsek-dlya-batareek-2haa-bez-shtekera-2|Отсек для 2-х батареек]]                           | 1           |
| [[https://smartelements.ru/collection/elementy-pitaniya/product/akkumulyator-nimh-aa-2500mah|Аккумулятор АА]]                           | 2           |

=== Шаг 2. Соберите элементы в соответствии со схемой ниже. ===
{{ :главная:моторы_драйверы_шасси:motor_deriver_fan.png?nolink |}}

=== Шаг 3. Загрузите скетч на контроллер. ===
<file Arduino>
#include <TB6612SE.h> //библиотека для работы с драйвером

const int BUT_BLACK = 12; //вывод подключения кнопки

TB6612SE motor(5, 2, 4); //подключение драйвера, выводы PWMA, AIN1, AIN2

void setup() {
}

void loop() {
  //Если кнопка нажата
  if (digitalRead(BUT_BLACK)) {
    motor.forward(25); //включить мотор со скоростью 25
  }  else { //иначе
    motor.brake(); //выключить мотор
  }
}
</file>

=== Шаг 4. Охлаждайтесь! ===
Подключите питание к контроллеру (или оставьте его подключенным к компьютеру). Нажимая на кнопку мотор вращается с заданной скоростью. Добавьте на вал мотора любой пропеллер и получите полноценный вентилятор!

==== Пример №2. Два мотора. ====

Теперь продемонстрируем работу двух моторов, подключенных к драйверу. Управлять вращением моторов будем с помощью кнопок. Чёрная отвечает за вращение вперёд, белая за вращение назад.

=== Шаг 1. Соберите компоненты для урока. ===
^ Что нужно:                                                                                                                                       ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер SmartUno]]| 1           |
| [[https://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]]| 1           |
| [[https://smartelements.ru/collection/motory-dravery-shassi/product/drayver-motorov-tb6612|Драйвер моторов TB6612]]| 1           |
| [[https://smartelements.ru/collection/motory-dravery-shassi/product/kollektornyy-motor-fa-130|Коллекторный мотор FA-130]]| 2           |
| [[https://smartelements.ru/collection/moduli/product/modul-knopki-chernyy|Модуль кнопки (черный)]]                                                      | 1           |
| [[https://smartelements.ru/collection/moduli/product/modul-knopki-belyy|Модуль кнопки (белый)]]                                                      | 1           |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-mama-mama|Провода мама-мама]]                           | 14           |
| [[https://smartelements.ru/collection/elementy-pitaniya/product/otsek-dlya-batareek-2haa-bez-shtekera-2|Отсек для 2-х батареек]]                           | 1           |
| [[https://smartelements.ru/collection/elementy-pitaniya/product/akkumulyator-nimh-aa-2500mah|Аккумулятор АА]]                           | 2           |

=== Шаг 2. Соберите элементы в соответствии со схемой ниже. ===
{{ :главная:моторы_драйверы_шасси:motor_deriver_two_motors.png?nolink |}}

=== Шаг 3. Загрузите скетч на контроллер. ===
<file Arduino>
//полное описание возможностей библиотеки на сайте http://know.smartelements.ru/
#include <TB6612SE.h> //библиотека для работы с драйвером моторов

const int BUT_BLACK = 12; //вывод подключения чёрной кнопки
const int BUT_WHITE = 11; //вывод подключения белой кнопки

TB6612SE motor(5, 2, 4, 6, 7, 8); //создание объекта драйвера с номерами выводов (PWMA, AIN1, AIN2, PWMB, BIN1, BIN2)

void setup() {
}

void loop() {
  //Если сработала чёрная кнопка
  if (digitalRead(BUT_BLACK)) {
    motor.forward(25, 1000); //запустить моторы вперёд со скоростью 25 на 1 секунду
  }  else if (digitalRead(BUT_WHITE)) { //если сработала белая кнопка
    motor.back(35, 1000); //запустить моторы назад со скоростью 35 на 1 секунду
  }
}
</file>

=== Шаг 4. Результат ===

Нажимайте на кнопки управления моторами и наблюдайте изменения во вращении. По нажатии белой кнопки моторы вращаются с более медленной скоростью вперёд, в течении 1 секунды. При нажатии на чёрную кнопку, моторы вращаются назад с более быстрой скоростью, в течении одной секунды.