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

Letzte Bearbeitung: 02.03.2014

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.2012 | multimodul1-atmega88-v103.zip |
Software für das Multi-Modul 2 mit komplettem Quelltext in Assembler vom 29.02.2012 | multimodul2-atmega88-v103.zip |
Platinenlayout vom Multi-Modul 1 (Sprint-Layout 6.0, PDF und Gerber) vom 02.03.2014 | multimodul1-layout.zip |
Platinenlayout vom Multi-Modul 2 (Sprint-Layout 6.0, PDF und Gerber) vom 02.03.2014 | multimodul2-layout.zip |

Beschreibung | Allgemeine Informationen über das Multi-Modul |
Schaltungsvariante Multi-Modul 1 | Beschreibung der Schaltungsvariante des Multi-Modul 1 |
Schaltungsvariante Multi-Modul 2 | Beschreibung der Schaltungsvariante des Multi-Modul 2 |
Hardware Multi-Modul 1 | Bilder und Hinweise zum Aufbau des Multi-Modul 1 |
Hardware Multi-Modul 2 | Bilder und Hinweise zum Aufbau des Multi-Modul 2 |
Software | Beschreibung der Software |
Inbetriebnahme | Inbetriebnahme des Multi-Moduls |
Bedienung und Konfiguration | Bedienungs- und Konfigurationsanleitung für das Multi-Modul |
Sonstiges | Weitere Informationen |
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:
- Steuerung einer Beleuchtung über einen separaten Fernsteuerkanal in 2 Stufen: Stufe 1 schaltet die Beleuchtung ein (Positionslichter, Blitzlichter, Beacons) und Stufe 2 aktiviert zusätzlich das Landelicht.
- Steuerung eines Einziehfahrwerks über einen separaten Fernsteuerkanal mit einstellbarer Verzögerung von 2,5s bis 5,0s in 4 Stufen. Bei ausgefahrenem Fahrwerk wird außerdem automatisch das Landelicht eingeschaltet.
- 7 LED-Ausgänge für Positionslichter, Blitzlichter, Blinklichter und Beacons, jedem Ausgang kann eins von 17 Licht-Programmen zugeordnet werden.
- 1 LED-Ausgang für das Landelicht, dieses wird zur Simulation von Glühlampenlicht weich ein- und ausgeschaltet.
- In 15 Stufen einstellbare Spannungs-Überwachung für einen 3-Zellen-LiPo-Akku. Der Alarm kann durch Blinken der Beleuchtung und/oder durch Ausfahren des Fahrwerks signalisiert werden.
- Stromversorgung des Moduls wahlweise über die Spannung der Empfangsanlage oder den Antriebs-Akku.
- Zusätzlicher Alarm-Ausgang zum Anschluss weiterer Geräte.
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.
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:
- Variante 1 - Versorgung aus dem Antriebs-Akku: Diese Variante wird immer dann empfohlen, wenn der Empfänger und die Servos des Modells über BEC gespeist werden. Oft sind hier kaum noch Reserven vorhanden (z.B. beim Align-Regler RCE-BL35X vom T-Rex 450), so dass es hier günstiger ist, den zusätzlichen Strom für LEDs und Fahrwerk-Servo über eine separate Versorgung bereitzustellen. Bei dieser Variante wird über J1 die Spannung des Antriebs-Akkus mittels IC1 auf 5V stabilisiert und durch Einlegen der Brücke 1-2 an J2 zur Schaltung geführt.
- Variante 2 - Versorgung über das 5V-Bordnetz des Modells: Diese Variante kann genutzt werden, wenn der Empfänger und die Servos des Modells über eine eigene leistungsfähige Stromversorgung verfügen. Zur Aktivierung dieser Variante muss an J2 die Brücke 2-3 eingelegt werden. Damit wird die Spannung vom Empfänger über die Servokabel J3 und J5 an die Schaltung geführt. Bei dieser Variante kann der umrahmte Schaltungsteil mit IC1, C1 und C2 entfallen. Aber Vorsicht: Die Schaltung (insbesondere IC3) ist nur für Spannungen bis 5,5V geeignet, d.h. bei Bordspannungen von 6V darf diese Variante nicht verwendet werden!
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.
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:
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:
Variante | LED-Versorgung | J1 | J9 | J10 | Bemerkung |
---|---|---|---|---|---|
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.
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.
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.

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.

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

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.
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:
- Externer Interrupt 0 - Dieser reagiert auf Pegelwechsel am Anschluss PD2, also dem Kanaleingang für die Beleuchtung. Bei einem Wechsel von Low auf High wird der aktuelle Zählerstand vom Timer1 gespeichert. Bei einem Wechsel von High auf Low passiert das gleiche, zusätzlich wird noch ein Flag-Bit gesetzt, welches dem Hauptprogramm signalisiert, dass ein vollständiger Impuls erkannt wurde.
- Externer Interrupt 1 - Dieser reagiert auf Pegelwechsel am Anschluss PD3, also dem Kanaleingang für die Fahrwerksteuerung. Auch hier wird der jeweils aktuelle Zählerstand vom Timer1 bei einem Pegelwechsel gespeichert und das Flag gesetzt.
- Output Compare 1A - Dieser Interrupt wird beim Erreichen des End-Zählerstandes von Timer1 (19999) ausgelöst und erhöht einen 8-Bit-Zähler, mit dem später im Hauptprogramm die Anzahl der abgelaufenen 20ms-Zyklen ermittelt wird.
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.
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.
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.zip | aktuelle Software vom 29.02.2012 für das Multi-Modul 1 |
multimodul2-atmega88-v103.zip | aktuelle 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:

