| PWM made by ESP32Mit PWM-Signalen (Pulsweitenmodulation), die ein digitales Äquivalent eines analogen Signals darstellen, haben wir bereits experimentiert. Kleine Einführung in das Thema findest du hier: PWMUm bei Arduino ein solches Signal zu generieren, kommt die Funktion analogWrite() zum Einsatz. Sie erwartet zwei
Parameter: Nummer des PWM-Pins und den analogen Wert, der zwischen 0 und 255 liegt. Die Funktion kann dann ohne weitere Maßnahmen
benutzt werden.
Ob das Alles wie versprochen funktioniert, testen wir an zwei Beispielen. In dem ersten Beispiel wird jede LED,
die am Versuch teilnimmt, über einen separaten PWM-Kanal gesteuert. In dem zweiten werden mehrere LEDs über nur einen
PWM-Kanal angesprochen. Mehrere PWM-KanäleIn dem Beispiel kommt eine RGB-LED zum Einsatz. Sie besteht intern aus drei unabhängigen farbigen LEDs. Für jede
dieser LEDs wird ein PWM-Kanal aktiviert, über den die jeweilige Leuchtdiode gesteuert wird. Schaltplan A (mehrere Ausgänge, mehrere PWM-Kanäle) Testschaltung A // PWM made by ESP32 (A) // ESP32-Dev-KitC V4 // Arduino IDE 1.8.19 // ************************************************************************************* int Taster_Rot = 12; // Taster Farbe Rot ein/aus int Taster_Gruen = 13; // Taster Farbe Grün ein/aus int Taster_Blau = 14; // Taster Farbe Blau ein/aus int Kanal = 3; // *********************************************************************************** void setup() { ledcSetup (0, 5000, 8); // Kanal 0, Frequenz 5kHz, Auflösung 8 Bit ledcSetup (1, 5000, 8); // Kanal 1, Frequenz 5kHz, Auflösung 8 Bit ledcSetup (2, 5000, 8); // Kanal 2, Frequenz 5kHz, Auflösung 8 Bit ledcAttachPin (21, 0); // GPIO 21, LED Rot ledcAttachPin (22, 1); // GPIO 22, LED Grün ledcAttachPin (23, 2); // GPIO 23, LED Blau pinMode (Taster_Rot, INPUT_PULLUP); pinMode (Taster_Gruen, INPUT_PULLUP); pinMode (Taster_Blau, INPUT_PULLUP); } // *********************************************************************************** void loop() { for (int i=0; i < 256; i++ ) { // For-Schleife heller ledcWrite (Kanal, i); // PWM Signal ausgeben delay (15); // Wartezeit PWM_Kanal (); // Kanalwahl aufrufen (Unterprogramm) } for (int i=255; i > -1; i-- ) { // For-Schleife dunkler ledcWrite (Kanal, i); // PWM Signal ausgeben delay (15); // Wartezeit PWM_Kanal (); // Kanalwahl aufrufen (Unterprogramm) } delay (1000); } // *********************************************************************************** void PWM_Kanal() { // Kanal Bestimmung mit Taster if (digitalRead (12) == LOW) { // Taster_Rot betätigt ? ledcWrite (Kanal, 0); // Bisherige Farbe AUS Kanal = 0; } // Kanal 0, Rot if (digitalRead (13) == LOW) { // Taster_Gruen betätigt ? ledcWrite (Kanal, 0); // Bisherige Farbe AUS Kanal = 1; } // Kanal 1, Grün if (digitalRead (14) == LOW) { // Taster_Blau betätigt ? ledcWrite (Kanal, 0); // Bisherige Farbe AUS Kanal = 2; } // Kanal 2, Blau } // *********************************************************************************** In dem Beispiel wird jeder Kanal mit einem Taster vorgewählt. So leuchtet die RGB-Leuchtdiode je nach der Auswahl,
rot, grün oder blau. Mit zwei FOR-Schleifen wird das Tastverhältnis nacheinander rauf- und runtergefahren. Die LEDs leuchten
dementsprechend mal heller, mal dunkler. Mit
1 PWM-KanalSchaltplan B (mehrere Ausgänge, Ein PWM-Kanal) Testschaltung B // PWM made by ESP32 (B) // ESP32-Dev-KitC V4 // Arduino IDE 1.8.19 // ************************************************************************************* ************************************************************************************* int Kanal = 0; int Frequenz = 5000; int Aufloesung = 8; // *********************************************************************************** void setup() { ledcSetup (Kanal, Frequenz, Aufloesung); // Kanal 0, Frequenz 5kHz, Auflösung 8 Bit ledcAttachPin (19, Kanal); // GPIO 21, LED 1 ledcAttachPin (21, Kanal); // GPIO 21, LED 2 ledcAttachPin (22, Kanal); // GPIO 22, LED 3 ledcAttachPin (23, Kanal); // GPIO 23, LED 4 } // *********************************************************************************** void loop() { for (int i=0; i < 256; i++ ) { // Dimmen heller ledcWrite (Kanal, i); delay (15); } for (int i=255; i > -1; i-- ) { // Dimmen dunkler ledcWrite (Kanal, i); delay (15); } delay (1000); } // *********************************************************************************** Es ist möglich, mit nur einem Kanal gleichzeitig mehrere Ausgänge anzusteuern. Auf diesem Weg können mehrere Ausgänge synchronisiert werden. In dem Beispiel werden vier Leuchtdioden mit einem PWM-Kanal synchron gedimmt.
|
Google-Suche auf MEINE-SCHALTUNG.de : |