Cruise Control (Tempomat) einstellen

CaptainJack

Content-Creator
8 August 2022
95
146
E-Scooter
G30D2 STM32 48V
Seit SHU v2.3 gibt es einen deutlich verbesserten Tempomat (CC - Cruise Control). Die Verbesserung resultiert aus der Implementierung eines PID-Reglers (bisher nur P-Regler) und der Möglichkeit, bei aktivem Tempomat negative (Brems-) Ströme zuzulassen (sodass er bergab auch automatisch bremst). Chapeau 🎓und vielen Dank an Paulederbaus Paulederbaus für die Implementierung des PID Reglers und der Aufweitung des Regelbereichs zu negativen Strömen! Damit ist der Scooter nun definitiv "next level" :cool:

Auch wenn mit den Defaultwerten schon ein sehr gutes Reglerverhalten gegeben ist, mag der Eine oder die Andere die Parameter individuell optimieren wollen. Ein mögliches Vorgehen ist hier beschrieben.

Diese Anleitung basiert auf der SHU v2.3.2

Hinweis: Diese Einstellungen betreffen alle Geschwindigkeitsregelungen, auch ohne Tempomat. Speed-Based nutzt das quasi immer und DPC mit aktivem Speed Limit.

Kurzanleitung​

  • Suche Dir eine Teststrecke aus, die ebene Abschnitte und auch deutliche Steigungen hat. Teste Deine Einstellungen auf allen Abschnitten.
  • Beginne mit den kleinstmöglichen Werten: Kp = 1, Ki = 10, Kd = 0
  • Erhöhe Kp schrittweise so lange, bis der Regler beherzt eingreift ohne zu schwingen.
  • Erhöhe Ki schrittweise so lange, bis die Regelabweichung klein genug ist → fertig :)
  • Wenn Du einen noch sanfteren Reglereingriff bevorzugst, dann erhöhe den Kd-Wert etwas.
  • Wenn Du möchtest, dass der Tempomat beim Bergabfahren auch bremst, dann stelle einen sinnvollen Bremsstrom „Lower limit (negative value)“ ein.
So bin ich auf folgende Einstellungen gekommen, die mir persönlich bei meinem G30D2 @48V gut gefallen:

Kp = 40, Ki = 60, Kd = 15, Lower limit (negative value) = 40A


Im Folgenden ist das Vorgehen detaillierter beschrieben.

Ausführliche Anleitung und Hintergrundinfos​

Vorgehen zur Ermittlung individuell optimierter PID Parameter​

Auf gerader Strecke und bei selbst gewählter „Auslegungsgeschwindigkeit“ (z.B. 20km/h) wird bei aktiviertem Regler (Tempomat EIN) ein „Sprung“ auf die Sollgeschwindigkeit gegeben. Es wird dann die „Sprungantwort“ (resultierende Geschwindigkeit) beobachtet, entweder „gefühlt“ mit dem „Popometer“, oder gemessen z.B. mit DarknessBot.

In der SHFW können echte Sprünge nur mit ±1km/h provoziert werden, was zu wenig ist, um eine deutliche Systemreaktion hervorzurufen. Deshalb kannst Du die Funktion „Increase/decrease CC speed with throttle“ nutzen und eine sehr kurze Reaktionszeit (z.B. 200ms) konfigurieren. Damit kannst Du die Sollgeschwindigkeit innerhalb von 1s um 5km/h erhöhen, was einem Sprung immerhin nahe kommt.

Eine Wiederholung der Versuche bei veränderten Randbedingungen ist sinnvoll, um die Robustheit des Reglers unter möglichst vielen Randbedingungen zu testen:
  • verschiedene Geschwindigkeiten (von Schrittgeschwindigkeit bis High Speed)
  • verschiedene Fahrergewichte
  • verschiedene Akku-Ladestände
Zudem sollte das Reglerverhalten bei einer Störung (z.B. abrupter Übergang von ebener Fahrbahn zu deutlicher Steigung) getestet werden.

Je nach Reglerverhalten werden die Parameter so lange verändert und erneut die Sprungantwort beobachtet, bis das Reglerverhalten zufriedenstellend ist.

Der Regler ist dann gut eingestellt, wenn er den Sollwert auch bei Störungen schnell einregelt (Performance), dabei aber „ruhig“ ist und nicht schwingt (Robustheit).

Generell gibt es immer einen Performance/Robustheits-Zielkonflikt, d.h. man sucht nach einem bestmöglichen Kompromiss zwischen Performance und Robustheit.

Reglerparameter ermitteln​

Proportional-Anteil Kp einstellen​

Zunächst wird der Regler als reiner P-Regler betrieben, das heißt I-Anteil und D-Anteil werden deaktiviert: Ki = min, Kd = min

Nun werden wiederholt Sprünge auf den Sollwert gegeben und die Sprungantwort des geschlossenen Regelkreises beobachtet. Dabei ist zu beachten, dass mit einem reinen P-Regler immer eine bleibende Regelabweichung auftritt.

Du beginnst mit einer geringen Verstärkung, also einem eher passiven Regler (Kp = 10). Wiederhole den Versuch mit stufenweise erhöhter Verstärkung [Schrittweite 10] - der Regler wird dabei immer aggressiver. Irgendwann kommst Du eventuell an den Punkt, an dem der Regelkreis schwingt und bei weiterer Erhöhung der Verstärkung sogar instabil wird. Dann hast Du es übertrieben. Eine gute Einstellung ist, wenn ein erkennbares Überschwingen auftritt, das aber schnell abklingt.

