Рубрики
Проекты на STM32

Подключение шагового двигателя к STM32F103C8 (STM32 Blue Pill)

Шаговый двигатель представляет собой бесщеточный двигатель постоянного тока (brushless DC motor), который может вращаться на маленькие углы, называемые шагами. Большинству шаговых двигателей требуется 200 шагов для совершения полного оборота на 360 градусов, что означает поворот двигателя на 1.8 градуса при каждом шаге. Шаговые двигатели используются во многих устройствах, где необходимо точное позиционирование (вращение) какого либо исполнительного механизма – в роботах, системах управления антеннами, жестких дисках (винчестерах).

Шаговые двигатели бывают двух типов: униполярные и биполярные. Униполярные проще в работе и управлении, также их легче купить. В данной статье мы рассмотрим подключение шагового двигателя 28BYJ-48 к плате STM32F103C8, также известной под названием STM32 Blue Pill («синяя таблетка»).

Ранее на нашем сайте мы рассматривали подключение шагового двигателя к следующим микроконтроллерам (платам):

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

  1. Плата разработки STM32F103C8 (STM32 Blue Pill) (купить на AliExpress).
  2. Шаговый двигатель 28BYJ-48 (купить на AliExpress).
  3. Микросхема драйвера двигателей ULN2003 (купить на AliExpress — в виде модуля, но можно найти и в виде отдельной микросхемы).
  4. Потенциометр 10 кОм (купить на AliExpress).
  5. Макетная плата.
  6. Соединительные провода.

Общие принципы работы шаговых двигателей

Внешний вид шагового двигателя 28BYJ-48 представлен на следующем рисунке:

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.

Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

Так почему же этот двигатель называется 28BYJ-48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

Расчет шагов на оборот для шагового двигателя

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

Мы в данном проекте для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

Справедлива следующая формула:

Количество шагов за оборот = 360 / угол шага.

В нашем случае 360/11.25 = 32 шага за оборот.

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

Микросхема драйвера двигателей ULN2003

Используется для управления вращения двигателем в одном направлении. Внутренняя схема соединений микросхемы ULN2003 представлена на следующем рисунке.

Контакты с IN1 до IN7 микросхемы ULN2003 являются ее входами, а контакты с OUT 1 по OUT 7 являются ее выходами. На контакт COM подается положительное напряжение источника питания, необходимое для устройств, подключаемых к выходам микросхемы.

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

Распиновка платы STM32F103C8 представлена на следующем рисунке.

Шаговым двигателем мы будем управлять с помощью ШИМ (широтно-импульсная модуляция) контактов платы STM32F103C8. Всего таких контактов в плате 15 и они обозначены на представленной схеме значком волны (~). В нашем проекте мы будем использовать 4 ШИМ контакта (с PA0 по PA3) платы STM32F103C8 для управления шаговым двигателем.

Более подробно про использование ШИМ в плате STM32F103C8 вы можете прочитать в этой статье.

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

Схема подключения шагового двигателя к плате STM32F103C8 (STM32 Blue Pill) представлена на следующем рисунке.

Схема соединений между платой STM32F103C8 и микросхемой драйвера двигателей ULN2003 представлена в следующей таблице.

Плата STM32F103C8 Микросхема ULN2003
PA0 IN1
PA1 IN2
PA2 IN3
PA3 IN4
5V COM
GND GND

Схема соединений между микросхемой драйвера двигателей ULN2003 и шаговым двигателем 28BYJ-48 представлена в следующей таблице. Ее выходные контакты OUT1-OUT4 подключены к соответствующим контактам шагового двигателя (оранжевый, желтый, розовый и синий).

Микросхема ULN2003 Шаговый двигатель 28BYJ-48
OUT1 ORANGE
OUT2 YELLOW
OUT3 PINK
OUT4 BLUE
COM RED

Схема соединений между платой STM32F103C8 и потенциометром представлена в следующей таблице.

Потенциометр Плата STM32F103C8
LEFT (INPUT) 3.3
CENTRE(OUTPUT) PA4
RIGHT(GND) GND

Далее рассмотрим способы управления двигателем с помощью нашей платы STM32.

Принцип управления шаговым двигателем с платы STM32F103C8

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

  1. Установить скорость вращения шагового двигателя с помощью потенциометра.
  2. Вручную с помощью монитора последовательной связи Arduino IDE ввести количество шагов для вращения двигателя по часовой (положительные значения) или против часовой (отрицательные значения) стрелки.
  3. В соответствии с введенным в мониторе последовательной связи Arduino IDE значением выполнить вращение шагового двигателя на заданное количество шагов.

Примеры представлены в следующей таблице.

Значение в окне монитора последовательной связи Вращение шагового двигателя
2048 360 (по часовой стрелке)
1024 180 (по часовой стрелке)
512 90 (по часовой стрелке)
-2048 360 (против часовой стрелке)
-1024 180 (против часовой стрелке)
-512 90 (против часовой стрелке)

И продемонстрированы на следующем рисунке.

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

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Программировать плату STM32F103C8 мы будем с помощью Arduino IDE через USB порт.
Первым делом в программе мы подключим библиотеку Stepper.h, необходимую для работы с шаговым двигателем.

Затем мы определим число шагов, необходимых для полного оборота шагового двигателя. В нашем случае оно равно 32 поскольку мы используем метод 4-х шагов (4 Step-sequence) для вращения шагового двигателя, то есть получаем 360/32 = 11.25 градуса. Таким образом, за один наш большой шаг (stride angle) ось шагового двигателя поворачивается на угол 11.25 градусов.

Мы также можем использовать режим половинного шага (Half step mode) в котором используется последовательность из 8 шагов (8 step sequence) в качестве большого шага (stride angle). Для данного режима получаем 360/64=5.625 градуса.

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

Затем мы преобразуем это аналоговое значение в цифровое и сохраняем его в переменной целого типа. Далее мы с помощью функции map это число из диапазона 0-4096 преобразуем в диапазон 1-1023 чтобы его можно было использовать для установки скорости вращения шагового двигателя. Более подробно об использовании АЦП (аналого-цифрового преобразования) в плате STM32 вы можете прочитать в этой статье.

Далее для установки скорости мы используем функцию stepper.setSpeed(result).

Затем мы должны создать объект для управления шаговым двигателем, в котором необходимо указать контакты платы STM32, с которых будет производиться управление двигателем. Будьте предельно внимательны в этом вопросе потому что в большинстве случаев ошибки в этом вопросе приводят к тому, что шаговый двигатель начинает вращаться не так, как вам нужно.

В следующей команде мы будем считывать необходимое число шагов для нашего двигателя из окна монитора последовательной связи. К примеру, нам необходимо 2048 значений для одного полного оборота (32*64 = 2048), тогда 64 будет у нас передаточное число, а 32 – последовательность половинного шага (half step sequence) для одного полного оборота.

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

Исходный код программы (скетча)

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

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

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