4.02.1. Лабораторная работа №4.2.1.md
Визуализация ШИМ-сигнала
Тема работы
Мы знаем, что ШИМ — это очень быстрые прямоугольные импульсы. Но можно ли их «поймать» с помощью простой команды digitalRead()
? Что она покажет, если сигнал меняется сотни раз в секунду? В этой лабораторной работе мы проведём интересный эксперимент - сгенерируем ШИМ-сигнал на одном пине и будем считывать его с помощью digitalRead()
на другом. А результат визуализируем с помощью Плоттера по последовательному соединению.
Цель
- Научиться использовать Плоттер по последовательному соединению для визуализации данных.
- Наглядно увидеть природу ШИМ-сигнала с помощью цифровых инструментов.
- Понять, как
digitalRead()
воспринимает очень быстрые сигналы.
Оборудование и материалы
- Отладочная плата
Рудирон
. - 1 соединительный провод.
- USB-кабель для подключения
Рудирона
к компьютеру. - Компьютер с настроенной средой
Arduino IDE
.
Ход работы
-
Успеет ли
digitalRead()
?ШИМ-сигнал на
Рудироне
переключается междуHIGH
иLOW
сотни раз в секунду. КомандаdigitalRead()
тоже работает очень быстро, но не мгновенно. Когда мы пытаемся прочитать такой быстрый сигнал, мы как бы делаем «моментальный снимок» состояния пина. В зависимости от того, в какой именно момент времени произойдёт чтение — в момент импульса (HIGH
) или в момент паузы (LOW
), — мы получим1
или0
.Если коэффициент заполнения ШИМ маленький, то большую часть времени на пине будет
LOW
, и вероятность «поймать»LOW
будет высокой. Если же коэффициент большой, то почти всегда мы будем считыватьHIGH
. -
Сборка схемы
Схема предельно проста. Нам нужно лишь соединить один ШИМ-пин с одним обычным цифровым входом.
- Возьмите соединительный провод.
- Один его конец подключите к пину 5 (который поддерживает ШИМ).
- Другой конец подключите к пину 2.
Вот и всё! Мы будем генерировать сигнал на пине 5 и тут же измерять его на пине 2.
-
Написание и загрузка кода
- Установите перемычку
PRG | RUN
в положениеPRG
. -
В
Arduino IDE
введите следующий код:const int pwmPin = 5; const int readPin = 2; void setup() { // Инициализируем последовательный порт на высокой скорости Serial.begin(115200); pinMode(pwmPin, OUTPUT); pinMode(readPin, INPUT); // Устанавливаем ШИМ с коэффициентом заполнения ~40% (100 из 255) analogWrite(pwmPin, 100); } void loop() { // В бесконечном цикле считываем состояние пина // и выводим его в Serial для плоттера Serial.println(digitalRead(readPin)); }
- Нажмите кнопку «Upload», чтобы загрузить код на плату.
- Установите перемычку
-
Проверка работы в Плоттере
- После загрузки откройте Плоттер по последовательному соединению (
Tools → Serial Plotter
). - Вы увидите график, который прыгает между значениями
0
и1
. Это и есть наши «моментальные снимки» ШИМ-сигнала. - Теперь поэкспериментируйте! Измените значение в
analogWrite()
:- Поставьте
analogWrite(pwmPin, 10);
. Загрузите код. График будет почти всё время находиться на уровне0
, лишь изредка подпрыгивая до1
. - Поставьте
analogWrite(pwmPin, 250);
. Загрузите код. Теперь график будет почти всегда на уровне1
, лишь изредка падая до0
.
- Поставьте
- После загрузки откройте Плоттер по последовательному соединению (
Результаты
Вы «поймали» ШИМ-сигнал с помощью digitalRead()
! Вы наглядно увидели, что он состоит из последовательности нулей и единиц, а коэффициент заполнения определяет, как часто мы будем «ловить» то или иное состояние.
Анализ результатов
Этот эксперимент доказывает, что ШИМ — это не какое-то «аналоговое колдовство», а реальный цифровой сигнал, который очень быстро переключается.
- При
analogWrite(pwmPin, 10)
сигнал находится в состоянииHIGH
очень короткое время, поэтомуdigitalRead()
чаще всего «видит»LOW
(ноль). - При
analogWrite(pwmPin, 250)
сигнал почти всё время находится в состоянииHIGH
, иdigitalRead()
почти всегда считываетHIGH
(единицу).
Выводы
В этой лабораторной работе вы заглянули «под капот» ШИМ-сигнала, используя только цифровые инструменты. Вы наглядно убедились, что плавная регулировка яркости — это иллюзия, созданная очень быстрым переключением. Этот опыт поможет вам лучше понимать, как работают сигналы внутри ваших проектов.
Вопросы для самопроверки
- Почему при чтении ШИМ-сигнала с помощью
digitalRead()
мы видим и нули, и единицы? - Как изменится вид графика в плоттере, если установить
analogWrite()
в значение200
? - Что произойдёт, если убрать
analogWrite()
изsetup()
и просто написатьdigitalWrite(pwmPin, HIGH)
? Что вы увидите в плоттере? А еслиdigitalWrite(pwmPin, LOW)
? - Почему для этого эксперимента важна высокая скорость
Serial.begin(115200)
? - Можно ли таким способом точно измерить коэффициент заполнения ШИМ? Почему да или нет?
В этой лабораторной работе вы заглянули «под капот» ШИМ-сигнала, используя только цифровые инструменты. Вы наглядно убедились, что ШИМ — это реальный цифровой сигнал, который очень быстро переключается. В следующей лабораторной работе мы применим этот мощный инструмент для создания плавного «дыхания» светодиода.
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home