Подключение шагового двигателя к Raspberry Pi

Raspberry Pi в настоящее время является одной из самых популярных плат, используемых энтузиастами в области электроники. Основанная на процессоре с архитектурой ARM, она является очень удобной для реализации различных проектов в тематике интернета вещей (Internet of Things, IoT). Но прежде чем браться за сложные проекты, необходимо освоить базовые приемы работы с данной платой. Поэтому в данной статье мы рассмотрим подключение шагового двигателя к плате Raspberry Pi и управление скоростью его вращения с помощью команд, подаваемых с платы.

Внешний вид проекта подключения шагового двигателя к Raspberry Pi

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

Существует много различных типов шаговых двигателей, в данном проекте мы будем использовать униполярный шаговый двигатель (Unipolar Stepper Motor). Более подробно про принципы работы шагового двигателя вы можете прочитать в статьях про его подключение к микроконтроллеру AVR и плате Arduino.

Внешний вид и внутреннее устройство шагового двигателя

Чтобы управлять вращением шагового двигателя с 4-мя обмотками (Four Stage Stepper Motor), мы будем подавать на него сигналы (импульсы) управления с помощью схемы драйвера шагового двигателя (на транзисторах). Эта схема будет управляться логическими сигналами с платы 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), от которых можно запитывать различные датчики. Но эти силовые контакты нельзя использовать для подачи питания на шаговый двигатель поскольку у них не хватит мощности для этого. Поэтому для подачи питающего напряжения на шаговый двигатель нужен внешний источник питания. Поскольку используемый нами в проекте шаговый двигатель рассчитан на напряжение 9V, то для подачи на него питания мы использовали батарейку на 9V. Если вы используете шаговый двигатель, рассчитанный на другое напряжения питания, то соответствующим образом подберите под него необходимый источник питания.

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

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

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

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

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

Используемому нами шаговому двигателю нужно сделать 200 шагов чтобы совершить полный оборот своей оси (на 360 градусов), то есть за каждый шаг ось двигателя поворачивается на 1,8 градуса. Поскольку мы используем шаговый двигатель с 4-мя обмотками (Four Stage Stepper Motor), нам необходимо 4 импульса чтобы совершить один логический цикл (оборот). Поскольку за один шаг ось двигателя поворачивается на 1,8 градуса, то для совершения полного оборота (цикла) нам нужно сделать 200 шагов. Таким образом, чтобы совершить один полный оборот, нам нужно 200/4 = 50 логических циклов.

Каждую обмотку шагового двигателя мы будем запитывать с помощью NPN транзистора 2N2222, управляться эти транзисторы будут с помощью логических сигналов (импульсов) от платы Raspberry Pi.

Будьте осторожны при подключении транзисторов к плате 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’. В данном проекте мы выберем способ обращения к контактам по их функциональным номерам, поэтому используем следующую команду:

Далее сконфигурируем контакты, с которых осуществляется управление четырьмя обмотками шагового двигателя, в качестве цифровых выходов:

Контакты GPIO26 и GPIO19 мы конфигурируем в качестве цифровых входов – к ним мы подключаем в схеме кнопки.

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

Затем в программе мы используем цикл, который будет исполняться 100 раз, в нем переменная x будет инкрементироваться от 0 до 99.

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

После сборки схемы и написания программы для Raspberry Pi можно приступать к тестированию работы проекта. В нашем проекте у нас есть две кнопки, подключенные к плате Raspberry Pi: первая кнопка используется для увеличения задержки между 4-мя управляющими импульсами, а вторая – для уменьшения задержки между этими импульсами. Задержка между данными импульсами напрямую влияет на скорость вращения двигателя – чем больше задержка, тем больше двигатель "тормозит" между каждым шагом и тем медленнее он вращается. Если же эта задержка близка к нулю, то двигатель вращается с максимальной скоростью.

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

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

Код программы снабжен необходимыми комментариями.

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

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


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

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