Viele aktuelle Flightcontroller unterstützen die Entgegennahme von Steuersignalen über nur ein Kabel. Ein beliebter Vertreter dieser One-Wire-Techniken ist PPM (Puls-Pausen-Modulation). Fängt man jedoch an sich mit Flächenmodellen zu beschäftigen, so kommt man um den Einsatz von Servos nicht herum. Kann der Empfänger dann nur PPM ausgeben, muss ein PPM Encoder zwischen Empfänger und Servos / ESCs übersetzten.
In dieser Anleitung beschreiben ich, wie ihr euch einen eigen PPM Encoder bauen könnt.
Im Modellbau kommen in den allermeisten Fällen zwei Arten der (analogen) Signalübertragung zum Einsatz. Diese ist zum einen PPM (Puls-Pausen-Modulation) sowie PWM (Pulsweitenmodulation).
In unserem Zusammenhang betrachten wir beide Verfahren im Kontext der Signalübertragung zwischen Empfänger (RX) und Servo, ESCs* oder einem Flightcontroller.
Während Flightcontroller* oftmals die Möglichkeit bieten, die Steuersignale vom Empfänger entweder per PWM, PPM, über ein serielles Protokoll oder gar digital entgegen zu nehmen, verstehen Standard-RC-Komponenten wie Servos* oder ESCs nur analoge PWM-Signale.
Inhalt
Was genau ist der Unterschied zwischen PWM und PPM in der Praxis ?
Wenn ein Flightcontroller per PWM an den Empfänger angeschlossen wird, äußert sich dieses rein äußerlich bereits daran, dass jeder Kanal, der benutzt wird, mit einem eigenen Kabel zwischen Empfänger und Controller verbunden werden muss. PPM (auch Summensignal) kommt hingegen mit einem einzigen Kabel aus, da die Signale aller Kanäle in einem definierten Zeitzyklus nacheinander übertragen werden.
Aktuelle PPM-Empfänger, wie beispielsweise der Jeti RSAT2* können, mit entsprechender Firmware, bis zu 16 und mehr Kanäle über ein einziges Kabel übertragen. Der große Vorteil im Flugmodellbau: Weniger Kabel, weniger Unordnung, weniger Gewicht.
Warum dann ein PPM Encoder?
Wer, wie ich, vollständig auf reine PPM-Empfänger (wie den RSAT2*) setzt, kommt damit im Multicopter-Bereich wunderbar klar. Egal ob Naza, OpenPilot, Cleanflight oder Betaflight, alle großen Flightcontroller-Distributionen können mit PPM-Empfängern umgehen. Wozu also einen teureren, schwereren vollwertigen Empfänger mit einzelnen Kanalausgängen kaufen?
Problematisch wird es nur dann, wenn man ebenfalls mit Flächenmodellen rumspielt. Hier wird ein Großteil der Steuerbefehle von Servos umgesetzt. Natürlich könnte man einfach einen Flightcontroller, wie den CC3D* oder Naze32*, mit in das Flugzeug bauen und die Wandlerarbeit hier erledigen lassen, aber 1) sind diese Controller nur für diesen Zweck relativ teuer und 2) macht das Selberbauen Spaß! :)
Was genau macht ein PPM Encoder / PPM-to-PWM Coverter?
Eigentlich genau das, was der Name impliziert. Er nimmt ein One-Wire-PPM-Signal entgegen, wertete dieses aus und gibt es an die gewünschte Anzahl an Einzelkanälen aus. Er erlaubt also den Anschluss von PWM-Komponenten an einen PPM-Empfänger.
Benötigte Komponenten
Der hier vorgestellte PPM Encoder basiert auf der Arbeit des mikrocopter-Forenmitglieds „jreise„. Er hat die Firmware geschrieben, welche in einer Version für 8 und 12 Kanäle zum Download bereitsteht. Die Rechenarbeit wird von einem Atmel ATTiny 2313 Microcontroller* erledigt. Diese Chips sind mittlerweile sehr günstig und eignen sich daher sehr gut, für solche Bastelprojekte. Diese Anleitung soll euch Schritt für Schritt durch den Aufbau führen. Eine Anleitung mit Schaltbildern finden sich unter anderem auch direkt beim Erfinder (Leider ist die Website: jreise.de/ppm2servo/ mittlerweile nicht mehr erreichbar – siehe Kommentare).
Komponentenliste
- Atmel ATTiny 2313*
- Pin-Header für ATTiny* (optional, um den µ-Prozessor später noch herausnehmen zu können)
- Stiftleiste im 2,54-mm-Rastermaß*
- Kupferlackdraht* (Kabel funktioniert genauso, der Draht ist nur schön leicht)
- Lochrasterplatine 2,54 mm Lochabstand*
- Kondensator 10 V, 100 nF*
Werkzeuge
- Anständige Ausrüstung zum Löten*
- USBasp Programmierer* von oder kompatibel mit dem Treiber von Thomas Fischl
- Bread Board*
- Steckbrücken*
Ich empfehle den Bau nur, wenn man löt-technisch ein weniger versiert unterwegs ist und man keine Angst vor der Arbeit mit der Kommandozeile hat. ;)
Flashen des Controllers
Die größte Herausforderung ist eigentlich das Übertragen der Firmware auf den ATTiny 2313 Controller*. Im Gegensatz zum Arduino Uno*, bei dem die Programme einfache über die komfortable IDE über USB übertragen werden können, benötigt der Atmel Controller einen Programmer. Ein USBasp-Programmiergerät eignet sich für unsere Aufgabe und ist bereits für unter 20 Euro zu haben. Wer ESCs beispielsweise mit SimonK selbst geflasht hat, der hat ein entsprechendes Tool sowieso bereits zu Hause. Auf geht’s!
Schritt 1: WinAVR installieren. Diese Programmierer-Umgebung enthält das Tool AVRDude, welches wir zum Flashen des ATTiny 2313 benutzen. Bei der Installation darauf achten, dass die „PATH“-Option gesetzt ist. Damit lässt sich AVRDude global im System (Windows) über die Kommandozeile aufrufen.
Schritt 2: USBasp Treiber installieren. Wie das im Detail geht, vor allem unter Windows 8.1 und 10, ist auf der Downloadseite beschrieben. Eigentlich reicht die normale Installation und das anschließende Anstecken des Programmers aus, um den Treiber respektive den Programmer zum Laufen zu bekommen.
ATTiny 2313 Microprozessor kaufen!*
Schritt 3: Firmware Datei herunterladen. Im Mikrokopter-Forum sind zwei Versionen der Firmware verlinkt. Es gibt eine Version für 8-Kanäle und eine Variante für 12-Kanäle. Nachdem Download die entsprechende HEX-Datei in das gewünschte Arbeitsverzeichnis auf eurem Computer verschieben.
Schritt 4: ATTiny 2313* mit dem Programmer verbinden. Dazu werfen wir einen Blick ins Datenblatt des Controllers. Auf Seite 2 ist die Pin-Belegung der PDIP/SOIC-Version beschrieben. Wir konzentrieren uns auf: VCC, GND, PA2 (Reset), PB7 (SCL), PB8 (MISO), PB9 (MOSI). Die folgende Tabelle zeigt die korrespondierenden Anschlüsse am USBasp.
WICHTIG: Je nach Programmer können die Pins abweichen. Mein verwendeter Programmer hat 10-Pins mit Vollbelegung.
USBasp (Pin) | ATTiny 2313 |
---|---|
5V (2) | VCC |
GND (3 / 8 / 10) | GND |
Reset (5) | PA2 |
SCK (7) | PB7 |
MOSI (1) | PB9 |
MISO (9) | PB8 |
Ist die Verdrahtung erledigt, welche sich am besten auf einem Bread Board erledigen lässt, kann der Programmer mit dem Computer verbunden werden. Wenn alles „richtig“ ist, raucht jetzt nichts :D
Schritt 5: Fuses mit AVRDude setzten. ATTiny Controller werden über sogenannte Fuses (auch Fuse Bits) konfiguriert. Der Controller kann so den Bedürfnissen nach eingestellt werden. Ein sehr nützliches Tool zur Berechnung der Fuse Bits, welche in Hex-Code übermittelt werden müssen, ist der Engbedded Atmel AVR Fuse Calculator.
Im Auslieferunszustand hat unser µ-Controller die Fusebits:
lfuse: 0x64, hfuse: 0xdf, efuse: 0xff
Wir müssen „CKDIV8“-Option deaktiveren. Die richtigen Fuses heißen also:
-U lfuse:w:0xe4:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
Angegeben ist dabei bereits die Kommandooption, wie sie von AVRDude verarbeitet wird.
Über Windows + R -> cmd -> avrdude tippen lässt sich das Programmiertool aufrufen. Über die Konsole in das Arbeitsverzeichnis navigieren indem die HEX-Datei liegt. Mit dem nachfolgenden Befehl werden die Fusebits richtig gesetzt. Erhaltet ihr an dieser Stelle einen Fehler, dass keine Verbindung hergestellt werden kann, so liegt es in 99% der Fälle tatsächlich daran, dass die Verdrahtung fehlerhaft oder nicht ordentlich ausgeführt wurde (Wackelkontakt). Nicht direkt aufgeben und alles noch einmal prüfen!
avrdude -c usbasp -p t2313 -B 4 -U lfuse:w:0xe4:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
Hat das geklappt, kann direkt das Programm auf den ATTiny 2313 übertragen werden. Dieses geht mit:
avrdude -c usbasp -p t2313 -B 4 -U flash:w:ppm2servo.hex
AVRDude quittiert einem den Erfolg direkt, wenn alles geklappt haben sollte. Das war’s! Der Chip ist nun bereit seine Aufgabe als PPM Encoder aufzunehmen, dazu fehlt natürlich noch ein Teil der Hardware.
Schritt 6: Platinenlayout erstellen
ATTiny 2313 Microprozessor kaufen!*
Für eine simple Schaltung, wie diese hier, macht die Herstellung einer Platine mit geätzten Leiterbahnen wenig Sinn. Außer natürlich, man macht gerne alles ganz genau oder will extrem kompakt bauen. Ein Stück Lochrasterplatine* in der Größe von 25 x 35 mm tut es aber auch. Wichtig ist, dass der Controller, die Servopins und der Kondensator Platz finden. Ein allgemeines Layout vorzugeben ist hier schwierig. Jeder nutzt ein wenig andere Teile und es ist daher vernünftig, sich sein eigenes Layout zu überlegen.
Der PPM Encoder ist dabei so ausgelegt, dass er 8 PWM-Signalausgänge, einen PPM-Signaleingang sowie einen separaten Eingang zur Spannungsversorung hat, sollte diese nicht über das BEC* im Regler realisiert werden.
Anmerkung: Der Aufbau sieht keine Schutzwiderstände vor, um möglichst einfach aufgebaut zu sein. Sollte also eine Verpolung der Stecker stattfinden, kann der ATTiny 2313* zerstört werden!
In Anlehnung an das Beschaltungsbild von Jörg Reisener ist der die folgende Beschaltung entstanden. Extra ausgeführt ist hier der RESET-Pin, um spätere Umprogrammierung ohne großen Aufwand zu ermöglichen (alle anderen Programmier-Pins sind über die Servostecker* erreichbar).
Übertragen auf die Lochrasterplatine* sieht das Ganze dann folgendermaßen aus. Wobei die Servopins an der oberen Seite angesiedelt sind. Alle roten Linien stellen elektrische Verbindungen dar. Benachbarte Verbindungen sind mit Lötzinn ausgeführt, längere Verbindungen mit Kupferlackdraht.
Verlötet kann der PPM Encoder dann beispielsweise so aussehen:
Mein erster Encoder besitzt ein leicht anderes Layout:
Fertig aufgebaut sieht der PPM Encoder dann so aus – einmal mit 90°-Pins* und einmal gerade:
Schritt 7: Einschrumpfen. Ganz am Ende, nachdem die Funktion getestet ist und alles klappt, empfiehlt es sich, den neu gebauten PPM Encoder einzuschrumpfen.
Schlusswort
Ganz am Ende wird nun der Empfänger mit dem Input-Pin verbunden. Servos* und ESCs* finden an einem der acht Kanäle Anschluss. Je nach Fernsteueranlage muss nun noch die Servozuweisung im Sender erfolgen. Danach kann der PPM Encoder mit Spannung versorgt werden.
Entweder über den dediziert ausgeführten Anschluss oder über einen der acht Kanäle via Regler BEC. Wichtig ist, dass hier maximal 5V anliegen dürfen. Mit einem 6V-BEC* macht ihr den ATTiny kaputt! Also immer auf die richtige Versorgungsspannung achten!
Nachbauten
Unser Leser Uli G. hat den oben beschriebenen PPM-Encoder nachgebaut. Zugegebnermaßen viel schöner, als unser Encoder es jemals war. Vor allem das Gehäuse aus dem 3D-Drucker mit den seitlichen Befestigungslaschen ist sehr praktisch.
Während der Bauphase gab Uli uns noch den Tipp, dass das Program Zadig, welches dabei helfen kann, eurem USAP* den richtigen Treiber zuzuordnen. Falsche Treiber sind nämlich oft das Problem dafür, dass ihr den ATTiny* nicht mit AVRDUDE beschreiben könnt. Es erscheint dann ein Fehler, der eine fehlgeschlagene Verbindung quittiert.
An dieser Stelle noch einmal herzlichen Dank für den netten Austausch und die Bereitstellung der Fotos.
Du hast den PPM-Encoder ebenfalls nachgebaut? Schreib uns oder hinterlasse einen Kommentar! Gerne stellen wir auch deine Version für andere Leser vor! :)
Sehr gute Anleitung,
hab ihn nur etwas kleiner gemacht:
https://www.dropbox.com/s/tz6uul1w4l43ceu/WhatsApp%20Image%202017-08-13%20at%2021.11.19.jpeg?dl=0
Sehr cool! Gute Idee. Vielen Dank für’s Teilen.
Grüße!
Danke, ist nur mega fummelig zu Löten :DD
Aso und ich habe natürlich auch einen SMD Kondensator verbaut, sieht man bloß nicht…
Das glaube ich gerne! Ich habe damals einfach genommen, was ich gefunden habe an Teilen. Da war SMD keine Alternative :) Aber sehr schön zu sehen, wie klein man den Konverter bauen kann!
Hallo, das Kopterform ist geschlossen worden. Hat jemand die Firmware Datei zum flashen? Würde den Encoder gerne nachbauen.
Viele Grüsse
Uli
Hallo Uli,
oh das ist ja schade. Kein Problem, ich schicke dir eine Mail. Prüfe dein Spam-Ordner und gib doch bitte kurz Bescheid, ob du die Firmware bekommen hast.
Viele Grüße,
Nils
Habe die Downloadlinks unter „Benötigte Komponenten“ noch einmal verknüpft.
Hallo Nils,
O. K., danke für die Info.
Ich würde die Servos in jedem Fall direkt aus einem BEC mit Spannung versorgen.
D. h. aus dem ATTiny weden dann nur die PWM-Anschlüsse und Masse zu den Servos geführt.
Den ATTiny könnte man dann ggf. aus dem BEC über eine 5V Z-Diode versorgen.
Soviel Strom wird er ja nicht verbrauchen, oder?
Weiter oben wurde vermerkt, das keine Schutzwiderstände erbaut wurden.
Wie müssten diese denn in die Aus- bzw. Eingänge angeschlossen werden?
Gruß
Peter
Hallo Peter,
wenn die Servos an einem anderen BEC hängen, sollte das theoretisch auch funktionieren. Geprüft habe ich das jedoch nicht ohne Kondensator. Natürlich darf der Attiny dann nicht auch an demselben BEC hängen. Denn dann hätten wir wieder die Situation wie unten beschrieben.
Zur Verpolung: Das hängt ein wenig von deinem Setup ab. Dazu kannst du mal in das Datenblatt deines ATTiny schauen, den maximal tolerierten Strom an den I/O-Pins suchen und dann entsprechend einer Betriebsspannung einen Widerstand wählen. Das muss leider individuell geschehen.
Da du ja aber kein Plus durchschleifen willst, ist deine Gefahr vor einer Verpolung ja ohnehin schon stark reduziert.
Viele Grüße,
Nils
Hallo Nils,
Vielen dank für die schnelle Antwort. Deine Mail ist angekommen.
Grüsse Uli
Hallo,
im oben angegebenen Schaltplan ist ein 100nF Kondensator eingezeichnet.
Auf dem Lochraster sieht der Kondensator aber wie ein Elko aus?
Gruß
Peter
Hallo Peter,
da hast du Recht. Mein Aufbau hat aber damals so ohne Probleme funktioniert. Im Grund soll der Kondensator ja vor allem die Eingangsspannung vor dem ATTinny glätten und verhindern, dass der Microcontroller aufgrund von Unterspannung aussteigt. Das ist wichtig, denn in der Regel hängen die Servos ja direkt an der gleichen Spannungsquelle. Bei hoher Spitzenlast bricht die Spannung kurzzeitig stark ein und der ATTiny bootet neu. Das leistete der Elko bei mir ebenfalls ohne größere Zwischenfälle.
Grüße,
Nils
Hallo,
ich bin auf der Suche nach einem PWM zu PPM konverter auf diesen Bericht hier gestoßen.
Ist es möglich, ein PWM Signal eines PC-Lüfters auf PPM für einen Brushless Flugregler umzuwandeln?
Gruß Tobi
Hallo Tobi,
ich fürchte das wird mit dem Converter nicht gehen. Ausprobiert habe ich es aber nicht.
Viele Grüße,
Nils