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

Двигатели постоянного токаВ этой статье мы рассмотрим небольшие двигатели (моторы). Мы покажем вам, как подключить двигатели к микроконтроллеру и управлять их направлением вращения и их скоростью.

Этому вопросу мы посвятили отдельную статью, потому что неправильное подключение этого, казалось бы, простого элемента, часто приводит к выходу из строя платы Arduino.

Прежде чем мы начнем разбираться с различными аспектами работы с двигателями постоянного тока, вам необходимо усвоить два наиболее важных правила: первое — никогда не подключайте двигатель напрямую к Arduino. Второе — лучше ничего не подключать до прочтения информации ниже!

В противном случае, готовьтесь к покупке новой платы Arduino!

Зачем нам нужно соединять моторы с Arduino?

Управление направлением вращения и частотой вращения двигателя дает много возможностей. Обладая этими новыми навыками, мы можем собрать простого робота, который сможет ездить по квартире и избегать препятствий. Вы также можете сделать автомобиль с дистанционным управлением с помощью телефона — возможностей много.

Управлять двумя моторами практически будет достаточно для того, чтобы собрать большинство роботов своими руками!

С какими моторами мы будем конкретно работать?

В этой статье мы обсудим принцип управления наиболее популярными щеточными двигателями постоянного тока. Чаще всего они используются энтузиастами DIY для работы своих конструкций.

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

Еще предстоит определить, что такое небольшие двигатели постоянного тока. Конечно, дело не в их размерах, а в потреблении ими электроэнергии. Для целей данной статьи, мы решили, что будем обсуждать двигатели, которые потребляют меньше, чем 1A в среднем, с питанием от 5-9V. Эти ограничения в некоторой степени зависят от контроллера мотора, который мы будем использовать, но об этом позже.

Принцип управления моторами универсален. А это означает, что, выбрав более мощный контроллер, мы сможем управлять более мощным двигателем.

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

Почему мы не можем подключить мотор к Arduino напрямую?

КПД каждой выходной линии на плате Arduino относительно невелик, можно предположить, что он составляет около 20 мА. Вы можете смело предположить, что 99,99% встречающихся вам двигателей будут потреблять гораздо больше электроэнергии. Точнее, они могут быть в сотни и тысячи раз больше.

Прохождение такого большого тока через неадаптированную схему вызовет немедленный и необратимый выход из строя платы!

В этой части статьи мы заменим двигатель на светодиоды. Вы сможете наблюдать, как изменяется направление вращения (какой светодиод загорается) и как изменяется их скорость (яркость светодиодов).

Краткий обзор встроенных мостов типа H

Между Arduino и моторами необходимы промежуточные компоненты. Чаще всего их называют мостами типа H, мостиками или англ. H-bridge h. Такие драйверы могут быть построены независимо от нескольких транзисторов или вы можете использовать интегрированный H-мост (то есть схему, которая представляет собой мост). Как новичок, вы можете начать с использования готовых макетов.

Самостоятельное сборка Н-моста необходима при очень больших токах. Однако это сложная задача. Сейчас вам не нужно этим заниматься.

Основная задача H-мостов — считывать и преобразовывать сигналы, подаваемые микроконтроллером, в величины, подходящие для управления двигателем. Например, плата Arduino может работать на максимум 5 В и 20 мА, но с H мостом, плата уже сможет легко управлять двигателем, который требует 12V и 1A для работы.

Ваш первый мост H

В дальнейшем речь пойдет о довольно старом, но дешевом и все еще популярном драйвере L293D. Его главным преимуществом является то, что этот мост находится в корпусе со сквозным отверстием (THT), и мы можем установить его на макетной плате: что важно, в одной интегральной схеме мы находим два моста, поэтому он идеально подходит для управления приводом (влево / вправо).

Микросхема L293D
Микросхема L293D

Этот драйвер имеет 16 контактов. Самая важная часть ниже. Однако мы рекомендуем вам просмотреть весь документ. К чтению документов стоит привыкнуть.

Note Sheet (англ. Datasheet) — документ, поставляемый производителем, в котором вы можете найти всю информацию о схеме.

