Широтно-импульсная модуляция (ШИМ) - это метод, который изменяет ширину импульса при сохранении постоянной частоты волны. Метод ШИМ в основном используется для управления яркостью светодиода, скоростью двигателя постоянного тока, управлением серводвигателем или в других случаях, когда необходимо генерировать аналоговый сигнал с использованием цифрового источника. Мы подробно объяснили ШИМ в предыдущей статье.
В этом руководстве мы поговорим о выводах PWM (широтно-импульсной модуляции) платы разработки ESP32. Все контакты GPIO платы разработки ESP32 (кроме Power, GND, Tx, Rx и EN) могут использоваться для получения сигнала PWM. В качестве примера ESP32 PWM мы построим простую схему, которая изменяет яркость светодиода в соответствии с сигналами PWM.
Необходимые компоненты
- ESP32
- СВЕТОДИОД
- Резистор 330 Ом
- 10к банк
- Макетная плата
Генерация ШИМ
Прежде чем объяснять генерацию ШИМ на ESP32, давайте обсудим некоторые термины, связанные с ШИМ.
TON (On Time): время, в течение которого сигнал высокий.
TOFF (Off Time): время, в течение которого сигнал низкий.
Период: это сумма времени включения и времени выключения сигнала ШИМ.
TotalPeriod = T ON + T OFF
Рабочий цикл: процент времени, в течение которого сигнал был высоким в течение периода сигнала ШИМ.
Рабочий цикл = T ON / T Total * 100
Например, если импульс с общим периодом 10 мс остается включенным (высоким) в течение 5 мс. Тогда рабочий цикл будет:
Рабочий цикл = 5/10 * 100 = 50% рабочий цикл
Схема содержит один светодиод, резистор и потенциометр 10 кОм. Отрицательный вывод светодиода подключен к GND ESP32 через резистор 330 Ом. Вы можете использовать резистор любого номинала от 230 Ом до 500 Ом. Подключите положительный вывод светодиода к GPIO 16, а сигнальный вывод Pot к выводу ADC1 (VP) ESP32.
Пояснение кода для ESP32 PWM
Полный код приведен в конце страницы.
Этот код не требует какой-либо библиотеки, поэтому начните свой код с определения контакта, к которому подключен светодиод. В моем случае я использовал GPIO 16 для подключения светодиода.
const int ledPin = 16; // 16 соответствует GPIO16
После этого установите свойства сигнала ШИМ в следующих строках. Я установил частоту ШИМ на 9000, а разрешение на 10, вы можете изменить его, чтобы генерировать разные сигналы ШИМ. Платы ESP32 поддерживают разрешение ШИМ от 1 до 16 бит. Также нужно выбрать канал ШИМ. ESP32 имеет в общей сложности 16 (от 0 до 15) каналов ШИМ.
const int freq = 9000; const int ledChannel = 0; const int разрешение = 10;
Теперь внутри функции void setup () настройте LED PWM со свойствами, которые вы установили ранее с помощью функции ledcSetup () . В следующей строке определите вывод GPIO, к которому подключен светодиод. Функция ledcAttachPin () используется для определения вывода GPIO и канала, который генерирует сигнал. В моем случае я использовал ledPin, то есть GPIO 16, и ledChannel, соответствующий каналу 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, разрешение); ledcAttachPin (ledPin, ledChannel); }
В цикле void считайте аналоговый вывод, к которому подключен Pot, и сохраните показания в переменной с именем «dutyCycle» . Яркость светодиода будет увеличиваться или уменьшаться в зависимости от вращения потенциометра. LedcWrite () очень похож на analogWrite ().
void loop () {dutyCycle = аналоговое чтение (A0); ledcWrite (ledChannel, dutyCycle); задержка (15); }
Тестирование сигналов ШИМ ESP32
Чтобы проверить сигналы PWM ESP32, подключите светодиод и потенциометр в соответствии с принципиальной схемой и загрузите код в ESP32. Убедитесь, что вы выбрали правильную плату и COM-порт. Теперь поверните потенциометр, чтобы увеличить или уменьшить яркость светодиода.
Полная работа показана на видео ниже. Также проверьте другие проекты на базе ESP32, перейдя по ссылке.