Was muss ich bei Verwendung von zwei Netzteilen (eines für Servo, zweites für Microcontroller) beachten?

Moin, besteht die Möglichkeit einen Anschlussplan zur Verfügung zu stellen. Bin mir bei manchen Bauteilen nicht so sicher wo die genau angeschlossen werden. Habe mir zwar die PinMap vom ESP32 ausgedruckt und vom Quelltext versucht Details heraus zulesen. Nur da kommt jetzt der Punkt, ich habe einen 3 Anschluß Poti pin 1 GND pin 2 Eingang pin 3? DISPLAY? 😅

Bekommen die Bauteile alle Strom über den ESP? Oder Zweige ich mir das von einem Kabel immer ab?

DANKE für die Hilfe

@Tobi-H, zum Anschluss des Potis findest du was unter Arduino Analog Input – Schaltplan, Programmcode und Erklärung, der mittlere Kontakt des Potis muss an den input des ESPs. Alle Bauteile – bis auf den Servo! – bekommen Strom vom ESP, und zwar die 3,3 V nicht! die 5 V (falls ein 5V / Vin-Pin auf deinem ESP32-board ist).

Der Servo kann im Anlauf viel Strom ziehen und evtl. dazu führen, dass die Spannung zusammenbricht und der ESP resettet oder andere komische Dinge macht. Marc und Martin haben daher bei FB geschrieben, dass sie zwei Netzeile verwendet haben. Eines für den ESP und eines für den Servo. Wichtig ist dann, dass beide Systeme einen “common ground” haben, d.h. GND von Netzteil 1 mit GND von Netzeil 2 verbunden ist. Hier wirklich aufpassen und Verbindungen doppelt checken, da bei falscher Polung auch schon mal was abrauchen und kaputt gehen kann! Zum Testen habe ich einen kleinen Servo aber auch am 5 V-Anschluss des Heltec WiFi Kit 32 betrieben.

So jetzt muss ich hier noch mal bei den Netzteil fragen, ich nutze zum Beispiel ein USB-Netzstecker und schließe dort das USB-Kabel an was auf Mini-USB endet. (Variante a) 4.75V mit 0.55A oder b) 5V mit total 2.1A)

Servo-Netzteil nutze ich ein 5V mit 3000mA bzw. 15VA mit einen Steckadapter damit ich plus und Minus einzeln nutzen kann (Beispielbild Stecker).

Wie würde ich jetzt einen “common ground” herstellen? Über den GND des ESP oder anders? Habe so etwas noch nie gebaut. Daher die vielen Fragen.

Hallo zusammen, ich würde gerne das Thema nochmal hoch holen. Ich glaube ich habe das Thema mit den zwei Netzteilen nicht ganz verstanden. Ich versorge meinen ESP32 per Mini-USB mit Strom und habe zusätzlich ein Netzteil 5V 2,5A für den Servo. Immer wenn der Servo ordentlich arbeiten muss rebootet der ESP wegen dem Spannungsabfall, obwohl der Servo ja separat angeschlossen ist. Hat jemand eine Idee woran das liegt?
Für den Common ground habe ich - der externen Stromquelle an GND und Servo und + an Servo, die Steuerleitung an Pin 2.
Habe auch mal die Variante mit einer externen Stromquelle versucht, hat leider auch nicht geklappt. Dafür hatte ich zusätzlich den + Pol der externen Stromversorgung an den 5V Pin des ESP. Hat jemand noch eine Idee?
Danke, Grüße
Florian

Ganz schlechte Idee: die beiden Plus-Pole stellen Quellen dar, und man läßt nie zwei Quellen “aufeinander” arbeiten. Einzig erlaubte und aber auch notwendige Verbindung ist GND: beide Minus-Pole der Netzteile müssen miteinander verbunden sein, und das möglichst nicht am ESP (erst recht nicht, wenn der zwei GND-Anschlüsse haben sollte, an auch noch verschiedenen GND-Anschlüssen), sondern entfernt von dort: GND sollte eine Stern-Topologie aufweisen.

Wenn mit allen diesen Maßnahmen ein startendes, aber unbelastetes Servo immer noch zum Booten des ESP führt, dann sind da in Deiner Schaltung noch andere Dinge ‘versteckt’, die Du noch nicht verraten hast.

(edit: bei einem Begriff wie “Quelle” ist natürlich die technische Stromrichtung gemeint)

1 Like

