Kleine Projekte: Multi-Modul für Scale-Modelle


Menübild

Letzte Bearbeitung: 02.03.2014

SymbolDownloads und Links
Schaltplan Multi-Modul 1
Schaltplan Multi-Modul 2
Konfigurationsanleitung in kompakter Tabellenform
Stückliste Multi-Modul 1 mit Empfehlungen zur Bauteilbestellung
Stückliste Multi-Modul 2 mit Empfehlungen zur Bauteilbestellung
Software für das Multi-Modul 1 mit komplettem Quelltext in Assembler vom 29.02.2012multimodul1-atmega88-v103.zip
Software für das Multi-Modul 2 mit komplettem Quelltext in Assembler vom 29.02.2012multimodul2-atmega88-v103.zip
Platinenlayout vom Multi-Modul 1 (Sprint-Layout 6.0, PDF und Gerber) vom 02.03.2014multimodul1-layout.zip
Platinenlayout vom Multi-Modul 2 (Sprint-Layout 6.0, PDF und Gerber) vom 02.03.2014multimodul2-layout.zip
SymbolInhaltsverzeichnis
BeschreibungAllgemeine Informationen über das Multi-Modul
Schaltungsvariante Multi-Modul 1Beschreibung der Schaltungsvariante des Multi-Modul 1
Schaltungsvariante Multi-Modul 2Beschreibung der Schaltungsvariante des Multi-Modul 2
Hardware Multi-Modul 1Bilder und Hinweise zum Aufbau des Multi-Modul 1
Hardware Multi-Modul 2Bilder und Hinweise zum Aufbau des Multi-Modul 2
SoftwareBeschreibung der Software
InbetriebnahmeInbetriebnahme des Multi-Moduls
Bedienung und KonfigurationBedienungs- und Konfigurationsanleitung für das Multi-Modul
SonstigesWeitere Informationen
SymbolBeschreibung

Das Ziel bei der Entwicklung dieses Moduls war, mehrere elektronische Zusatzfunktionen eines Scale-Modell-Helikopters der 450er-Klasse zu realisieren. Das Ergebnis ist dieses Multi-Modul, welches mit einem Mikrocontroller ATmega88PA aufgebaut wurde. Das Multi-Modul ermöglicht die Steuerung einer weitgehend vorbildgetreuen Beleuchtung, bietet eine Verzögerung zum langsamen Ein- und Ausfahren eines Einziehfahrwerks und eine konfigurierbare Überwachung eines 3-Zellen-LiPo-Akkus. Einige Funktionen wurden miteinander verknüpft, um den Piloten weitgehend zu entlasten. Die folgende Liste zeigt alle Funktionen des Multi-Moduls:

Das Multi-Modul gibt es in 2 Schaltungsvarianten, die sich folgendermaßen unterscheiden:

Multi-Modul 1 Alle LEDs können direkt an das Modul angeschlossen werden, die erforderlichen Vorwiderstände sind bereits auf der Platine vorhanden. Der Ausgang für das Landelicht wird über einen Treiber geschaltet und ist für 4 parallel geschaltete weiße LEDs ausgelegt (maximal 100mA), alle anderen Ausgänge liefern jeweils 20mA für eine Einzel-LED. Diese Variante ist für kleine Helikopter-Modelle bis zur 450er-Klasse geeignet.
Multi-Modul 2 Bei dieser Variante wurde ein Treiber-IC verwendet und alle 8 LED-Ausgänge sind hier als offener Kollektor-Ausgang realisiert. Hier können über eine separate Stromversorgung mehrere LED-Gruppen oder Power-LEDs angesteuert werden, wobei jeder Ausgang bis zu 500mA liefern kann. Diese Variante eignet sich für große Helikopter-Modelle und Multicopter.

Bei der Entwicklung des Moduls wurde großer Wert auf eine möglichst einfache Inbetriebnahme und Konfiguration gelegt. Es sind außer der einmaligen Programmierung des Mikrocontrollers keine Voreinstellungen oder Abgleich-Arbeiten erforderlich. Alle Einstellungen können ohne weitere Hilfsmittel mit einem Taster direkt am Modul vorgenommen werden. Zur Datenausgabe während der Konfiguration dienen die angeschlossenen LEDs. Somit sind jederzeit Anpassungen der Konfiguration auf dem Flugplatz möglich.

SymbolSchaltungsvariante Multi-Modul 1

Schaltungsvariante 1

Die Schaltungsvariante Multi-Modul 1 ist trotz ihrer komplexen Funktion relativ einfach aufgebaut. Das zentrale Element ist der Mikrocontroller ATmega88PA (IC3), welcher hier als SMD-Version zum Einsatz kommt, damit das Modul möglichst klein und leicht aufgebaut werden kann. Die Kondensatoren C4-C6 sollen Störungen auf der Betriebsspannung reduzieren und müssen möglichst nah am Controller platziert werden. Die Schaltung wird mit einer Spannung von 5V betrieben, die entweder direkt vom Empfänger oder über einen Spannungsregler aus dem Antriebs-Akku bereitgestellt werden kann. Welche der beiden Varianten am besten geeignet ist, hängt von mehreren Faktoren ab:

Bei Variante 1 sollte man noch folgendes beachten: IC1 ist so bemessen, dass ohne zusätzliche Kühlung ein Dauerbetrieb der Beleuchtung möglich ist und außerdem ein kleines Fahrwerk-Servo gelegentlich bewegt werden kann. Bei größeren Belastungen ist eine Kühlung erforderlich oder man entscheidet sich für Variante 2.

Die Servokabel an J3 und J5 führen die vom Empfänger kommenden PPM-Impulse für die Licht- und Fahrwerksteuerung direkt zum Controller IC3, welcher ständig die Impulslängen misst und auswertet. J3 ist für die Lichtsteuerung zuständig und bei Erreichen einer bestimmten Impulslänge werden vom Controller die Ausgänge LED1-LED7 aktiviert. An diese Ausgänge kann jeweils eine LED direkt angeschlossen werden. Die Funktion der 7 LEDs kann dabei individuell konfiguriert werden. Dazu stehen derzeit 17 vorprogrammierte Funktionen wie Dauerlicht, 9 Blitzlicht-Varianten, 3 Blinklichter und 4 Beacon-Programme zur Verfügung. Eine vollständige Übersicht ist im Abschnitt Bedienung und Konfiguration zu finden. Die Vorwiderstände R3-R5, R8-R10 und R12 sind so bemessen, dass sich je nach LED-Farbe ein Strom zwischen 8mA und 15mA ergibt. Das sorgt bei Verwendung ultraheller LEDs für eine ausreichende Helligkeit. Bei Bedarf können die Widerstandswerte angepasst werden, um den Strom zu verringern oder zu erhöhen. 20mA sollten dabei aber nicht überschritten werden.

Weiterhin kann über den Eingang J3 bei Erreichen einer bestimmten Impulslänge zusätzlich das Landelicht eingeschaltet werden. Hier sind 4 ultrahelle weiße LEDs im Parallelbetrieb vorgesehen, welche über eine Treiberstufe geschaltet werden, die aus R13, T1 und R11 besteht. R11 ist so dimensioniert, dass sich bei 4 weißen LEDs ein Strom von ungefähr 75mA ergibt. Auch hier kann man durch einen anderen Widerstandswert den Strom anpassen, wobei T1 für einen Dauerstrom von 100mA ausgelegt ist. Das Landelicht wird übrigens mit PWM gesteuert - damit konnte ein weiches Schalten ähnlich einer Glühlampe realisiert werden. Auch die Ausgänge LED6 und LED7 können mit PWM gesteuert werden, was für bestimmte Effekte genutzt werden kann, mehr dazu im Abschnitt Inbetriebnahme.

Bei Verwendung der Fahrwerksteuerung ist eine Verbindung von J5 zum Fahrwerk-Kanal des Empfängers notwendig. Die hier empfangenen PPM-Impulse werden beim Einschalten des Moduls zunächst am Servoausgang J8 direkt wieder ausgegeben. Später wird jede Änderung der Impulslänge von J5 verzögert an J8 ausgegeben, wobei die Verzögerungszeit in 4 Stufen zwischen 2,5s und 5,0s eingestellt werden kann. C7 hat hier die Aufgabe, vom Servo ausgehende Störungen zu mindern. Wird die Fahrwerksteuerung nicht benötigt, dann können J5 und J8 offen bleiben. Wenn keine PPM-Impulse an J5 anliegen, dann werden auch keine Impulse an J8 ausgegeben.

Zur Überwachung des Antriebs-Akkus wird die an J1 anliegende Akku-Spannung über R1 und R6 auf einen Wert unter 2,6V gebracht und dem Analog-Eingang PC0 von IC3 zugeführt. C3 soll die Spannung etwas glätten und Störungen reduzieren. Zwar verfügen die Mikrocontroller der ATmega-Reihe über eine interne Referenzspannungsquelle, diese ist aber mit einer Toleranz von 10% sehr ungenau. Aus diesem Grund wurde die Referenz IC2 ergänzt, die über den Vorwiderstand R7 gespeist wird und eine Spannung von 2,495V mit einer Genauigkeit von 1% bereitstellt. So kann die Schwelle für den Akku-Alarm ohne Abgleich sehr genau konfiguriert werden.

