Подключение шагового двигателя 28BYJ-48 к микроконтроллеру PIC


Шаговый двигатель – это специальный тип электродвигателя, который осуществляет вращение небольшими шагами. Можно регулировать скорость и направление его вращения, а также число шагов, на которое должен "повернуться" двигатель. Существует два основных типа шаговых двигателей: униполярные и биполярные. Униполярные проще в управлении и использовании, а также дешевле. В данной статье мы рассмотрим подключение шагового двигателя 28BYJ-48 к микроконтроллеру PIC16F877A.

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

Шаговый двигатель 28BYJ-48 является униполярным, он прост в использовании и сравнительно недорог. Работает он от 5V постоянного тока (5V DC). Для управления им мы будем использовать микросхему драйвера шаговых двигателей ULN2003, которая представляет собой массив пар Дарлингтона (Darlington pair array). Она выдерживает ток нагрузки до 500mA. Использование данной микросхемы в нашем проекте обусловлено тем, что выдерживаемый контактами микроконтроллера PIC ток недостаточен для управления шаговым двигателем.

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

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

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. Шаговый двигатель 28BYJ-48 (купить на AliExpress).
  3. Драйвер шаговых двигателей ULN2003 (купить на AliExpress).
  4. Программатор PICkit 3 (купить на AliExpress).
  5. Кварцевый генератор 20 МГц (купить на AliExpress).
  6. Конденсаторы 33 пФ (2 шт.) (купить на AliExpress).
  7. Резистор 4,7 кОм.
  8. Напряжение питания 5V с током не менее 500mA.
  9. Макетная плата.
  10. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Шаговый двигатель 28BYJ-48

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

Внешний вид шагового двигателя 28-BYJ48

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

Технические характеристики шагового двигателя 28-BYJ48

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

Распиновка шагового двигателя 28BYJ-48

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

Остальные 4 провода (розовый, красный, желтый и синий) используются для управления вращением шагового двигателя. Существует 3 режима управления вращением данного двигателя: режим полного шага, режим полушага и режим волнового управления.

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

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

Шаг Синий Розовый Желтый Оранжевый
1 1 1 0 0
2 0 1 1 0
3 0 0 1 1
4 1 0 0 1

Режим полушага (Half-Drive)

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

Шаг Синий Розовый Желтый Оранжевый
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

Режим волнового управления (Wave Drive)

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

Шаг Синий Розовый Желтый Оранжевый
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1

Драйвер шагового двигателя ULN2003

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

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

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

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

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

Схема подключения шагового двигателя 28BYJ-48 к микроконтроллеру PIC представлена на следующем рисунке.

Схема подключения шагового двигателя 28BYJ-48 к микроконтроллеру PIC

Соединения между драйвером ULN2003A и микроконтроллером PIC16F877A следующие:
A.IN1 => Pin33
B.IN2 => Pin34
C.IN3 => Pin35
D.IN4 => Pin36

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

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

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

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

Первым делом в программе мы должны настроить биты конфигурации микроконтроллера и подключить заголовочные файлы необходимых библиотек. После этого мы можем переходить к функции void main.

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

  1. void full_drive (char direction).
  2. void half_drive (char direction).
  3. void wave_drive (char direction).

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

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

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

Комментарии

