Как всегда, приступая к работе с новым компонентом,
желательно изучить его документацию.
Давайте поищем data sheet от нашей новой микросхемы.
Возьмем, например, вот этот,
немного увеличим и рассмотрим микросхему.
Напомню, что сориентироваться в номерах контактов нам поможет вот эта выемка,
начиная с которой против часовой стрелки контакты нумеруются.
Как мы уже поняли, данная микросхема предназначена для управления
мощным питанием, подаваемым на моторы с помощью сигнала с Arduino.
То есть нам нужно подключить силовое питание вот к этому контакту.
Обозначу это вот так вот.
А «минус» силового питания мы подключим к одному из выводов «земля»,
которых здесь целых 4 штуки.
Ну, допустим, вот.
Затем нам нужно для
управления всей логикой подключить вот этот вот вывод,
—логическое питание, — к 5 вольтам Arduino.
И, естественно, не забываем соединить это с «землей» Arduino.
Затем мы управляем моторами,
причем микросхема позволяет управлять сразу двумя.
Для подключения моторов служат вот эти вот выводы output,
помеченные в данном data sheet буквой Y.
Это будут выводы одного мотора,
а вот это — выводы второго мотора.
[РИСУЕТ] Нам остается подключить управляющую логику.
Как мы уже выяснили, мы можем управлять скоростью и направлением движения,
вращением моторов.
Для управления скоростью используются пины,
которые называются enable: вот этот вот и вот этот вот.
Мы будем регулировать скорость, как мы, например,
регулировали яркость светодиодов.
То есть нам нужно использовать те выводы Arduino,
которые поддерживают широтно-импульсную модуляцию.
Помечу знакомой нам тильдой.
[РИСУЕТ] И нам остается задать мотору направление вращения.
Когда вы посмотрите устройство микросхемы, вы поймете,
почему здесь используются два пина, помеченные буквой А.
Они идут просто к любым цифровым пинам Arduino для
одного мотора и для второго мотора.
Подавая на эти 2 пина комбинацию логических нулей и единиц,
мы можем менять направление вращения.
То есть 01 — это вращение в одну сторону, 10 — вращение в другую сторону.
Кроме этого, посмотрите, что будет, если подать комбинацию 11.
При 00, естественно, ничего происходить не будет.
Итак, мы теперь знаем как подключать мотор к
контроллеру посредством драйвера двигателей.
Теперь проделаем все это в натуре.
Мы взяли силовое питание и через клеммник привели его на макетную плату.
Затем двумя проводами соединили с микросхемой: красный провод,
«плюс», идет в восьмой вход, и синий провод, «минус», — в «землю».
Затем мы подключили сам мотор.
Оба его вывода подходят к output с одной стороны микросхемы.
После чего мы взяли контроллер,
взяли 5 вольт, привели к выводу для логического питания микросхемы
и взяли «землю», соединили с «землей» L293.
После чего соединили 3 пина Iskra с микросхемой: зеленый
провод идет из пятого пина в enable для данного мотора,
и оставшиеся два провода на контроллере подключены к третьему и
четвертому пинам цифровым, а у микросхемы соединены с выводами input.
Итак, мы подключили один мотор.
Второй подключается аналогично, согласно документации.
А сейчас давайте проверим, как это работает.
Давайте посмотрим, что у нас в тестовом скетче.
Во-первых, сделаны 3 макроопределения для управляющих пинов:
enable мы подключили к пятому и 2 input — к третьему, четвертому.
Затем мы сделали их выходами.
А затем сама суть: для того чтобы запустить мотор,
нам нужно подать комбинацию высокого и низкого уровней на input — IN1 и IN2.
В данном случае мы сделали HIGH и LOW.
А затем с помощью analogWrite задали скорость,
в данном случае максимальную — 255.
После чего мы хотим увидеть эффект с помощью задержки на 2 секунды.
Затем мы изменим направление.
На input 1 вместо HIGH подадим LOW, а на input 2 вместо LOW — HIGH.
А скорость оставим прежней — 255.
Мы снова хотим увидеть, как это работает: задержка.
А после этого мы хотим остановить моторы: на оба input
мы подаем низкий логический уровень — LOW/LOW.
Обратите внимание, что несмотря на то, что скорость мы оставили максимальной,
мотор перестанет крутиться.
Ну и чтобы мы это увидели, снова задержка.
Посмотрим, как работает.
[ШУМ]
[ШУМ] Работает
правильно: 2 секунды вращается в одном направлении,
2 секунды вращается в обратном направлении и 2 секунды не вращается никуда.
А еще давайте проведем эксперимент с управлением скоростью.
Давайте немного изменим наш прежний скетч.
Начало у него остается то же, потому что подключение осталось прежним.
Затем на input подаем комбинацию для вращения в одном из направлений,
а скорость мы будем наращивать в цикле от 0 до максимума, до 255, по единичке.
Затем с помощью analogWrite передавать счетчик на
enable и делать небольшую задержку, чтобы увидеть эффект.
Теперь поменяем направление на
противоположное и сделаем еще один цикл,
где скорость будем уменьшать от максимума до минимума также
по единичке и таким же образом смотреть, что из этого получается.
[ЗВУКИ]
[ШУМ]
[ШУМ]
[ШУМ] Как
мы и ожидали, мотор плавно разгоняется,
а затем начинает крутиться в обратную сторону, плавно замедляясь.
Наверняка вы обратили внимание, что вращаться он начал не сразу.
Дело в том, что поначалу мотору не хватает малых напряжений для
преодоления силы трения покоя.
Зато в обратном направлении, когда он от максимальной скорости идет к 0,
он демонстрирует и более медленное вращение.
Не забывайте о том,
что на скорость вращения моторов влияет множество разных факторов: например,
передаточное число редуктора, используемого с данным с мотором.
Также помните о том, что даже при одном и том же уровне скорости, который мы задаем,
мы можем увидеть разное поведение мотора в зависимости от уровня заряда батарей.