An J6 kann ein Akku-Alarm-Signal für Erweiterungen abgegriffen werden. Der Ausgang führt im Ruhezustand Low-Pegel (0V) und wechselt bei Unterschreitung der eingestellten Alarmschwelle auf High-Pegel (+5V). Weiterhin wird dieser Ausgang kurzzeitig beim Einschalten des Moduls aktiviert.

S1 ist ein einfacher Taster und über diesen können alle Funktionen des Multi-Moduls konfiguriert werden. Es wird hier zwischen einem kurzen Tastendruck (<500ms) und einem langen Tastendruck (>500ms) unterschieden, um eine bestimmte Einstellung anzuwählen oder eine Änderung durchzuführen. Dazu später mehr im Abschnitt Bedienung und Konfiguration.

Zum Schluss möchte ich noch die Bauteile J7 und R2 erwähnen. Diese stellen einen ISP-Anschluss zur Verfügung, über den die Programmierung das Mikrocontrollers IC3 vorgenommen wird.

Die benötigten Bauteile für das Multi-Modul 1 und einige Tipps für die Beschaffung sind in dieser Stückliste zu finden.

SymbolSchaltungsvariante Multi-Modul 2

Schaltungsvariante 2

Die Schaltungsvariante Multi-Modul 2 ist im Kern identisch mit dem Multi-Modul 1, deshalb werde ich an dieser Stelle nur auf die Unterschiede eingehen. Der hauptsächliche Unterschied besteht hier im zusätzlichen Treiber IC4 für die LED-Ausgänge und der veränderten Anschaltung der LEDs. Der hier verwendete ULN2803 enthält 8 unabhängige Treiberstufen mit einem offenen Kollektor-Ausgang - genau passend zu den 8 LED-Ausgängen des Multi-Moduls. Jeder Treiber kann bis zu 500mA schalten, damit sollten sich auch anspruchsvolle Beleuchtungen realisieren lassen.

Um eine möglichst hohe Flexibilität zu ermöglichen, ist beim Multi-Modul 2 die Stromversorgung der LEDs vom Rest der Schaltung getrennt (abgesehen von der nötigen Masse-Verbindung). Außerdem wurden die LED-Vorwiderstände von der Platine entfernt, da sie je nach Anwendung unterschiedlich bemessen werden müssen und SMD-Widerstände unter Umständen der Belastung nicht standhalten. Für die Zuführung der LED-Stromversorgung ist der Anschluss J9 vorgesehen. Dieser wurde nah an IC4 platziert, um den Strompfad möglichst kurz zu halten. Der Anschluss J1 für die Überwachung des Antriebs-Akkus und gegebenenfalls der Versorgung des Multi-Moduls wird oft nicht mehr benötigt und kann optional über die zusätzliche Drahtbrücke J10 mit der LED-Spannung verbunden werden. Die richtige Verwendung von J1, J9 und J10 ist abhängig von der geplanten Anschaltung der LEDs und wird weiter unten noch genauer beschrieben.

Die grundsätzliche Anschaltung der LEDs beim Multi-Modul 2 ist im folgenden Bild dargestellt:

Beispielbeschaltung

Die Spannung für die LEDs wird auf diesem Bild vom Antriebs-Akku entnommen und über den Anschluss J9 an das Multi-Modul geführt. Die bereits erwähnte Brücke J10 wird in dieser Schaltung eingelötet und stellt so eine Verbindung zur Spannungsüberwachung des Multi-Moduls her. Die 8 LED-Ausgänge stehen an J4 zur Verfügung. Es handelt sich um so genannte offene Kollektoren, d.h. im eingeschalteten Zustand wird der Ausgang mit der Masse verbunden. Die LEDs müssen also zwischen den Ausgang und den Plus-Pol des Akkus geschaltet werden, wobei zusätzlich noch ein Vorwiderstand eingefügt werden muss.

Einige Überlegungen zum sinnvollen LED-Betrieb: Die oben abgebildete Beispielbeschaltung soll nur das Prinzip verdeutlichen. Genau genommen zeigt das Bild, wie man es eigentlich nicht machen sollte :-)  Betreibt man nämlich eine einzelne LED mit der relativ hohen Spannung des Antriebs-Akkus, dann wird viel Energie am Vorwiderstand „verbraten“. Bei einer weißen 1W-High-Power-LED mit einem Strom von 350mA, einer Akku-Spannung von 11,1V (3 LiPo-Zellen) und einer LED-Flussspannung von 3,5V wäre rechnerisch (11,1V - 3,5V) / 0,35A ein Widerstand von 21,7Ω erforderlich, welcher eine Leistung von (11,1V - 3,5V) * 0,35A = 2,66W verbrauchen würde - also mehr als die LED selbst. Hier sind also bessere Lösungen gefragt.

1. Reihenschaltung der LEDs: Würde man das soeben berechnete Beispiel mit 2 in Reihe geschalteten LEDs durchrechnen, dann kommt man auf einen Widerstandswert von 11,7Ω und eine Leistung von 1,43W. Das ist zwar auch nicht optimal, aber die Energiebilanz ist schon wesentlich besser als bei einer einzelnen LED. Die Reihenschaltung hat allerdings auch Grenzen. Theoretisch könnte noch eine dritte LED in die Reihe eingefügt werden. Hier muss man aber bedenken, dass die Spannung des Akkus beim Flug 10V unterschreiten kann und dann reicht die Spannung nicht mehr aus. Als Folge davon nimmt die Helligkeit der LEDs deutlich ab. Das Optimum in dieser Konstellation (Akku mit 3 LiPo-Zellen) ist also eine Reihenschaltung mit 2 LEDs.

Fazit: Diese Variante ist sinnvoll, wenn viele gleiche LEDs zum Einsatz kommen sollen, z.B. LED-Leisten. Hier lassen sich dann Reihenschaltungen aus 2 LEDs mit jeweils einem Vorwiderstand bilden und mehrere solcher Reihen können dann wiederum zu einer Gruppe parallel zusammenschaltet werden.

2. Niedrige LED-Spannung: Möchte man ein größeres Heli-Modell mit 1W-LEDs vorbildgetreu beleuchten, dann sollen natürlich alle LEDs unabhängig voneinander arbeiten. Damit kann man die Reihenschaltung hier nicht anwenden. Hier empfiehlt es sich, mit einer möglichst niedrigen Spannung zu arbeiten, z.B. 5V. Die ohnehin vorhandene Bordspannung würde sich dafür anbieten, allerdings muss man gut überlegen: Bei 8 gleichzeitig leuchtenden 1W-LEDs kommen gut 2,8A zusammen und es sollte genau geprüft werden, ob die Bordversorgung des Modells damit belastet werden kann. Falls nicht, kann man als Alternative ein zusätzliches BEC-Modul installieren. Diese Module arbeiten als Schaltregler und wandeln die Spannung des Antriebs-Akkus mit gutem Wirkungsgrad auf 5V oder 6V um, wobei selbst das kleinste Modul 3A Dauerstrom liefern kann. Damit ist man bestens gerüstet und jede LED kann mit relativ geringen Verlusten am Vorwiderstand einzeln angeschaltet werden. Ein weiterer Vorteil ist die stabilisierte Spannung, so dass auch bei nachlassendem Antriebs-Akku die Helligkeit gleich bleibt.

Fazit: Diese Variante ist sinnvoll, wenn an jedem Ausgang nur eine einzelne leistungsstarke LED zum Einsatz kommen soll.

Die nachfolgende Tabelle fasst noch einmal das Wichtigste der beiden Anschaltungs-Varianten zusammen und beschreibt auch die richtige Verwendung der Anschlüsse J1 und J9 sowie der Brücke J10:

VarianteLED-VersorgungJ1J9J10Bemerkung
1 Die LEDs werden direkt mit der Spannung des Antriebs-Akkus versorgt. bleibt unbeschaltet Zuführung der Spannung vom Antriebs-Akku geschlossen Über J10 wird die Spannung des Antriebs-Akkus (die an J9 anliegt) auf die Spannungsüberwachung des Multi-Moduls geschaltet.
2 Die LEDs werden über die 5V-Bord-Spannung versorgt Zuführung der Spannung vom Antriebs-Akku Zuführung der 5V-Bord-Spannung (oder von separat erzeugten 5V) offen Über J1 wird die Spannung des Antriebs-Akkus direkt auf die Spannungsüberwachung des Multi-Moduls geschaltet.

Übrigens, die Funktion von J2 und der optionalen Schaltung mit IC1, C1 und C2 ist hier vollkommen identisch zum Multi-Modul 1. Der einzige Unterschied besteht darin, dass hier nur die Stromversorgung für das Multi-Modul selbst und ein angeschlossenes Fahrwerk-Servo festgelegt wird und keine LEDs zu versorgen sind. Bei einem Betrieb ohne Fahrwerk-Servo kann man immer auf IC1, C1 und C2 verzichten und das Modul über den Empfänger versorgen (J2 mit Brücke 2-3). Aber auch hier noch einmal der Hinweis, dass das Multi-Modul nur mit maximal 5,5V betrieben werden darf.

Auch für das Multi-Modul 2 gibt es natürlich eine Stückliste mit einigen Hinweisen zur Bauteil-Beschaffung.

