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.
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 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
)
Ü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