Yet another Multi Switch - YaMS

Motivation

Modellflieger haben es gut. Sie können aus einer Vielzahl moderner und leistungsfähiger Fernsteuersysteme diverser Hersteller ihren persönlichen Favoriten auswählen und sind in der Regel bestens versorgt. Und auch die Auto- und Schiffsfraktion findet geeignete Systeme - soweit ihr Fokus auf dem reinen Fahr- oder Rennbetrieb liegt.

Davon können die Liebhaber von Funktionsmodellen leider nur träumen. Mit Einführung moderner "Computeranlagen" und digitaler Übertragungsverfahren mit 2,4 GHz sind die früher so beliebten Module zum Schalten mehrerer Verbraucher über einen Proportionalkanal irgendwie auf der Strecke geblieben.

Und so sind heute die entsprechenden Foren im Internet voll von Suchen und Diskussionen nach modernen Lösungen. Es gibt eine ganze Reihe unterschiedlicher Ansätze mit mehr oder weniger komplexen Lösungen, die aber häufig nur mit einem kleinen Teil von Anlagen funktionieren oder schwierig anzupassen sind. Oder es existieren Universal-Lösungen, die aber für meinen Geschmack eher umständlich in der Handhabung sind, da die Funktionen über einen einzigen Schalter oder Kreuzknüppel geschaltet werden müssen.

 

Auf meinem Wunschzettel stand aber:

  • möglichst viele Schaltfunktionen pro Servokanal
  • jede Funktion hat ihren eigenen Schalter, dem man den aktuellen Schaltzustand ansieht
  • mit jeder Fernsteuerung nutzbar, an der man auch Standardservos benutzen kann
  • möglichst simple und für jeden Bastler machbare Anpassung an weitere Sender
  • die Kosten sollten im Rahmen bleiben und die Bauteile leicht zu beschaffen sein

Das Ergebnis habe ich in Anlehnung an SuSE YaST auf den Namen YaMS getauft.

Konzept

Während sich die Übertragungsverfahren zwischen Sender und Empfänger von System zu System stark unterscheiden können, sind auf Senderseite die Geber (in der Regel einfache Potentiometer und Schalter) und auf Empfängerseite das ausgegebene Servosignal bei allen Systemen sehr ähnlich. Um also möglichst universell zu bleiben, setzt meine Idee nicht am Übertragungsverfahren an, sondern simuliert im Sender ein ganz normales Poti und wertet auf der Empfängerseite das übliche Servosignal aus.

 

Auf diese Weise erhält man eine Lösung, die sehr einfach ist und sich tatsächlich auf nahezu jede Fernsteueranlage übertragen lässt.  Größter Nachteil dabei ist eine Limitierung auf fünf (vielleicht sechs) Schaltfunktionen pro Servokanal.

 

Kodiert werden die Schalter über unterschiedlich lange Servosignale. Um sie eindeutig voneinander unterscheiden zu können, erhält jeder Schalter nur einen halb so langen Signalanteil wie der Vorhergehende. Beim üblichen Servosignal von 1 bis 2 ms ergibt sich daraus:

  1. Schalter 0,5 ms
  2. Schalter 0,25 ms
  3. Schalter 0,125 ms usw.

Man könnte auch sagen, dass jede erdenkliche Kombination der Schalter wie im binären Zahlensystem verschlüsselt wird, wobei die einzelnen Bits durch unterschiedlich lange Intervalle im Servosignal dargestellt werden. Daraus ergibt sich, dass bei fünf Schaltern 32 Kombinationen übertragen und auf Empfängerseite sicher wieder unterschieden werden müssen. Bei sechs Schaltern wären es schon 64 erforderliche Kombinationen und so fort. Bei einer Auflösung von 256 bit könnte man theoretisch maximal 8 Schalter codieren, in der Praxis wird man das aber nicht betriebssicher umsetzen können.

 

Prinzip des "Encoder"

Von einem "Encoder" kann man eigentlich gar nicht sprechen, da er nur aus einer Reihe von geeignet dimensionierten Widerständen und Schaltern besteht und damit vollständig diskret aufgebaut ist.

Um das zuvor beschriebene Verfahren im Sender umzusetzen wählt man ein im Sender vorhandenes Potentiometer und misst dessen Gesamtwiderstand. Der erste Schalter erhält nun den halben Widerstandswert dieses Gesamtwiderstands, der Zweite wiederum die Hälfte und so fort.

 