Zum Schluss noch ein Hinweis für die Bemessung der LED-Vorwiderstände: Die Treiberstufen von IC4 sind als Darlington-Schaltung realisiert. Diese hat leider den kleinen Nachteil, dass die Ausgangsspannung nicht bis nach 0V geschaltet werden kann. Abhängig von der Belastung ergeben sich hier Spannungen von bis zu 1,5V, die am Ausgang verloren gehen und die sollte man bei der Berechnung der Vorwiderstände berücksichtigen. Bei der Versorgung der LEDs aus dem Antriebs-Akku (3 Zellen LiPo) kann man mit einem Spannungswert von 11,5V rechnen und bei der Versorgung der LEDs mit 5V ist ein Wert von 4V eine gute Ausgangsbasis.

SymbolHardware Multi-Modul 1

Multimodul 1 Bild 1 Für das Multi-Modul 1 gibt es ein Platinenlayout, welches von Dietmar Heyer entwickelt und bereitgestellt wurde. Dieses Paket enthält das Layout in den Formaten Sprint-Layout v5.0 und PDF.

Das nebenstehende Bild zeigt die fertige Schaltung des Multi-Moduls 1 auf der Basis dieses Platinenlayouts mit den Maßen 48mm x 28mm. Hier ist die Leiterseite zu sehen, auf der alle SMD-Bauteile untergebracht sind. Die Bestückung ist etwas knifflig, insbesondere dann, wenn die Augen nicht mehr so gut sind :-)  Aber mit viel Licht, einer Lupe und einer ruhigen Hand ist auch das zu schaffen.

Multimodul 1 Bild 2 So sieht die andere Seite der Platine aus. Hier sind einige Brücken und die wenigen bedrahteten Bauteile untergebracht: IC1, IC2, C5, S1 sowie die Steckverbinder J7 und J4. Letztere bestehen aus trennbaren einreihigen Buchsenleisten, die man auch als Stecker verwenden kann. Somit hat man ein kompaktes und leichtes Stecksystem für die LEDs. Die noch freien Löcher dienen zum Anschluss des Akkus (J1), der Servokabel (J3 und J5) und eines Servosteckers (J8). Natürlich darf die Brücke an J2 nicht vergessen werden, ohne diese bekommt die Schaltung keinen Strom. Übrigens, S1 wird hier nur mit nur 3 Anschlüssen aufgelötet.

Multimodul 1 Bild 3 Hier wurde die Platine in ein Airwolf-Modell auf der Basis eines T-Rex 450 eingebaut. Für die Leitungen zu den LEDs habe ich 0,2mm Kupferlackdraht verwendet. Dieser ist sehr leicht und lässt sich gut im Rumpf des Modells verlegen. Die einzige Ausnahme ist das Kabel zum Landelicht, hier kommt dickeres Litzen-Kabel zum Einsatz.

Vor dem Einbau der LEDs wurden deren Anschlüsse auf ca. 5mm gekürzt und zwei ausreichend lange Drahtstücke angelötet. Durch Festhalten der Drahtenden und Drehen der LED wird das Drahtpaar anschließend verdrillt. Danach können die LEDs in vorbereitete Löcher im Rumpf gesteckt und mit Zweikomponentenkleber befestigt werden. Es empfiehlt sich, die Drähte im Rumpf zu fixieren, dafür eignet sich Sekundenkleber recht gut. Zum Schluss werden die Drahtenden auf die richtige Länge gebracht und eine 2-polige Buchsenleiste angelötet.

Multimodul 1 Video In diesem Video (DivX 8,6MB) kann man das Multi-Modul in Aktion sehen. Es zeigt einen kurzen Indoor-Flug meines Airwolf-Modells (T-Rex 450), bei dem die Beleuchtung und das Einziehfahrwerk vom Multi-Modul 1 gesteuert wird.

An dieser Stelle noch einige Informationen zu den verwendeten LEDs: Ich habe verschiedene Typen ausprobiert und festgestellt, dass es für die Positionslichter und Beacons keine perfekten LEDs gibt. Ideal wäre eine große Helligkeit, ein Gehäuse in der entsprechenden Farbe und ein großer Abstrahlwinkel - aber alle Eigenschaften zusammen scheint es nicht zu geben. Aber zumindest auf den Abstrahlwinkel kann man ein wenig Einfluss nehmen: Ich habe ultrahelle LEDs verwendet und den vorderen Teil, der später aus dem Rumpf herausragt, mit feinem Schleifpapier bearbeitet. Durch die raue Oberfläche verringert sich zwar geringfügig die Helligkeit, aber das Licht wird mehr gestreut und ist besser sichtbar. Hier sollte man mehrere LED-Exemplare beschaffen und ein wenig experimentieren.

Für die Landelichter und trifft das allerdings nicht zu, hier kann man ruhig die hellsten LEDs nehmen und der kleine Abstrahlwinkel ergibt einen perfekten Scheinwerfer.

SymbolHardware Multi-Modul 2

Multimodul 2 Bild 1 Auch für das Multi-Modul 2 gibt es ein Platinenlayout, welches von Dietmar Heyer entwickelt und bereitgestellt wurde. Dieses Paket enthält das Layout in den Formaten Sprint-Layout v5.0 und PDF.

Auf diesem Bild ist die fast fertige Schaltung des Multi-Moduls 2 zu sehen, welche auf der Basis dieses Platinenlayouts mit den Maßen 50mm x 28mm aufgebaut wurde. Auf der Leiterseite sind bereits alle SMD-Bauteile bestückt (bis auf C1 und C2, die hier nicht benötigt werden).

Der Anschluss J9 für die Stromversorgung der LEDs ist übrigens auf der Platine doppelt vorhanden (unten rechts). Normalerweise braucht man nur einen davon zu beschalten. Den zusätzlichen Anschluss kann man nutzen, um die Spannung an andere Module weiterzugeben.

Multimodul 2 Bild 2 So sieht die andere Seite der Platine aus. Hier sind einige Brücken und die wenigen bedrahteten Bauteile untergebracht: IC2, C5, S1 sowie der Steckverbinder J7. Bei dieser Modul-Variante wurde der optionale Teil (bestehend aus IC1, C1 und C2) nicht bestückt und J2 fest auf die Position 2-3 gelötet. Die Schaltung wird also später direkt über die Anschlüsse J3 und J5 vom Empfänger mit Strom versorgt. Die Empfänger-Anschlusskabel sowie die Steckverbinder für Strom und LEDs fehlen hier noch. Auch beim Multi-Modul 2 wird der Taster S1 nur mit 3 Anschlüssen aufgelötet.

Multimodul 2 Bild 3 Auf diesem Bild ist ein GAUI 330X-S zu sehen, in den eine Vorabversion des Multi-Moduls 2 eingebaut wurde. Dieses steuert hier über die LED-Ausgänge 6 und 7 jeweils 40 LEDs in den Farben Orange und Blau. 10 LEDs einer Farbe und 5 SMD-Widerstände wurden auf einem kleinen Platinenstreifen aufgelötet, wobei immer 2 LEDs und ein Widerstand als Reihenschaltung verbunden sind. Zur Versorgung der LEDs wird die Spannung des Antriebs-Akkus verwendet, man erkennt also hier die LED-Anschaltungs-Variante 1 wieder.

Übrigens, die Verwendung der Ausgänge 6 und 7 hat folgenden Grund: Diese Ausgänge können über PWM gesteuert werden und eine spezielle Software ermöglicht hier die Umschaltung der LED-Helligkeit für den Indoor- und Outdoor-Betrieb. Diese Software-Version wird vielleicht zu einem späteren Zeitpunkt veröffentlicht.

SymbolSoftware

Dieser Abschnitt beschreibt die in Assembler geschriebene Software für das Multi-Modul 1 und 2 und ist sicher für diejenigen interessant, die mit Mikrocontroller-Programmierung vertraut sind. Für den Nachbau und die Konfiguration des Moduls sind diese Informationen nicht unbedingt erforderlich, so dass man diesen Abschnitt auch überspringen kann. Die Software für die beiden Hardware-Varianten ist übrigens im Kern vollkommen identisch, nur die Ansteuerung der LEDs ist unterschiedlich realisiert. Aus dem Quelltext kann die Software für beide Modul-Varianten erzeugt werden und er wurde so geschrieben, dass nur die Änderung einer Definition erforderlich ist.

Der Mikrocontroller des Multi-Moduls läuft mit einem Takt von 8MHz, der von einem internen Oszillator erzeugt wird. Dieser Oszillator wird vom Hersteller kalibriert und mit einer Genauigkeit von 10% ausgeliefert. Das ist nicht wirklich sehr genau, reicht aber für diese Anwendung vollkommen aus. Eine Abweichung vom Solltakt führt allerdings dazu, dass sich die Schaltschwellen für das Einschalten der Beleuchtung etwas verschieben können. Die 3 Stufen (Aus-Ein-Landelicht) liegen allerdings sehr weit auseinander, so dass es hier nicht stört. Auch die Position des Fahrwerk-Kanals verschiebt sich, allerdings wird das durch einen Software-Kniff kompensiert, dazu später mehr. Und natürlich wirkt sich das auch auf die Blink- und Blitzzeiten der LEDs aus, was aber in der Praxis nicht auffällt. Somit konnte auf einen Quarz verzichtet werden und es ist trotzdem kein Abgleich der Taktfrequenz erforderlich.