So sieht die Einstellung in PonyProg für den ATmega88PA des Multi-Moduls aus.
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:
Schalterstellung | Impulszeit | Impulsbereich des Multi-Moduls | Aktion |
---|---|---|---|
0 (-100%) | 1,0ms | 0,8ms - 1,35ms | Beleuchtung ausgeschaltet |
1 (0%) | 1,5ms | 1,35ms bis 1,65ms | Beleuchtung eingeschaltet (LED1-LED7) |
2 (+100%) | 2,0ms | 1,65ms bis 2,2ms | Beleuchtung 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.
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:
Bedienelement | Aktion |
---|---|
Beleuchtungsschalter in Stellung 0 | Die Beleuchtung wird komplett ausgeschaltet. |
Beleuchtungsschalter in Stellung 1 | Die Beleuchtung wird eingeschaltet. |
Beleuchtungsschalter in Stellung 2 | Die Beleuchtung und das Landelicht werden eingeschaltet. |
Fahrwerkschalter in Stellung 0 | Das Fahrwerk wird verzögert ausgefahren. |
Fahrwerkschalter in Stellung 1 | Das 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:
- Aus- und Einschalten der Stromversorgung
- 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 :-)
Einstellung | Beschreibung | Werte-Bereich | LED-Anzeige |
---|---|---|---|
1 | Licht-Programm für LED1 | 1 - 17 | LED1 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
2 | Licht-Programm für LED2 | 1 - 17 | LED2 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
3 | Licht-Programm für LED3 | 1 - 17 | LED3 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
4 | Licht-Programm für LED4 | 1 - 17 | LED4 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
5 | Licht-Programm für LED5 | 1 - 17 | LED5 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
6 | Licht-Programm für LED6 | 1 - 17 | LED6 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
7 | Licht-Programm für LED7 | 1 - 17 | LED7 leuchtet kurz auf, danach arbeiten die LEDs 1-7 mit ihrem aktuellen Programm. |
8 | Akku-Alarm-Programm | 1 - 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. |
9 | Spannungsschwelle für Akku-Alarm | 1 - 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. |
10 | Servo-Verzögerung | 1 - 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. |
11 | Servo-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).
Wert | Diagramm | Beschreibung |
---|---|---|
01 | ![]() | Dauerlicht (Voreinstellung bei der Inbetriebnahme) |
02 | ![]() | Einfach-Blitzlicht 1s |
03 | ![]() | Zweifach-Blitzlicht 1s |
04 | ![]() | Dreifach-Blitzlicht 1s |
05 | ![]() | Einfach-Blitzlicht 1,6s |
06 | ![]() | Zweifach-Blitzlicht 1,6s |
07 | ![]() | Dreifach-Blitzlicht 1,6s |
08 | ![]() | Einfach-Blitzlicht 1,6s, zeitversetzt zu Programm 05 |
09 | ![]() | Zweifach-Blitzlicht 1,6s, zeitversetzt zu Programm 06 |
10 | ![]() | Dreifach-Blitzlicht 1,6s, zeitversetzt zu Programm 07 |
11 | ![]() | Beacon 2,72s |
12 | ![]() | Beacon 3,72s |
13 | ![]() | Beacon 2,72s, zeitversetzt zu Programm 11 |
14 | ![]() | Beacon 3,72s, zeitversetzt zu Programm 12 |
15 | ![]() | Einfach-Blinklicht 1,3s |
16 | ![]() | Einfach-Blinklicht 1,7s |
17 | ![]() | Einfach-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:
Wert | Beleuchtung bei Alarm | Landelicht bei Alarm | Fahrwerk bei Alarm | Bemerkung |
---|---|---|---|---|
1 | normale Funktion | normale Funktion | normale Funktion | Voreinstellung bei der Inbetriebnahme |
2 | blinkt | normale Funktion | normale Funktion | |
3 | normale Funktion | blinkt | normale Funktion | |
4 | blinkt | blinkt | normale Funktion | |
5 | normale Funktion | normale Funktion | wird ausgefahren | |
6 | blinkt | normale Funktion | wird ausgefahren | |
7 | normale Funktion | blinkt | wird ausgefahren | |
8 | blinkt | blinkt | wird 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:
Wert | Spannungsschwelle (Software v1.01) | Spannungsschwelle (Software ab v1.02) | Bemerkung |
---|---|---|---|
1 | 10,40V | 11,00V | Voreinstellung bei der Inbetriebnahme |
2 | 10,34V | 10,89V | |
3 | 10,28V | 10,79V | |
4 | 10,22V | 10,68V | |
5 | 10,16V | 10,58V | |
6 | 10,10V | 10,47V | |
7 | 10,04V | 10,36V | |
8 | 9,98V | 10,26V | |
9 | 9,92V | 10,15V | |
10 | 9,86V | 10,05V | |
11 | 9,80V | 9,94V | |
12 | 9,74V | 9,83V | |
13 | 9,68V | 9,73V | |
14 | 9,62V | 9,62V | |
15 | 9,56V | 9,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:
Wert | Verzögerungszeit | Bemerkung |
---|---|---|
1 | 2,5s | Voreinstellung bei der Inbetriebnahme |
2 | 3,3s | |
3 | 4,0s | |
4 | 5,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.
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:
Name | Kommando Byte 1 | Kommando Byte 2 | Beschreibung |
---|---|---|---|
Licht ausschalten | 0 | 0 - 255 | Licht ausschalten und anschließend 20ms - 5,12s warten. |
Licht einschalten | 1 | 0 - 255 | Licht einschalten und anschließend 20ms - 5,12s warten. |
Licht ausblenden | 2 | 0 - 255 | Licht langsam ausblenden und anschließend 20ms - 5,12s warten. |
Licht einblenden | 3 | 0 - 255 | Licht langsam einblenden und anschließend 20ms - 5,12s warten. |
Ende | 255 | 255 | 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. | Kommando | Grafik | Beschreibung |
---|---|---|---|
1 | 1, 3 | ![]() |
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. | |||
2 | 0, 6 | ![]() |
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. | |||
3 | 1, 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. | |||
4 | 0, 38 | ![]() |
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. | |||
5 | 255, 255 | ![]() |
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.