Микросхема L293D описание

Одна из основных вещей, которую нужно проверять с любым мостом H, — это его производительность. В частности, речь идет о токе, который может потреблять подключенный двигатель. Если мы используем L293D, средний ток на канал может составлять 0,6 А, максимум 1,2 А. Что это означает?

Читать также:  Использование камеры на Raspberry Pi

В идеале наши двигатели должны потреблять до 0,6 А во время работы, но если ток на мгновение подскочит до 1,2 А, ничего страшного не произойдет.

Помните, что двигатель, работающий под нагрузкой, потребляет намного больше тока, чем при свободном вращении! Всегда проверяйте максимальный ток, который может потреблять ваш двигатель!

Далее перейдем к подключению микросхемы на макетной плате и программированию. Вначале контакты питания:

  • 4, 5, 12, 13 — соединить вместе с землей (GND)
  • 16 — Vcc питание логической части (5В)
  • 8 — Питание двигателей Vc (до 36V)
К схеме можно подключить два отдельных источника питания. Один для логической части и один для двигателей. Однако необходимо соединить массы обоих источников (аккумуляторов)!

Стоит помнить, что на каждом мосту есть падение напряжения. Это означает, что, например, при подключении 9 В к источнику питания двигателей в L293D к ним будет поступать максимум 7 В. Эта схема довольно старая, поэтому у нее большое падение напряжения, у более новых (например, TB6612) падение напряжения меньше.

Контакты управления двигателем:

  • 2, 7 — входы, определяющие направление вращения первого двигателя
  • 10, 15 — входы, определяющие направление вращения второго двигателя
  • 1 — вход, определяющий скорость первого двигателя
  • 9 — вход, определяющий скорость второго двигателя

Чтобы остановить двигатель или изменить направление, установите логические функции в соответствии со следующим графиком, который называется таблицей истинности:

Таблица истинности

Как видите, у нас есть две комбинации, которые вызывают остановку двигателя. Некоторые контроллеры выполняют торможение противотоком. Иногда они могут нанести вред всей схеме, однако из-за этого двигатель немедленно останавливается.

Задание двух низких состояний чаще всего вызывает свободную остановку (до тех пор, пока двигатель не потеряет обороты). Обратитесь к таблице данных моста для получения информации об этом.

Контакты, относящиеся к двигателям:

  • 3, 6 — выходы на первый двигатель
  • 11, 14 — выходы на второй двигатель

Использование H моста на практике

Сначала про блок питания, не знаем почему, но у новичкам он доставляет массу проблем. Но правило простое — мы можем запитать схему одним или двумя напряжениями.

Если мы выберем первый вариант, и логическая часть, и двигатели будут питаться от одного источника, то мы настоятельно не рекомендуем вам выбирать эту конфигурацию. Особенно, если вы хотите питать свои двигатели от 5 В, доступных на плате Arduino. Это возможно, но требует достаточно эффективного источника питания и хорошей фильтрации.

Питание двигателей и Arduino от одного источника питания может привести к зависанию программы и частым перезагрузкам.

Однако лучше всего разделить эти два источника питания, например двигатели, прямо от батареи, микроконтроллер через стабилизатор и соответствующие конденсаторы.

Поэтому однозначно безопаснее выбрать второе решение, в котором Arduino будет запитываться от отдельного источника. В нашем случае мы будем использовать источник питания от USB и батарею на 9 В, от которой мы будем питать наши моторы напрямую (Arduino также может питаться от него, но через встроенный стабилизатор , поэтому нам не нужно беспокоиться о помехах).

Схема должна выглядеть так, как показано ниже, обратите внимание, что у нас 9В, а не 5В! Помните об этом, чтобы ничего не повредить!

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

Макет сборки относительно сложный. Для начала стоит подключить земли моста L293D. Сделать это можно с помощью отрезанных от резисторов ножек. Это сэкономит место:

Соединение массы моста
Соединение массы моста

Затем по очереди:

Заземление Подключение 9В
Заземление Подключение 9В (питание моторов)
Подключение 5 В Подключение управляющих сигналов
Подключение 5 В (питание логики) Подключение управляющих сигналов

Теперь пора подключить мотор (в начале один). Как мы уже упоминали в начале, мы будем моделировать двигатели, чтобы не покупать их без надобности. Как мы это делаем? Очень просто.

Читать также:  Работа и устройство ультразвукового датчика

Моделирование двигателя

Как вы знаете, светодиод — это полупроводниковый элемент, который загорается, когда ток проходит через него в правильном направлении. Таким образом, если мы соединим два диода параллельно таким образом, чтобы они были связаны наоборот, то мы сможем проверить «в какую сторону» течет ток — один раз загорается один диод, и один раз другой. В свою очередь, скорость двигателя мы сможем проверить, наблюдая за яркостью диода.

Итак, вместо двигателя прикрепляем к ​​схеме резистор 1k:

Схема соединения мотора

В целом должно получиться так:

Полная схема сборки на макете
Полная схема сборки на макете

Arduino — простое управление двигателем

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

  • 6 (PWM) — регулировка скорости
  • 7, 8 — контроль направления вращения
Обратите внимание, что мы говорим сейчас о номерах контактов Arduino, а не о контактах моста L293D!

Если мы не хотим контролировать скорость двигателей, мы должны установить высокое состояние на выводе 6 (PWM). С таким же успехом можно подключить провод напрямую к 5В. Однако, поскольку у нас есть готовое соединение, воспользуемся Arduino:

Если схема была подключена правильно, после загрузки следующей программы ничего не должно произойти! Пришло время добавить недостающие строки в цикл. Предположим, теперь мы хотим провернуть двигатель на 3 секунды в одну сторону и на 3 секунды в другую (максимальная скорость). Для этого нам нужно добавить тривиально простой фрагмент программы:

Согласно таблице истинности, представленной ране , мы знаем, что двигатель включится, если на одном из входов задано низкое состояние «0», а на другом — высокое «1». Направление вращения зависит от того, какой вход подает сигнал.

После загрузки программы в Arduino, два светодиода должны начать мигать. Однако внимательно сосредоточьтесь и поймите, почему. Это не то же мигание светодиода, как в первых наших статьях. Диоды загораются поочередно, потому что ток один раз течет с выхода 1 на выход 2, а потом наоборот. Мигание возможно из-за того, что светодиоды перевернуты. Для облегчения понимания посмотрите фотографии ниже, где мы подключили вольтметр вместо диодов:

Двигатель слева Двигатель справа
Двигатель — вращение влево Двигатель — вращение вправо

Один раз результат положительный и один раз отрицательный. В этом случае минус показывает нам, что ток идет в направлении, противоположном тому, что был в начале.

Теперь пора вам поэкспериментировать с подключенным мотором.

Если у вас небольшой двигатель и вы хотите подключить его к схеме, то убедитесь, что он потребляет небольшой ток (<1 А) и может питаться примерно от 6-9 В.

Теперь, когда мы можем контролировать направление вращения двигателя, пришло время для скорости. Перед этим проверьте, что произойдет, когда во время работы вышеуказанной программы вы вытащите провод, идущий к контакту 6 Arduino, и подключите его к земле?

Двигатель перестал крутиться (светодиоды погасли). Таким образом, если мы очень быстро подадим 0 или 1 на вход, мы сможем контролировать скорость двигателя (яркость светодиодов).

Домашнее задание 7.1

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

Версия с ШИМ — контролируем скорость

Для дальнейшего тестирования требуются знания из статьи о ШИМ и Arduino. Как вы, наверное, догадались, просто передайте сигнал ШИМ на вывод 1 (микросхемы L293D), чтобы контролировать скорость двигателя!

Пришло время написать простую программу, которая будет по очереди крутить двигатели медленнее или быстрее. Помните, что диод виден только выше определенного порога заполнения ШИМ-сигнала, то же самое будет и с моторами. Но мы вернемся к этому позже.

