ПМК 3 курс Практические задания 04 Практическая работа 4 - BysonHunter/Tavrich_college GitHub Wiki

🏠 Главная · Программирование микроконтроллеров · 3 курс · Практические работы по программированию микроконтроллеров — 3 курс


Практическая работа №4

Тема: «Подключение и управление шаговым двигателем 28BYJ-48 с драйвером ULN2003»

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

Технические корректировки и уточнения

  • Для 28BYJ-48 число шагов на оборот зависит от режима и фактического передаточного отношения редуктора. Значения порядка 2048 (полный шаг) и 4096 (полушаг) являются учебными приближениями; для точного позиционирования нужна калибровка.
  • ULN2003 обеспечивает коммутацию обмоток и позволяет реализовать волновой, полный и полушаговый режим. Настоящее токовое микрошаговое управление с ULN2003 не реализуется.
  • Диапазон до 30 RPM из задания 2 может оказаться недостижимым без пропусков шагов. Следует экспериментально определить устойчивую максимальную скорость.
  • Нулевая позиция без концевого датчика является программной, а не абсолютной механической.
  • В меню задания 5 режим, обозначенный в исходнике как RPM (ПОЗИЦИЯ), корректнее называть POSITION.

Описание работы и задания

Uln2003»

Цель работы: Освоить принципы подключения, управления и программирования

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

Задачи работы:

  1. Изучить конструктивные особенности шагового двигателя 28BYJ-48 и драйвера

Uln2003.

  1. Освоить различные режимы управления шаговым двигателем (волновой, полношаговый, полушаговый).

  2. Научиться использовать библиотеки Stepper и AccelStepper для управления двигателем.

  3. Разработать системы управления с различными типами входных устройств (кнопки, потенциометр, энкодер).

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

Студент должен знать:

  • Принцип работы шаговых двигателей и их отличия от двигателей постоянного тока.

  • Основные характеристики шагового двигателя 28BYJ-48 (напряжение, шаг на оборот, скорость).

  • Назначение и принцип работы драйвера ULN2003.

  • Режимы управления шаговыми двигателями (волновой, полношаговый, полушаговый, микрошаговый).

  • Особенности использования библиотек Stepper и AccelStepper.

  • Методы подавления дребезга контактов кнопок. Студент должен уметь:

  • Подключать шаговый двигатель к Arduino через драйвер ULN2003.

  • Выполнять расчеты количества шагов для заданного угла поворота.

  • Программировать управление скоростью и направлением вращения.

  • Реализовывать позиционное управление с возвратом в нулевую точку.

  • Интегрировать шаговый двигатель с другими устройствами (дисплеи, энкодеры).

  • Отлаживать схемы и программы управления шаговым двигателем. Студент должен обладать практическими навыками:

  • Сборки электрических схем с шаговым двигателем.

  • Использования библиотек для управления шаговыми двигателями.

  • Реализации плавного разгона и торможения двигателя.

  • Создания пользовательских интерфейсов для управления двигателем.

  • Диагностики и устранения неисправностей в системе управления.

Необходимое оборудование:

  1. Плата Arduino UNO – 1 шт.
  2. Шаговый двигатель 28BYJ-48 – 1 шт.
  3. Драйвер ULN2003 – 1 шт.
  4. Потенциометр 10 кОм – 1 шт.
  5. Тактовые кнопки – 3-4 шт.
  6. LCD дисплей 1602 с I²C – 1 шт.
  7. Ротационный энкодер (опционально) – 1 шт.
  8. Макетная плата – 1 шт.
  9. Набор соединительных проводов – 1 комплект.
  10. Внешний источник питания 5 В 1А (рекомендуется) – 1 шт.
  11. USB-кабель для Arduino – 1 шт.

Задания Для Выполнения

Задание 1: «Базовое вращение шагового двигателя»

  1. Подключите шаговый двигатель 28BYJ-48 с драйвером ULN2003 к Arduino.
  2. Используя библиотеку Stepper, напишите программу, которая:
  • Совершает 1 полный оборот по часовой стрелке со скоростью 5 об/мин.
  • Пауза 2 секунды.
  • Совершает 2 полных оборота против часовой стрелки со скоростью 10 об/мин.
  • Пауза 2 секунды.
  • Цикл повторяется.
  1. На мониторе последовательного порта выводите сообщения о направлении вращения и пройденных шагах. Критерий успеха: двигатель точно выполняет заданные обороты с указанной скоростью.

