von Gerd Heinz
Nach dem Desaster des gescheiterten chinesischen Mondrover "Jadehase" entstand im Jahre 2014 die Idee, ein Verzögerungsmodul für Mondrover-Modelle für den Modellsport zu entwickeln. Doch es sollte zehn Jahre dauern, bis Zeit und Gelegenheit dafür war, um aus der Idee Realität werden zu lassen.
Wir wissen, daß jegliche, neue Technologie aus Versuch und Irrtum entwickelt werden muß. Dazu gehören Fehlschläge ebenso, wie viele, teure Neukonstruktionen.
Bei Mondfahrzeugen enden beide Optionen in einer Katastrophe, letztlich kostet es Unsummen, wenn Fahrzeuge unter falschen Annahmen fehlerhaft entwickelt werden.
So der chinesische Mondrover "Jade-Hase", zu seiner Geschichte siehe diesen (Link). Er landete am 14. Dezember 2013, also 43 Jahre nach "Lunochod 1" (Link) auf dem Mond und blieb nach nur 114 Metern auf dem Mond stecken.
Im Gegensatz zum ersten Mondrover überhaupt, "Lunachod 1" (Bild oben) der Sowjetunion, der im November 1970 auf dem Mond landete und über zehn Kilometer zurücklegte, schaffte Jadehase in 31 Monaten gerade einmal diese 114 Meter. Schon nach der zweiten Mondnacht war er bewegungsunfähig, nachdem er diese Strecke in sechs Etappen über jeweils wenige Meter bewältigt hatte.
Um weitere, milliardenschwere Verluste dieser Art zu vermeiden, könnten Modellbauer vielleicht helfen. Und zwar nicht mit dem Nachbau eines einzigen Fahrzeugs, dessen technische Auslegung bereits festliegt, sondern mit einem wettkampforientierten Modellbau, bei dem es um Schnelligkeit bei der Überwindung einer realitätsnahen Mondlandschaft geht.
Da überhaupt nicht absehbar ist, welche Ideen beim Entwurf der Fahrzeuge sowie im Wettkampf entstehen würden, um Konstruktionen zu erschaffen, die schneller, präziser und fehlerfreier eine bestimmte, realitätsnah nachgebaute Strecke mit Sand und Steinen überwinden können, wäre hier Potential zu erwarten.
Nur die beste Konstruktion setzt sich im Wettkampf durch. Ein Wettkampf unterschiedlichster Fahrzeugkonzepte würde recht wahrscheinlich zu effizienten Lösungen führen. Das ist die Erfahrung aus dem Wettkampf-Sport funkferngesteuerter Modelle der letzten fünfzig Jahre.
Hier könnte vielleicht ein Grundstein für eine solche Wettkampfklasse gelegt werden. Kern der Übung ist ein Verzögerungsmodul, welches zwischen Fernsteuerempfänger und Servos geschaltet werden kann, um realitätsnahe Bedingungen simulieren zu können.
Der Abstand des Mondes von der Erde liegt zwischen rund 362.102 und 404.694 Kilometer. Die Laufzeit eines Signals zum Mond beträgt damit je nach Erdentfernung zwischen 1,2 und 1,35 Sekunden. In Summe kommen zweimal diese Verzögerung, also 2,4 bis 2,7 Sekunden zusammen, ehe ein Fahrzeugführer auf der Erde das Ergebnis eines Steuerkomandos erkennen kann. Bei Lunochod 1 sollen es 2,6 Sekunden gewesen sein.
Denken wir über den Mars nach, so hat dieser einen Abstand von der Erde zwischen 279 und 301 Millionen Kilometer, entsprechend lägen die Signallaufzeiten hier zwischen 930 und 1003 Sekunden bzw. 15,5 bis 16,7 Minuten. Mal zwei wären das 31 bis 33,4 Minuten, bis der Fahrer weiß, was er tat. Diese sehr großen Zeiten ließen wahrscheinlich wenig Begeisterung aufkommen, Wettkämpfe würden sich über Tage hinziehen müssen. Wir belassen es deshalb bei einem Verzögerungsmodul für den Mond.
Die gescheiterte Mission des chinesischen Mondrovers "Jadehase" war für den Autor 2014 der Anlaß, über ein einfaches Gerät nachzudenken, mit dem Mondfahrzeuge simuliert werden können.
Die Idee dahinter: Wenn man so ein Gerät für wenig Geld kaufen kann, dann wäre es denkbar, eine Modellsportklasse "Mondrover" zu schaffen, mit der neue Konzepte solcher Fahrzeuge im Wettkampf erprobt werden können. Davon würde nicht zuletzt die Raumfahrtindustrie profitieren.
Das Gerät sollte klein sein, wenig Strom verbrauchen, wenig kosten und es sollte sich mit wenigen Handgriffen in eine bestehende Funkfernsteueranlage integrieren lassen.
Da Servos von Funkfernsteuerungen (FFS) mit Pulsweitenmodulation arbeiten, lag die Idee nahe, ein Verzögerungsmodul von 2,5 Sekunden zwischen Funkempfänger und Servo-Antrieben zu schalten.
Nun ist die Pulsweite für Servos mit 1,0 bis 2,0 Millisekunden nicht eben lang. Wollen wir Lenk- oder Gasbewegungen mit weniger als einem Prozent Fehler auflösen, so haben wir jeden Impuls mit einem Fehler von unter 10 Mikrosekunden zu messen und wieder auszugeben.
Zu den Grundlagen der Digital-Proportional-Steuerung siehe auch diese Seite (Link).
Ziel ist es, zwei Kanäle (Lenkung und Vor-/Rück-Kanal) in einem zyklisch organiserten Umlauf-Speicher zwischenzuspeichern. Reservieren wir pro Puls zwei Byte, so wären jeweils vier Byte zwischenzuspeichern.
Von Anbeginn war klar, daß das Verzögerungsmodul mit einem möglichst kleinen Mikrocontroller realisiert werden sollte. Die Schwierigkeiten aber liegen im Detail. Verschiedene Fernsteuerungen arbeiten mit verschiedenem Frame-Timing, also mit verschiedenem Abstand der Pulsgruppen voneinander.
Würde man eine feste Zahl von Speicherplätzen für einen Umlauf eines Zyklenzählers reservieren, so würde die Gesamtverzögerung dieses Zyklenzählers von der Dauer eines Frames anhängen.
Wollte man hingegen eine Universallösung schaffen, die von der Framerate unabhängig ist, hätte man mit einem sehr großen Speicherplatzbedarf zu rechnen. Bei einer Zeitauflösung von 10 Mikrosekunden wären bei einer Verzögerung von 2,5 Sekunden 250.000 Zellen a vier Byte (gleich ein Megabyte oder 8 Megabit) erforderlich. Das scheint mit der Forderung nach einem kleinen und einfachen Mikrocontroller zu kollidieren.
Auch ließe sich darüber nachdenken, nur die Zeiten der Flanken (LH und HL) auf K1 und K2 auf wenige Mikrosekunden genau im SRAM zu speichern und nach 2,5 Sekunden wiederzugeben.
Nach vielen Abwägungen über den Aufbau eines solchen Verzögerungsmoduls entstand schließlich eine kleine und praktikable Lösung.
Mit einer "Reflex Wheel Start" Anlage von Carson, die für unter fünfzig Euro gehandelt wird, steht eine preiswerte FFS mit moderater und konstanter Frame-Rate von 14 Millisekunden zu Verfügung. Der Empfänger verkraftet von 5 bis zu 11 Volt, er ist damit sogar nutzbar für moderne Hochvolt-Servos und er hat auch eine FailSave-Funktion auf Kanal 2 (die allerdings beim Mondrover nicht programmiert ist, weil er auf den Frame-Start auf Kanal 1 wartet).
Auch deren großer Bruder, die "Reflex Wheel PRO LCD" Anlage läuft mit einer Framerate von 14 Millisekunden.
Fig.1: Timing-Diagramme von "Reflex Wheel Start" und "Reflex Wheel PRO LCD". Beide Anlagen arbeiten mit einem Frame von 14 Millisekunden.
Beide Anlagen senden vier Kanäle, wobei der vierte Kanal jeweils ohne Funktion ist. Auch ist er bei der "Reflex Wheel PRO LCD" unorthodox dem dritten Kanal überlagert, siehe Fig.1 (gelbe Kurve).
Der dritte Kanal kann bei der "Reflex Wheel Start" mit einer Taste zwischen 1 und 2 Millisekunden umgeschaltet werde. Bei der "Reflex Wheel PRO LCD" läßt er sich in drei Stufen schalten mit 1,0; 1,5 und 2,0 Millisekunden. Damit sind einfache Schaltfunktionen möglich.
Dividiert man 2,5 Sekunden durch 14 Millisekunden, so hat ein Umlaufspeicher rund 180 Zellen a vier Byte (2 Byte je Kanal) lang zu sein. Das ist selbst mit kleinen Mikrocontrollern, wie einem Atmel ATmega32U4 oder einem ATmega328 machbar.
Arbeiten wir also mit einer festen Framerate von 14 Millisekunden, so ergibt sich eine sparsame und sehr kleine Lösung.
Das Verzögerungsmodul wird mit einem Board "Arduino proMicro" von Sparkfun mit 16 MHz und 5 Volt (auf der Basis Atmel ATmega32U4) realisiert. Eine Innenschaltung des Arduino-Moduls findet sich unter folgendem Link bei Sparkfun.
Auf der Rückseite des Boards ist eine Lochrasterplatte (Fig.3) aufgelötet, die den Anschluß der vier externen Kabel (K1_In bis K2_Out), eines Ein-Aus-Schalters für die Signalverzögerung und einer Spannungseinstellung mit JP1 gestattet.
Das Modul wird zwischen FFS-Empfänger und Servos K1 und K2 gesteckt. Dazu werden zwei 15 Zentimeter lange Servo-Verlängerungskabel halbiert. Je eine Hälfte wird für den Eingang, die andere für den Ausgang genutzt.
Fig.2: Prinzipschaltung mit einem Board "Arduino proMicro" auf Basis des ATmega32U4. Alle externen Komponenten sind auf einer Adapterplatine unter dem Arduino-Board angebracht.
Dank eingebautem Spannungsregler soll der Arduino-proMicro am RAW-Eingang Spannungen bis zu 16 Volt verkraften. Damit ist es möglich, den Modul in Fahrzeugen ohne BEC (Batterie Elimination Circuit) mit HV-Servos zu nutzen. Der Jumper JP1 bleibt dabei offen.
Für Empfänger mit BEC, die mit 5 Volt arbeiten, ist auf der Adapterplatte eine Möglichkeit vorgesehen, RAW und VCC mit dem Jumper JP1 kurzzuschließen. Der Prozessor selbst verkraftet nur 5 Volt.
Der Jumper J1 auf dem proMicro-Board (Fig.2) bleibt geschlossen, um die 5-Volt Versorgung über USB zum Debugging nutzen zu können.
Die Adapter-Platine ist einlagig, die Leiterseite zeigt nach unten, sie ist deshalb spiegelverkehrt zum Arduino-Modul aufgebaut. Für C1 und C2 werden MLCC-Kondensatoren 0805 auf der Unterseite eingelötet. Die Kabel kommen am besten zwischen den Leiterplatten des Arduino proMicro und der Adapterplatte heraus. CB1 verbindet den rechts- und linksseitigen GND-Anschluß des Arduino (nicht zwingend erforderlich).
Fig.3: Adapterplatte für das Board "Arduino proMicro" mit den Außenanschlüssen.
Fig.4: Layoutprinzip der Adapterplatte für das Board "Arduino proMicro". Sicht von unten (spiegelverkehrt).
Fig.5: Layout der Adapterplatte für das Board "Arduino proMicro". Sicht von unten (spiegelverkehrt) als geätzte Platine.
Fig.6: Oberseite des Adapters mit "Arduino proMicro". USB ist nicht angeschlossen.
Fig.7: Versuchsaufbau des Adapters mit einer Lochrasterplatte, Sicht auf die Seite des Adapters (JP1 war noch nicht installiert).
Die Servokabel sind im Bild unten aufgelötet. Das Modul steckt in einem Schrumpfschlauch. Die Programmierung des Moduls erfolgt über das von rechts gesteckte USB-Kabel.
Der verwendete 8-bit Prozessor läuft mit 16 MHz. Die Entwicklung der Software erfolgte mit dem Arduino-Compiler, der Code ist in C++ als *.INO geschrieben. Bei 16 MHz eine Auflösung im Bereich einer Mikrosekunde zu erhalten, wäre eigentlich nur in Assembler möglich. Mit Arduino-C gelang es nicht ganz perfekt. Die Messung ist nur auf etwa 4 Mikrosekunden genau. Damit liegt der Fehler aber unter 1%.
Um die Steuerhebel exakt einstellen zu können, dient der Delay on/off Schalter. Mit diesem wird die Ausgabe der Pulsweiten zwischen den aktuell gemessenen Werten (Delay off) und den maximal verzögerten Werten (Delay on) umgeschaltet.
Probleme bereiten die hervorragend einfachen, aber deshalb recht komplexen und befehlsintensiven Arduino-Funktionen. Sie wurden im einzubindenden include-File "gheinz.h" teilweise durch schnelle Funktionen ohne Schnickschnack ersetzt. Diese sind allerdings nur auf dem Prozessor ATmega32U4 lauffähig. Wird ein anderer Prozessor benutzt, erscheint eine Fehlermeldung.
Zunächst wurden Versuche mit Interrupts und Libraries (Servo.h) gemacht. Damit waren aber keine hinreichend genauen Ergebnisse zu erzielen. Letztlich wurde ein Algorithmus entworfen, der vollständing im Polling abarbeitbar ist. Erst damit wurde die nötige Zeitauflösung erreicht.
Fig.6: Oszillogramm des Verzögerungsmoduls mit Eingabe und Ausgabekanälen. K1_out und K2_out erscheinen gegenüber K1_in und K2_in um 2,5 Sekunden verzögert.
Der Speicher ist als Umlaufspeicher organisiert. Jede Speicherzelle (zwei Kanäle a zwei Byte) wird zunächst gelesen, die abgelesenen Werte werden temporär zwischengespeichert.
Dann wartet der Prozessor auf den Kanalimpuls von Kanal K1. Wird dieser erkannt, beginnt die Zeitmessung. Sie endet mit dem Ende des Impulses auf K1. Danach wird die K2-Impulsbreite gemessen. Zwischen K1 und K2 liegt (unüblicherweise) bei der ReflexWheel eine kleine Pulspause, sodaß K2 mit derselben Zeitmeßschleife wie K1 gemessen werden kann. Mit den Werten werden sofort die freigewordenen Speicherplätze von K1 und K2 im SRAM überschrieben.
Nun erst werden die temporär zwischengespeicherten Werte gebraucht, um Zählerschleifen für die Pulsausgabe von K1 und folgend K2 abzuarbeiten. Das erklärt, warum der dritte und vierte Impuls (um 2,5 Sekunden verzögerte Pulsausgabe) im Oszillogramm direkt auf die ersten zwei Impulse für die K1 und K2 Eingaben zu sehen sind.
Nun wird der Zellindex inkrementiert und alles beginnt von vorn. Sind 180 Zellen a zweimal zwei Byte abgearbeitet, beginnt unmerklich der nächste Speicherumlauf.
Dieser Algorithmus erlaubt eine direkte Bindung des Zeitschemas der Ausgabe an die des Fernsteuersenders. Solange die Verbindung zwischen Sender und Empfänger stabil steht und solange der Sender mit einer konstanten Framerate sendet, sind fehlerhafte Verzögerungen, die deutlich von 2,5 Sekunden abweichen, praktisch ausgeschlossen.
Die im veralteten Code zu erkennenden Korrekturen der gemessenen Verzögerungszeiten waren auf die verwendete Arduino-Funktion delayMicroseconds() zurückzuführen. In der neuesten Version mit Detektion der Framerate wurde diese Funktion durch micros() ersetzt. Die Ergebnisse wurden damit hinreichend genau.
Um die erforderliche Genauigkeit zu erreichen, arbeitet der Algorithmus vollständig seriell, d.h. im Polling. Die Kanäle K1 und K2 müssen vom Empfänger nacheinander angeboten werden. Empfänger, die die Servo-Impulse parallel ausgeben, sind leider nicht bedienbar. Ein erster Versuch der Realisierung mit Interrupts war zu ungenau.
Die reale Verzögerung des Moduls ist algorithmisch an die Framerate des Senders gebunden. Schlußendlich kam deshalb noch eine automatische Erkennung der Framerate hinzu, um ohne Oszilloskop überprüfen zu können, ob die beabsichtigte Verzögerung von 2,5 Sekunden auch wirklich erreicht wird.
Über die USB-Schnittstelle kann man den Modul nicht nur programmieren, auch läßt sich die Framerate des Senders und die resultierende Verzögerung messen und anzeigen. So ergeben bei Eingabe eines "r" zwei verschiedene Sender folgenden Dialog:
>h Testmode aus. Framerate: r; Testmoden: s slow oder f fast
// (Sender ReflexWheel proLCD)
>r Framerate messen
Framerate des Senders ist 14000 µsec (14 ms)
Frames in 2,5 Sekunden = 178.57
u16 lastcell im SRAM = Frames * 2 = 358
Verzögert wird um 2506.00 ms
// (Sender Robbe Skysport 4, T4VF)
>r Framerate messen
Framerate des Senders ist 17996 µsec (18 ms)
Frames in 2,5 Sekunden = 138.92
u16 lastcell im SRAM = Frames * 2 = 278
Verzögert wird um 2501.44 ms
Nehmen wir einen langsamsten Sender mit einer Framerate von 20 ms, so beträgt der maximal mögliche Meßfehler für 2,5 Sekunden: 2500 ms +/- 20 ms = 2480...2520 ms, das sind weniger als +/- 0,8%. Bei höheren Frameraten wird der Fehler noch kleiner. Dessen ungeachtet wären für den Wettkampf identische Frameraten und damit gleiche Sender zu empfehlen.
Um USB nutzen zu können, kann das Verzögerungsmodul mit einem USB-Kabel an einen Windows-PC oder mit einem USB-OTG-Adapter an ein Smartphone angeschlossen werden, auf dem ein Serielles USB-Terminal für USB-VCP (Virtual COM-Port) installiert ist. Unter Windows z.B. PuTTY, Hyperterm oder andere, unter Android z.B. die App "Serial USB Terminal" von Kai Morich (Link).
Am Terminal einzustellen sind 115200 Baud, 8n1n (8 Datenbit, kein Paritätsbit, 1 Stopbit, kein Handshake).
Bei USB-OTG (USB - On the Go) arbeitet das Handy wie ein PC als Server bzw. Busmaster und kann dem Slave (hier der Arduino) auch Strom liefern. Grundlagen der seriellen Schnittstelle und UART siehe z.B. diesen Link.
Achtung! Bei einem Anschluß an USB ist der Jumper JP1 unbedingt zu öffnen, um (mit BEC) nicht die 5 Volt von USB mit den 5 Volt vom BEC kurzzuschließen! Hierbei würden unkontrolliert hohe Ströme in der einen oder anderen Richtung fließen. VCC des Arduino-Moduls wird automatisch über USB bereitgestellt.
Ein Effekt bei Verwendung der Variante mit Messung der Framerate soll nicht verschwiegen werden: Wird der Empfänger eingeschaltet, ohne daß der Sender bereits eingeschaltet ist, wird die Framerate aus zufälligen Störungen oder zu Null erkannt. Das Modul verzögert dann trotz eingeschaltetem Delay überhaupt nicht, oder es liefert kein Signal an den Ausgängen.
In den Anhang wurden deshalb zwei Varianten der Software aufgenommen: Mit und ohne automatische Detektion der Framerate. Die Variante ohne Framerate-Detektion ist auf eine Framerate von 14 Millisekunden fixiert, allerdings ist sie veraltet und ungenauer.
Um das Verzögerungsmodul in einem Fahrzeugmodell zu überprüfen, sollte der "Delay on/off"-Schalter erst einmal ausgeschaltet sein. Damit kann die korrekte Funktion sowie die Neutralstellung der Kanäle überprüft werden. In diesem Mode funktioniert das Modul genauso wie mit Delay, allerdings werden nicht die um 2,5 Sekunden verzögerten Daten ausgegeben, sondern die zuletzt aufgenommenen.
Erst wenn man sich überzeugt hat, daß die Übertragung der Kanäle funktioniert, sollte man bei aufgebocktem Modell das Delay einschalten. Es erfordert einige Übung, mit der langen Verzögerungszeit mental zurechtzukommen.
Mangels eines geeigneten Chassis wurde das Modul vom Autor in ein allradgetriebenes Geländefahrzeug im Maßstab 1:10 eingebaut. Das Getriebe wurde mit dem kleinsten Ritzel versehen, um das Modell möglichst langsam zu machen.
Dennoch ist es mit eingeschaltetem Delay nur auf großen Freiflächen (Fußballplatz) ohne störende Bordsteinkanten betreibbar. Mit zu schnellen Modellen kann man böse Überraschungen erleben. Deshalb sollte man das Gas äußerst vorsichtig betätigen! Auch sollte man Zuschauer zunächst unbedingt fernhalten! Vorsicht, Verletzungsgefahr!
Der Autor wünscht viel Erfolg beim Nachbau und viel Spaß beim Steuern eigener Modelle! Ich würde mich über Erfahrungsberichte freuen.
top
Created March 24, 2024
Mail to info@gheinz.de
Gesamtzahl der Besucher seit dem 6. Dez. 2021:
All rights reserved, © Copyrights Gerd Heinz