Вы должны были заметить, что один светодиод явно меняет свою яркость, и делает это отлично! Теперь пришло время плавно изменить частоту вращения двигателя, но прежде чем мы перейдем к этому, пришло время сделать небольшую паузу…

Шлейф для Ардуино

Пришло время обсудить чрезвычайно полезный цикл, доступный в Arduino (и многих других). Мы имеем в виду цикл for, который позволит нам выполнять определенные инструкции определенное количество раз.

Читать также:  Электрическая ракета своими руками на суперконденсаторах

Мы будем использовать его, если, например, мы хотим записать 10 последовательных натуральных чисел, 5 раз мигнуть диодом и т.д. Но прежде чем мы перейдем к примеру, пора представить синтаксис:

Смотрится, к счастью, очень просто. После ключевого слова for мы открываем круглые скобки и включаем в них три очень важных момента. Первая — это переменная-числитель. Поскольку содержимое цикла должно выполняться определенное количество раз, программа должна знать, сколько циклов уже выполнено.

Затем после точки с запятой ставим условие. Цикл выполняется до тех пор, пока выполняется это условие. После следующей точки с запятой нам нужно ввести операцию, которая будет выполняться с переменной-числителем во время каждого цикла. Наконец, мы закрываем круглую скобку.

Цикл for на практике

Давайте использовать цикл for для вывода с помощью UART приветствия, например: 25 раз.

Работу видно в терминале:

Работа цикла for
Работа цикла for

Это именно то, что мы и ожидали. Мы уже объясняли, что означает вот эта запись:

В переменной счетчика было простое обозначение int i = 0 , надеемся, вы это понимаете. Короче говоря, мы объявляем новую локальную переменную i , которая имеет тип int и ее начальное значение равно 0. Если вам сложно понять это, вернитесь к статье о переменных.

В этом случае условие цикла i <25. Таким образом, цикл будет выполняться до тех пор, пока значение переменной i меньше 25.

Последний элемент, то есть i ++, является приращением переменной числителя (т.е. каждое значение переменной увеличивается на единицу). Вы также можете преобразовать эту запись в i = i + 1 , вы можете проверить это на досуге.

Для облегчения понимания этого условия вы можете запустить программу в модифицированной версии:

Теперь вы можете легко увидеть, какие значения принимает переменная-числитель (0-24). Конечно, цикл также будет выполняться 25 раз, если вместо:

напишем:

или:

или:

или:

и даже:

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

Домашнее задание 7.2

Напишите программу, которая заставит мигать светодиод 5 раз с помощью цикла for. Также попробуйте написать то же самое, используя то время как цикл.

Домашнее задание 7.3

Напишите программу, которая считывает число в диапазоне 0–9, отправленное через UART, а затем отображает на экране такое же количество звездочек *.

Плавный разгон двигателя

Теперь, когда мы узнали про работу цикла for, мы можем использовать его для плавного ускорения двигателя. Достаточно того, чтобы сигнал ШИМ заполнялся плавно, например каждые 25 мс.

Код программы прост и выглядит так: переменная счетчика i отвечает за уровень заполнения ШИМ-сигнала:

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

Об этом стоит помнить, т.к. у новичков часто возникают проблемы, их роботы или машинки просто не едут (не могут тронуться с места). Чаще всего оказывается, что либо подаваемый ток от блока питания слишком слабый, либо сигнал ШИМ имеет слишком малое заполнение.

Домашнее задание 7.4

Напишите программу, которая будет плавно ускорять и тормозить двигатель, используя 2 цикла for.

Вывод

На этом мы заканчиваем нашу статью об управлении двигателями постоянного тока, которая изначально должна была быть относительно короткой. Однако вышло немного больше, но мы хотели предоставить вам больше информации, чтобы у вас не было проблем с использованием двигателей в ваших собственных проектах.

В следующей статье мы рассмотрим использование ультразвукового датчика расстояния и написание ваших собственных функций (с аргументами и без них). Благодаря этому наши программы будут выглядеть еще лучше! Мы тоже медленно приближаемся к завершению задуманных статей. Ждем ваших комментариев, если вы хотите увидеть больше статей!

С Уважением, МониторБанк

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