Задание 2: «Управление скоростью с помощью потенциометра»

  1. Подключите потенциометр к аналоговому входу A0.
  2. Напишите программу, которая:
  • Преобразует значение с потенциометра (0–1023) в скорость вращения двигателя (1– 30 об/мин).

  • Двигатель постоянно вращается с текущей скоростью.

  • При изменении скорости на мониторе порта выводится: "Скорость: X RPM".

  1. Добавьте кнопку, которая меняет направление вращения при нажатии. Критерий успеха: плавное изменение скорости вращения при повороте потенциометра, переключение направления по кнопке.

Задание 3: «Позиционное управление с помощью кнопок с визуальной индикацией»

  1. Подключите 3 кнопки: "Вперед" (зеленый светодиод), "Назад" (желтый светодиод), "Сброс" (красный светодиод).

  2. Используя библиотеку AccelStepper, реализуйте систему, где:

  • Кнопка "Вперед" перемещает двигатель на 100 шагов вперед, при этом загорается зеленый светодиод.

  • Кнопка "Назад" перемещает двигатель на 100 шагов назад, при этом загорается желтый светодиод.

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

  • Светодиод горит только во время движения двигателя и гаснет после завершения перемещения.

  1. На мониторе порта отображается текущая позиция в шагах и активный режим. Дополнительное оборудование:
  • Светодиод зеленый – 1 шт.
  • Светодиод желтый – 1 шт.
  • Светодиод красный – 1 шт.
  • Резисторы 220-330 Ом – 3 шт. Критерий успеха: точное позиционирование, плавное движение, корректный возврат в ноль, соответствующая цветовая индикация режимов.

Задание 4: «Система автоматического сканирования с индикацией границ»

  1. Создайте систему, в которой шаговый двигатель выполняет автоматическое сканирование в диапазоне 0–180° (условных градусов, пересчитанных в шаги).

  2. Подключите два светодиода:

  • Синий светодиод – индикация достижения 0°
  • Белый (или любой другой) светодиод – индикация достижения 180°
  1. Программа должна:
  • Плавно двигаться от начальной до конечной точки.
  • При достижении 180° загорается белый светодиод на 0,5 секунды.
  • Пауза 1 секунда в крайней точке.
  • Движение обратно к 0°.
  • При достижении 0° загорается синий светодиод на 0,5 секунды.
  • Пауза 1 секунда.
  • Цикл повторяется.
  1. На мониторе порта выводить текущий "угол", оставшееся расстояние и состояние светодиодов.

  2. Добавьте режим ручной настройки границ сканирования с помощью потенциометра и кнопки сохранения.

Дополнительное оборудование:

  • Светодиод синий – 1 шт.
  • Светодиод белый (или другой цвет) – 1 шт.
  • Резисторы 220-330 Ом – 2 шт. Критерий успеха: плавное автоматическое движение в заданном диапазоне, точная индикация достижения границ светодиодами, возможность калибровки границ.

Задание 5: «Интеграция с LCD-дисплеем» (ПОВЫШЕННАЯ СЛОЖНОСТЬ)

Задание 5: «Система меню управления шаговым двигателем с LCD-дисплеем и

потенциометром» Разработать многоуровневую систему меню для управления шаговым двигателем с использованием LCD-дисплея, потенциометра и кнопки выбора.

Необходимое оборудование (дополнительно к базовому):

  1. LCD дисплей 1602 с I²C интерфейсом – 1 шт.
  2. Потенциометр 10 кОм – 1 шт.
  3. Тактовая кнопка (для выбора) – 1 шт.
  4. Светодиод синий (индикация режима) – 1 шт.
  5. Резистор 220-330 Ом – 1 шт. Схема подключения:
  • Шаговый двигатель 28BYJ-48 → Драйвер ULN2003 → Пины 8,9,10,11 Arduino
  • LCD дисплей I²C → SDA → A4, SCL → A5, VCC → 5V, GND → GND
  • Потенциометр → Средний вывод → A0, крайние → 5V и GND
  • Кнопка выбора → Один вывод → Pin 2, другой → GND (с внутренней подтяжкой)
  • Синий светодиод → Анод (+через резистор) → Pin 3, катод → GND Описание работы системы:

Состояние 0: ИНИЦИАЛИЗАЦИЯ (при включении)

LCD screen:

Line 1: [SYSTEM STARTING] Line 2: [ PLEASE WAIT... ]

  • Синий светодиод мигает 3 раза (0,5 сек вкл/0,5 сек выкл)
  • Задержка 2 секунды
  • Переход в Состояние 1 Состояние 1: ВЫБОР РЕЖИМА

LCD screen:

