10.07.2022
Nun ist es endlich geschafft: Die Speicherprogrammierbare Steuerung (SPS) von Bachmann ist auf dem Modell der DreamCatcherOne installiert und programmiert.
Abbildung 1: SPS im Modell installiert
Abbildung 1 gibt einen Überblick über den Systemaufbau im eingebauten Zustand.
Ganz oben links ist die Spannungsquelle für alle 24V Systeme zu sehen: Ein
6-Zelliger LiPo-Akku mit 8000mAh Kapazität (rund 177 Wh). Damit kann die Steuerung
und alle 24V-Sensoren für einige Stunden versorgt werden, was in erster Linie für
den Burn-in
im eingebauten Zustand wichtig ist. Um auszuschließen, dass die
Steuerung oder die Sensoren bei Spannungsschwankungen Probleme bereiten, habe ich
einen Victron Energy Orion-Tr 24/24/17 DC-DC-Wandler nachgeschaltet,
der die Spannung immer fix bei 24V hält, egal, ob der Akku 25,2V (voll) oder 22,2V (leer)
bereitstellt. Es ist anzumerken, dass dieser Akku/DC-DC-Wandleraufbau nicht
die Fahrmotoren und die Servos versorgt. Die hängen an eigenen 2 oder 3 Zellen
LiPo-Akkus. Die Fahrtregler versorgen die Servos mit 5V. Dem Stomverlauf weiter folgend
ist die 24V-Leitung mit 10A abgesichtert, falls es irgendwo einen Kurzschluss geben
sollte. Der Ein-/Ausschalter fehlt in diesem Bild noch.
Der große schwarze Kasten in der Mitte ist die Bachmannsteuerung mit einigen I/O-Modulen, die ich meine Tests erworben habe. Unten links sieht man die Verbindungskabel für die CANOpen-Sensoren. In Anlehnung an NMEA2000 habe ich eine Device-Net-Verkabelung mit M12-Steckern und Buchsen verwendet. Das erscheint mir die komfortabelste Verkabelung zu sein, da in den fünf Polen auch die Spannungsversorgung mitgeführt wird. Unten in der Mitte befindet sich der 24V auf 5V Signalwandler für die Servo PWM-Signale. Was sich hochtechnisch anhört, ist lediglich ein simpler Spannungsteiler, da die Servoeingänge ausreichend hochohmig sind. Es gibt insgesamt sechs Anschlüsse: Podrotation, Drehzahl und Ruder jeweils an Backboard und Steuerboard. Ganz rechts unten schließlich ist der Empfänger der HBC Radiomatic Fernsteuerung, der über einen separaten CANOpen-Bus angeschlossen ist. Es ist nicht erforderlich, den Empfänger an einem separaten Bus zu betreiben. Dies war lediglich für Testzwecke einfacher und am Ende hatte ich keine Lust mehr, das CAN-Bus-Kabel des Empfängers auf einen M12-Stecker umzulöten. Der Empfänger wird über DIP-Switches auf die gewünschte Adresse/Baudrate eingestellt, was bei weitem die einfachste Methode darstellt. Ein wichtiger Punkt bei dem Empfänger ist, dass er zwingend ein Heart-Beat-Signal (1000ms) verlangt. Ansonsten geht der Empfänger in einen Fehlermodus, was ja auch irgendwo sinnvoll ist, wenn man damit ein ganzes Schiff steuert...
Die Programmierung der Bachmann-Steuerung ist problemlos und zuverlässig,
wenn man sich mit SPS-Programmierung mit Structured Text
(ST) auskennt
und verstanden hat, wie Prozessabbilder und I/O-Konfigurationen funktionieren.
Die Sprachimplementierung hält sich recht strikt an die ursprüngliche
IEC 61331-Spezifikation, was bedeutet, dass sie keine Methoden und andere
Spracherweiterungen
kennt. Die Entwicklungsumgebung basiert auf Eclipse und ist sehr gut mit der Hardware
der Steuerung integriert. Dadurch kann man den Code auf der Steuerung laufend direkt
debuggen kann, womit man so ziemlich jeden Fehler finden kann. Auch direkte Änderungen
von Variablen im laufenden Betrieb sind möglich, so dass man z.B. Reglerparameter
händisch testen kann.
Ich verwende für das Modell nur das GIO212-Input-Output-Modul, das eine wahrhaft eierlegende Wollmilchsau ist: Es kann simples digitales oder analoges I/O (immer an denselben Pins!), aber das ist noch lange nicht das Ende: Es kann PWM-Signale generieren (man beachte die verschiedenen zeitlichen Auflösungsgenauigkeiten je nach dem welche Periodendauer eingestellt ist) und stellt auch eine Periodendauermessung mit 96MHz Basisfrequenz zur Verfügung und vieles mehr. Zu jedem Primärkanal kann man auch einen Sekundärkanal definieren, auf dem man z.B. eine Versorgungskleinspannung (bis 10V) für einen Sensor bereitstellen kann. Ich habe mich entschieden, die Periodendauer für die Modellbauservos auf 8 ms einzustellen, wodurch das PWM-Signal dann in Schritten von 125ns variiert werden kann. Dadurch kann der Nullpunkt des Servos sauber fixiert werden. Alle, die Ahnung von den Innereien von Modellbauservos haben, werden nun die Hände über dem Kopf zusammenschlagen, weil diese Servos laut Spezifikation normalerweise mit einer Periodendauer von 20ms (50Hz) betrieben werden. Hier kommt die Entwarnung: Alle modernen Modellbauservos vertragen die 8ms (125Hz) ohne Mucken. Stellt sich die Frage, warum ich das gemacht habe? Wie bereits früher beschrieben, habe ich die Servos für die Drehung der POD-Antriebe gehackt, so dass sie einen Endlosbetrieb (360°-Betrieb) erlauben. Das ist recht einfach, wenn man Servos hat, die ein Poti zur Positionsregelung haben (siehe Eintrag vom 30.08.2021). Allerdings sind selbst 1% Widerstände nicht genau genug, damit das Servo in der Standard-Nullstellung (1500$\mu$s Pulsbreite) steht. Auf einer modernen Modellbaufernsteuerung (ich hatte mir eine FySky Taranis Q X7 für die ersten Harwaretests und Testfahrten zugelegt) kann man die Null-Position mikrosekundengenau einstellen. Durch die Wahl der 8ms Periodendauer ist das auf der Bachmann SPS ebenfalls möglich. Ab 8192$\mu$s (8,192ms) Periodendauer sinkt die Auflösung des GIO212 um den Faktor 16, so dass die minimale Schrittweite dann nur noch 2$\mu$s beträgt, eine mikrosekundengenaue Einstellung also nicht mehr möglich ist. Vermutlich würden 2$\mu$s Schritte auch ausreichen, aber ich habe es nicht ausprobiert.
Abbildung 2: Drehzahlmessung HW-Test
Die Motoren werden per Drehzahlregelung mit einem PI-Regler geregelt. Das
ist zwingend erforderlich, weil ein und derselbe Ausgabewert für den Modellbaufahrtregler
bei zwei Motoren zu grob unterschiedlichen Drehzahlen führt. Damit wäre mit einem
Joystick nicht einmal eine Geradeausfahrt möglich. Die Drehzahlregelung hat auch noch
einen anderen positiven Nebeneffekt: Normalerweise bestimmt sich die Maximaldrehzahl
bei bürstenlosen Modellbaumotoren und Modellbaufahrtreglern durch die angelegte
Spannung, also ob, zwei oder drei LiPo-Zellen-Akkus angeschlossen werden. Durch die
Regelung spielt das keine Rolle mehr, da ich die Maximaldrehzahl auf 7000 U/min fixiere
und so egal welche Spannung anliegt, die Maximaldrehzahl des Podantriebs von 8000 U/min
nie erreicht wird. Meine primitive
Lochscheiben-/Lichtschranken-basierte Drehzahlmessung, die lediglich die Rechteckimpulse
der Lichtschranke per Periodendauermessung auswertet (Abbildung 2), hat natürlich
einen entscheidenden Fehler:
Sie macht keine Drehrichtungserkennung. Zum Glück ist das für meine Vektorsteuerung
kein Problem, da die Propeller hier immer nur vorwärts laufen. Für den normalen
Jostick-basierten vorwärt-rückwärtsbetrieb musste ich ein wenig tricksen, indem ich
geeignete Annahmen mache, in welche Richtung der Propeller dreht. Für die echte
DreamCatcherOne wäre das ein no go
, aber für das Modell funktioniert es
leidlich.
Die Drehwinkel der Podantriebe wird durch einen simplen P-Regler eingeregelt, da die Strecke bereits einen Integrator (Drehgeschwindigkeit zu Drehwinkel) umfasst. Einen PI-Regler habe ich auch ausprobiert. Der erreicht zwar eine bessere Endgenauigkeit, hat aber ein seltsames Kriechverhalten gezeigt, das ich nicht beseitigen konnte. Irgendwelche Vorschläge?
Ich habe zwei Betriebsmodi implementiert, die meine HBC Radiomatic Fernsteuerung vorsieht:
Die Betriebsart Moor
(wie mooring oder anlegen) steht für die
Vektorsteuerung. Zur Erinnerung: Das bedeutet, dass das Schiff der Auslenkungsrichtung
des Joysticks folgt, also, wenn ich z.B. den Joystick nach links drücke, fährt das
Schiff seitwärts. Dreht man an dem Knopf für die z-Achse, dreht sich das Schiff auf
der Stelle. Drehung und Richtung können gemeinsam benutzt werden und werden
rechnerisch zu einer Gesamtbewegung überlagert.
Die Ruder werden in diesem Modus nicht verwendet.
Um die Podantriebe nicht zu zerstören,
wird die Drehzahl erst zugeschaltet, wenn die Poddrehung weniger als 5°-10° von der
Sollposition entfernt ist. Bei Winkelabweichungen, die größer als dieser Wert sind,
werden beide Antriebe kurzfristig abgeschaltet. Jeder, der schon einmal ein
Fahrradvorderrad in der Hand hatte und versucht hat, die Drehebene des Rades zuverändern
während sich dieses dreht, versteht intuitiv, was das Problem ist: Die auftretenden
Kräfte sind sehr groß.
Die Betriebsart Sail
steht für eine simple Joysticksteuerung der Antriebe.
Das bedeutet, dass man nach vorne und nach hinten die Drehzahl der der Motoren
regelt. Im Gegensatz zu echten Katamaranen, die bei gleicher Gashebelstellung
nie geradeaus fahren, ist dies in meinem Fall durch die Drehzahlregelung der
Antriebsmotoren weitestgehend gewährleistet. Mit dem z-Achsen-Drehknopf auf dem
Joystick kann das Schiff gedreht werden. Im Unterschied zur Vektorsteuerung, bei
der ein Motor um 180° gedreht wird, aber beide Motoren vorwärts laufen, läuft
hier ein Motor rückwärts und es gibt keine Poddrehung.
Die rechts/links-Bewegung des Joysticks steuert die Ruder an.
Da der Sail
Modus auch bei längeren Strecken komfortabel sein soll,
kann man die Drehzahlen auf Knopfdruck (Set
) fixieren,
ähnlich wie in einem Auto mit einer Geschwindigkeitsregelung,
nur dass hier nichts geregelt wird. Mit den Tasten +
und -
an der Fernsteuerung kann die Geschwindigkeit nachgestellt werden.
Das Ganze funktioniert aber nur in Vorwärtsfahrt, damit man nicht aus Versehen rückwärts
in eine Kaimauer donnert. Drückt man den Set
-Knopf in Neutralstellung des
Joysticks wird die Drehzahlfixierung aufgehoben. Dasselbe passiert, wenn man den
Joystick nach hinten zieht. So sollte die Bedienung so intuitiv sein, dass man
auch in einer Stresssituation nichts verkehrt machen kann.