Pulsbreedtemodulatie (PWM) is een techniek die de breedte van een puls varieert terwijl de golffrequentie constant wordt gehouden. De PWM-techniek wordt voornamelijk gebruikt om de helderheid van de LED, de snelheid van de DC-motor, het besturen van een servomotor of in andere gevallen waar een analoog signaal moet worden gegenereerd met een digitale bron, te regelen. In het vorige artikel hebben we de PWM uitgebreid uitgelegd.
In deze tutorial gaan we het hebben over PWM-pinnen (pulsbreedtemodulatie) van het ESP32-ontwikkelbord. Alle GPIO-pinnen van het ESP32-ontwikkelbord (behalve Power, GND, Tx, Rx en EN) kunnen worden gebruikt om het PWM-signaal te krijgen. Als ESP32 PWM-voorbeeld zullen we een eenvoudig circuit bouwen dat de LED-helderheid aanpast aan de hand van PWM-signalen.
Componenten vereist
- ESP32
- LED
- 330 Ω weerstand
- 10k pot
- Breadboard
PWM-generatie
Laten we, voordat we de PWM-generatie op ESP32 uitleggen, enkele termen bespreken die verband houden met PWM.
TON (On Time): De tijdsduur dat het signaal hoog is.
TOFF (Off Time): De tijdsduur dat het signaal laag is.
Periode: het is de som van de aan- en uit-tijd van het PWM-signaal.
TotalPeriod = T AAN + T UIT
Duty Cycle: Het percentage van de tijd dat het signaal hoog was tijdens de periode van het PWM-signaal.
Inschakelduur = T AAN / T Totaal * 100
Als een puls bijvoorbeeld met een totale periode van 10 ms gedurende 5 ms AAN (hoog) blijft. De inschakelduur is dan:
Inschakelduur = 5/10 * 100 = 50% inschakelduur
Het circuit bevat een enkele LED, een weerstand en een 10K-potentiometer. De negatieve pin van LED is verbonden met de GND van ESP32 via een 330 Ω weerstand. U kunt elke weerstandswaarde tussen 230 Ω en 500 Ω gebruiken. Verbind de positieve pin van de LED met GPIO 16 en de signaalpin van Pot met de ADC1 (VP) pin van ESP32.
Code-uitleg voor ESP32 PWM
De volledige code staat aan het einde van de pagina.
Deze code vereist geen bibliotheek, dus start uw code door de pin te definiëren waaraan de LED is bevestigd. In mijn geval heb ik GPIO 16 gebruikt om de LED aan te sluiten.
const int ledPin = 16; // 16 komt overeen met GPIO16
Stel daarna de PWM-signaaleigenschappen in de volgende regels in. Ik heb de PWM-frequentie ingesteld op 9000 en de resolutie op 10, je kunt deze wijzigen om verschillende PWM-signalen te genereren. ESP32-kaarten ondersteunen PWM-resolutie van 1 bit tot 16 bits. U moet ook een PWM-kanaal kiezen. ESP32 heeft in totaal 16 (0 tot 15) PWM-kanalen.
const int freq = 9000; const int ledChannel = 0; const int resolutie = 10;
Configureer nu in de void setup () -functie de LED PWM met de eigenschappen die je eerder hebt ingesteld met behulp van de ledcSetup () -functie. Definieer in de volgende regel de GPIO-pin waarop de LED is aangesloten. De functie ledcAttachPin () wordt gebruikt om de GPIO-pin en het kanaal dat het signaal genereert te definiëren. In mijn geval heb ik de ledPin gebruikt die GPIO 16 is en ledChannel dat overeenkomt met kanaal 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, resolutie); ledcAttachPin (ledPin, ledChannel); }
Lees in de lege lus de analoge pin waarop de pot is aangesloten en sla de meting op in een variabele genaamd 'dutyCycle' . De helderheid van de LED zal toenemen of afnemen volgens de rotatie van de potentiometer. De ledcWrite () lijkt erg op analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); vertraging (15); }
Testen van de ESP32 PWM-signalen
Om de ESP32 PWM-signalen te testen, sluit u de LED en potentiometer aan volgens het schakelschema en uploadt u de code naar uw ESP32. Zorg ervoor dat u het juiste bord en de juiste COM-poort heeft geselecteerd. Draai nu aan de potentiometer om de helderheid van de LED te verhogen of te verlagen.
De volledige werking wordt getoond in de onderstaande video. Bekijk ook andere ESP32-gebaseerde projecten door de link te volgen.