ESP32, PWM und Drehzahlregelung

Duesselklaus
Beiträge: 11
Registriert: 25.03.2019, 13:35
Wohnort: Düsseldorf
Danksagung erhalten: 1 Mal

ESP32, PWM und Drehzahlregelung

Beitrag von Duesselklaus » 20.10.2022, 15:06

Hallo Sven, Hallo Forum,

auch ich war lange Zeit nicht hier im Forum - aber die Loks im Garten fahren noch immer ... mit den "FrameWork". Nach mehreren Jahren ist mein Fazit: "Genau das ist es, was man braucht - SUPER - es fehlt nur noch eine kleine Kleinigkeit".

Soviel zur Einleitung. Meine Loks (LGB) haben das Framework auf einem ESP8266 laufen. Bei einer Schöma wird der Motor direkt über eine H-Brücke angesteuert, alle anderen erzeugen ein DCC-Signal, dass ich als reines Rechtecksignal (ohne Leistung) in TAMS Decoder einspeise. Die Energie zum Fahren kommt direkt über die Eingänge, an die eigentlich der Stützkondensator angeschlossen werden könnte. Als Stromversorgung habe ich "alte" 18650er Zellen in den Loks mit entsprechender Ladetechnik. Ein Step-Up sorgt für die passende Spannung: Ich habe 3 Zellen in Reihe, also nur rund 11 Volt (was das Laden über die Schiene einfacher macht) als DC Zwischenkreis.

Alles ist im Grunde perfekt - nur stört es mich, dass ich da den TAMS Decoder im System habe. Den brauche ich, damit ich langsam fahren kann, weil er die Drehzahlregelung für den Motor bringt. Ohne - das habe ich ausprobiert - kann man nicht wirklich schön rangieren.

Ich verstehe die Einschränkung des ESP8266: Mit nur einem analogen Eingang, der die Akku-Spannung misst, kann mal keine Drehzahlregelung aufbauen. Nun habe ich aber gelernt, dass das Framework auch auf dem ESP32 verfügbar ist - und der hat genügend Eingänge, um den PWM-Steller zu einem Drehzahlregler zu erweitern.

Meine Frage daher: Ist hier jemand im Forum, der in der Lage ist, die Arbeit von Sven zu unterstützen oder weiterzuführen? Ich selber habe es bislang nicht geschafft den Code auf PlatformIO (das ist ja wohl die empfohlene Umgebung) zu kompilieren, könnte mich aber bei entsprechender Unterstützung am Debugging beteiligen.

Sollte es gelingen den Code entsprechend zu erweitern, wäre mein nächster Schritt die Entwicklung einer Platine für die LGB/Piko Fahrzeuge, damit ich nicht weiterhin auf Lochrasterplatine basten muss.

Was sagt ihr?

Grüße
Düsselklaus

Benutzeravatar
Zoltan
Beiträge: 615
Registriert: 18.09.2018, 11:34
Wohnort: Wien
Hat sich bedankt: 104 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Re: ESP32, PWM und Drehzahlregelung

Beitrag von Zoltan » 21.10.2022, 08:18

Ich habe entweder DCC Ausgang über H-Bridge auf Dekoder Schieneneingang, oder PWM Ausgang über H-Bridge auf Motor. Schienenstrom habe ich nicht. Alles auf SP8266.

G und 0 Loks fahren mit DCC auf 4*18650 (G) oder auf 7,2V Block-Li-Ions (0), L und H0 Loks mit PWM auf 7,2V Block-Li-Ions. N und Z fährt (leider noch) auf Schienenstrom, sowohl analog als auch digital. ESP-LY ist bei denen an die Schiene angeschlossen. Ich lade die Akkus einzeln außerhalb. Bisher habe ich keine Probleme mit Langsamfahren gehabt.

Nichtsdestotrotz würde mich eine kompakte Platine für ESP32 sehr interessieren, je kleiner, um so besser. Ich fahre ja alles mögliche herunter bis Z :D
LG Zoltan
Mein YT Kanal: www.youtube.com/@oldnat

