Управление двигателем постоянного тока с помощью Raspberry Pi


В предыдущей статье мы рассмотрели использование ШИМ в Raspberry Pi, а в данной статье мы рассмотрим подключение электродвигателя постоянного тока к плате Raspberry Pi и управление скоростью его вращения с помощью ШИМ (широтно-импульсной модуляции).

Внешний вид управления двигателем постоянного тока с помощью Raspberry Pi

Схема расположения контактов ввода/вывода (GPIO) на плате Raspberry Pi 2 показана на следующем рисунке. Более подробно об этих контактах вы можете прочитать в статье про мигание светодиода с помощью Raspberry Pi.

Распиновка контактов ввода/вывода (GPIO) платы Raspberry Pi

Каждый из 17 универсальных контактов ввода/вывода (GPIO) может выдерживать ток до 15mA. А суммарный ток от всех контактов ввода/вывода не должен превышать 50mA – таким образом, в среднем на каждый контакт будет приходиться ток примерно 3mA.

Также на плате Raspberry Pi присутствуют силовые контакты +5V (Pin 2 & 4) и +3.3V (Pin 1 & 17), от которых можно запитывать различные датчики. Шина электропитания с данных контактов подключена параллельно шине питания процессора, поэтому если по шине питания данных силовых контактов будет протекать большой ток, то он будет оказывать влияние на работу процессора. Поэтому на плате есть предохранитель, который сработает если вы подключите к силовым контактам слишком мощную нагрузку. С шины питания контактов +3.3V можно безопасно забирать ток величиной до 100mA – в этом проекте для нас это будет важно, потому что к этим контактам мы будем подключать электродвигатель постоянного тока. Соответственно, к данным контактам мы можем подключить только сравнительно маломощный двигатель, если же вы хотите управлять с помощью платы Raspberry Pi более мощным двигателем, то для него придется использовать отдельный источник питания.

Необходимые компоненты

  1. Плата Raspberry Pi 2 Model B или другая аналогичная (купить на AliExpress).
  2. Резистор 220 Ом или 1 кОм – 3 шт. (купить на AliExpress).
  3. Маломощный двигатель постоянного тока (Small DC Motor).
  4. Кнопка – 2 шт.
  5. Транзистор 2N2222 (купить на AliExpress).
  6. Диод 1N4007 (купить на AliExpress).
  7. Конденсатор 1000 мкФ (купить на AliExpress).
  8. Макетная плата.
  9. Соединительные провода.

Схема проекта

Схема подключения двигателя постоянного тока к плате Raspberry Pi представлена на следующем рисунке.

Схема подключения двигателя постоянного тока к плате Raspberry Pi

Как уже было рассмотрено ранее, один контакт платы Raspberry Pi не может работать с током более 15mA и, поскольку двигатель постоянного тока потребляет ток более 15mA, то сигнал ШИМ, формируемый Raspberry Pi, нельзя непосредственно подавать на двигатель, так как это может привести к необратимому повреждению платы. Поэтому в качестве переключающего устройства мы в нашей схеме используем NPN транзистор 2N2222. Этот транзистор под действием ШИМ с платы Raspberry Pi управляет переключением тока, достаточного для работы двигателя. Также учтите то, что неправильное подключение транзистора может также привести к тяжелому повреждению платы.

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

Также, чтобы уменьшить флуктуации напряжения, в схеме мы подключили конденсатор емкостью 1000 мФ параллельно подаваемому напряжению питания.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

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

В программе нам первым делом необходимо подключить (импортировать) библиотеку для работы с контактами ввода/вывода. Также мы импортируем эту библиотеку RPi.GPIO под именем “IO” (то есть переименовываем ее для использования в программе), то есть далее в программе всегда, когда мы захотим обратиться к контактам ввода/вывода, мы будем использовать слово ‘IO’.

Иногда контакты ввода/вывода (GPIO pins), которые мы собираемся использовать в программе, могут выполнять другие функции. В этом случае во время исполнения программы мы будем получать предупреждения (warnings). Следующей командой мы укажем плате Raspberry Pi на то, чтобы она игнорировала эти предупреждения и продолжала исполнение программы.

Мы можем обращаться к контактам ввода/вывода (GPIO pins) платы Raspberry Pi используя либо номер контакта на плате, либо его функциональный номер. В представленной выше распиновке контактов ввода/вывода можно увидеть, к примеру, что обозначение GPIO19 соответствует контакту PIN 35. То есть в зависимости от того, какой способ обращения к контактам мы выбрали, мы можем обращаться к рассмотренному контакту либо по номеру ‘35’, либо по номеру ‘19’. В данном проекте мы выберем способ обращения к контактам по их функциональным номерам, поэтому используем следующую команду:

Далее мы сконфигурируем контакт GPIO13 в качестве цифрового выхода поскольку на этом контакте мы будем формировать сигнал ШИМ (широтно-импульсной модуляции).

После конфигурации контакта в качестве цифрового выхода нам необходимо настроить его как выходной контакт формирования ШИМ.

Представленная команда определяет канал для формирования ШИМ и устанавливает частоту формируемого ШИМ сигнала. В качестве канала ШИМ в нашем проекте мы будем использовать контакт GPIO13, а в качестве частоты ШИМ сигнала мы зададим значение 100.

Но ШИМ-контакт не начнет работать, пока не будет вызвана функция start(). Ее параметр – это исходное значение коэффициента заполнения (duty cycle).

Далее в программе мы будем проверять состояние контакта GPIO26. Если на этом контакте уровень low, то мы выполним действия, относящиеся к этому оператору IF. Если же на этом контакте уровень high, то действия внутри оператора IF выполняться не будут.

Затем в программе мы будем использовать команду "While 1:" – она будет формировать бесконечный цикл. Внутри этого цикла все команды будут исполняться непрерывно.

Для управления скоростью вращения двигателя постоянного тока у нас в схеме используются две кнопки: с помощью первой кнопки мы увеличиваем коэффициент заполнения ШИМ и, следовательно, увеличиваем скорость вращения двигателя, а с помощью второй - уменьшаем коэффициент заполнения ШИМ и, следовательно, уменьшаем скорость вращения двигателя. Таким образом, мы будем управлять скоростью вращения двигателя с помощью платы Raspberry Pi.

Также на нашем сайте вы можете посмотреть проекты управления двигателем постоянного тока с помощью платы Arduino и с помощью микроконтроллера AVR.

Исходный код программы

Комментарии поясняют смысл отдельных команд в программе.

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
1 150 просмотров

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *