Модулация на широчината на импулса (PWM) е техника, която променя ширината на импулса, като същевременно поддържа честотата на вълната постоянна. Техниката PWM, използвана главно за управление на яркостта на светодиода, скоростта на постояннотоков двигател, управление на серво мотор или в други случаи, когато трябва да генерира аналогов сигнал с помощта на цифров източник. Обяснихме подробно ШИМ в предишната статия.
В този урок ще говорим за PWM (модулация с широчина на импулса) щифтове на платката за развитие на ESP32. Всички GPIO щифтове на платката за разработка на ESP32 (с изключение на Power, GND, Tx, Rx и EN) могат да се използват за получаване на PWM сигнал. Като пример за EW32 PWM, ще изградим проста схема, която променя яркостта на светодиода според PWM сигналите.
Необходими компоненти
- ESP32
- LED
- 330 Ω резистор
- 10k пот
- Макет
PWM поколение
Преди да обясним PWM поколението на ESP32, нека обсъдим някои термини, свързани с PWM.
TON (On Time): Продължителността на времето, когато сигналът е висок.
TOFF (Време за изключване): Продължителността на времето, когато сигналът е нисък.
Период: Това е сумата от времето за включване и изключване на ШИМ сигнала.
TotalPeriod = T ON + T OFF
Работен цикъл: Процентът от времето, когато сигналът е бил висок по време на периода на ШИМ сигнала.
Работен цикъл = T ON / T Общо * 100
Например, ако импулс с общ период от 10 ms остава ВКЛЮЧЕН (висок) за 5 ms. След това работният цикъл ще бъде:
Работен цикъл = 5/10 * 100 = 50% работен цикъл
Схемата съдържа един светодиод, резистор и 10K потенциометър. Отрицателният щифт на LED е свързан към GND на ESP32 чрез 330 Ω резистор. Можете да използвате всяка резисторна стойност между 230 Ω и 500 Ω. Свържете LED положителния щифт към GPIO 16 и сигналния щифт на Pot към ADC1 (VP) щифт на ESP32.
Обяснение на кода за ESP32 PWM
Пълният код е даден в края на страницата.
Този код не изисква никаква библиотека, така че стартирайте кода си, като дефинирате щифта, към който е прикрепен светодиодът. В моя случай използвах GPIO 16 за свързване на светодиода.
const int ledPin = 16; // 16 съответства на GPIO16
След това задайте свойствата на PWM сигнала в следващите редове. Зададох честотата на ШИМ на 9000 и разделителната способност на 10, можете да я промените, за да генерирате различни ШИМ сигнали. Платките ESP32 поддържат PWM резолюция от 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, честота, резолюция); ledcAttachPin (ledPin, ledChannel); }
В цикъла void прочетете аналоговия щифт, където е свързан гърнето и запазете показанието в променлива, наречена 'dutyCycle' . Яркостта на светодиода ще се увеличава или намалява според въртенето на потенциометъра. В ledcWrite () е много подобен на analogWrite ().
празен цикъл () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); забавяне (15); }
Тестване на ШИМ сигнали ESP32
За да тествате EW32 PWM сигналите, свържете светодиода и потенциометъра според схемата и качете кода на вашия ESP32. Уверете се, че сте избрали правилната платка и COM порт. Сега завъртете потенциометъра, за да увеличите или намалите яркостта на светодиода.
Пълната работа е показана във видеото, дадено по-долу. Също така проверете други проекти, базирани на ESP32, като следвате връзката.