little.yoda
Site Admin
Beiträge: 877
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von little.yoda » 23.10.2022, 13:24

Hallo Klaus,

Hier mal kurz meine Gedanken:

Schritt 1: Geschwindigkeitsermittlung
  • wie würdest du denn die Geschwindigkeit/Drehzahl messen wollen?
  • Mein Gedanke war damals ein Magnet + Sensor zu nutzen.
    Aus dem Abstand zwischen zwei Impulsen wird die Geschwindigkeit berechnet.
    Mit würde jetzt gar keine Lösung einfallen, die einen Analogen-Eingang benötigt.
  • Wie erhält man genügend Impulse, um die Geschwindigkeit zuverlässig zu melden?
  • Kann man irgendeinen Motorencoder an die Motor-Achse anbauen?
  • Back-Emf war mir zu komplex.
  • Input-Klasse dem Framework hinzufügen, welche die Istgeschwindigkeit liefert
Schritt 2: Regelung einbauen
  • Aus leidvoller Erfahrung: Regelung macht kein Spaß
  • Man müsste auf der Klasse ActionPWMDirect aufbauen
  • Input wären dann die Ist und Soll-Geschwindigkeit
  • Klassische PID-Reglung einbauen
  • Passende Parameter für die PID-Regelung finden
Die Implementierung des ESp32 ist immer noch eingeschränkt, aber für deinen Zwecke sollte sie ausreichend sein.
Am Ende sind die Punkte relativ überschaubar zu implementieren.
Aufwendig ist in meinen Augen die technische Lösung und die Einstellung der PID-Regelung.

Mein Vorschlag:
Mach dir über Schritt 1 Gedanken und liefe einen Lösungsvorschlag. Dann schauen wir weiter.
[Ich hoffe, dass mich dass genügend reizt, dass ich danach die notwendigen Softwareanpassungen vornehme]




Gruß,
Sven

PS: Mach mal bitte einen weiteren Thread für deine Probleme beim Kompilieren auf. Das sollte kein unlösbares Problem sein.

Duesselklaus
Beiträge: 11
Registriert: 25.03.2019, 13:35
Wohnort: Düsseldorf
Danksagung erhalten: 1 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von Duesselklaus » 26.10.2022, 13:06

Hallo Sven,

ich freue mich riesig .......

Zum Punkt 1:
Es geht glaube ich kein Weg an einer Back-EMF-Messung vorbei. Wenn man erst "hinter dem Getriebe" misst, bekommt man zu wenige Impulse, um eine Regelung aufzubauen, die Langsamfahrt ermöglicht. Wie die Implementation aussehen muss - da muss ich noch mal meine Unterlagen durchforsten: Ich erinnere mich aber daran, dass es hieß, man muss die Spannung an den beiden Motorleitungen messen in dem Moment kurz bevor der nächste PWM Impuls kommt. Und man muss gucken, welche Seite der H-Brücke schaltet (für die Richtung) und welche das PWM macht, damit man nicht "auf der falschen Seite" misst oder die Motorleitungen gerade "frei hängen". Dazu habe ich aber schon einige Informationen gesammelt, die wir uns -gern auch mal gemeinsam am Computer - ansehen können.
Ich packe alles mal zusammen und schicke es Dir in der kommenden Woche per Mail zu.

Zum Punkt 2:
Letztendlich kommen wir an einem PID-Regler nicht vorbei. Eine so "fancy" Einmess-Routine wie bei ESU ... das geht bei uns wohl zu weit. Aber einen brauchbaren Parametersatz, der für die meisten Motoren passt, zu bekommen, das sollte möglich sein. Für Glockenanker-Motore ... muss man mal sehen. Die einfachen Digital-Decoder (ich nutze gern TAMS) bekommen das auch recht ordentlich hin.

