www.kappmeier.net


Modellbau - Memory-Switch Version 1


Vorgeplänkel

Im RC Modellbau werden früher oder später neben den Servos auch andere Funktionen geschaltet. Dazu werden Bausteine verwendet welche das Servo Signal eines Kanals auswerten und daran angeschlossene Verbraucher schalten. Die einfachen Bausteine schalten 1 oder 2 Funktionen, ausgelöst durch drücken des Steuerknüppels oder eines Schalters in die eine oder andere Richtung.

2 Funktionen pro Kanal ist nicht gerade viel. Daher gibt es Module von Anbietern mit mehr Kanälen, die jedoch sehr umständlich zu bedienen sind. Es gibt auch Ausführungen mit Sender seitig verbautem, i.d.R. nachgerüstetem, Steuermodul. Es gibt auch Sendehersteller wo dies Modul bzw. die Bedienmöglichkeit schon von Werk aus vorhanden ist (bspw. Servonaut Zwo 4). Im Normalfall sind diese Module proprietär. Die Kommunikation bei älteren (analogen) Anlagen erfolgt über das PPM Signal, sodass es vereinzelt möglich ist diese Signal zu "entschlüsseln".
 
Im Falle des Multi-Switch Modules von Futaba ist dies erfolgt, zumal das Protokoll recht einfach ist. Das Sendemodul sendet auf dem zu verwendenden Kanal einen sehr kurzen Impuls von kleiner 1ms, welcher außerhalb der Spezifikation des PWM Signales liegt. Dieses Signal wertet das Empfangsmodul als Start aus. Alle nun darauf folgenden 8 Signal entsprechen den 8 Schalterstellungen. Danach erfolgt eine Pause und wieder das kurze Start-Signal. Somit werden auf einem Servo Kanal 8 Schaltfunktionen bereitgestellt.



Mein Ansatz

Mein Ansatz ist anders. In meinem Baustein wird das vorhandene klassische PWM Signal eines Kanals ausgewertet. Dieses besteht aus einem Rechtecksignal mit einer Frequenz von 50 Hz.

Ein kompletter Impuls ist minimal 1ms und max. 2ms lang. Alles innerhalb dieses Zeitfensters ist das Steuersignal des Servos, wobei die Mittelstellung des Servos bei 1.5ms liegt.

Nachdem ich die Arduino Plattform lange Jahre ignoriert habe, bin ich durch Zufall auf den Befehl "pulseIn()" gestoßen. Dieser liest an einem definierten Pin das PWM Signal und gibt den Wert zurück.

Der zurückgegebene Wert entspricht dem Impuls in ms und hat einen Wert von etwa 980 bis 2080. Es benötigt nur noch ein klein wenig Programm um mit diesen Werten etwas anfangen zu können.


Kurzerhand einen Arduino Nano auf's Steckbrett geklemmt und ein paar LED dran, noch etwas mit dem Code herumschlagen und siehe da, es klappt. Da ganze hat dann doch etwas gebraucht, da ich das letzte Mal vor 20 Jahren mit C hantiert habe, die Arduino Plattform als ganzes bzw. die IDE im besonderen erst einmal verstehen lernen musste.

Aber zu Zeiten von Youtube lässt sich ja vieles "studieren"...

In der derzeitigen Version habe ich ein 2D Array mit 16 Fenstern definiert. 'Fenster' bedeutet ein Bereich von mindestens 20 µs. Grund ist der vom pulseIn() ermittelte, instabile Wert. Dieser pendelt immer einige µs, i.d.R. 4, hin und her.  Somit sollte das Fenster etwas größer sein.

Ausgehend von einem Wert von 1500 in Mittelstellung liegt Kanal 1 in dem Bereich von 1450 bis 1470.  Der Kanal 2 liegt dann bei 1420 bis 1440 usw. So bekommen wir auf einer Seite gut 8 Kanäle unter, ebenso 8 Kanäle auf der anderen Seite im Bereich von 1530 bis 1900, wobei ich einen Kanal als Bedienfunktion reserviert habe. Hierüber werden die jeweiligen Funktionen eines Ausganges festgelegt, z.b. Memory-Funktion, Blinken usw. Mehr als 15 Ausgänge (bei deren direkter Verwendung) sind mit dem verwendeten ATmega 328P nicht möglich, da wir die Pins für den Eingang und I²C abziehen müssen.

Aufgrund der erwähnten Ungenauigkeit des pulseIn() sollten die Kanäle nicht so nahe bei einander liegen, sonst kann es zum ungewollten auslösen des Nachbarkanals kommen.

Nun müssen wir nur noch den Sender dazu bringen die benötigten Werte zu senden. Bei den alten analogen Sendern müsste dies über Widerstandskaskaden erfolgen. Bei den meisten digitalen Sendern hingegen lassen sich am Sender vorhandene Schalter frei definieren. Im Falles der mir zur Verfügung stehen FrSky X20 mit ETHOS wird dazu ein freier Offset Mischer festgelegt. Ebenfalls testen konnte ich die Einrichtung mit einem Sender auf openTX Basis. Hier konnten die Ausgänge sowohl über 'Mischer' als auch über die 'speziellen Funktionen' eingerichtet werden.

