Hi,
kann man am Neopixel anzeigen lassen, wenn die Box eingesteckt ist und der Akku lädt?
Also grundsätzlich ist es erstmal so, dass der ESP32 davon nix weiß, wenn der Akku aufgeladen wird. Das Develboard zeigt das mittels LED zwar an, aber es gibt da keine Rückkopplung zum ESP32.
Das ist der Schaltplan der Ladeelektronik mit dem TP5000 als zentrales Element. Da siehst du ganz links einen Widerstand, der auf der einen Seite mit Versorgungsspannung verbunden ist und auf der anderen mit der LED, die du auf dem Develboard leuchten oder blinken siehst. Die LED ist mit CHRG verbunden, wobei an dieser Stelle der Strich über dem CHRG wichtig ist: Das zeigt an, dass der Ausgang invertiert ist. D.h. schaltet CHRG auf GND, dann leuchtet die LED und umgekehrt. Wenn also geladen wird, dann leuchtet die LED die ganze Zeit und demnach ist CHRG auf GND geschaltet.
Kurz vor der LED sieht man jedoch einen Abzweig, der „TP5000_CHRG“ heißt. Dieser wird auf die rechte Pinreihe des Develboards auf den 6. Pin von unten gezogen und heißt dort „CHRG“. Man könnte dort (auf der Rückseite der mini4L) einen Draht dranlöten und diesen auf den Ext-Konnektor der mini4L führen. Am besten auf die GPIOs 5 oder 32. Diese könnte man analog auslesen und so erkennen, ob geladen wird oder nicht. Nur halt dran denken, dass der Ausgang invertiert ist des TP5000.
Und das könnte man auf dem Neopixelring anzeigen. Ich weiß allerdings nicht, ob man mit dem Signal was anfangen kann, wenn die LED da eingelötet ist. Es kann sein, dass man die LED auslöten muss, damit man das gescheit auswerten kann. Wichtig ist auf jeden Fall, dass der GPIO als Eingang konfiguriert ist.
TL;DR Es geht grundsätzlich, man muss aber basteln + programmieren.
Ja ok, danke
Dann geht es halt so.
Hintergrund ist, dass ich schon festgestellt hab, dass eins meiner Ladekabel nicht mit dem USB Expander funktioniert.
Der Laderegler (TP5000) ist auf einen Strom von max. 1 A eingestellt. D.h. der geht hin und stellt die Spannung so hoch ein, dass 1 A fließt. Das geht natürlich nur bis zu einem gewissen Ladestand, weil dann ist die max. Ladespannung irgendwann erreicht und der Ladestrom flacht zunehmend ab.
Standardmäßig is es ja so, dass ein kurzes Drücken auf den Drehencoder die Spannung auf dem Neopixel anzeigt. Ob da USB angeschlossen ist (und lädt) hat Einfluss auf das, was angezeigt wird. Vielleicht kannst ja schauen, ob du irgendwie ein Gefühl dafür kriegst, wie sich die Spannungen zum Ladestand zu verhalten. Wobei ich zugeben muss, dass das bei LFP nicht so einfach ist, da die Spannungskurve halt so flach ist. Ableiten lässt sich daraus auf jeden Fall: Möchte man den ungefähren Akku-Ladestand wissen, dann muss man vorher USB abziehen, da ansonsten die tatsächliche Akku-Spannung überlagert/maskiert wird.
Laut datasheet wird der CHRG Ausgang von einem FET (open drain) gesteuert.
Das heißt, inaktiv extrem hochohmig (sozusagen hängt er dann in der Luft).
Die Spannung ergibt sich dabei durch VBUS abzüglich Spannungsabfall über die LEDund Vorwiderstand. Bei einer LED fwSpannung von ca. 1.2V und VBUS (gehe von VBUS=5V aus) bleiben ca. 3.8V
Sehr wahrscheinlich wird das der ESP32 als Input verkraften.
Schimmstenfalls fließ minimaler Leckstrom. Um das zu verhindern, wäre das Auslöten der LED die sicherste und zu empfehlende Variante!
**JEDENFALLS WICHTIG:**
Fall 1: LED ausgelötet: (Empfehlung)
GPIO mit pinMode(<pin>,INPUT_PULLUP) initialisieren.
PULLUP garantiert, dass der open drain (CHRG) damit inaktiv auf
3.3V (HIGH) des ESP32 gezogen wird.
Fall 2: LED nicht ausgelötet: (Pegelmäßig am GPIO ???)
Inaktiv könnte ein minimaler Leckstrom zw. 3.3V GPIO (wegen pullup)
und VBUS (5V) über die LED und Vorwiderstand fließen.
Ausgelesen wir mit digitalRead(<pin>)
LOW= Es wird geladen
HIGH= Ladevorgang abgeschlossen
Hoffe ich habe nichts übersehen.
VG
Beim LiFePO4-Develboard ist diese LED hier eingelötet: https://jlcpcb.com/api/file/downloadByFileSystemAccessId/8550724080677908480
Der Vorwiderstand beträgt 2 kOhm. Insofern fließen nur max 2,5 mA. Forwardspannung liegt dann bei 1,8 V (laut Datenblatt).
Dann kann m. E. die LED drinnen bleiben.
imho nein, verkehrt…
Wenn der FET „aus“ ist ist er hochohmig, genauso wie der Eingang vom ESP32.
Fall 1 mit internem Pullup
Spannungsteiler aus R_LED, LED und Pullup
weniger wie VBUS am Eingang aber mehr wie deine Rechnung oben ergibt
EDIT:
hab das eben mal versucht zu simulieren, komme auf 3,4V am ESP Pin
Aber nur wenn der Pullup auch aktiv ist, sonst gilt Fall 2 →
Fall 2 ohne interem Pullup
imho volle VBUS am Eingang vom ESP32!
Nicht verkehrt, denn 1. hab ich nirgends geschrieben, dass der Eingang vom GPIO ohne PULLUP initialisiert werden soll,
und zweitens, fallen über die LED immer 1.5 bis 1.8V ab, d.h. am ESP können keine volle VBUS anliegen! Der mögliche Minidurchbruchleckstrom während dem Einschalten bis zum Init mit pinMode(PinNr,INPUT_PULLUP) löst jedenfalls den Spannungsabfall an der LED aus und ist so niedrig, dass m. E. der GPIO Eingang des ESP damit kein Problem hat.
Meine Antwort bleibt die gleiche:
Init mit INPUT_PULLUP (ganz zu Beginn bei Setup()) unbedingt notwendig!
LED auslöten, wenn jemand ganz auf Nummer sicher gehen will.
Ich hätte keine Bedenken, die LED drinnen zu lassen.
Ist aber nur meine Meinung!
NACHTRAG:
Als Alternative zum Auslöten der LED gäbe es noch die Möglichkeit eine 3.3V Zenerdiode zw.
CHRG (Kathode) und
GND (Anode) zu schalten.
Vielleicht überwinde ich einfach meine Faulheit und schaue mir das mal im Oszi an oder probiere es gar aus .