für Zoltan:
Beim Thema Platine macht mir deine Wunsch-Größe schon Sorgen, aber der erste Schritt ist letztendlich erst einmal eine Version zu bekommen, die in 0, 1 oder G hinein paßt. Bei H0 wird es "fummelig" .... und bei allem drunter AUTSCH. Aber es muss leicht zu bestücken sein. Das ist, glaube ich, für die Akzeptanz recht wichtig. Später kann man noch immer Teile (Funktionen) weglassen, z.B. wenn man mit geringerer Spannung zurecht kommt. Schau'n wir mal ...

Grüße
Klaus

little.yoda
Site Admin
Beiträge: 877
Registriert: 14.09.2018, 19:05
Hat sich bedankt: 33 Mal
Danksagung erhalten: 143 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von little.yoda » 26.10.2022, 19:58

Duesselklaus hat geschrieben:
26.10.2022, 13:06
Es geht glaube ich kein Weg an einer Back-EMF-Messung vorbei. Wenn man erst "hinter dem Getriebe" misst, bekommt man zu wenige Impulse, um eine Regelung aufzubauen, die Langsamfahrt ermöglicht. Wie die Implementation aussehen muss - da muss ich noch mal meine Unterlagen durchforsten: Ich erinnere mich aber daran, dass es hieß, man muss die Spannung an den beiden Motorleitungen messen in dem Moment kurz bevor der nächste PWM Impuls kommt. Und man muss gucken, welche Seite der H-Brücke schaltet (für die Richtung) und welche das PWM macht, damit man nicht "auf der falschen Seite" misst oder die Motorleitungen gerade "frei hängen". Dazu habe ich aber schon einige Informationen gesammelt, die wir uns -gern auch mal gemeinsam am Computer - ansehen können.
Ich packe alles mal zusammen und schicke es Dir in der kommenden Woche per Mail zu.
Oh je. Schick mir ruhig mal die Unterlagen.
Ich habe mir das Thema Back-EMF in der Vergangenheit immer mal wieder angeschaut und bin dann jedesmal(!) zum Ergebnis gekommen, dass es jenseits von meinen aktuellen Fähigkeiten liegt.

Gruß,
Sven

Benutzeravatar
Zoltan
Beiträge: 615
Registriert: 18.09.2018, 11:34
Wohnort: Wien
Hat sich bedankt: 104 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Re: ESP32, PWM und Drehzahlregelung

Beitrag von Zoltan » 26.10.2022, 21:57

Bis H0 inklusive habe ich es mit der D1 Mini geschafft. Kleiner ging es bei mir auch nicht... deshalb bin ich sehr in eine kleine Platine interessiert, was ich in einen Z "Geisterwagen" hineinbekommen könnte (mit kleinen 3V Knopfzellen - und dann bin ich Schienenstrom los!). D&H Dekoder ist in der Lok, und dann würde ich die Schienenkontakte statt Schiene zum Geisterwagen führen. Sind dann nur 2 Kabel.
LG Zoltan
Mein YT Kanal: www.youtube.com/@oldnat

bass1959
Beiträge: 15
Registriert: 07.05.2021, 23:09
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von bass1959 » 01.11.2022, 22:15

Hallo zusammen!
Wie schön, dass das Thema Drehzahlregelung hochpoppt, das interessiert mich ja auch.
Mittlerweile bin ich zu dem Schluss gekommen, dass das mit dem Framework in seiner jetzigen Form wahrscheinlich nicht geht, und möchte meine Gedanken dazu mit euch teilen.
Es gibt im stummiforum einen User namens oli4, der mit dem ESP32 eine tolle Geschwindigkeitsregelung mit WLAN auf die Beine gestellt hat: https://www.stummiforum.de/t94713f7-Fun ... msg2224932. Dort wird auch viel über die erforderliche Vorgehensweise diskutiert. Die Rede ist dabei von 100 Messzyklen/sec (für die Regelungsqualität) mit jeweils über 20 Messungen (Oversampling für brauchbare Messwerte). Von der Verarbeitung der Messungen bis hin zur Ausgabe als PWM mal ganz abgesehen - mit diesem engen Zeitkorsett kann ich mir nicht vorstellen, dass dann noch die ganzen Funktionen des Framework weiter bedient werden können. So gesehen ist die Aufteilung auf 2 µC (ESP für die Verwaltung, Decoder für die Regelung) vielleicht sehr sinnvoll.