Beim Einschalten des Multi-Moduls werden zunächst alle I/O-Ports und alle 3 Timer initialisiert, wobei der 16-Bit-Timer1 mit einem Takt von 1MHz betrieben wird und bei 20000 (eigentlich bei 19999) automatisch zurückgesetzt wird. Daraus ergibt sich eine Zählung alle 1µs und ein Zählbereich von 20ms. Dieser Zähler bildet die zentrale Zeitbasis für alle Funktionen des Multi-Moduls. Hier werden die PPM-Impulslängen der beiden Kanaleingänge ermittelt, die PPM-Impulse für das Fahrwerk-Servo generiert und die Überläufe alle 20ms dienen als abgeleitete Zeitbasis für die LED-Programme und weitere Zähler. Die beiden 8-Bit-Timer (0 und 2) werden für die PWM-Steuerung der LED-Ausgänge 6-8 verwendet und ebenfalls mit einer Taktfrequenz von 1MHz betrieben. Bei dem hier verwendeten Fast-PWM-Modus mit 256 Stufen ergibt sich eine Schaltfrequenz von 3906Hz für die LEDs.

Weiterhin werden beim Start noch die gespeicherten Einstellungen aus dem EEPROM gelesen und in das RAM kopiert, der Analog-Digital-Wandler zur Messung der Akku-Spannung eingestellt, die externe Referenzspannungsquelle aktiviert sowie 3 Interrupts definiert, die folgendes tun:

Nun beginnt das Hauptprogramm, welches in einer endlosen Schleife läuft, mit der Arbeit. Es werden ständig die beiden Flag-Bits der externen Interrupts geprüft und falls ein solches gesetzt ist, aus den beiden gespeicherten Zählerständen die PPM-Impulslänge ermittelt. Befindet sich die Impulslänge in einem Bereich zwischen 0,75ms und 2,25ms, dann wird der Wert in einen Pufferspeicher geschrieben, in dem immer die letzten 4 gültigen Werte aufbewahrt werden. Aus diesen 4 Werten wird dann der Mittelwert gebildet und zur weiteren Verarbeitung gespeichert. Diese Prozedur sorgt für eine kontinuierliche Rundung der Werte und dämpft „Ausreißer“, die bei einfachen PPM-Fernsteuersystemen immer mal auftreten können. Das führt allerdings bei gewollten Änderungen des Wertes zu einer kleinen Verzögerung. So spricht die Beleuchtung mit maximal 100ms verzögert an und beim Fahrwerk will man ohnehin eine Verzögerung haben - es wirkt sich also nicht störend aus.

Liegt ein erster gültiger Mittelwert für den Fahrwerk-Kanal vor, dann wird der Servo-Ausgang aktiviert und der Mittelwert direkt wieder ausgegeben. Hierfür wird die PWM-Ausgabe von Timer1 Kanal B eingeschaltet und der Mittelwert direkt als PWM-Wert verwendet. An dieser Stelle kann man erkennen, weshalb eine Takt-Abweichung des Controllers keinen Einfluss auf die Stellung des Fahrwerk-Servos hat: Es wird die gleiche Zeitbasis für das Einlesen und Ausgeben der PPM-Impulse verwendet. Somit gleichen sich Differenzen automatisch wieder aus. Der Servo-Ausgang arbeitet übrigens (unabhängig vom Impulsabstand des Senders) immer mit einem festen Impulsabstand von 20ms.

Alle weiteren Programmteile werden nur alle 20ms ausgeführt. Dazu gehört die Abfrage des Tasters und wenn hier eine Änderung erkannt wird, werden entsprechende Flags gesetzt, die im weiteren Programm ausgewertet werden. Der Taster wird übrigens erst dann als gedrückt gewertet, wenn er mindestens in 2 aufeinander folgenden 20ms-Zyklen gedrückt war. Damit werden Prellungen unterdrückt. Gleiches gilt auch für das Loslassen des Tasters. Beim Drücken des Tasters passiert noch mehr: Es wird ein Zähler gestartet, der bei jeder weiteren Abfrage geprüft wird und erreicht dieser einen bestimmten Stand, was nach genau 500ms passiert, dann wird dies als Langer Tastendruck erkannt. Wird der Taster vorher losgelassen, dann wird ein Kurzer Tastendruck registriert. Damit wird später die Konfiguration des Multi-Moduls realisiert.

Der nächste Programmteil liest den aktuellen Wert des Analog-Digital-Wandlers aus und legt ihn in einen Pufferspeicher, in dem (ebenso wie bei den Kanaleingängen) die letzten 4 Werte abgelegt sind. Auch hier wird ein Mittelwert gebildet, um kurzzeitige Spannungseinbrüche zu filtern. Dieser Mittelwert wird mit dem konfigurierten Alarm-Schwellwert verglichen und bei Unterschreitung ein Flag zur späteren Auswertung sowie der Externe Alarmausgang entsprechend gesetzt.

Anschließend folgt die Servo-Verzögerung, die folgendermaßen funktioniert: Es wird der Mittelwert des Fahrwerk-Kanals mit der aktuellen Servo-Position verglichen und sollte hier eine Abweichung von mindestens 3µs bestehen (entspricht 0,3% bezogen auf den vollen Servo-Weg), dann wird entsprechend der konfigurierten Verzögerungsstufe ein Schrittwert ermittelt. Je nach Bewegungsrichtung wird die aktuelle Servo-Position um diesen Wert erhöht oder vermindert. Da dies nur einmal alle 20ms passiert, nähert sich das Servo langsam und gleichmäßig dem Zielwert. Die 3µs Toleranz sind notwendig, damit das Fahrwerk-Servo nicht ständig Mikroschritte ausführt. So wird unnötiger Stress für das Servo vermieden und außerdem der Stromverbrauch reduziert.
Es gibt in diesem Programmteil noch einen Sonderfall: Ist der Akku-Alarm aktiv und das automatische Ausfahren des Fahrwerks eingeschaltet, dann wird nach dem gleichen Prinzip das Servo an die gespeicherte Ausfahr-Position gesteuert und dann gesperrt - bis der Strom abgeschaltet oder die Sperre mit einem langen Tastendruck wieder gelöst wird.

Weiter geht es mit der Steuerung der Beleuchtung. Zunächst wird der aktuelle PPM-Mittelwert des Beleuchtungskanals geprüft und der Licht-Status entsprechend gesetzt. Ist der Mittelwert größer als 1,35ms, dann wird die Beleuchtung mit den LEDs 1-7 eingeschaltet. Ist der Wert größer als 1,65ms, dann wird zusätzlich das Landelicht eingeschaltet. Das Landelicht wird auch dann eingeschaltet, wenn nur die normale Beleuchtung (LEDs 1-7) aktiv ist und sich gleichzeitig das Fahrwerk in der Ausfahr-Position befindet. Vor der eigentlichen Beleuchtungssteuerung erfolgt noch ein Test, ob der Akku-Alarm aktiv und die Signalisierung über die Beleuchtung eingeschaltet ist. In diesem Fall blinken die LEDs an den Ausgängen 1-7 mit einer Frequenz von 3,1Hz (160ms ein, 160ms aus) und die normale Beleuchtungssteuerung wird umgangen.

Im Normalfall werden die LED-Ausgänge 1-7 jedoch über eine recht umfangreiche Programmsteuerung bedient. Dabei kann für jede LED eins von 17 vordefinierten Licht-Programmen zugeordnet werden. Das kann ein Dauerlicht, ein Blitzlicht, ein Blinklicht oder auch ein Beacon sein. Für die Erstellung der Licht-Programme habe ich eine Art Programmiersprache entwickelt, die aus 5 Steuer-Kommandos und jeweils einem Parameter besteht. Die Beleuchtungssteuerung macht nun folgendes: Es wird für jede LED das zugeordnete Programm ermittelt, das erste Kommando geholt und ausgeführt. Mit dem Parameter wird ein Zähler geladen, der in den folgenden Durchläufen (alle 20ms) vermindert und geprüft wird. Nach Ablauf dieses Zählers wird das nächste Kommando geholt und wiederum abgearbeitet. Den Abschluss jedes Programms bildet ein so genanntes Ende-Kommando und dieses veranlasst die Programmsteuerung, wieder das erste Kommando zu holen und den Zyklus von vorn zu beginnen - und das für jede LED getrennt. Im Abschnitt Sonstiges wird auf diese Technik noch etwas genauer eingegangen und beschrieben, wie man Licht-Programme modifizieren oder eigene Licht-Programme erstellen kann.

Anschließend folgt die Steuerung des Landelichts. Auch hier wird zunächst geprüft, ob der Akku-Alarm aktiv ist und die Signalisierung über das Landelicht erfolgen soll. In diesem Fall blinkt das Landelicht mit einer Frequenz von 3,1Hz (160ms ein, 160ms aus) und die normale Landelichtsteuerung wird umgangen. Im Normalfall wird das Landelicht jedoch abhängig vom PPM-Mittelwert des Beleuchtungskanals entweder ein- oder ausgeschaltet. Um das Landelicht etwas effektvoller erscheinen zu lassen, wird es per PWM weich ein- und ausgeschaltet (Glühlampeneffekt).

Der restliche Programmteil ist für die Konfiguration des Multi-Moduls zuständig. Dieser wird aktiv, sobald der Taster einmal kurz gedrückt wird. Es werden dann verschiedene Zähler gesetzt, die den Ablauf für die Datenausgabe (Anzeige der aktuellen Einstellung über die LEDs) genau steuern. Im weiteren Programmverlauf wird auch der Tastendruck ausgewertet. Ein kurzer Tastendruck setzt alle Zähler für die nächste Einstellung, ein langer Tastendruck ändert die Einstellung auf den nächsten Wert, speichert diesen im EEPROM und setzt wiederum einige Zähler, so dass die neue Einstellung sofort angezeigt wird. Einer der Zähler überwacht die Zeit und wenn innerhalb von 2min keine Tasteneingabe mehr erfolgt, wird der Konfigurations-Modus wieder verlassen.

Den Abschluss des Programms bilden 2 Unterprogramme für den Zugriff auf das EEPROM (Lesen und Schreiben eines Bytes), sowie die 17 Licht-Programme und eine dazugehörige Adresstabelle.

SymbolInbetriebnahme

Vor der Inbetriebnahme des Multi-Moduls (1 oder 2) sollte folgendes beachtet werden: Die Ausgänge LED1-LED7 sind technisch gesehen vollkommen identisch und können mit beliebigen Funktionen belegt werden. Die Ausgänge LED6 und LED7 haben jedoch noch eine Besonderheit: Diese lassen sich über PWM langsam ein- und ausblenden, weshalb sie am besten für Beacon-Funktionen geeignet sind (langsam aufleuchtende und wieder verlöschende Lichter). Auch die Ausgänge LED1 und LED2 besitzen eine besondere Funktion: Die dort angeschlossenen LEDs leuchten beim Einschalten der Stromversorgung 2 mal kurz auf und zeigen so die Betriebsbereitschaft des Multi-Moduls an. Außerdem werden sie bei der Konfiguration benötigt und so bietet es sich an, diese Ausgänge für das rechte und linke Positionslicht (Grün und Rot) zu verwenden.

Der Ablauf bei der Inbetriebnahme der beiden Multi-Modul-Varianten ist grundsätzlich identisch. Bei der Inbetriebnahme des Multi-Moduls 2 muss man allerdings noch festlegen, wie die Stromversorgung für die LEDs realisiert werden soll (Anschaltungs-Variante 1 oder 2). Bei Variante 1 muss die Brücke J10 bestückt werden, damit später die an J9 angelegte Spannung vom Antriebs-Akku vom Modul überwacht werden kann. Bei Variante 2 darf die Brücke nicht bestückt werden, hier erfolgt die Überwachung des Antriebs-Akkus über den Anschluss J1.

Im nächsten Schritt muss man sich für die am besten geeignete Stromversorgungsvariante für das Multi-Modul entscheiden und die entsprechende Brücke an J2 einlöten. Beim Multi-Modul 1 muss man beachten, dass auch die LEDs direkt vom Modul versorgt werden müssen. Bei beiden Modul-Varianten muss auch ein angeschlossenes Fahrwerk-Servo berücksichtigt werden. Nachdem man nochmals alles genau kontrolliert hat, wird eine passende Spannungsquelle angeschlossen. Dafür kann provisorisch ein passendes Netzteil mit 12V bzw. 5V (abhängig von der Stromversorgungsvariante) verwendet werden oder man schließt das Multi-Modul gleich an die zukünftige Spannungsquelle im Modell an. Bitte unbedingt auf die Polarität achten! Die Schaltung ist nicht gegen Falschpolung geschützt und im schlimmsten Fall können auch andere elektronische Komponenten im Modell Schaden nehmen.

Nach dem Einschalten der Stromversorgung sollte man zur Sicherheit die Betriebsspannung an der Platine überprüfen, die etwa 5V betragen muss. Als Messpunkte eignen sich am besten die Masse-Buchse vom Programmieranschluss J7 in der Nähe der Platinenmitte und die Brücke J2 am Platinenrand. So muss man nicht an den engen Leiterbahnen zwischen den SMD-Bauteilen hantieren. Wenn alles im grünen Bereich ist, wird der Strom wieder abgeschaltet und ein Programmiergerät an J7 angeschlossen. Danach kann der Strom wieder eingeschaltet und die Software in den Mikrocontroller geschrieben werden. Hier gilt es zu beachten, dass für beide Modul-Versionen unterschiedliche Software verwendet werden muss:

multimodul1-atmega88-v103.zipaktuelle Software vom 29.02.2012 für das Multi-Modul 1
multimodul2-atmega88-v103.zipaktuelle Software vom 29.02.2012 für das Multi-Modul 2

Nach Abschluss des Programmiervorgangs müssen für die richtige Funktion des Multi-Moduls noch einige Fuse-Bits gesetzt bzw. gelöscht werden. Die folgenden Einstellungen sind bei beiden Modul-Varianten identisch:

Fuse-Bits 1So sieht die Einstellung im AVR Studio 4 für den ATmega88PA des Multi-Moduls aus.

Fuse-Bits 2So sieht die Einstellung in PonyProg für den ATmega88PA des Multi-Moduls aus.

Nach der Programmierung der Software und der Einstellung der Fuse-Bits kann ein erster Funktionstest durchgeführt werden. Dazu sollte eine LED an den Ausgang LED1 angeschlossen werden und sobald das Multi-Modul eingeschaltet wird, muss diese zweimal für ca. 300ms aufleuchten. Für die weitere Inbetriebnahme empfiehlt es sich, das Multi-Modul mit der Stromversorgung des Modells zu betreiben. Dabei muss immer mit größter Vorsicht gearbeitet werden. Die Anschlüsse für Ein- und Ausgänge sollten immer bei abgetrennter Stromversorgung gesteckt oder gelöst werden - niemals etwas unter Spannung umstecken! Weitere Schutzmaßnahmen, wie z.B. das Abschrauben der Rotorblätter oder das Abklemmen des Antriebsmotors sollten selbstverständlich sein.

Inbetriebnahme der Beleuchtung: Dafür ist es notwendig, das Servokabel J3 an den für die Beleuchtung vorgesehenen Empfänger-Ausgang anzuschließen. Zum Schalten der Beleuchtung am Sender eignet sich am besten ein 3-Stufen-Schalter mit der Programmierung -100% / 0% / +100%. Zu beachten ist, dass manche Sender mit den Einstellungen 0% / 50% / 100% arbeiten. Wichtig ist, dass sich Impulszeiten wie in der folgenden Tabelle ergeben:

SchalterstellungImpulszeitImpulsbereich des Multi-ModulsAktion
0 (-100%)1,0ms0,8ms - 1,35msBeleuchtung ausgeschaltet
1 (0%)1,5ms1,35ms bis 1,65msBeleuchtung eingeschaltet (LED1-LED7)
2 (+100%)2,0ms1,65ms bis 2,2msBeleuchtung und Landelicht eingeschaltet (LED1-LED8)

Zur Inbetriebnahme der gesamten Beleuchtung müssen alle vorgesehenen LEDs angeschlossen werden. Beim Einschalten des Multi-Moduls leuchten zunächst die LED1 und LED2 zweimal für 300ms auf, um die Betriebsbereitschaft anzuzeigen. Wenn der Lichtschalter am Sender in Position 1 gebracht wird, sollten die LEDs 1-7 aufleuchten. Solange das Modul noch nicht konfiguriert ist, arbeiten alle LEDs mit dem Licht-Programm 1 (Dauerlicht). Beim Schalten auf Stufe 2 muss zusätzlich das Landelicht aufleuchten und beim Zurückschalten auf Stufe 0 müssen alle LEDs verlöschen.

Inbetriebnahme der Fahrwerksteuerung: Wird diese verwendet, dann müssen die Anschlüsse J5 und J8 verkabelt werden. Es wird an dieser Stelle davon ausgegangen, dass sowohl am Sender als auch im Modell alles fertig eingestellt und funktionsfähig ist. Üblicherweise wird am Sender ein Schalter verwendet, bei dem die beiden Endstellungen des Fahrwerk-Servos programmiert sind. Ist diese Voraussetzung erfüllt, dann wird das Fahrwerk-Servo vom Empfänger getrennt und das Multi-Modul mit J5 und J8 dazwischen geschaltet. Da beim Einschalten des Moduls die aktuelle Position des Fahrwerk-Servos nicht bekannt ist, wird dieses zunächst ohne Verzögerung in die vom Sender übermittelte Position gebracht. Danach erfolgen alle Änderungen des Fahrwerk-Servos verzögert, was man mit dem Fahrwerkschalter am Sender sofort testen kann.

SymbolBedienung und Konfiguration

Bedienung: Die Bedienung des Multi-Moduls erfolgt hauptsächlich über die Fernsteuerung. Die beiden Bedienelemente am Sender wurden bereits im vorherigen Abschnitt eingerichtet und beschrieben, so dass im normalen Betrieb folgendes gilt:

BedienelementAktion
Beleuchtungsschalter in Stellung 0Die Beleuchtung wird komplett ausgeschaltet.
Beleuchtungsschalter in Stellung 1Die Beleuchtung wird eingeschaltet.
Beleuchtungsschalter in Stellung 2Die Beleuchtung und das Landelicht werden eingeschaltet.
Fahrwerkschalter in Stellung 0Das Fahrwerk wird verzögert ausgefahren.
Fahrwerkschalter in Stellung 1Das Fahrwerk wird verzögert eingefahren.

