Forum: Mikrocontroller und Digitale Elektronik ESP32 LED Steuerung mit 16 PWM Kanälen


von Mathias W. (mw_aus_b)


Angehängte Dateien:

Lesenswert?

Hallo liebe ESP Freunde!


Ich habe das Wohnzimmer meiner Tochter mit einer Vielzahl von LED Spots 
und Strips ausgerüstet. Ich verwende nur weiße Spots und Strips. Ich 
benötige für die Ansteuerung 13 PWM Kanäle. Gesteuert wird das Ganze 
über einige Taster und über WLAN.

An Hardware verwende ich einen ESP32 (LOLIN32) und 2 Treiber Boards 
(Eigenbau) mit jeweils 8 Känälen zur Ansteuerung der LED (24 V max 3 A; 
12 V max 3 A).

Nun zu meinem Problem:

Ich habe die LED stufenweise in Betrieb genommen. Das erste Board PWM 
Känale 0-7 arbeitet ohne Probleme. Das zweite Board PWM Kanäle 8-15 
akzeptiert den Wert 0 nicht. Schreibe ich ledcWrite(8, 0);  reagiert der 
PWM Kanal nicht. Er bleibt auf dem vorherigen Wert stehen.  Schreibe ich 
ledcWrite(8, 1); ist der Kanal zwar "aus", es bleibt aber immer ein 
Reststrom.  Die Lösung ist nicht sauber.

Mögliche Gründe:

Die PWM Känale 0-7 und 8-15 des ESP 32 sind nicht identisch aufgebaut. 
Die oberen Kanäle verfügen über einen Hightspeed Modus.

Das Ganze läßt sich auch ohne viel Hardware nachstellen: Die PWM Kanäle 
0-15 zuweisen, Pins zuweisen, und z.B. an Kanal 8 eine LED mit 
Widerstand anschliesen.

Hard und Firmware des ESP32:

ets Jun  8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:10088
load:0x40080400,len:6380
entry 0x400806a4

Gruß Mathias

Ps: Nachdem ich das Projekt abgeschlossen habe werde ich die 
Dokumentation hier veröffentlichen.

von Christopher J. (christopher_j23)


Lesenswert?

Um das Problem mal einzugrenzen hier eine (vermutlich unvollständige) 
Auflistung der möglichen Ursache(n):

1. Software
1.1 Arduino ledc-Treiber
1.2 sonstiger Arduino-Code
1.3 ESP-SDK

2. Hardware
2.1 ESP-Peripherie
2.2 ESP Pins
2.3 "Adapter-Boards"

Um 2.3 (vorerst) ausschließen zu können müsstest du prüfen ob an den 
ESP-Pins kein PWM-Signal anliegt. Am einfachsten geht das mit einem LA 
oder Oszi.

Für 2.2 ist es wichtig zu wissen, dass nicht alle Pins des ESP32 als 
Output funktionieren. Welche Pins du verwendest hast du aber nicht 
verraten. Am besten du packst hier mal einen minimalen Arduino-Sketch 
rein, der das Problem aufzeigt, nachdem du 2.3 ausschließen konntest.

Dann kann man mal schauen wo der Hund begraben liegt. Vielleicht liegt 
es ja auch an der Software.

Sollte es an deinen Pegelwandlern liegen, so pack doch hier mal einen 
Schaltplan rein.

: Bearbeitet durch User
von Mathias W. (mw_aus_b)


Lesenswert?

Hallo Christopher!
Danke für die Antwort!

2.2 ESP Pins
Ich habe im ersten Post ein Minimal-Skipt mit allen Infos angehängt. 
Hier sind die Pins aufgelistet die verwendet werden. Die Pins die in 
vielen Pinout Darstellungen aus GPIO gelistet werden, aber nur GPI sind 
(34,35,36,39), werden nicht verwendet .

2.3 "Adapter-Boards"
Selbstverstädlich liegt an den Pins ein PWM Signal an. Die LEDs behalten 
nach dem Schreiben der "0" ihre zuletzt programmierte Leuchtstärke.
Pegelwandler werden nicht verwendet. Um das Problem darzustellen reicht 
z.B. ein R680 und eine 3mm LED.

Gruß Mathias

von Christopher J. (christopher_j23)


Lesenswert?

Mathias W. schrieb:
> Ich habe im ersten Post ein Minimal-Skipt mit allen Infos angehängt.

Hatte ich übersehen, sorry. Sieht soweit alles ganz vernünftig aus. Ich 
tippe mal auf einen Fehler im Arduino-LEDC-Treiber oder im ESP-SDK. Hast 
du mal versucht die Auflösung zu verändern, d.h. z.B. 10 Bit zu nehmen 
oder auch die Frequenz mal etwas zu verändern, z.B. 10kHz?

Ich hab schon mal ziemlich blöd geschaut, als ich ähnliche Probleme mit 
dem MCPWM-Treiber aus dem SDK hatte. Am Ende stellte sich dann raus, 
dass das SDK maximal 1MHz Timer-Takt zulässt, obwohl der Chip selbst 
viel mehr kann. Nur steht das halt nirgendwo, außer im Code des SDK.

von Chris K. (Gast)


Lesenswert?

0-7 sind in der Gruppe HS LEDC und 8-15 hingegen gehören zur LS LEDC 
Gruppe. Die Unterscheiden sich in den Registern und der Art und Weise 
wie die Frequenz gesetzt wird. Kann also wirklich ein Bug in der Arduino 
Lib sein.

von Chris K. (Gast)


Lesenswert?

Es gibt da einen Bugfix seit dem 12.04. sind deine Bibs aktuell?

https://github.com/espressif/arduino-esp32/commit/6dab3f6777b47e077fecd5b27f5f316664dd6096

von Mathias W. (mw_aus_b)


Lesenswert?

Hallo
Sorry für die lange Zeit bis zur Antwort.

Habe jetzt die Boards aktualisiert. Es funktioniert jetzt perfekt.
Danke an alle, besonders Chris
Gruß Mathias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.