Anders wäre das mit einer abgespeckten Version des Framework - eine Art DelTang für 8-10 Empfänger mit WLAN (ESP-Now) und integrierter Regelung. Das wäre aber nicht mehr so schön offen....

Viele Grüße, Stephan

PS @Duesselklaus: Mich würde interessieren, welchen TAMS du verwendet hast - und wie Du ihn programmierst...
Es ist nie zu spät für eine glückliche Kindheit.

Norbert
Beiträge: 299
Registriert: 31.12.2018, 08:07
Hat sich bedankt: 1 Mal
Danksagung erhalten: 70 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von Norbert » 02.11.2022, 10:59

Hi,
ich lese interessiert mit, bin gespannt, wohin die Reise geht....
Allerdings muss ich für mich feststellen, dass die altbewährte Version mit ESP + Kaufdecoder alles Erdenkliche abdeckt.
Da habe ich zusätzlich noch lastgeregelten Sound über die SUSI, welche mir wichtig ist (auch für gepulste Verdampfer), viele nutzbare fertige Sounddateien,
und oft auch Servo-Ausgänge, alles bequem per CV einstellbar.
Dabei konnte noch jeder Motor mit 3 CVs perfekt lastgeregelt angepasst werden.
Ein LDG-34 (nur so groß wie ein H0-Decoder, aber 3A) ist schon recht komfortabel, auch für viele G-Loks.

Die 30,- EUR dafür tun mir nicht weh, und ich habe dafür alles.
Fertig, wenig Aufwand, schön klein. Man wird ja gesetzter und bequemer.... :mrgreen:

VG N.

Duesselklaus
Beiträge: 11
Registriert: 25.03.2019, 13:35
Wohnort: Düsseldorf
Danksagung erhalten: 1 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von Duesselklaus » 16.11.2022, 11:28

Hallo zusammen,

das Thema ist komplex - ich versuche mal zu einigen Teilen meinen Kommentar zu geben:

- Spannungsmessung: Sicherlich ist es richtig, dass ich mit einem Oversampling arbeiten muss, wenn ich repräsentative Werte bekommen möchte. Für die Anwendung hier gibt es aber zwei Einschränkungen: Es ist eigentlich nur der Bereich bei geringen Drehzahlen (kleiner PWM) interessant, nämlich dann, wenn man rangiert. Wenn die Lok schnell fährt ist es recht unerheblich, wenn die Geschwindigkeit nicht wirklich konstant ist. Und wenn die Spannungsmessung Fehler macht, dann macht sie immer den gleichen - und damit kann die Regelung locker umgehen (dann wird einfach das Gain am Eingang angepasst wäre meine erste Idee). Die ganze Geschichte ist sehr spannend, wenn man ein PWM von 10% oder 20% hat und der Motor ständig in der Gefahr ist, stehen zu bleiben.
Wichtig ist (das habe ich aus der Literatur), dass die Spannung erst gemessen wird, wenn die antreibende Spannung abgeklungen ist (hoffentlich war das richtig :-) ). Das bedeutet im PWM Zyklus: Der Strom wird eingeschaltet für einen Teil der Periode (x % PWM). Dann wird er ausgeschaltet und gewartet, bis nur noch der Motor als Generator für die Spannung sorgt. Dann wird gemessen - und der Zyklus kann neu beginnen.

- Timing: Da muss ich weiter ausholen. Ich meine mich erinnern zu können, dass das PWM Signal im Framework vom internen PWM-Generator erzeugt wird. Damit könnte es schwierig werden die Spannungsmessung irgendwie zu synchronisieren. Aber es müsste möglich sein durch einen Hardware-Timer einen Interrupt auszulösen, der dann für die Messung und das schalten des Ausgangs sorgt. Der Regler selber könnte im Framework laufen, weil ich davon ausgehe, dass das Timing da nicht so superkritisch ist. Ok, die Tücke liegt im Detail und ich habe tatsächlich noch kein Beispiel-Sketch gefunden, in dem das so implementiert wurde (wenn's in Youtube gezeigt wurde war das Programm nicht dabei :-( ) - aber da wird sich etwas finden lassen.

- Belastung der CPU: Ich trau mich fast nicht und ehrlich gesagt habe ich im Moment auch keine Idee, wie ich das im Programm umsetzen würde - aber der ESP32 hat zwei Kerne, von dem das Framework nach meinem Verständnis nur einen verwendet. Man könnte also den Drehzahlregler mit den ganzen Meß- und Schaltaufgaben auf den zweiten Kern verlagern. Ich gebe zu: Da muss ich noch einiges lesen, bis ich dazu ein Demo hinbekomme .... Im Netz heißt es so locker "man braucht nur zwei Tasks zu erstellen und ein yield() würde dann hin- und herschalten. Aber bevor ich das nicht gesehen habe bin ich doch eher zurückhaltend. Vielleicht geht es ja auch ohne.

Jetzt noch mal zur (Alternativ-)Lösung mit Kaufdecoder: Ich benutze auch den TAMS LD-G-34. Das klappt super, da ich dafür kein "Power-DCC" erzeugen muss (also keine H-Brücke brauche), sondern nur ein einfaches Rechtecksignal in einen der Gleiseingänge hinein schicke. Den "Strom" bekommt der Decoder durch die Ausgänge, an die der Stützkondensator angeschlossen werden könnte. Zur Programmierung habe ich zwei unterschiedliche Varianten: Entweder wird der Decoder über ein Flachbandkabel angeschlossen - und da der Pfostenstecker größer ist als ich Leitungen habe, kann ich ihn herum drehen und dann den Decoder "ganz normal" an die Schiene anschließen. Eleganter geht es mit einem kleinen 4xUm Schalter. Das ist aber viel Fummelarbeit beim Verdrahten, dafür einfacher zum Programmieren der CVs. Der Argumentation, dass der Preis des Decoders nicht den Ausschlag gibt, kann ich locker folgen. Aber in der Lok herrscht halt ein ziemliches Kabelchaos. Ob es eine Möglichkeit gibt, einen Decoder mit z.B. PLUX22 einzusetzen, habe ich mir noch nicht angesehen - ist aber sicher einer kleinen Studie wert. Die Diskussion sollte dann aber in einen anderen Thread wandern.

Danke für Eure Interesse - ich finde das Thema superspannend (auch wenn es wirklich herausfordernd ist)

Grüße,
Klaus

Duesselklaus
Beiträge: 11
Registriert: 25.03.2019, 13:35
Wohnort: Düsseldorf
Danksagung erhalten: 1 Mal

Re: ESP32, PWM und Drehzahlregelung

Beitrag von Duesselklaus » 16.11.2022, 12:06

Nachtrag:

Man sollte sich vorher alle Quellen ansehen. Ich habe meine Kommentare zu schnell geschrieben:

Das Thema Spannungsmessung - ADC des ESP32 - wird spannend, wenn man realisiert, dass der Wandler nicht gut funktioniert. Hier hat mich oli4 aus dem Stummiforum auf den richtigen Pfad gebracht. Das hatte ich nicht gewusst - und jetzt verstehe ich auch, wieso das Oversampling angesprochen wurde.
Also Sorry - Oversampling könnte tatsächlich erforderlich sein - aber wenn es die Geschwindigkeit des ADC hergibt ist es am Ende doch nur noch eine Mittelwertberechnung (hoffentlich).

Was hier hilft ist jetzt: ausprobieren ....

Grüße
Klaus

Antworten