Рейтинг@Mail.ru
ШИМ + Arduino
ШИМ + Arduino

Что такое ШИМ и как она используется в Arduino

Давайте разберёмся, что скрывается за аббревиатурой ШИМ, как это работает, для чего нужно и как мы можем использовать её в работе с Arduino.

Инструкция по использованию ШИМ в Arduino

Вам понадобится

  • Arduino;
  • светодиод;
  • резистор сопротивлением 200 Ом;
  • компьютер.

1Общие сведенияо широтно-импульсной модуляции

Цифровые выводы Arduino могут выдавать только два значения: логический 0 (LOW, низкий уровень) и логическую 1 (HIGH, высокий). На то они и цифровые. Но есть у Ардуино «особые» выводы, которые обозначаются PWM. Их иногда обозначают волнистой чертой "~" или обводят кружочками или ещё как-то выделяют среди прочих. PWM расшифровывается как Pulse-width modulation или широтно-импульсная модуляция, ШИМ.

Обозначение выходов с ШИМ на Arduino Leonardo
Обозначение выходов с ШИМ на Arduino Leonardo

Широтно-импульсно модулированный сигнал – это импульсный сигнал постоянной частоты, но переменной скважности (соотношение длительности импульса и периода его следования). Из-за того, что большинство физических процессов в природе имеют инерцию, то резкие перепады напряжения от 1 к 0 будут сглаживаться, принимая некоторое среднее значение. С помощью задания скважности можно менять среднее напряжение на выходе ШИМ.

Если скважность равняется 100%, то всё время на цифровом выходе Arduino будет напряжение логическая "1" или 5 вольт. Если задать скважность 50%, то половину времени на выходе будет логическая "1", а половину – логический "0", и среднее напряжение будет равняться 2,5 вольтам. Ну и так далее.

Принцип работы широтно-импульсной модуляции (ШИМ)
Принцип работы широтно-импульсной модуляции (ШИМ)

В программе скважность задаётся не в процентах, а числом от 0 до 255. Например, команда analogWrite(10, 64) скажет микроконтроллеру подать на цифровой PWM выход №10 сигнал со скважностью 25%.

Выводы Arduino с функцией широтно-импульсной модуляции работают на частоте около 500 Гц. Значит, период следования импульсов – около 2 миллисекунд, что и отмеряют зелёные вертикальные штрихи на рисунке.

Получается, что мы можем сымитировать аналоговый сигнал на цифровом выходе! Интересно, правда?!

Как же мы можем использовать ШИМ? Применений масса! Например, управлять яркостью светодиода, скоростью вращения двигателя, током транзистора, звуком из пьезоизлучателя и т.д.…

2Схема для демонстрации широтно-импульсной модуляции в Arduino

Давайте рассмотрим самый базовый пример – управление яркостью светодиода с помощью ШИМ. Соберём классическую схему.

Схема для демонстрации ШИМ в Arduino
Схема для демонстрации ШИМ в Arduino

3Пример скетча с ШИМ

Откроем из примеров скетч "Fade": Файл Образцы 01.Basics Fade.

Открываем скетч для Arduino с использованием ШИМ
Открываем скетч для Arduino с использованием ШИМ

Немного изменим его и загрузим в память Arduino.

int ledPin = 3;        // объявляем пин, управляющий светодиодом
int brightness = 0;    // переменная для задания яркости
int fadeAmount = 5;    // шаг изменения яркости

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  analogWrite(ledPin, brightness); // устанавливаем яркость brightness на выводе ledPin

  brightness += fadeAmount; // изменяем значение яркости

  /* при достижении границ 0 или 255 
     меняем направление изменения яркости */
  if (brightness == 0 || brightness == 255) { 
    fadeAmount = -fadeAmount; // изменяем знак шага
  }
  delay(30); // задержка для большей видимости эффекта
}

4Управление яркостью светодиода с помощью PWM и Arduino

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

Управление яркостью светодиода – пример широтно-импульсной модуляции, используемой в Arduino
Управление яркостью светодиода – пример широтно-импульсной модуляции, используемой в Arduino
Последнее изменениеВторник, 05 Январь 2016 16:29
(4 голосов)
Прочитано 18999 раз

Поделиться

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены