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
Hier die erste Platine, die ich nach den Probeaufbauten im
Auftrag habe fertigen lassen:
Funktionsfähig bestückt sieht das ganze so aus:
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 ) :
Ü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