www.kappmeier.net


Modellbau - Multi-Switch Version 1



Der Multi-Switch - ein Servokanal, 15 Schalt-Ausgänge




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 Signale 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 einen Wert zwischen 1000 und 2000 zurück. Die Mitte liegt bei 1500. 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. Das 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 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. Eines der Fenster ist als Bedienfunktion reserviert. Hierüber werden die jeweiligen Funktionen eines Ausganges festgelegt, z.b. Memory-Funktion, Blinken usw. Mehr als 15 Ausgänge (bei direkter Verwendung der Pins) sind mit dem verwendeten ATmega 328P nicht möglich, da wir Pins für den Eingang und I²C abziehen müssen. Möglich ist natürlich eine Erweiterung mit Portbausteinen (z.b. PCF8574 oder MCP23017) am I²C Bus, damit wären 32 oder mehr Ausgänge möglich...

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. Oder durch ein kleines µC Modul, welches die Werte generiert. 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.

Ein Offset-Mischer bei ETHOS für Ausgang 1 hat 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%, +20%, +30%  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 ich 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.


Hier eine Tabelle der den Kanälen zugeordneten Werte :


Ausgang
Servowert
 Bereich Anfang
Bereich Ende
1
-80%
1080
1120
2
-70%
1130
1160
3
-60%
1180
1220
4
-50%
1230
1260
5
-40%
1280
1320
6
-30%
1330
1360
7
-20%
1380
1420
8
-10%
1430
1460
9
+10%
1530
1560
10
+20%
1580
1620
11
+30%
1630
1660
12
+40%
1680
1720
13
+50%
1730
1760
14
+60%
1780
1820
15
+70%
1830
1860
Mode
+80%
1890
2050

Die Werte in Prozenz sollten bei den meisten Sendern innerhalb des Fensters liegen. Ich habe bei meiner FrSky X20 einen Unterschied bei Verwendung von PPM bzw. S-Bus festgestellt. Wobei dies auch an dem Hersteller des S-Bus Decoder liegen kann. Ich habe da nicht so viele Vergleichsmöglichkeiten...

Zum einfacheren, genaueren einstellen kann ein LCD mit mindestens 2x16 Zeichen helfen, welches via I²C Bus an CON1 angeschlossen wird. Auf diesem sind der aktuelle Servo-Wert, zu letzt betätigter gewählter Ausgangs-Kanal und dessen Betriebsmodus abzulesen.  Die untere Reihe zeigt den Schaltstatus der Ausgänge. X = ein, - = aus



LCD 16x2
              Zeichen

 


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


Platine
              15ch Multi Switch Version 1



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

Bestückter Multi 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, folgt eine 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 die bei ebay massenhaft angebotenen 4 -Kanal Relaisplatinen direkt anschlossen werden können. Mit diesen 4 Aus-/Eingängen möglich sind natürlich 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. Das Fenster eines Ausganges kann nun kleiner ausfallen. Es passen alle 12 Ausgänge auf eine Seite, z.b. -10% bis -90%. Wird ein 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 z.b. dies hier  (link) oder für openTX das (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