PPM2USB - Modellbau-Fernsteuerungs-Adapter
USB-seitig verhält sich der Adapter wie ein Standard-USB-Joystick (HID-Device) und wird ohne Treiber unter Windows und Linux erkannt (getestet mit Windows XP, Windows 7 und Ubuntu 9.10). Unter Mac OS sollte es ebenfalls funktionieren, dies wurde aber noch nicht getestet. Der Adapter ist hervorragend geeignet, um den Modellflug am heimischen PC zu simulieren.
PPM
Die meisten Modellbau-Fernsteuerung liefern ein sogenanntes PPM-Signal (auch RC Summensignal genannt). Es handelt sich dabei um eine Puls-Pausen-Modulation aller Kanäle. Bild 2 zeigt ein solches PPM-Signal mit 5 Kanälen. Es besteht aus einer Impulsfolge mit ca 0,4ms langen Impulsen. Der Zeitabstand tn zwischen den Impulsen entspricht der Stick-Position des jeweiligen Kanals. Eine Zeit von 1,5ms entspricht der Mittelstellung, 1ms der Minimal- und 2ms der Maximalstellung. Eine Impulsfolge besteht aus n+1 Impulsen - für 5 Kanäle also 6 Impulse. Die Impulsfolge wird ca. alle 20ms (50Hz) wiederholt. Das Signal hat bei meinem Sender eine Amplitude von ca. 4,1V.
Bild 2: Das PPM-Signal einer Fernsteuerung mit 5 Kanälen
Das PPM-Signal kann bei dem von mir verwendeten Fernsteuer-Sender (Typ Esky EK2-0406G) an dem davor vorgesehenen Trainer-Anschluss abgegriffen werden. Die Pinbelegung der 4-pol. Mini-DIN ist in Bild 3 ersichtlich. Der Stecker wird übrigens auch bei S-Video verwendet, ein passendes Kabel mit Stecker ist daher leicht zu bekommen.
Bild 3: Steckerbelegung vom Trainer-Anschluss der Esky-Fernsteuerung
Eine Übersicht der Steckerbelegungen der Trainerbuchsen anderer Hersteller (u.a. Graupner, Robbe, Futaba, Multiplex, Hitec) ist hier zu finden: Steckerbelegungen von Schülerbuchsen verschiedener RC-Sender. Bei analogen Empfängern ist das Signal meist auch auf der Platine zu finden.
Hardware
Der Schaltplan ist recht übersichtlich und kann auf einem Stück Lochrasterplatine oder Mithilfe eines Entwicklungsboards aufgebaut werden. Die Widerstände und die Zenerdioden sorgen für die nötigen USB-Spannungspegel. Das PPM-Signal wird direkt mit dem ICP-Pin des ATMega8 verbunden. Dies funktioniert bei Signalpegeln im Bereich von ca. 1,5-5V. Bei kleineren Amplituden könnte man den internen Komparator benutzen. Für das richtige Timing sorgt ein externer 12Mhz Quarz.
Anmerkung: Die ISP-Beschaltung zum Programmieren des Controllers wurde im Schaltplan weg gelassen. Die etwas ungewöhnlichen Widerstandswerte entsprechen den von V-USB vorgeschlagenen Werten. (Mein Prototyp funktioniert auch problemlos mit 100 Ohm anstatt 68 Ohm, 2,2k-Ohm anstatt 1,5kOhm und ohne die Zenerdioden. Das muss aber nicht überall so sein.)
PPM2USB auf USBASP-Hardware
Mit einer kleinen Anpassung kann auch die Platine eines USBASP-Adapters verwendet werden: USBASP nach PPM2USB-Umbau.
Software
Die Software wurde mit der AVR-GCC-Toolchain entwickelt und besteht aus drei Teilen:
PPM-Dekoder
Der PPM-Dekoder ist vollständig Interrupt gesteuert. Zur Messung der Zeiten wird ein 16Bit Timer verwendet, der direkt mit dem CPU-Takt (12Mhz) verbunden ist. Ausgewertet werden nur die positiven Flanken der Eingangssignals am ICP-Pin. Dabei wird der ICP-Interrupt ausgelöst, der die Zeiten zwischen den Impulsen abspeichert. Je nach Stick-Position ergeben sich hier Timerwerte im Bereich von (1ms*12Mhz)=12000 bis (2ms*12Mhz)=24000. Für die Übertragung an den PC werden die Timerwerte in einen 8-Bit-Wert im Bereich 0-255 umgerechnet. Eine längere Pause - diese tritt zwischen den Impulspaketen auf - löst einen Timer-Overflow-Interrupt auf und setzt den Dekoder wieder zurück.
USB-Stack
Der ATMega8 besitzt eigentlich keine USB-Schnittstelle. Dennoch ist es möglich, eine solche in Software zu realisieren. Dazu wurde der frei verfügbare USB-Stack namens V-USB verwendet. Dem angeschlossenen PC wird ein HID Joystick vorgegaukelt.
Hauptprogramm
Im Hauptprogramm wird V-USB initialisiert. Anschließend begibt sich der Controller in eine Endlosschleife, in der USB-Daten gepollt und die Joystick-Positionen an den PC Übertragen werden. Um die CPU-Last auf dem PC niedrig zu halten, werden nur Daten übertragen, wenn sich eine Stickposition geändert hat.
Download
- Das im Download enthaltene Hex-File wurde mit dem AVR-Gcc (WinAVR) für einen ATMega8 kompiliert. Der Quellcode kann leicht an andere AVRs angepasst werden, sofern diese von V-USB unterstützt werden und über einen 16-Bit-Timer verfügen.
- Die Software läuft ohne Änderungen auch auf einem ATMega168 (oder Mega88), muss dann aber neu kompiliert werden:
- * AVR-Gcc (bzw. WinAVR) installieren
- * im Makefile anpassen: DEVICE = atmega168
- * cmd öffnen und in das Verzeichnis wechseln
- * make clean
- * make hex
- Zur Programmierung kann das hier beschriebene Programmierkabel verwendet werden.
- Fuses: Ext. Quarz (lfuse:0xef, hfuse:0xc9 entspricht SUT0, SPIEN, CKOPT, BOOTSZ0 und BOOTSZ1)
- Kommerzielle Nutzung ist ohne Einverständnis des Autor nicht erlaubt.
- Projekt-Download, Git-Repository
Flug-Modell-Simulator FMS
Zur Simulation von Modellbauflugzeugen ist der kostenlose Flug-Modell-Simulator (FMS) bestens geeignet. Die Modelle können dann zusammen mit dem hier beschriebenen Adapter mit der eigenen Fernbedienung geflogen werden:
Video 1: Test des PPM2USB-Adapters, Testflug mit Quadropcopter und A380 im FMS
- FMS-Website
- Viele interessante Flugzeugmodelle: Tie-Figher, Stealth Bomber, Airbus A380, Segelflieger, Quadrocopter, Space Shuttle u.v.m.