Für Ausgang 1 hat dieser dann als Auslöser den Schalter SA (Pos. vorn), steht auf einem Offsetwert von -10% und sendet diesen an Kanal 5.  Mehr braucht es nicht. Das ganze wiederholt sich noch 7x mit Werten von -20%, -30% usw. verteilt auf Schalter SA (Pos. hinten), SB (Pos. vorn) usw.  Für die restlichen 8 Ausgänge werden dann Werte von +10% usw. verwendet.

Nun lassen sich mit den Schaltern SA vorn/hinten, SB, SC und SD alle 8 Ausgänge einer Seite betätigen, also die Seite mit dem Bereich 1470-1000.   Den oberen Bereich von 1530-1800 habe für die X20 auf die 6 Taster der Vorderseite und die beiden auf der Rückseite gelegt, wobei einer der 6 vorderen für die Konfiguration reserviert ist. Denkbar wäre auch eine eigene Ebene (Flugphase) für den anderen Bereich, der dann auch auf den Schaltern SA, SB, SC und SD liegt. Der 'Mode'-Funktionstaster könnte dann auf SF liegen.

Die Werte stehen als Tabelle zur Verfügung. Zum einfacheren, genaueren einstellen kann aber auch ein LCD mit mindestens 2x16 Zeichen via I²C Bus an CON1 angeschlossen werden. Auf diesem sind der aktuelle PWM-Wert, gewählter Kanal und Betriebsmodus abzulesen. 


LCD 16x2
              Zeichen

 


Hier die erste Platine, die ich nach den Probeaufbauten im Auftrag habe fertigen lassen:


Platine
              15ch Memory Switch Version 1



Funktionsfähig bestückt sieht das ganze so aus:

Bestückter Memory Switch



Die Stromversorgung erfolgt entweder über den Empfänger bei gesetzter Brücke J2 oder alternativ über das auf der Platine vorgesehene Netzteil (die 4 unbestückten Bauteile links Oben), welches über die Brücke J1 aktiviert wird.

Sind das Netzteil bestückt und beide Brücken gesetzt wird der Empfänger mit versorgt, quasi ein BEC. Allerdings stellt ein Standard 7805 nicht genug Leistung bereit um mehre Servos eines größeren Modelles zu versorgen. Primär gedacht ist das Netzteil um den Multiswitch unabhängig vom Empfänger zu versorgen.

Alle Ausgänge des µC führen über Widerstände und LEDs zu Transistoren die bei max. 30V einen Strom von max. 2A gegen GND schalten. Dies sollte für die meisten Anwendungen inkl. Motoren ausreichen.

Ein Video dieser ersten Version habe ich hier bereitgestellt : https://youtu.be/byDrcIgVNaw



Die Umsetzung/Entwicklung fand im Januar 2024 statt. Schon bei den ersten Versuchen hatte ich die Idee die Schaltung auch zur Steuerung eines Audio-Verstärkers zu verwenden.

Statt der Fernsteuerung wird am Eingang ein klassischer IR Empfänger angeschlossen. An den Ausgängen liegen dann die Eingangsrelais und ev. ein Motor-Poti. Die Software dazu hatte ich durch die beginnende Routine in der Arduino IDE an zwei Abenden fertig. Noch im November 2024 sollten diesem Thema eine besondere Bedeutung zukommen...




Zukünfiges und Ideen

Da das ganze jedoch zu groß baut arbeite ich an einer deutlich kleineren Variante mit 8 + 4 Ausgänge.

8+4 bedeutet 8 Transistorstufen und 4 direkte Pins. Die Pinbelegung wurde bewusst so gewählt das sich die bei ebay massenhaft angebotenen 4 -Kanal Relaisplatinen direkt anschließen lassen.

Mit diesen 4 Aus-/Eingängen möglich sind natürlich auch viele andere Verwendungen, PWM Ausgänge für Servos, Sensoren, Schaltbausteine oder auch Eingänge.

Hinzu kommt das ich die Software von PulseIn() auf IRQ umgestellt habe und damit die Auswertung genauer ist. Es passen nun alle 12 Ausgänge auf eine Seite also -10% bis -90%, wird eine zweiter Multiswitch über den Bereich +10% bis +90% angesprochen ergeben sich 24 Ausgänge auf einem Servokanal. Ich denke das hat doch was...


EDIT: zweite Version des Multi-Switch ist fertig



Jetzt gibt es nur das Problem genügend Schalter und zu schaltende Funktionen zu finden bzw. den Überblick der zugeordneten Funktionen zu behalten....      Mit der FrSky X20 und Verwandten steht ein Touch-Bildschirm zur Verfügung. Zusammen mit der LUA Unterstützung müsste sich da doch was machen lassen, quasi ein Bedienfeld auf dem Bildschirm, Touch bedient.

Damit wäre es auch möglich auf den mittlerweile verfügbaren kleineren ETHOS Anlagen mit weniger Schaltern viele Funktionen zu schalten. Für edgeTX gibt es derartiges schon (link)


EDIT: ein erstes Script ('Widget') für ETHOS habe ich mittlerweile fertig ( ETHOS Widget )

ETHOS widget





Über die Art wie ich den Multi-Switch anderen zur Verfügung stelle bin ich mir nicht nicht im klaren, erst einmal müssen Beta-Tester her...
 





zurück   -   Startseite   -   Impressum