Unter bestimmten Bedingungen werden jedoch die Schalterstellungen am Sender ignoriert und das Multi-Modul übernimmt (abhängig von der Konfiguration) die Kontrolle über Licht- und Fahrwerk-Funktionen. Dies ist der Fall, wenn die Spannung des Antriebs-Akkus die eingestellte Schwelle unterschreitet. Ist das Modul so konfiguriert, dass der Akku-Alarm über die Beleuchtung oder das Landelicht signalisiert wird, dann beginnt das entsprechende Licht zu blinken - unabhängig von der Stellung des Lichtschalters am Sender. Wenn das automatische Ausfahren des Fahrwerks aktiviert ist, dann wird bei einem Akku-Alarm das Fahrwerk ausgefahren - ebenfalls unabhängig von der Stellung des Fahrwerkschalters am Sender. Wenn der Akku-Alarm wieder verschwindet, weil sich der Akku nach der Landung und der Abschaltung des Motors wieder etwas erholt, dann wird die normale Licht-Funktion wieder hergestellt. Das Fahrwerk bleibt allerdings in der Ausfahrstellung gesperrt. Hier lässt sich die normale Funktion nur durch 2 Bedingungen wieder herstellen:

  1. Aus- und Einschalten der Stromversorgung
  2. Langer Tastendruck (>500ms), anschließend leuchten LED1 und LED2 zweimal für 300ms zur Bestätigung.

In beiden Fällen sollte vorher unbedingt die Stellung des Fahrwerkschalters am Sender geprüft werden, damit das Fahrwerk nicht eingezogen wird, wenn das Modell auf dem Boden steht. Ich benutze übrigens die Tasterfunktion nach dem letzten Flug, um mein Modell transportfähig zu machen, denn es passt nur mit eingezogenem Fahrwerk in den Transportkoffer.

Weiterhin gibt es noch eine Kopplung zwischen dem Fahrwerk und der Beleuchtung. Diese bewirkt, dass bei eingeschalteter Beleuchtung und gleichzeitig ausgefahrenem Fahrwerk immer das Landelicht eingeschaltet wird. Durch diese Funktion wird der Pilot etwas entlastet und muss somit im Flug nur noch das Fahrwerk bedienen.

Konfiguration: Diese erfolgt über einen speziellen Konfigurations-Modus, in dem insgesamt 11 Einstellungen angewählt und geändert werden können. Die Einstellung erfolgt dabei nach einem einheitlichen System: Beim Drücken des Tasters wird zwischen einem Kurzen Tastendruck (<500ms) und einem Langen Tastendruck (>500ms) unterschieden. Ein Kurzer Tastendruck schaltet immer zur nächsten Einstellung weiter, ohne diese zu verändern. Ein Langer Tastendruck ändert die aktuelle Einstellung und speichert den neuen Wert gleichzeitig im EEPROM des Mikrocontrollers ab. Der Konfigurations-Modus wird mit einem Kurzen Tastendruck aktiviert, das Verlassen der Konfiguration erfolgt ebenfalls durch einen Kurzen Tastendruck nach der letzten Einstellung - oder automatisch nach 2 Minuten, wenn kein weiterer Tastendruck erfolgt.

Alle Taster-Eingaben werden durch Leuchten oder Blinken einiger LEDs unterstützt - so kann man die gerade angewählte Einstellung sehen. Es empfiehlt sich deshalb, die Konfiguration erst dann vorzunehmen, wenn das Multi-Modul und alle LEDs komplett installiert sind. Als Mindestbeschaltung sind die Ausgänge LED1, LED2 und LED8 erforderlich. Die folgende Tabelle enthält alle Einstellungen, den möglichen Werte-Bereich und die entsprechende LED-Anzeige. Hier gilt: Um von einer Einstellung zur nächsten zu kommen (entspricht der nächsten Zeile in der Tabelle) ist ein Kurzer Tastendruck erforderlich. Die Änderung eines Wertes erfolgt durch einen Langen Tastendruck. In diesem Fall wird der Wert um 1 erhöht, gespeichert und die LED-Anzeige erneut ausgegeben, wobei nach dem letzten möglichen Wert automatisch wieder bei 1 begonnen wird. Es ist übrigens nicht nötig, die LED-Anzeigen abzuwarten. Möchte man beispielsweise direkt zur Einstellung 9, dann kann man gleich 9-mal hintereinander den Taster kurz drücken. Auch beim Ändern von Einstellungen muss nicht die komplette Datenausgabe abgewartet werden, hier kann der Taster mehrmals hintereinander lang gedrückt werden, um schnell zum gewünschten Wert zu kommen.

Noch ein wichtiger Hinweis zum Konfigurations-Modus: Solange sich das Multi-Modul in diesem Modus befindet, wird die Stellung des Licht-Schalters am Sender ignoriert. Auch der Akku-Alarm wird während dieser Zeit nicht über die Beleuchtung signalisiert, die Fahrwerksteuerung bleibt jedoch aktiv. Bei den Einstellungen 8-11 wird das Landelicht zur Datenausgabe verwendet, in diesem Fall wird die Helligkeit reduziert, damit man bei der Konfiguration nicht erblindet :-)

EinstellungBeschreibungWerte-BereichLED-Anzeige
1Licht-Programm für LED11 - 17 LED1 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
2Licht-Programm für LED21 - 17 LED2 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
3Licht-Programm für LED31 - 17 LED3 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
4Licht-Programm für LED41 - 17 LED4 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
5Licht-Programm für LED51 - 17 LED5 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
6Licht-Programm für LED61 - 17 LED6 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
7Licht-Programm für LED71 - 17 LED7 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm.
8Akku-Alarm-Programm1 - 8 LED1 leuchtet ständig. Das Landelicht blinkt 1- bis 8-mal, wobei die Anzahl der Blinkzeichen dem aktuellen Wert entspricht. Nach einer kurzen Pause werden die Blinkzeichen wiederholt.
9Spannungsschwelle für Akku-Alarm1 - 15 LED2 leuchtet ständig. Das Landelicht blinkt 1- bis 15-mal, wobei die Anzahl der Blinkzeichen dem aktuellen Wert entspricht. Nach einer kurzen Pause werden die Blinkzeichen wiederholt.
10Servo-Verzögerung1 - 4 LED1 und LED2 leuchten ständig. Das Landelicht blinkt 1- bis 4-mal, wobei die Anzahl der Blinkzeichen dem aktuellen Wert entspricht. Nach einer kurzen Pause werden die Blinkzeichen wiederholt.
11Servo-Position für das automatische
Ausfahren des Fahrwerks
- LED1 und LED2 blinken schnell. Wird nach einem Langen Tastendruck eine gültige Servo-Position erkannt, dann leuchtet das Landelicht einmal kurz auf und die Position wird gespeichert.

Hinweis zu den Einstellungen 1-7: Hier wird nach einem kurzen Aufleuchten der gerade angewählten LED das aktuell eingestellte Licht-Programm abgespielt. Aber nicht nur das: alle anderen LEDs werden auch aktiv und zeigen ihr aktuelles Programm - so als hätte man am Sender die Beleuchtung eingeschaltet. Mit einem Langen Tastendruck kann man nun das nächste Licht-Programm auswählen, anschließend leuchtet wieder die gerade angewählte LED kurz auf und wiederum laufen alle LEDs mit ihrem Programm. So kann man jederzeit sehen, wie das eingestellte Licht-Programm auf die gesamte Beleuchtung wirkt. Die 17 wählbaren Licht-Programme sind in der folgenden Tabelle als Zeitdiagramm zusammengefasst. Die senkrechten gepunkteten Linien sind Sekunden-Markierungen. Die Zeiten der Beacons und der Blinklichter wurden übrigens absichtlich „krumm“ gewählt, damit diese nicht synchron mit den Blitzlichtern arbeiten (so wie in der Realität auch).

WertDiagrammBeschreibung
01Diagramm 1Dauerlicht (Voreinstellung bei der Inbetriebnahme)
02Diagramm 2Einfach-Blitzlicht 1s
03Diagramm 3Zweifach-Blitzlicht 1s
04Diagramm 4Dreifach-Blitzlicht 1s
05Diagramm 5Einfach-Blitzlicht 1,6s
06Diagramm 6Zweifach-Blitzlicht 1,6s
07Diagramm 7Dreifach-Blitzlicht 1,6s
08Diagramm 8Einfach-Blitzlicht 1,6s, zeitversetzt zu Programm 05
09Diagramm 9Zweifach-Blitzlicht 1,6s, zeitversetzt zu Programm 06
10Diagramm 10Dreifach-Blitzlicht 1,6s, zeitversetzt zu Programm 07
11Diagramm 11Beacon 2,72s
12Diagramm 12Beacon 3,72s
13Diagramm 13Beacon 2,72s, zeitversetzt zu Programm 11
14Diagramm 14Beacon 3,72s, zeitversetzt zu Programm 12
15Diagramm 15Einfach-Blinklicht 1,3s
16Diagramm 16Einfach-Blinklicht 1,7s
17Diagramm 17Einfach-Blinklicht 2,1s

Die Programme 11-14 funktionieren grundsätzlich an allen LED-Ausgängen. Allerdings sind nur die PWM-fähigen Ausgänge LED6 und LED7 in der Lage, das Licht langsam ein- und auszublenden.