Подключение шагового двигателя 28BYJ-48 к микроконтроллеру PIC — 2 комментария

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

    • Добрый.
      1. Идентификация обмоток двигателя
      Прежде чем подключать двигатель, необходимо определить, какие провода к каким обмоткам относятся. У шестипроводного двигателя есть две обмотки, каждая из которых имеет центральный отвод (common).
      Способ проверки: Используйте мультиметр в режиме измерения сопротивления .
      Общая схема выводов:
      Обмотка A: Провод A1, Общий провод A (Common A), Провод A2.
      Обмотка B: Провод B1, Общий провод B (Common B), Провод B2.
      Сопротивление между выводами одной обмотки (например, A1 и A2) будет максимальным (сумма двух половин). Сопротивление между общим проводом и одним из крайних (A1 и Common) будет в два раза меньше.

      2. Схема подключения (Hardware)
      PIC16F877A не может напрямую питать двигатель из-за высокого тока (обычно 100-500 мА и выше), поэтому необходим драйвер. Самый простой и распространенный вариант для униполярных двигателей — микросхема ULN2003A (или ULN2803) .
      Компоненты:
      PIC16F877A
      ULN2003A (или L293D для биполярного режима)
      Источник питания для логики (5В)
      Источник питания для двигателя (5В–12В, в зависимости от характеристик мотора)
      Блокировочные конденсаторы (обычно 100 мкФ и 0.1 мкФ)
      Схема соединений:
      Порты ввода/вывода: Подключите 4 вывода микроконтроллера (например, RD0, RD1, RD2, RD3) к входам драйвера ULN2003 (IN1–IN4).
      Драйвер: ULN2003 имеет открытый коллектор. Его выходы (OUT) подключаются к концам обмоток двигателя.
      Подключение обмоток:
      Важно: Центральные отводы (Common) обеих обмоток подключаются к плюсу питания двигателя (например, +12V) .
      Оставшиеся 4 провода (A1, A2, B1, B2) подключаются к выходам ULN2003.
      Если двигатель вращается не в ту сторону или дергается, поменяйте местами провода одной из обмоток (A1 и A2) или измените последовательность сигналов в коде.
      Контакт PIC16F877A Компонент Назначение
      RD0 ULN2003 (IN1) Сигнал фазы A
      RD1 ULN2003 (IN2) Сигнал фазы B
      RD2 ULN2003 (IN3) Сигнал фазы C
      RD3 ULN2003 (IN4) Сигнал фазы D
      Vdd (5V) Питание PIC и логики +5В
      Vss (GND) Общий провод Земля
      +12V Common двигателя и ULN2003 (COM) Питание мотора
      Примечание: Вы также можете использовать драйвер L293D, но в этом случае центральные отводы (Common) остаются неподключенными (изолированными), и вы управляете двигателем как биполярным, используя только 4 провода, но схема подключения будет немного сложнее

      3. Программная реализация (Software)
      Управление шаговым двигателем заключается в подаче определенной последовательности логических сигналов на обмотки. Для униполярного режима чаще всего используется последовательность Full-Step (две фазы) или Half-Step (полушаговый режим) .
      Ниже приведен пример кода на C (подобный MikroC или CCS C), который заставляет двигатель вращаться непрерывно. В этом примере используются младшие 4 бита порта D.

      void main() {
      TRISD = 0b00000000; // Настраиваем PORTD как выход (все выводы)

      while(1) {
      // Полношаговый режим (две фазы) - высокий момент
      PORTD = 0b00000011; // Обмотки A и B активны
      Delay_ms(10);
      PORTD = 0b00000110; // Обмотки B и C активны
      Delay_ms(10);
      PORTD = 0b00001100; // Обмотки C и D активны
      Delay_ms(10);
      PORTD = 0b00001001; // Обмотки D и A активны
      Delay_ms(10);
      }
      }

      Задержка (Delay): Время задержки определяет скорость вращения. Слишком маленькая задержка (менее 2-3 мс) может привести к тому, что двигатель не сможет физически "догнать" импульсы, и он начнет вибрировать или пропускать шаги . Слишком большая задержка — вращение будет медленным.

      4. Возможные проблемы и их решение
      Двигатель не вращается, только вибрирует:
      Причина: Неправильно подключена последовательность обмоток или слишком высокая скорость (маленькая задержка) .
      Решение: Увеличьте задержку (Delay_ms(100)) для проверки. Если двигатель начал шагать, значит, проблема в частоте. Если дергается в разные стороны, поменяйте местами провода одной из обмоток.

      Двигатель вращается, но рывками или назад:
      Причина: Неправильная последовательность битов в коде.
      Решение: Проверьте порядок сигналов. Иногда помогает изменить последовательность массива на противоположную (например, 0x03, 0x09, 0x0C, 0x06).

      Перегрев драйвера ULN2003:
      Причина: Превышение допустимого тока. Убедитесь, что напряжение питания двигателя соответствует его спецификации (обычно 5-12В). Для мощных двигателей используйте радиатор охлаждения или более мощный драйвер (например, на полевых транзисторах).

      5. Альтернатива: Биполярный режим (L293D)
      Если вы используете драйвер L293D или L298N, шестипроводной двигатель можно подключить как биполярный, проигнорировав центральные отводы (изолировав их). В этом случае вы получите более высокий момент на низких оборотах , но управление потребует немного другой логики (сигналы для H-моста). В этом случае вы будете управлять только 4 выводами (две обмотки) без отводов.

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

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