Wichtig beim Encoder ist, dass er stets einen korrekten Spannungsteiler genau wie das simulierte Poti bildet. Das bedeutet, jeder Widerstand muss doppelt vorhanden sein, einmal vor und einmal nach dem "Abnehmer" und der verwendete Schalter muss immer genau einen Widerstand dieses Pärchens überbrücken. Deshalb kommen hier auch nur zweikanalige Schalter in frage. Unten auf der Seite findet Ihr den entsprechenden Schaltplan als Download, aus dem dies ersichtlich wird.

 

Prinzip des Decoder

Beim Decoder handelt es sich um einen Arduino, der das Servosignal auswertet und entsprechend seiner Dauer die Schalter setzt. Dabei wird anhand einer individuell an den Encoder anpassbaren Werteliste genau ermittelt, welcher der 32 möglichen Schaltzustände gerade übertragen wurde und die Ausgänge entsprechend auf high bzw low gesetzt. Fertig.

 

Der Encoder

Der Encoder wird nur aus Widerständen und Schaltern aufgebaut, die leicht nach dem folgenden Schema "fliegend" verdrahtet werden können. Die jeweiligen Widerstände an den Schaltern können dabei natürlich auch aus zwei oder mehr, in Reihe geschalteten Widerständen bestehen, um möglichst genau jeweils die Hälfte des vorhergehenden Schalters zu erreichen.

Im Falle meiner Frsky X9e sind das 5K, die ich wie folgt umgesetzt habe:

  Einzelwiderstände Gesamtwiderstand
Schalter 1 2,2K + 300 2,5K
Schalter 2 1,2K + 47 1,25K
Schalter 3 470 + 150 620
Schalter 4 150 + 150 300
Schalter 5 150 150

Müsste ich das Modul für einen anderen Sender wie meine alte Futaba F16 mit 10K-Potis auslegen, bräuchte ich nur den 150 Ohm Widerstand weglassen und am anderen Ende die Kette mit 5K beginnen (z.Bsp. 4,7K + 300)...

 

Die Faustregel bei der Wahl der Widerstände lautet dabei:

Möglichst genau die Hälfte des Vorgängers, aber niemals mehr als die Hälfte!

 

Hier wird auch schnell deutlich, weshalb nicht mehr als 5 oder maximal 6 Schalter machbar sind. Der fünfte Widerstand entspricht bei jeweils genauer Halbierung noch 6,25 % des ersten Widerstandes. Die üblichen Widerstände haben aber eine Toleranz von 5 %. Möchte man 6 Schalter realisieren, sollte man sich deshalb auf jeden Fall bessere Widerstände mit nur 1 % Toleranz beschaffen.

Der Decoder

Das Herz des Decoders bildet ein Arduino, der auf einem bzw. zwei Eingängen die vom Encoder gesetzten Servosignale empfängt, auswertet und 5 bzw. 10 Ausgänge entsprechend schaltet. Über einen Jumper kann man festlegen, ob der Decoder einen oder zwei Kanäle benutzt.

 

Die Hardware:

Am Arduino werden die Pins D8 und D9 als Eingänge für Servosignale sowie Pin A0 als Eingang für den Jumper verwendet. Als Schaltausgänge dienen die Pins D2 bis D7 sowie D10 bis D13.