Hinweis zur Einstellung 8: Diese legt fest, wie das Multi-Modul auf einen Akku-Alarm reagieren soll. Es steht eine optische Signalisierung über die Beleuchtung (LEDs 1-7) oder das Landelicht (LED8) zur Auswahl, außerdem kann das Fahrwerk automatisch ausgefahren werden. Die Fahrwerk-Funktion steht allerdings nur zur Verfügung, wenn eine Ausfahrposition (siehe Einstellung 11) gespeichert ist. Die 8 möglichen Werte haben folgende Bedeutung:

WertBeleuchtung bei AlarmLandelicht bei AlarmFahrwerk bei AlarmBemerkung
1normale Funktionnormale Funktionnormale FunktionVoreinstellung bei der Inbetriebnahme
2blinktnormale Funktionnormale Funktion
3normale Funktionblinktnormale Funktion
4blinktblinktnormale Funktion
5normale Funktionnormale Funktionwird ausgefahren
6blinktnormale Funktionwird ausgefahren
7normale Funktionblinktwird ausgefahren
8blinktblinktwird ausgefahren

Ist die optische Signalisierung aktiviert, dann blinkt bei einem Akku-Alarm die gewählte Beleuchtung mit ca. 3,1Hz (160ms ein, 160ms aus). Auch bei kurzen Spannungseinbrüchen wird das Blinklicht für mindestens 1,28s eingeschaltet. Sind Beleuchtung und Landelicht aktiviert, dann blinkt das Landelicht entgegengesetzt zur Beleuchtung. Ist das automatische Ausfahren des Fahrwerks aktiviert, dann wird das Fahrwerk-Servo beim ersten Auftreten eines Akku-Alarms mit der eingestellten Verzögerung in die Ausfahrposition gebracht und dann gesperrt.

Hinweis zur Einstellung 9: Mit dieser Einstellung wird die Spannungsschwelle festgelegt, bei der ein Akku-Alarm ausgelöst werden soll. Diese Einstellung ist für LiPo-Akkus mit 3 Zellen (Nennspannung 11,1V) optimiert und kann in 15 Stufen eingestellt werden. Dabei gilt folgende Zuordnung zum eingestellten Wert:

WertSpannungsschwelle
(Software v1.01)
Spannungsschwelle
(Software ab v1.02)
Bemerkung
110,40V11,00VVoreinstellung bei der Inbetriebnahme
210,34V10,89V
310,28V10,79V
410,22V10,68V
510,16V10,58V
610,10V10,47V
710,04V10,36V
89,98V10,26V
99,92V10,15V
109,86V10,05V
119,80V9,94V
129,74V9,83V
139,68V9,73V
149,62V9,62V
159,56V9,52V

Es wird empfohlen, zunächst die Voreinstellung zu testen und bei jedem Flug den Wert um 1 zu erhöhen, bis man die richtige Schwelle gefunden hat. Das ist der Fall, wenn der Akku-Alarm rechtzeitig vor dem Eingreifen des Motor-Reglers anspricht, so dass man mit voller Motorleistung noch sicher landen kann. Je nach Alter und Qualität der Akkus kann das Verhalten allerdings unterschiedlich sein, hier muss man ein wenig experimentieren.

Hinweis zur Einstellung 10: Hier wird die Verzögerungszeit für das Fahrwerk-Servo festgelegt. Es sind 4 Werte möglich, die in der folgenden Tabelle zusammengefasst sind:

WertVerzögerungszeitBemerkung
12,5sVoreinstellung bei der Inbetriebnahme
23,3s
34,0s
45,0s

Die Zeit bezieht sich auf den vollen Servo-Weg bei einem PPM-Signalwechsel von 1,0ms auf 2,0ms oder umgekehrt. Ist der Servo-Weg geringer, dann wird die Zielposition schneller erreicht, bei größeren Wegen dauert es entsprechend länger.

Hinweis zur Einstellung 11: Mit dieser Einstellung wird dem Multi-Modul mitgeteilt, welche Position das Fahrwerk-Servo bei einem Akku-Alarm einnehmen soll. Dazu muss das Fahrwerk über den Schalter am Sender in die gewünschte Position gebracht werden. Anschließend wird der Taster lang gedrückt. Wurde ein gültiger Wert ermittelt, dann leuchtet das Landelicht kurz auf und quittiert damit das Speichern des Wertes. Der Wert kann jederzeit durch Wiederholen dieser Prozedur neu eingestellt werden, ein Löschen ist jedoch nicht möglich. Soll das automatische Ausfahren deaktiviert werden, dann ist dies über die Einstellung 8 möglich, indem man diese auf einen Wert von 1-4 setzt. Auch wichtig: Wird das Fahrwerk neu justiert, dann muss die neue Position unbedingt mit der eben beschriebenen Prozedur neu angelernt werden!

Diese Einstellung wird übrigens auch für die automatische Landelicht-Funktion benötigt. Ist hier ein Positions-Wert gespeichert und befindet sich das Fahrwerk-Servo in der Nähe dieser Position, dann wird automatisch das Landelicht eingeschaltet (allerdings nur bei eingeschalteter Beleuchtung).

Damit man auch auf dem Flugplatz die Konfigurationsanleitung schnell zur Hand hat, habe ich die Datei multimodul-konf.pdf erstellt. Diese enthält eine Konfigurationsanleitung in kompakter Tabellenform.

SymbolSonstiges

Dieser Abschnitt ist für Neugierige gedacht, die gern mit der Hard- und Software experimentieren möchten. Bei der Software gibt es einen Bereich, der sich geradezu anbietet.

Die Licht-Programm-Steuerung: Damit das Multi-Modul möglichst flexibel einsetzbar ist, habe ich die Lichtsteuerung programmierbar gemacht. In der aktuellen Software sind bereits 17 fertige Licht-Programme enthalten, die beliebig den 7 LED-Ausgängen zugeordnet werden können. Es ist aber durch Bearbeiten des Assembler-Quelltextes möglich, Licht-Programme zu modifizieren und weitere Licht-Programme zu erstellen. Dafür habe ich eine einfache Programmiersprache entwickelt, die aus nur 5 Kommandos besteht:

NameKommando
Byte 1
Kommando
Byte 2
Beschreibung
Licht ausschalten00 - 255Licht ausschalten und anschließend 20ms - 5,12s warten.
Licht einschalten10 - 255Licht einschalten und anschließend 20ms - 5,12s warten.
Licht ausblenden20 - 255Licht langsam ausblenden und anschließend 20ms - 5,12s warten.
Licht einblenden30 - 255Licht langsam einblenden und anschließend 20ms - 5,12s warten.
Ende255255 Programm beenden und von vorn beginnen; der Parameter muss vorhanden sein, wird aber nicht ausgewertet.

Ein Kommando besteht immer aus 2 Bytes: Das erste Byte ist der Kommando-Code und das zweite Byte ist ein Parameter. Der Kommando-Code legt fest, was mit dem Licht passieren soll (ein- oder ausschalten) und der Parameter bestimmt die Zeit, die gewartet werden soll, bis das nächste Kommando ausgeführt wird. Der Parameter ist eine Zahl im Bereich 0-255 und gibt die Zeiteinheiten im Raster von 20ms an, d.h. der Parameter wird einfach mit 20ms multipliziert und ergibt so die Wartezeit bis zum nächsten Kommando. Eine Ausnahme ist der Wert 0, er wird als 256 gewertet und entspricht damit der größten möglichen Wartezeit von 256 * 20ms = 5120ms oder 5,12s. Der kleinste Wert ist 1 und der entspricht einer Wartezeit von 1 * 20ms = 20ms.

Die Funktion der Kommandos lässt sich am besten an einem Beispiel erklären. Nachfolgend wurde das Licht-Programm 03 aus dem Quelltext kopiert:
// Licht-Programm 03 - Zweifach-Blitzlicht 1s
ligh03: .db     1, 3                            // Licht einschalten,  60ms warten
        .db     0, 6                            // Licht ausschalten, 120ms warten
        .db     1, 3                            // Licht einschalten,  60ms warten
        .db     0, 38                           // Licht ausschalten, 760ms warten
        .db     255, 255

Hier sieht man den grundsätzlichen Aufbau eines Licht-Programms. Jedes Programm beginnt mit einem eindeutigen Label (in diesem Beispiel ligh03:), welches der Assembler benötigt, um das Programm aufzufinden. Danach werden alle Kommandos mit der Assembler-Anweisung .db in Form einer Liste notiert, wobei jede Zeile 1 Kommando enthalten sollte. Diese Schreibweise hat 2 Gründe: Das Programm ist gut lesbar und der Assembler möchte wegen der 16-Bit-Speicherarchitektur immer eine gerade Anzahl Bytes in einer Zeile haben.

Die nachfolgende Tabelle zeigt auf, was die Kommandos des Beispielprogramms bewirken:

