ПМК 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, получить практические навыки работы с различными режимами управления и интеграции шагового двигателя в управляющие системы.
Задачи работы:
- Изучить конструктивные особенности шагового двигателя 28BYJ-48 и драйвера
Uln2003.
-
Освоить различные режимы управления шаговым двигателем (волновой, полношаговый, полушаговый).
-
Научиться использовать библиотеки Stepper и AccelStepper для управления двигателем.
-
Разработать системы управления с различными типами входных устройств (кнопки, потенциометр, энкодер).
-
Создать комплексную систему с интеграцией шагового двигателя, дисплея и органов управления.
Студент должен знать:
-
Принцип работы шаговых двигателей и их отличия от двигателей постоянного тока.
-
Основные характеристики шагового двигателя 28BYJ-48 (напряжение, шаг на оборот, скорость).
-
Назначение и принцип работы драйвера ULN2003.
-
Режимы управления шаговыми двигателями (волновой, полношаговый, полушаговый, микрошаговый).
-
Особенности использования библиотек Stepper и AccelStepper.
-
Методы подавления дребезга контактов кнопок. Студент должен уметь:
-
Подключать шаговый двигатель к Arduino через драйвер ULN2003.
-
Выполнять расчеты количества шагов для заданного угла поворота.
-
Программировать управление скоростью и направлением вращения.
-
Реализовывать позиционное управление с возвратом в нулевую точку.
-
Интегрировать шаговый двигатель с другими устройствами (дисплеи, энкодеры).
-
Отлаживать схемы и программы управления шаговым двигателем. Студент должен обладать практическими навыками:
-
Сборки электрических схем с шаговым двигателем.
-
Использования библиотек для управления шаговыми двигателями.
-
Реализации плавного разгона и торможения двигателя.
-
Создания пользовательских интерфейсов для управления двигателем.
-
Диагностики и устранения неисправностей в системе управления.
Необходимое оборудование:
- Плата Arduino UNO – 1 шт.
- Шаговый двигатель 28BYJ-48 – 1 шт.
- Драйвер ULN2003 – 1 шт.
- Потенциометр 10 кОм – 1 шт.
- Тактовые кнопки – 3-4 шт.
- LCD дисплей 1602 с I²C – 1 шт.
- Ротационный энкодер (опционально) – 1 шт.
- Макетная плата – 1 шт.
- Набор соединительных проводов – 1 комплект.
- Внешний источник питания 5 В 1А (рекомендуется) – 1 шт.
- USB-кабель для Arduino – 1 шт.
Задания Для Выполнения
Задание 1: «Базовое вращение шагового двигателя»
- Подключите шаговый двигатель 28BYJ-48 с драйвером ULN2003 к Arduino.
- Используя библиотеку Stepper, напишите программу, которая:
- Совершает 1 полный оборот по часовой стрелке со скоростью 5 об/мин.
- Пауза 2 секунды.
- Совершает 2 полных оборота против часовой стрелки со скоростью 10 об/мин.
- Пауза 2 секунды.
- Цикл повторяется.
- На мониторе последовательного порта выводите сообщения о направлении вращения и пройденных шагах. Критерий успеха: двигатель точно выполняет заданные обороты с указанной скоростью.
Задание 2: «Управление скоростью с помощью потенциометра»
- Подключите потенциометр к аналоговому входу A0.
- Напишите программу, которая:
-
Преобразует значение с потенциометра (0–1023) в скорость вращения двигателя (1– 30 об/мин).
-
Двигатель постоянно вращается с текущей скоростью.
-
При изменении скорости на мониторе порта выводится: "Скорость: X RPM".
- Добавьте кнопку, которая меняет направление вращения при нажатии. Критерий успеха: плавное изменение скорости вращения при повороте потенциометра, переключение направления по кнопке.
Задание 3: «Позиционное управление с помощью кнопок с визуальной индикацией»
-
Подключите 3 кнопки: "Вперед" (зеленый светодиод), "Назад" (желтый светодиод), "Сброс" (красный светодиод).
-
Используя библиотеку AccelStepper, реализуйте систему, где:
-
Кнопка "Вперед" перемещает двигатель на 100 шагов вперед, при этом загорается зеленый светодиод.
-
Кнопка "Назад" перемещает двигатель на 100 шагов назад, при этом загорается желтый светодиод.
-
Кнопка "Сброс" возвращает двигатель в нулевую позицию, при этом загорается красный светодиод на время движения к нулю.
-
Светодиод горит только во время движения двигателя и гаснет после завершения перемещения.
- На мониторе порта отображается текущая позиция в шагах и активный режим. Дополнительное оборудование:
- Светодиод зеленый – 1 шт.
- Светодиод желтый – 1 шт.
- Светодиод красный – 1 шт.
- Резисторы 220-330 Ом – 3 шт. Критерий успеха: точное позиционирование, плавное движение, корректный возврат в ноль, соответствующая цветовая индикация режимов.
Задание 4: «Система автоматического сканирования с индикацией границ»
-
Создайте систему, в которой шаговый двигатель выполняет автоматическое сканирование в диапазоне 0–180° (условных градусов, пересчитанных в шаги).
-
Подключите два светодиода:
- Синий светодиод – индикация достижения 0°
- Белый (или любой другой) светодиод – индикация достижения 180°
- Программа должна:
- Плавно двигаться от начальной до конечной точки.
- При достижении 180° загорается белый светодиод на 0,5 секунды.
- Пауза 1 секунда в крайней точке.
- Движение обратно к 0°.
- При достижении 0° загорается синий светодиод на 0,5 секунды.
- Пауза 1 секунда.
- Цикл повторяется.
-
На мониторе порта выводить текущий "угол", оставшееся расстояние и состояние светодиодов.
-
Добавьте режим ручной настройки границ сканирования с помощью потенциометра и кнопки сохранения.
Дополнительное оборудование:
- Светодиод синий – 1 шт.
- Светодиод белый (или другой цвет) – 1 шт.
- Резисторы 220-330 Ом – 2 шт. Критерий успеха: плавное автоматическое движение в заданном диапазоне, точная индикация достижения границ светодиодами, возможность калибровки границ.
Задание 5: «Интеграция с LCD-дисплеем» (ПОВЫШЕННАЯ СЛОЖНОСТЬ)
Задание 5: «Система меню управления шаговым двигателем с LCD-дисплеем и
потенциометром» Разработать многоуровневую систему меню для управления шаговым двигателем с использованием LCD-дисплея, потенциометра и кнопки выбора.
Необходимое оборудование (дополнительно к базовому):
- LCD дисплей 1602 с I²C интерфейсом – 1 шт.
- Потенциометр 10 кОм – 1 шт.
- Тактовая кнопка (для выбора) – 1 шт.
- Светодиод синий (индикация режима) – 1 шт.
- Резистор 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 Критерии успеха:
-
Все состояния меню работают корректно
-
Плавные переходы между состояниями
-
Точное управление двигателем во всех режимах
-
Четкая визуальная обратная связь на LCD
-
Правильная обработка дребезга кнопок и таймингов
-
Стабильность системы (без зависаний) Требуемые результаты:
-
Полная принципиальная схема
-
Код для Arduino с подробными комментариями
-
Отчет с описанием каждого состояния и его работы
Содержание Отчета
Отчёт о выполнении лабораторной работы должен содержать:
– титульный лист с номером и названием работы;
– цель работы;
– краткие теоретические сведения о подключаемых устройствах и особенностях их
работы; – схемы соединения элементов, выполненные в программе Fritzing или Tinkercad; – описание алгоритма работы собранного устройства; – текст программ, содержащий необходимые комментарии и пояснения; – описание особенностей подключения библиотек и функции, которые были использованы из импортированных библиотек; – общие выводы по работе.
Контрольные вопросы:
-
Чем отличается шаговый двигатель от обычного двигателя постоянного тока?
-
Какие преимущества дает использование библиотеки AccelStepper по сравнению с библиотекой Stepper?
-
Почему важно использовать внешнее питание для шагового двигателя при работе с большими нагрузками?
-
Как работает драйвер ULN2003 и для чего нужны встроенные защитные диоды?
-
Какие методы можно использовать для уменьшения резонанса и вибрации в шаговых двигателях?
-
Как осуществляется расчет количества шагов для заданного угла поворота?
-
Какие факторы влияют на точность позиционирования шагового двигателя?
-
В чем разница между волновым, полношаговым и полушаговым режимами управления?
-
Как организовать обработку дребезга контактов при управлении кнопками?
-
Какие меры безопасности необходимо соблюдать при работе с шаговыми двигателями?