Bei der hier vorgestellten Schaltung habe ich einen Arduino Nano verwendet und mich bei der Umsetzung der Schaltausgänge für zweikanalige SMD-MOSFETs vom Typ IRF 7103 (oder besser 7301 für bis zu 2,5 Ampere pro Ausgang und kleinerer Threshold-Spannung) entschieden (Vorbild dafür war der clevere, nach einem ganz anderen Prinzip funktionierende 16-Kanal Multiswitch Decoder von Claus Poltermann, https://www.cp-elektronik.de). So bleibt die Schaltung sehr klein und verträgt dennoch bis zu 2 Ampere pro Schaltausgang. Wer den Einsatz von SMD-Bauteilen scheut, kann die Ausgänge natürlich auch leicht mit Transistoren oder MOSFETs im TO-220 Gehäuse umsetzen.

 

Die Software:
Der Arduino Sketch verwendet die RC Library und wurde aus dem Beispiel Programm für ServoIn weiter entwickelt.

 

Daher ist es nötig, die Library von hier herunterzuladen: https://sourceforge.net/projects/arduinorclib

Danach in der Arduino Entwicklungsumgebung im Menü <Sketch>  -->  <Library importieren>  -->  <Add Library...> und dann im Folgedialog die soeben heruntergeladene Datei "ArduinoRCLib-0.3.zip" auswählen

 

Das eingehende Servosignal wird gemessen und entsprechend der im Sketch hinterlegten Werteliste (treshold_1 und treshold_2) einem Wert von 0 bis 31 zugewiesen.

 

Anschließend wird dieser Wert wie folgt ausgewertet:

Wert größer/gleich 16?

ja: Ausgang 1 an; Wert ist gleich Wert minus 16;

nein: Ausgang 1 aus

neuer Wert größer/gleich 8?

ja: Ausgang 2 an; Wert ist gleich Wert minus 8;

nein: Ausgang 2 aus

und so weiter...

 

Ergänzt wurde das ganze noch um eine Art Hysterese für den Schalter mit dem kleinsten Widerstandswert bei Minimal- und Maximalwert. Bei sehr ungünstigen Widerstandswerten könnte dieser sporadisch flackern, da die empfangenen Werte leicht schwanken. Deshalb wechselt dieser Schalter seinen Zustand erst dann, wenn fünf Durchläufe nacheinander konstant der neue Wert ermittelt wurde.

 

Auf den nachfolgenden Bildern sieht man die auf meiner einfachen CNC-Fräse erstellte Platine des Decoders von beiden Seiten sowie eine auf einer kleinen Platine aufgebaute Variante des Encoders.

 

Inbetriebnahme

Sobald der Encoder im Sender und der Decoder (bzw auch nur der Arduino) an einem Empfänger angeschlossen ist, kann es losgehen. Die Inbetriebnahme erfolgt in drei Schritten:

  1. Kalibrierung
  2. Tresholds ermitteln
  3. Tresholds im Sketch anpassen

Kalibrierung

Sofern der Sender eine Kalibrierungsfunktion hat, sollte diese unbedingt einmal durchgeführt werden. Üblicherweise bringt man hierzu alle Potis zunächst in die Mittelposition. Beim YaMS Decoder schaltet man dazu den Schalter mit dem größten Widerstand auf ein und alle anderen auf aus (bei jeder Neukalibrierung bitte gleichartig vorgehen, da sich ansonsten die Signalwerte leicht verändern können). Wenn im nächsten Schritt alle Geber bewegt werden, schaltet man beim Encoder alle Schalter einige Male gleichzeitig auf ein und wieder auf aus. Dies entspricht den jeweiligen Maximalwerten, Zwischenschritte sind für die Kalibrierung nicht erforderlich.

 

Tresholds ermitteln

Hierzu schließt man den Arduino mit den Eingängen an den/die richtigen Empfängerkanäle sowie per USB an einen PC an. Auf dem PC öffnet man in der Arduino Entwicklungsumgebung unter <Werkzeuge> den Punkt <Serieller Monitor>. Wenn alles richtig angeschlossen wurde, sollten im Terminal nun permanent die Längen des aktuellen Servosignals der beiden Kanäle angezeigt werden.

Die Tresholds sind die jeweiligen Grenzwerte zwischen zwei unterschiedlichen Schaltzustände.

Im Download unten findet man eine EXCEL-Tabelle, mit der man diese Werte einfach ermitteln kann. Beginnend mit dem Muster "00000" (alle Schalter aus) bis "11111" (alle Schalter an) stellt man alle 32 möglichen Schalterstellungen nacheinander einmal ein und trägt die im seriellen Monitor angezeigten Werte in der entsprechenden Zeile im gelben Feld ein. Hierbei ist eigentlich nur zu beachten, dass man die richtige Reihenfolge entsprechend dem Muster in der ersten Spalte einhält. Es ist alles richtig, solange die Werte kontinuierlich aufsteigend oder absteigend ermittelt werden. Ändert sich die Richtung, hat man vermutlich eine Schalterstellung verwechselt.

 

Tresholds im Sketch anpassen

In der grün hinterlegten Spalte daneben werden die gesuchten Grenzwerte angezeigt. Diese 31 Zwischenwerte plus die beiden Unter- und Obergrenzen 800 bzw 2200 werden in der richtigen Reihenfolge im Sketch in die beiden Arrays treshold_1[33] und ggf. treshold_2[33] eingetragen. In der Regel werden die Werte bei gleichartig aufgebauten Encodern in beiden Tabellen identisch sein und können einfach kopiert werden.

Abschließend speichert man das Programm und schreibt es nochmal neu in den Arduino.

Materialbedarf

Für zwei Encoder und einen Decoder, also insgesamt 10 Schaltfunktionen. Die Preisangaben sind nur als Beispiel zu verstehen und können sich natürlich ändern.

  Beispiel Einzelpreis Gesamtpreis
Encoder      
 10 * Schalter Ein - Ein, 2 Kanal  bei Pollin: Kippschalter-mts-202-a2-420434 ab 5 Stk 0,70 € 7,00 €
Widerstände nach Bedarf      
Decoder      
1 * Arduino Nano V3.0   ca 2,50 € 2,50 €
10 * LEDs anreihbar

bei Reichelt: LED 5MM R GN

0,12 € 1,20 €
1 * Widerstandsnetzwerk 10 * 330  z. Bsp. Bourns 4611X-101-331LF ca 0,50 € 0,50 €
5 * MOSFET IRF 7103 bei Reichelt: IRF 7103 oder 7301 0,32 € 1,60 €
    Summe: 12,80 €

Dazu kommt noch Kleinkram für ein paar Cent wie Stift- und Buchsenleisten, eine Schraubklemme, Platinenmaterial usw.

 

Das Widerstandsnetzwerk ist in dieser Bauform nicht einfach zu beschaffen. Man kann es aber auch ganz leicht ersetzen, indem man 10 normale 330 Ohm Widerstände nur mit einem Beinchen senkrecht einlötet und sie anschließend oberhalb mit einem Querdraht verlötet. Der Querdraht geht dann als 11 Beinchen wieder in die Schaltung.

 

Decoder-Variante für Lochrasterkarten

Hier auf Wunsch noch eine Variante des Decoders für Lochrasterkarten und ohne SMD-Bauteile, da nicht jeder die Möglichkeit hat, sich eine entsprechende Platine zu erstellen.

 

Achtung: Die Schaltung wurde nicht physikalisch gebaut und getestet

 

Das Layout der Schaltung wurde hierfür modifiziert. Anstelle der IRF7103 kommen hier MOSFETs vom Typ IRLZ34NPBF im TO-220 Gehäuse zum Einsatz. Auf die LEDs wurde zur Vereinfachung verzichtet, dafür aber einige Widerstände zur Ansteuerung der MOSFET-Gates hinzugefügt.

 

In den Darstellungen unten sind alle Bauteile nur als Symbole zu verstehen, insbesondere stimmen die Farbcodierungen der Widerstände nicht mit den wirklichen Werten überein.

Hinweise zum Bau:

alle 10 horizontalen Widerstände: 47 Ohm

alle 10 vertikalen Widerstände: 100 K

Bei den MOSFETs IRLZ34NPBF die richtige Ausrichtung beachten (Gate in Richtung Arduino)

Blaue Leitungen verlaufen auf der Unter- und rote Leitungen auf der Oberseite.

Alle zwischen den Schraubklemmen und den MOSFETs verlaufenden Leitungen sind mit ausreichend dicken Leitern zu verbinden, da hier je nach Verbraucher hohe Stromstärken fließen können.

Nach Anschluss der vogesehenen Verbraucher sollte geprüft werden, ob die MOSFETs heiß werden und ggf. zusätzliche Kühlkörper benötigen.

  Beispiel Einzelpreis Gesamtpreis
Decoder      
1 * Arduino Nano V3.0   ca 2,50 € 2,50 €
10 * MOSFETs TO-220 Gehäuse

bei Pollin: IRLZ34NPBF

0,50 € 5,00 €
10 * Widerstand 47 Ohm      
10 * Widerstand 100 KOhm      
6 * 2-polige Anschlussklemme bei Pollin: XY306 0,15 € 0,90 €
    Summe: 8,40 €

Downloads

Ein Hinweis noch in eigener Sache:

Ich übernehme keinerlei Haftung oder Garantien für Folgen oder Schäden, die aus dem Nachbau und / oder Betrieb dieser Schaltung entstehen. Alle Nachbauten und insbesondere Eingriffe in Sender etc. erfolgen auf eigene Gefahr.

Download
YaMS Decoder 0.2 Files
Enthält das Arduino Sketch, Eagle Schaltplan und Boardlayout des Decoder, JPGs der Schaltpläne sowie das EXCEL-Formular zur Ermittlung der Tresholds
YaMS-Decoder_0.2.zip
Komprimiertes Archiv im ZIP Format 197.0 KB