Nr.KommandoGrafikBeschreibung
11, 3Beispiel 1 Das erste Kommando wird abgearbeitet, wenn am Sender die Beleuchtung eingeschaltet wird. In diesem Beispiel wird also sofort das Licht eingeschaltet.
Der Parameter-Wert 3 wird mit 20ms multipliziert, somit ergibt sich eine anschließende Wartezeit von 3 * 20ms = 60ms.
20, 6Beispiel 2 Das Licht wird ausgeschaltet. Dies passiert nach Ablauf der Wartezeit des vorherigen Kommandos, also genau nach 60ms. Das Ergebnis ist ein Lichtblitz mit einer Länge von 60ms.
Der Parameter-Wert 6 wird mit 20ms multipliziert, somit ergibt sich eine anschließende Wartezeit von 6 * 20ms = 120ms.
31, 3Beispiel 3 Das Licht wird wiederum eingeschaltet - nach Ablauf der Wartezeit des vorherigen Kommandos von 120ms.
Der Parameter-Wert 3 wird mit 20ms multipliziert, somit ergibt sich wieder eine anschließende Wartezeit von 3 * 20ms = 60ms.
40, 38Beispiel 4 Das Licht wird wieder ausgeschaltet - auch hier wieder nach Ablauf der Wartezeit des vorherigen Kommandos von 60ms. Das Ergebnis ist wiederum ein Lichtblitz mit einer Länge von 60ms.
Der Parameter-Wert 38 wird mit 20ms multipliziert, dies ergibt eine Wartezeit von 38 * 20ms = 760ms. Das Ergebnis ist eine längere Pause nach den beiden Lichtblitzen.
5255, 255Beispiel 5 Dieses spezielle Kommando muss immer am Ende eines Programms stehen. Es veranlasst die Programmsteuerung wieder zum ersten Kommando zurückzukehren und den Programmablauf neu zu beginnen. Somit schließt sich nach Ablauf der Wartezeit des vorherigen Kommandos nahtlos das erste Kommando wieder an und das Programm läuft in einer endlosen Schleife.

Die gesamte Programmlaufzeit lässt sich übrigens einfach errechnen, indem man alle Parameter addiert (ohne das Ende-Kommando) und mit 20ms multipliziert. Unser Beispiel-Programm läuft also: (3 + 6 + 3 + 38) * 20ms = 50 * 20ms = 1000ms = 1s. Bitte nicht vergessen, dass bei einem Parameter-Wert von 0 mit 256 gerechnet werden muss (trifft in diesem Fall nicht zu). Die Gesamtlaufzeit ist wichtig, wenn mehrere Programme synchron laufen sollen. Bei den 17 vordefinierten Programmen sind die Programme 2-4, 5-10, 11/13 sowie 12/14 synchronisiert.

Die beiden Kommandos Licht ausblenden (Kommando-Code 2) und Licht einblenden (Kommando-Code 3) können genau so eingesetzt werden wie die normalen Aus- und Einschalt-Kommandos (Kommando-Codes 0 und 1). Allerdings sollte man berücksichtigen, dass ein vollständiger Aus- oder Einblendvorgang ungefähr 0,5s dauert und somit längere Wartezeiten im Parameter verwendet werden sollten. Auch hier noch mal der Hinweis, dass Programme mit Blend-Kommandos (Kommando-Codes 2 und 3) nur an den Ausgängen LED6 und LED7 optimal funktionieren. An den anderen Ausgängen wird dann einfach aus dem Blend- ein Schaltvorgang.

Sollte ausnahmsweise eine längere Wartezeit als 5,12s benötigt werden, dann besteht die Möglichkeit, zwei Kommandos zu kaskadieren. Hier ist ein Beispiel für eine Wartezeit von 6s:

// Test-Programm für ein Beacon mit 6s ein / 6s aus
test99: .db     3, 0                            // Licht einblenden,           5120ms warten \ ergibt zusammen
        .db     1, 44                           // Licht bleibt eingeschaltet,  880ms warten / 6000ms
        .db     2, 200                          // Licht ausblenden,           4000ms warten \ ergibt zusammen
        .db     0, 100                          // Licht bleibt ausgeschaltet, 2000ms warten / 6000ms
        .db     255, 255

Hier wurde die Wartezeit einfach auf 2 Kommandos aufgeteilt, wobei verschiedene Möglichkeiten angewandt wurden, die aber letztlich zum gleichen Ergebnis führen. Die ersten beiden Kommandos verwenden die Parameter 0 und 44 (entspricht 256 + 44 = 300) um auf die gewünschte Zeit von 6s zu kommen. Bei den Kommandos 3 und 4 wurde einfach 200 und 100 verwendet, was einfacher zu berechnen ist. Bei Beacon-Programmen ist zu beachten, dass beim „Verlängerungs-Kommando“ nur die Kommando-Codes 0 und 1 verwendet werden, da sonst die LED erneut ein- oder ausgeblendet wird.

Damit das oben stehende Beispiel-Programm vom Multi-Modul verwendet wird, muss es in eine Adress-Tabelle eingetragen werden. Dieser Vorgang ist immer notwendig, wenn ein neues Programm hinzugefügt wird. Die Tabelle sieht in der aktuellen Programm-Version so aus (etwas gekürzt):
// Licht-Programm-Tabelle
ligtab: .dw     ligh00                          // Adresse von Licht-Programm 00 (wird nur intern verwendet)
        .dw     ligh01                          // Adresse von Licht-Programm 01
        .dw     ligh02                          // Adresse von Licht-Programm 02
        ...
        .dw     ligh15                          // Adresse von Licht-Programm 15
        .dw     ligh16                          // Adresse von Licht-Programm 16
        .dw     ligh17                          // Adresse von Licht-Programm 17

In dieser Tabelle sind die Labels aller Licht-Programme eingetragen und über diese Tabelle ermittelt das Programm die Speicheradresse der Licht-Programme. Die Reihenfolge der Einträge ist wichtig, denn in dieser werden bei der Konfiguration der Ausgänge LED1-LED7 die verschiedenen Licht-Programme angeboten. Auch die im EEPROM gespeicherten Einstellungen der LED-Ausgänge beziehen sich auf diese Tabelle. Gegebenenfalls muss nach einer Änderung in der Tabelle die Konfiguration der Ausgänge LED1-LED7 angepasst werden. Es ist möglich, nicht benötigte Programme aus der Tabelle zu löschen, dann stehen sie bei der Konfiguration auch nicht mehr zur Verfügung. Wir wollen allerdings jetzt unser Testprogramm ergänzen und fügen deshalb einfach eine neue Zeile hinzu:

        .dw     test99                          // Adresse vom Beacon-Test-Programm

Diese Zeile kann auch zwischen vorhandene Einträge geschrieben werden, dann erscheint das neue Programm bei der Konfiguration an der entsprechenden Stelle. Bitte nicht das Licht-Programm 00 löschen oder verschieben, dieses wird intern verwendet und ist wichtig für die Funktion des Multi-Moduls.

Bei der Modifizierung eines bereits vorhandenen Licht-Programms ist es übrigens nicht nötig, die Tabelle zu bearbeiten. Hier kann man einfach die Zeilen des Licht-Programms editieren, Kommandos entfernen oder weitere Kommandos hinzufügen.


Noch einige Worte zur Entstehung des Projekts: Es wurde zunächst ein Prototyp auf einer Lochrasterplatine mit der DIP-Version des ATmega88PA aufgebaut. Auf dieser Basis wurde ein großer Teil der Software auf dem Basteltisch entwickelt und die Schaltung optimiert. Nach einem gewissen Reifegrad der Hard- und Software wurde eine erste Platinenversion entwickelt, die dann auch endlich mitfliegen durfte. Diese war voll funktionsfähig, allerdings mussten noch einige Leiterbahnen optimiert werden. Also wurde eine weitere Version entwickelt und eine kleine Serie hergestellt. Ein gutes Jahr später verbreiteten sich Quadrocopter und damit auch diese standesgemäß beleuchtet werden können, entstand schließlich das Multi-Modul 2 mit zusätzlichem Treiber-IC. Auch hier waren 2 Versuche notwendig, um das optimale Platinenlayout zu erreichen.

Ursprünglich war geplant, die Programmiersprache C zu verwenden. Dies scheiterte aber daran, dass ich äußerst schnelle und kompakte Interrupt-Routinen brauchte, die zudem noch mit Register-Variablen arbeiten sollten. Dies mag durchaus mit C realisierbar sein, mir war es jedoch nicht gelungen (Inzwischen weiß ich, wie's geht, aber nun ist die Assembler-Version fertig). Also wurde doch wieder auf die bewährte Assembler-Sprache zurückgegriffen, was aber zu einer längeren Entwicklungszeit führte.

Leider traten im realen Einsatz einige Probleme auf und nach langer Suche wurde festgestellt, dass der Mikrocontroller beim Einschalten der Stromversorgung gelegentlich nicht sauber startete. Mit einem zusätzlichen 100nF Kondensator am Reset-Anschluss des Controllers trat das Problem nicht mehr auf, allerdings wollten wir eine Änderung des Layouts vermeiden und so wurde nach einer anderen Lösung gesucht. Eine Änderung der Brown-Out-Schwelle von 4,3V auf 2,7V brachte schließlich das gewünschte Ergebnis. Weiterhin hat die Praxis gezeigt, dass auch die Akku-Technik höchst unterschiedlich sein kann. So halten einige neue und sehr leistungsstarke Akkus die Spannung lange stabil und knicken dann kurz vor dem Ende recht schnell ein. So bleibt nach dem Auslösen des Alarms nur wenig Zeit für eine sichere Landung. Aus diesem Grund wurde die Einstellung der Spannungsschwellen für die Anzeige des Akku-Alarms mehrfach geändert und hat hoffentlich in der aktuellen Software-Version die optimalen Werte erreicht.

Inzwischen kommt das Multi-Modul bei uns in mehreren T-Rex-450-Modellen und Quadrocoptern zum Einsatz und arbeitet hier höchst zuverlässig.