Eigentlich betreibe ich keinen Modellbau. Doch ich wurde gebeten, einige im Modellbau
benötigte Fernsteuer-Zusatzmodule mit AVR-Mikrocontrollern zu entwickeln, bzw. die
Programme dafür zu schreiben.
Spannungs- und Impulsüberwachung für Modellbau mit Tiny15
Sinn und Zweck dieses Moduls ist die Überwachung der Akkuspannung und der Übertragungsqualität der
Funkverbindung eines Modells mit Verbrennungsmotor. Es sollte folgende Merkmale haben:
Speisung aus dem Empfängerakku mit 4,8V oder 6V.
Überprüfung der Kanalimpulse und Anzeige der Anzahl der aufgetretenen Impulsfehler.
Wertung des Impulsausfalls als mehrere Fehler.
Anzeige des größten bisher aufgetretenen Spannungseinbruchs.
Aktivieren einer "Not-Aus"-Schaltung über einen Thyristor, die den Antrieb auf mechanische Art stoppt.
Anzeige der Fehler auch nach Auslösen des Not-Aus.
Geringer Materialaufwand
Hardware
Die Schaltung wurde nach einem verbalen Vorschlag meinerseits von einem Freund erstellt, der auch den
Bau der Hardware übernommen hat.
Der Tiny15L wird mit 3,3V betrieben, die vom Spannungsregler bereitgestellt werden. Diese 3,3V sind
auch die Referenz für den ADC, der die per Z-Diode um 3V abgesenkte Akkuspannung misst. Der Kanalimpuls
wird an den INT0-Eingang des Tiny15L gelegt, was die Messung der Impulsbreite und des Impulsabstandes
erleichtert. Zur Anzeige der ermittelten Werte dienen die LEDs an Pin 5 und 6 des Tiny15L. An Pin 3 des
Tiny15L wird der Thyristor angeschlossen.
Die Fotos zeigen die Platine, mit der die ersten Tests beim Entwickeln der Software gemacht wurden.
Beim finalen Modul werden superhelle LEDs in verschiedenen Farben eingesetzt, die erst noch beschafft
werden müssen. Es wurde bewusst ein Tiny15L im DIL-Gehäuse gewählt, um die ISP-Anschlüsse zu sparen.
Zum Programmupdate wird die "Brennzange" verwendet, ein Adapter, den man von oben auf den IC aufsteckt.
Somit braucht der DIL-AVR auch nicht mehr Platz als ein SMD-AVR mit zusätzlichem ISP-Anschluss.
Software
Das Programm im Tiny15 wurde in Assembler erstellt und erledigt folgende Aufgaben:
Direkt nach dem Einschalten der Betriebsspannung eine (im Kopf des Quelltextes bis 30s einstellbare) Zeit
(5s?) warten, damit sich das System stabilisieren kann.
Messung des Kanalimpulsabstandes. Wird der gültige Bereich (einstellbar im Kopf des Quelltextes) verlassen,
so wird der Impulsfehlerzähler erhöht. Fällt der Kanalimpuls ganz aus, so wird der Impulsfehlerzähler
etwa alle 164ms erhöht.
Messung der Kanalimpulsbreite. Wird der gültige Bereich (einstellbar im Kopf des Quelltextes) verlassen,
so wird der Impulsfehlerzähler erhöht.
Anzeige des Impulsfehlerzählerstandes durch eine blinkende LED. Einmaliges Aufblinken alle etwa 6s
signalisiert, dass alles in Ordnung ist. Jedes weitere Blinken zeigt die Anzahl der Fehler an. Ein
Anzeigezyklus kann maximal 15 Fehler anzeigen.
Messung der Akku-Spannung alle 328ms. Dabei wird die gemessene Spannung (0,9V...3,3V am ADC entspricht
3,9V...6,3V am Akku) mit Hilfe einer Tabelle in "Fehlerwerte" umgewandelt. Dabei entspricht 0 Fehler dem
vollen Akku und 15 Fehler einem recht verbrauchtem Akku.
Vergleich dieser "Unterspannungsfehler" mit denen der letzten Messung und Übernehmen des neuen Wertes,
falls er "schlechter" als der letzte Wert ist. Damit ist immer der schlechteste Wert gültig, der seit
dem Einschalten aufgetreten ist, auch wenn sich der Akku inzwischen wieder erholt haben sollte.
Anzeige des Unterspannungsfehlerwertes als Blinklicht mit der zweiten Blink-LED. Auch hierbei bedeutet
einmaliges Blinken pro Zyklus, dass alles in Ordnung ist. Je öfter die LED pro Zyklus blinkt, desto
niedriger ist die Akkuspannung gesunken.
Überprüfen der Fehlerwerte alle 164ms und Auslösen des NOT-Aus, falls ein Errorwert das zulässige Limit
übersteigt. Die Auslöseschwelle lässt sich im Kopf des Quelltextes für beide Fehlerarten getrennt einstellen.
Anzeigen der Fehlerwerte auch nach dem Auslösen des Not-Aus. Weitere auftretende Fehler werden
weiterhin gezählt, können aber nicht mehr angezeigt werden, wenn ihre Zahl 15 überschreitet.
Die Benutzung (aus Sicht des Endanwenders)
Das Modul ist dem Lenkservo (Ruderservo) parallel zu schalten. Es benötigt also GND (Masse), Plus vom
Akku und den Kanalimpuls. Das Modul ist so in das Modell einzubauen, dass die LEDs während des Betriebes
vom Bediener gesehen werden können.
Einige Sekunden nach dem Einschalten wird das Modul "scharf" und beginnt mit der Überwachung von Akkuspannung,
Impulsabstand und Impulsbreite. Zwei der LEDs blitzen nun im Abstand von etwa 6s einmal kurz auf. Dies
signalisiert Betriebsbereitschaft und Null Fehler.
Steigt die Fehleranzahl der Impulsüberwachung, so blinkt die Impuls-LED mehrmals je Zyklus, und zwar einmal
zur Anzeige der Betriebsbereitschaft und so oft, wie die Anzahl der Fehler beträgt. Fünfmaliges Blinken
bedeutet also 4 Fehler.
Bricht die Akku-Spannung zusammen, so blinkt die Akku-LED mehrmals auf, einmal als Betriebsanzeige,
gefolgt von dem "Grad des Spannungseinbruchs". Je öfter die Akku-LED blinkt, um so schlechter ist der
Ladezustand des Akkus. Sollte sich der Akku wieder etwas erholen wird trotzdem sein schlechtester Zustand
angezeigt.
Wird die zulässige Anzahl der Impulsfehler oder die zulässige Akku-Unterspannung erreicht, so wird
der Not-Aus-Thyristor gezündet, der das Modell auf elektromechanischem Weg außer Betrieb setzt.
Danach werden die Fehler weiterhin angezeigt, aber auch neue Fehler erfasst.
Das Modul kann für 4,8V-Akkus und für 6V-Akkus verwendet werden. Eine Spannung über 6,3V kann das Modul
beschädigen.
Die Parametrierung (aus Sicht Desjenigen, der die Hardware baut und den AVR brennt)
Folgende Parameter lassen sich im Quelltext einstellen:
.equ scharf=5
Wartezeit vom Einschalten bis zum "scharf sein" in Sekunden (max 30). Diese
Zeit ist erforderlich, damit die Fehler erst erfasst werden, wenn stabile Verhältnisse eingetreten sind.
.equ ibmin=70
Minimal erlaubte Impulsbreite in Schritten von 10µs. 70 entspricht also 0,7ms.
.equ ibmax=230
Maximal erlaubte Impulsbreite in Schritten von 10µs. 230 entspricht also 2,3ms.
.equ iamin=25
Minimal erlaubter Impulsabstand in Schritten von 0,64ms. 25 entspricht demnach 16ms.
.equ iamax=38
Maximal erlaubter Impulsabstand in Schritten von 0,64ms. 38 entspricht demnach 24,3ms.
.equ maxierr=12
Anzahl Impuls-Errors für Not-Aus. Nach Überschreiten dieser Fehleranzahl wird Not-Aus ausgelöst.
.equ maxuerr=8
Anzahl Unterspannungs-Errors für Not-Aus. Nach Überschreiten dieses Wertes wird NOT-Aus ausgelöst.
Das Programm geht davon aus, dass die Spannung am AVR 3,3V beträgt und die Messspannung am ADC-Eingang
3V weniger als die Akkuspannung beträgt. Dies ist auch bei den ersten drei Platinen der Fall. Sollte
dies bei späteren Nachbauten aufgrund von Bauteiltoleranzen nicht der Fall sein, so ist die Tabelle
am Ende des Quelltextes anzupassen.
Diese Tabelle enthält für jeden der 256 möglichen Spannungs-Messwerte den "Fehlerwert", der den
Entladezustand darstellt.
Um zu ermitteln welche Tabellenposition welcher Akkuspannung entspricht, geht man so vor:
Erstellen einer Liste, in der den Spannungswerten des Akkus "Fehlerwerte" zugewiesen werden. Die "Fehlerwerte
verkörpern die Blinkanzahl der Anzeige-LED und können der Entladekennlinie des verwendeten Akkus angepasst werden.
Anlegen und Messen der Akkuspannung (regelbares Netzteil) von 6,2V abwärts. Nennen wir sie Ua.
Messen der Ausgangsspannung des Spannungsreglers, die am AVR anliegt und als
Referenzspannung des ADC genutzt wird. Nennen wir sie Uref.
Leider ist der Spannungsabfall an der Z-Diode nicht im gesamten Spannungsbereich konstant, somit fällt das
Errechnen der ADC-Mess-Spannung (Um = Ua - Uz) aus und macht das Messen der Spannung am ADC erforderlich...
Messen der ADC-Mess-Spannung am Pin 2 des AVRs. Nennen wir sie Um.
Errechnen des ADC-Wertes, nennen wir ihn Index (Index der Tabelle, 0...255):
Index(Ua) = (256 / Uref * Um) -1
An die so ermittelte Position der Tabelle wird der zur Spannung Ua gehörende Fehlerwert eingetragen.
Zwischenwerte zwischen den einzelnen errechneten Positionen können dann "über den Daumen" interpoliert
werden.
Bei geschickter Wahl der Grenze zwischen 6V-Akku-Bereich und 4,8V-Akku-Bereich können die Kennlinien für beide
Akkuspannung eingetragen werden.
Dieses Programm unterliegt den allgemeinen Copyright-Regeln. Alle Rechte liegen beim Autor. Gewerbliche Nutzung des Programms bedarf einer schriftlichen Genehmigung des Autors. Nachbau dieses Schaltmoduls unter
Nutzung dieses Programms für private Zwecke (Eigenbedarf) ist bei Einzelstücken erlaubt.