Управление шаговым двигателем с помощью MATLAB и Arduino

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

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

Ранее на нашем сайте мы уже рассматривали управление с помощью математической системы MATLAB и платы Arduino электродвигателем постоянного тока и сервомотором, а также проект автоматизации дома с помощью MATLAB и Arduino. В этой же статье мы рассмотрим управление шаговым двигателем с помощью системы MATLAB и платы Arduino. Если вы начинающий в этой тематике, то вначале рекомендуем ознакомиться со статьей про простое мигание светодиодом с помощью MATLAB и Arduino.

Режимы функционирования шагового двигателя

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

Режим полного шага (Full Step Mode)

В этом режиме мы можем совершить полный оборот оси шагового двигателя (на 360°) с помощью минимального числа шагов. Но это приводит к меньшей инертности системы и вращение будет не очень гладким. Режим полного шага разделяют на следующие два режима: однофазный и двухфазный режим.

Внешний вид шагового двигателя и назначение его контактов

1. Однофазный режим. В этом режиме в каждый конкретный момент времени возбуждается (запитывается) только один контакт (фаза) шагового двигателя. Это позволяет совершить полный оборот за меньшее число шагов. Поскольку число шагов маленькое, то и потребление тока в этом режиме также очень низкое. В следующей таблице показана последовательность запитывания контактов (фаз) для 4-х фазного шагового двигателя.

Шаг Phase 1 (Blue) Phase 2 (Pink) Phase 3 (Yellow) Phase 4 (Orange)
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1

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

Шаг Phase 1 (Blue) Phase 2 (Pink) Phase 3 (Yellow) Phase 4 (Orange)
1 1 1 0 0
2 0 1 1 0
3 0 0 1 1
4 1 0 0 1

Режим половины шага (Half Step Mode)

Этот режим является комбинацией рассмотренных однофазного и двухфазного режимов и позволяет объединить достоинства этих режимов.

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

Шаг Phase 1 (Blue) Phase 2 (Pink) Phase 3 (Yellow) Phase 4 (Orange)
1 1 0 0 0
2 1 1 0 0
3 0 1 0 0
4 0 1 1 0
5 0 0 1 1
6 0 0 0 1
7 1 0 0 1
8 1 0 0 0

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

Более подробно об шаговых двигателях можно узнать из статьи про управление шаговым двигателем с помощью Arduino и потенциометра.

Создание графического интерфейса в MATLAB для управления шаговым двигателем

Чтобы в MATLAB запустить графический интерфейс пользователя (GUI — Graphical User Interface) напечатайте в окне команд:

Откроется новое всплывающее окно, в нем выберите новый blank GUI как показано на следующем рисунке.

Запуск редактора графического интерфейса в MATLAB

Теперь разместите в рабочем поле графического интерфейса две кнопки-переключателя (toggle buttons), как показано на следующем рисунке, для вращения шагового двигателя по часовой и против часовой стрелки.

Размещение в рабочем поле графического интерфейса двух кнопок-переключателей

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

Форма для изменения настроек кнопки

Мы кастомизировали (придали им облик) эти две кнопки следующим образом:

Внешний вид созданных нами кнопок

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

Объяснение кода программы в MATLAB для управления шаговым двигателем

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Вы можете скачать готовые файл GUI (.fig) и файл с кодом программы (.m) (правый клик мышкой и выбирайте «сохранить объект как») и изменить их по своему усмотрению.

Скопируйте следующие строки и вставьте их в программу начиная со строки №74 чтобы убедиться в том что плата Arduino взаимодействует с MATLAB каждый раз когда вы запускаете на выполнение m-файл.

Добавление кода в MATLAB для взаимодействия с платой Arduino

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

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

Код для вращения шагового двигателя по часовой стрелке

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

Код для вращения шагового двигателя против часовой стрелки

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

  1. Плата Arduino Uno.
  2. Установленная на компьютер математическая система MATLAB (предпочтительно версии R2016a или выше).
  3. Шаговый двигатель (Stepper Motor) 28BYJ-48, 5VDC.
  4. Драйвер мотора шагового двигателя (Stepper motor driver) ULN2003.

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

Схема проекта для управления шаговым двигателем с помощью MATLAB и Arduino представлена на следующем рисунке.

Схема проекта для управления шаговым двигателем с помощью MATLAB и ArduinoВнешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.

Внешний вид собранной на макетной плате конструкции проекта

Тестирование работы проекта

После того как аппаратная часть проекта будет готова запустите на выполнение .m файл.

Запуск на выполнение .m файла в Matlab

Системе MATLAB может потребоваться несколько секунд на запуск этого файла, не нажимайте никакую кнопку на графическом интерфейсе до тех пор пока горит индикация BUSY (система занята) в левом нижнем углу экрана.

Ждем пока Matlab выполняет код файла

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

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

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

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

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

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