Generell hast Du einen gewissen Spielraum: Für eine robuste Einstellung wählst Du ein kleineres Kp, für eine aggressivere möglichst schnelle Regelung ein größeres Kp.

Integral-Anteil Ki einstellen​

Nun wird der Regler als PI-Regler betrieben, d.h. zusätzlich zum zuvor ermittelten Proportional-Anteil Kp wird ein Integral-Anteil Ki hinzugenommen. Der Integral-Anteil sorgt nach einer ersten schnellen Reaktion des P-Anteils dafür, dass der bleibende Regelfehler über die Zeit ausgeglichen wird.

Beginne mit einem kleinen Wert (Ki = 10), das entspricht einem eher trägen Verhalten.

Analog zum Einstellen des P-Anteils führst Du wiederholt Sollwertsprünge durch und schaust Dir die Sprungantwort an. Dabei erhöhst Du stufenweise Ki [Schrittweite 10] und erhöhst damit die Aggressivität des Reglers. Auch für den Integralanteil gilt: Eine zu aggressive Einstellung führt zu ungewollten Schwingungen oder sogar Instabilität.

Differential-Anteil Kd einstellen​

Für viele praktische Anwendung reicht ein gut eingestellter PI-Regler vollkommen aus. Das heißt: Wenn Du jetzt schon mit der Performance des Reglers zufrieden bist, dann höre einfach auf. :)

Falls Du durch die Hinzunahme des D-Anteils noch etwas herausholen möchtest, dann wiederhole das Vorgehen aus den beiden vorherigen Schritten.

Beginne wieder mit einem kleinen Wert (Kd = 5). Diesen Wert erhöhst Du stufenweise, bis Du mit der Performance des Regelkreises zufrieden bist.

Theoretisch bewirkt der D-Anteil auch, dass ein größerer P-Anteil gewählt werden kann, ohne dass das System anfängt zu schwingen. Das heißt: Du kannst mit aktiven PID-Regler nun noch mal den P-Anteil nachjustieren.

Was tun wenn…​

Beispiele, siehe auch SHFW Anleitung hier:

Der Regler reagiert zu langsam auf Änderungen​

→ Erhöhe den Kp-Wert, um eine stärkere Reaktion zu erzielen.

Die Geschwindigkeit schwingt dauerhaft​

→ Reduziere den Kp-Wert, um den Reglereingriff abzuschwächen, und/oder erhöhe den Kd-Wert, um die Reaktion des Reglers zu dämpfen.

Der Regler schwingt beim Einregeln stark über​

→ Erhöhe den Kd-Wert, um die Dämpfung zu erhöhen und das Überschwingen zu reduzieren.

Es gibt eine bleibende Abweichung vom Sollwert​

→ Erhöhe den Ki-Wert, um den integralen Ausgleich zu verstärken und den Fehler zu beseitigen.

Lower Limit​

Steht der Parameter „Lower limit“ auf 0, dann stellt der Tempomat nur positives Drehmoment, d.h. der Tempomat arbeitet auf ebener Strecke und bei Steigungen. Fährst Du jedoch bergab, dann erhöht sich die Geschwindigkeit des Rollers, je steiler, umso mehr. Denn der Tempomat bremst nicht.

Wenn Du möchtest, dass der Tempomat die Geschwindigkeit nicht nur bei gerader und ansteigender Strecke konstant hält, sondern auch bergab, dann kannst Du das über das „Lower limit“ erreichen: Es handelt sich hierbei um den maximalen Bremsstrom, den der Tempomat bei Bergabfahrt stellen kann.

Probiere einfach verschiedene Werte auf verschiedenen Strecken mit unterschiedlichem Gefälle aus :)

Schlusswort​

So, jetzt wisst Ihr Bescheid. Macht was draus, ich kann mich nicht um alles kümmern (frei nach ).

Sonnnige Grüße aus dem wilden Süden :cool:

Quelle für Identifikation der Reglerparameter:
 
Zuletzt bearbeitet:
Stellt doch hier gerne mal Eure optimalen PID-Einstellungen ein, mit Angabe des Scooter-Modells, DPC oder Speed based, und ggf. Euren Hardwaremodifikationen (insbes. Zusatzakku) :cool:
 
  • Hilfreich!
Reaktionen: Turboforce
Stellt doch hier gerne mal Eure optimalen PID-Einstellungen ein, mit Angabe des Scooter-Modells, DPC oder Speed based, und ggf. Euren Hardwaremodifikationen (insbes. Zusatzakku) :cool:
Finde ich eine gute Idee.
Dann fang du mal an😁

Wenn genug Daten da sind könnte man eine Tabelle mache? Für bessere Übersicht.
 
BTW, hier eine Messung mit aktivem Tempomat bei längerer & steiler Bergabfahrt. Einbruch der Geschwindigkeit bei 17:21 ist der starken Steigung geschuldet.

Diese Messung belegt auch, dass der Akku beim Bremsen aufgeladen wird (was ja in der Community immer wieder bezweifelt wird).

1690732756949.webp