Урок ESP8266. Использование широтно-импульсной модуляции (ШИМ).

Цель этого урока - объяснить, как использовать метод широтно-импульсной модуляции (ШИМ) с ESP8266 и основные отличия реализации от Arduino.

Широтно-импульсная модуляция - Pulse Width Modulation (PWM).

В методе PWM мы создаем прямоугольную волну с контролируемым рабочим циклом. Это означает, что мы можем контролировать для каждого периода волны, сколько времени он находится в состоянии VCC (HIGH) или GND (LOW). Таким образом, обычно рабочий цикл указывается как процент времени, в течение которого находится в ВЫСОКОМ состоянии по отношению к периоду.

Таким образом, ШИМ позволяет кодировать аналоговое значение в цифровом виде и управлять аналоговой схемой. Другими словами, мы можем моделировать аналоговые напряжения между GND и VCC.

Широтно-импульсная модуляция - Pulse Width Modulation (PWM).

Существуют примеры скетчей, позволяющие управлять интенсивностью свечения светодиода или скоростью вращения двигателя с помощью сигнала, создаваемого микроконтроллером (естественно, для двигателя, с помощью транзистора или другого устройства для подачи тока, необходимого для его перемещения).

ШИМ сигнал ESP8266 и основные отличия от Arduino.

Будем использовать библиотеки ESP8266 для Arduino IDE. Вы можете посмотреть здесь, как настроить Arduino IDE для поддержки ESP8266.

Итак, чтобы использовать ШИМ, мы можем вызвать функцию analogWrite, которая также доступна (и часто используется) при программировании плат Arduino. Тем не менее, есть некоторые различия между реализацией для Arduino и для ESP8266.

В обоих случаях эта функция получает в качестве аргументов пин, на котором должен генерироваться сигнал ШИМ, и параметр для указания рабочего цикла.

В случае реализации ESP8266, можем передать значение от 0 (GND) до 1023 (VCC) для рабочего цикла. Тем не менее, этот диапазон можно изменить с помощью вызова функции analogWriteRange.

analogWriteRange(range);

Для реализации большинства плат Arduino можно определить только значение от 0 до 255 для рабочего цикла, что является более низким разрешением, чем для ESP8266. Тем не менее, для некоторых плат, таких как Arduino Due, можем вызвать функцию AnalogWriteResolution, чтобы увеличить это значение.

Что касается частоты прямоугольной волны, создаваемой ESP8266, значение по умолчанию составляет 1 кГц. Данное значение можно изменить с помощью вызова функции analogWriteFreq.

analogWriteFreq(frequency);

Для реализации Arduino частота зависит от используемой платы.

Схема для проверки изменения свечения светодиода с помощью ШИМ сигнала ESP8266.

Схема для проверки изменения свечения светодиода с помощью ШИМ сигнала ESP8266.

После загрузки кода, подключите светодиод к ESP8266, как показано на следующей принципиальной схеме.

Если используете ESP-01, вы можете проверить распиновку платы здесь .

Код ESP8266 NodeMCU PWM.

const int ledPin = 2;

void setup() {

}

void loop() {
  // увеличение яркости светодиода
  for (int dutyCycle = 0; dutyCycle < 1023; dutyCycle++) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

  // уменьшиние яркости светодиода
  for (int dutyCycle = 1023; dutyCycle > 0; dutyCycle--) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }
}

Скопируйте код в свою Arduino IDE и загрузите в ESP8266.

Описание кода ESP8266 NodeMCU PWM.

Начните с определения того, к какому выводу подключен светодиод. В этом случае светодиод присоединяется к GPIO 2 (D4).

const int ledPin = 2;

В loop(), изменяем значение от 0 до 1023 в цикл for, чтобы увеличить яркость светодиода.

// увеличение яркости светодиода
  for (int dutyCycle = 0; dutyCycle < 1023; dutyCycle++) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

Затем от 1023 до 0 для уменьшения яркости.

// уменьшиние яркости светодиода
  for (int dutyCycle = 1023; dutyCycle > 0; dutyCycle--) {
    // изменение яркости светодиода с помощью ШИМ
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

Чтобы установить яркость светодиода, нужно использовать функцию analogWrite (), которая принимает в качестве аргументов GPIO, на котором хотим получить сигнал ШИМ, и значение от 0 до 1023, чтобы установить рабочий цикл.

analogWrite(pin, value);

При работе свечение светодиода сперва увеличивается, а затем уменьшается.

При работе свечение светодиода сперва увеличивается, а затем уменьшается.


Некоторые отладочные платы подключены, имеют подключения встроенного светодиода к GPIO 2 (D4). Ниже приведены фото изменения свечения встроенного светодиода следующих плат:

  • Клон NodeMcu v2

Клон NodeMcu v2

  • WeMos D1

WeMos D1

  • ESP-01 (из 3 различных модификаций всего одна имеет подключение к GPIO 2).

ESP-01 (из 3 различных модификаций всего одна имеет подключение к GPIO 2).


Понравился Урок ESP8266. Использование широтно-импульсной модуляции (ШИМ)? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Код ESP8266 NodeMCU PWM Код ESP8266 NodeMCU PWM.ino1 Kb 19 Скачать

Комментарии

Ваше Имя*