Az impulzusszélesség-moduláció (PWM) egy olyan technika, amely az impulzus szélességét úgy változtatja meg, hogy közben a hullámfrekvencia állandó marad. A PWM technikát elsősorban a LED fényerejének, az egyenáramú motor fordulatszámának, szervomotorjának vezérléséhez, vagy más esetekben használják, amikor analóg jelet kell létrehozniuk digitális forrás segítségével. Az előző cikkben részletesen ismertettük a PWM-et.
Ebben az oktatóanyagban az ESP32 fejlesztőtábla PWM (impulzusszélesség-moduláció) csapjairól fogunk beszélni. Az ESP32 fejlesztőkártya összes GPIO-tűje (a Power, GND, Tx, Rx és EN kivételével) felhasználható a PWM jel megszerzésére. Mint ESP32 PWM például fogunk építeni egy egyszerű áramkör, amely megváltoztatja a LED fényereje szerint PWM jelet.
Szükséges alkatrészek
- ESP32
- VEZETTE
- 330 Ω ellenállás
- 10 ezer fazék
- Kenyérlemez
PWM Generation
Mielőtt elmagyaráznánk a PWM generációt az ESP32-n, beszéljünk néhány, a PWM-hez kapcsolódó kifejezésről.
TON (bekapcsolási idő): Az az időtartam, amikor a jel magas.
TOFF (kikapcsolási idő): Az az időtartam, amikor a jel alacsony.
Időszak: A PWM jel bekapcsolási és kikapcsolási idejének összege.
TotalPeriod = T BE + T KI
Üzemeltetési ciklus: Az az idő százalékos aránya, amikor a jel magas volt a PWM jel ideje alatt.
Üzemi ciklus = T BE / T Összesen * 100
Például, ha egy impulzus, amelynek teljes időtartama 10 ms, 5 másodpercig BE (magas) állapotban marad. Ezután az üzemi ciklus a következő lesz:
Üzemeltetési ciklus = 5/10 * 100 = 50% -os terhelési ciklus
Az áramkör egyetlen LED-et, ellenállást és 10K potenciométert tartalmaz. A LED negatív csapja 330 Ω-os ellenálláson keresztül csatlakozik az ESP32 GND-jéhez. Bármely ellenállási értéket használhatja 230 Ω és 500 Ω között. Csatlakoztassa a LED pozitív tűt a GPIO 16-hoz, a Pot jelzőcsapját pedig az ESP32 ADC1 (VP) tűjéhez.
Az ESP32 PWM kódmagyarázata
A teljes kódot az oldal végén adjuk meg.
Ehhez a kódhoz nincs szükség könyvtárra, ezért indítsa el a kódot a PIN-kód megadásával. Esetemben a GPIO 16-ot használtam a LED csatlakoztatásához.
const int ledPin = 16; // 16 megfelel a GPIO16-nak
Ezt követően állítsa be a PWM jel tulajdonságait a következő sorokban. A PWM frekvenciát 9000-re állítottam, a felbontást pedig 10-re változtathatja, így különböző PWM jeleket generálhat. Az ESP32 táblák támogatják a PWM felbontást 1 bitről 16 bitre. Ki kell választania egy PWM csatornát is. Az ESP32-nek összesen 16 (0-15) PWM csatornája van.
const int frekvencia = 9000; const int ledChannel = 0; const int felbontás = 10;
Most a void setup () funkció belsejében konfigurálja a PWM LED-et a korábban beállított tulajdonságokkal a ledcSetup () függvény segítségével. A következő sorban határozza meg a GPIO tűt, ahová a LED csatlakozik. A ledcAttachPin () függvény segítségével meghatározható a GPIO tű és a jelet előállító csatorna. Esetemben a ledPint használtam, amely GPIO 16, és a ledChannelt, amely megfelel a 0 csatornának.
void setup () {Soros.kezdés (9600); ledcSetup (ledChannel, frekvencia, felbontás); ledcAttachPin (ledPin, ledChannel); }
A void ciklusban olvassa el az analóg csapot, ahol a Pot csatlakozik, és tárolja az olvasást a 'dutyCycle' nevű változóban . A LED fényereje a potenciométer forgásától függően növekszik vagy csökken. A ledcWrite () nagyon hasonlít az analogWrite () elemre.
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); késés (15); }
Az ESP32 PWM jelek tesztelése
Az ESP32 PWM jelek teszteléséhez csatlakoztassa a LED-et és a potenciométert a kapcsolási rajz szerint, és töltse fel a kódot az ESP32-re. Győződjön meg arról, hogy a megfelelő táblát és COM portot választotta. Most forgassa el a potenciométert a LED fényerejének növeléséhez vagy csökkentéséhez.
A teljes munkát az alábbi videó mutatja. Ezenkívül ellenőrizze a többi ESP32 alapú projektet is a linkre kattintva.