Hallo weef,
danke für deine Antwort, mit “zusätzlich den + Pol” meinte ich die Schaltung von Clemens mit externer Stromversorgung, das war etwas irreführend…
Ich habe nochmal alles wie von dir beschrieben geprüft und es sieht nun besser aus. Es startet soweit alles, servo arbeitet Last einwandfrei, manchmal bekomme ich im Trace einen Fehler, der zum reboot führt, wenn ich den Rotary zu schnell drehe, hat hierzu jemand eine Idee?

assert failed: taskSelectHighestPriorityTaskSMP tasks.c:3446 (xTaskScheduled == pdTRUE)
Backtrace:0x40084524:0x3ffbd4000x3ffbd4bd:0x3ffbd4e0 |<-CORRUPTED
ELF file SHA256: 0000000000000000
Rebooting…

Als “Workaround” funktioniert langsam drehen aber. Vielen Dank hierfür schon mal.

Vielen Dank für eure Unterstützung,
Viele Grüße
Flo

sehr schön.

taskSelectHighestPriorityTaskSMP

Eine mögliche Erklärung: es wird beim Interrupt-handling für den rotary dial eine blocking-Funktion oder einfach ‘zuviel’ code aufgerufen, und das FreeRTOS kommt bei zu schnellem Drehen ( = zu häufige ISR-Aufrufe) mit seinem eigenen scheduler nicht mehr hinterher und hat dann keine andere Chance, als diesen blockierenden Prozeß zu beenden.

ISRs sollen deshalb immer so kurz wie möglich sein, im Falle des rotary dial z.B. nur das Inkrement oder Dekrement feststellen und in ein Register schieben, und diese wieder verlassen, um die eigentlichen Funktionen danach in der Hauptschleife durchzuführen, für “wenn dann wieder Zeit ist”. - Das ist Aufgabe der Programmierer, dies zu realisieren, um sowas kümmern sich Anwender eigentlich nicht.

In der ESP-Vergangenheit traten mit neuen Versionen des ESP-IDF und des FreeRTOS immer wieder solche Regression auf, die dannn mit den folgenden updates verschwanden - hier könnte auch eine ältere System-Software das Problem darstellen.

Da ich aber Deine hardware nicht kenne, folgt eine weitere Erklärung, der ich zunächst nachgehen würde: die Kontakte von simplen rotary dials sind auch nur einfache Schalter, welche “prellen”. Wenn Du also in einer Richtung schnell drehst, und z.B. 10 Impulse pro Sekunde erzeugt haben wolltest, wird ohne weitere Maßnahmen gegen Kontaktprellen der Richtungstaster im dial vielleicht 1000 Schaltvorgänge ausführen. Die Mehrzahl davon werden für den Prozessor gültige Pegel-Wechsel sein, - und schnell gibt es eine hohe Interrupt-Last, die die Maschine nicht mehr bewältigen kann und außer mit Wertesprüngen dann vielleicht mit Neustart quittiert. (Wenn Du ein Oszilloskop hast, dann kannst Du das damit visualisieren und überprüfen.)

Methoden des software-debouncing sind für rotary dials oft zu langsam oder auch wieder nur blockierend (und damit zu fehleranfällig, wenn nur in der ISR gelöst), daher empfiehlt es sich, an die beiden Ausgänge des dials je einen kleinen Kondensator (z.B. 10 nF) gegen GND zu schalten. Das wäre die einfachste debouncing-Möglichkeit, welche die Anzahl der möglichen Schaltvorgänge pro Zeit heruntersetzt (ein ordentlicher Tiefpaß hier bäuchte noch mindestens einen Widerstand, aber erstmal egal).

Du kannst lokal hier im Forum nach “debounce” suchen, wir haben einiges dazu, und im Netz findet sich natürlich jede Menge. @clemens’ Forschung am Hanimandl hat hier vielleicht schon aktuelle Erkenntnisse?


edit: die Ausführungen zum rotary dial sind recht off-topic zum Zweifach-Netzteil; es kann sein, daß ich das nochmal abtrenne in ein eigenes Thema.

Über FB hatten Leute von Problemen mit der “neuen” Version des ESP Arduino cores, ≥ 2.0, also nicht wirklich soo neu, aber doch mit größeren Veränderungen. berichtet. Genau wie von weef beschrieben soll es da zu Problemen beim ISR handling gekommen sein. Weiter soll ein ESP8266 fix der HX711 lib Probleme machen. Ich habe das alles nicht selbst ausprobiert bzw. als bug identifiziert, mein letzter HaniMandl-Zusammenbau ist auch schon etwas her, werde mir das nun die Tage anschauen.

Könnte es jenes sein? – is_ready function broken for espressif microcontrollers after #193 · Issue #222 · bogde/HX711 · GitHub

Ja, das ist es, da hat auch @aholzhammer am Ende kommentiert.