Line 1: [>Speed ] Line 2: [ Position Auto]

  • Потенциометром выбирается режим:

  • Левое положение (0-341): "Скорость"

  • Среднее положение (342-682): "Позиция"

  • Правое положение (683-1023): "Авто"

  • Курсор ">" перемещается между строками в зависимости от положения потенциометра

  • Синий светодиод горит постоянно

  • При нажатии кнопки: подтверждение выбранного режима

  • Переход в Состояние 2 Состояние 2: ПОДТВЕРЖДЕНИЕ ВЫБОРА

LCD screen:

Line 1: [Mode: SPEED ] Line 2: [Confirm? (Press)] (где SPEED заменяется на выбранный режим: SPEED / RPM / Auto Mode)

  • Синий светодиод мигает быстро (0,2 сек вкл/0,2 сек выкл)
  • При нажатии кнопки: подтверждение, сохранение режима
  • Если кнопка не нажата в течение 5 секунд: возврат в Состояние 1
  • После подтверждения: переход в Состояние 3, 4 или 5 в зависимости от режима Состояние 3: РЕЖИМ "SPEED(СКОРОСТЬ)"

LCD screen:

Line 1: [RPM: 012/030 ] Line 2: [<- Return ]

  • Потенциометром регулируется скорость (1-30 об/мин)
  • Текущее значение отображается на LCD
  • Синий светодиод горит постоянно
  • При нажатии кнопки: двигатель начинает вращение с выбранной скоростью
  • При вращении двигателя на LCD добавляется индикация "[ДВИГАТЕЛЬ ВКЛ]"
  • При повторном нажатии кнопки: остановка двигателя
  • Двойное нажатие кнопки (в течение 0,5 сек): возврат в Состояние 1 Состояние 4: РЕЖИМ "RPM (ПОЗИЦИЯ)"

LCD screen:

Line 1: [Pos: 045/180° ] Line 2: [<- Return ]

  • Потенциометром задается целевая позиция (0-180°)

  • Синий светодиод мигает медленно (1 сек вкл/1 сек выкл)

  • При нажатии кнопки: двигатель перемещается в заданную позицию

  • Во время движения на LCD отображается: Line 1: [Moving to: 045°] Line 2: [ Please wait ]

  • После достижения позиции: отображение "[Позиция достигнута]"

  • Двойное нажатие кнопки: возврат в Состояние 1 Состояние 5: РЕЖИМ "Auto Mode (АВТО)"

LCD screen:

Line 1: [Auto Mode ] Line 2: [Direction: --> ]

  • Потенциометром выбирается направление:

  • Левая половина (0-511): Вращение вправо "-->"

  • Правая половина (512-1023): Вращение влево "<--"

  • Синий светодиод пульсирует (плавное изменение яркости)

  • При нажатии кнопки: двигатель начинает автоматическое сканирование 0-180-0°

  • Во время работы: Line 1: [Scanning... ] Line 2: [Pos: 120° --> ]

  • При нажатии кнопки: остановка сканирования

  • Двойное нажатие кнопки: возврат в Состояние 1 Критерии успеха:

  1. Все состояния меню работают корректно

  2. Плавные переходы между состояниями

  3. Точное управление двигателем во всех режимах

  4. Четкая визуальная обратная связь на LCD

  5. Правильная обработка дребезга кнопок и таймингов

  6. Стабильность системы (без зависаний) Требуемые результаты:

  7. Полная принципиальная схема

  8. Код для Arduino с подробными комментариями

  9. Отчет с описанием каждого состояния и его работы

Содержание Отчета

Отчёт о выполнении лабораторной работы должен содержать:

– титульный лист с номером и названием работы;

– цель работы;

– краткие теоретические сведения о подключаемых устройствах и особенностях их

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

Контрольные вопросы:

  1. Чем отличается шаговый двигатель от обычного двигателя постоянного тока?

  2. Какие преимущества дает использование библиотеки AccelStepper по сравнению с библиотекой Stepper?

  3. Почему важно использовать внешнее питание для шагового двигателя при работе с большими нагрузками?

  4. Как работает драйвер ULN2003 и для чего нужны встроенные защитные диоды?

  5. Какие методы можно использовать для уменьшения резонанса и вибрации в шаговых двигателях?

  6. Как осуществляется расчет количества шагов для заданного угла поворота?

  7. Какие факторы влияют на точность позиционирования шагового двигателя?

  8. В чем разница между волновым, полношаговым и полушаговым режимами управления?

  9. Как организовать обработку дребезга контактов при управлении кнопками?

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


← Практическая работа №3 · Практическая работа №5 →

Оригинал материала на GitHub