Pfad: Home => AVR-Übersicht => Anwendungen => PCM-Decoder
Remote Controller AVR-Einchip-Prozessoren
AT90Sxxxx

von ATMEL in praktischen Beispielen.

Decoder für Fernsteuersignale

  1. Kurzfassung für Eilige
  2. Aufbau von Fernsteuersignalen
  3. Umwandlung von Fernsteuersignalen in eine analoge Stellgröße
  4. Erforderliche Hardware
  5. Programmaufbau

Kurzfassung für Eilige

Der Decoder wandelt pulslängenkodierte Fernsteuersignale am Eingang des AT90S2323-Prozessors (Port-Bit 0, Pin 5) in ein pulsweiten-moduliertes Signal am Ausgang (Port-Bit 1, Pin 6) um. Durch Filtern des pulsweiten-modulierten Ausgangssignals mit einem einfachen RC-Glied entsteht ein Analogsignal, dessen Höhe linear mit der Pulsdauer des Eingangssignales ansteigt. Das Analogsignal kann als Stellgröße für eine Rudermaschine dienen. Gehen falsche Eingangssignale (z.B. Störsignale) am Eingang ein oder bleibt das Signal aus, dann wird das Ausgangssignal auf einen vordefinierbaren Default-Wert gebracht. Am Port-Bit 2, Pin 7) kann zu Testzwecken, z.B. durch Anschließen einer LED, festgestellt werden, ob das Eingangssignal korrekt erkannt wird.
Die vorliegende Fassung des Programmes ist für Signale von 0,8 bis 2,2 ms aktiver Dauer und 25 ms Gesamtdauer eingestellt. Der Default-Wert wird schon beim ersten fehlerhaften Signal eingestellt. Alle Parameter des Programmes können den jeweiligen Bedürfnissen angepasst werden. Dazu sind nur die entsprechenden Zahlen im Quelltext zu ändern.
HTML-Format Quellcode-Format Flußdiagramm in GIF-Format Flußdigramm in PDF-Format
Schaltbild in PDF-Format Schaltbild in GIF-Format


Zum Anfang des Dokumentes

Aufbau von Fernsteuersignalen

Ein Fernsteuersignal muss eine analoge Größe (z.B. die Stellung eines Steuerknüppels) in ein digitales Signal verschlüsseln, das dann beim Empfänger wieder in das analoge Signal zurückgewandelt und mittels einer Rudermaschine ein anderes Gerät, z.B. ein Seitenruder, in die richtige Stellung dreht.
Dazu wird die analoge Stellung beim Absender in eine Spannung umgewandelt (z.B. durch ein Potentiometer) und diese in ein Rechtecksignal umgesetzt. Das Rechtecksignal variiert je nach Höhe der Spannung seine Zeitdauer. Ist die Spannung Null, so dauert das Signal genau 0,8 Millisekunden (ms). Ist die Spannung an der Vollaussteuerung, so dauert es 2,0 ms lang. Die Pulsdauer enthält also die Information über die Stellgröße, die Information ist der Pulsdauer "aufmoduliert". Allgemein nennt man solche Signale Puls-codierte Modulation oder PCM. Recht verschwenderisch ist die Zeit zwischen zwei solchen aufeinanderfolgenden Pulsen bemessen: Zwei Pulsanfänge sind immer genau 25 ms auseinander, so dass beim längsten Puls von 2,2 ms genau 22,8 ms lang Pause ist. Ein kontinuierlich anstehendes Fernsteuersignal hat deshalb die konstante Frequenz von 40 Hertz, also 40 Pulse pro Sekunde.
Das puls-codierte Signal, das entweder den Zustand Null (Pause) oder Eins (Puls) einnehmen kann, wird dem Sender zugeführt. Dieser Sender sendet entweder auf einer Frequenz, wenn gerade Pause ist, oder auf einer anderen Frequenz, wenn gerade Puls ist. Das PCM-Signal wird also im Sender in ein frequenzmoduliertes Signal mit den beiden Sendefrequenzen f0 (Null) und f0+fm (Puls) umgesetzt und als solches dann im Wechsel ausgesendet. Die beiden Frequenzen liegen dabei sehr nah zusammen, so dass im Empfänger beide empfangen und gleichzeitig weiterverarbeitet werden. Am Ende der Empfängs- und Hochfrequenz-Mimik im Empfänger unterscheidet dann doch eine bestimmte Filterstufe, Demodulator genannt, ob die empfangene Frequenz f0 oder f0+fm ist und gibt nach aussen ein entsprechendes digitales Signal zum Besten.


Zum Anfang des Dokumentes

Umwandlung in eine analoge Stellgröße

Damit kann natürlich noch keine Rudermaschine etwas anfangen, weil die Stellinformation ja in der Länge des immer noch digitalen Pulses steckt und die Rudermaschine ein analoges Stellsignal erwartet. Die Stufe dazwischen wäre also ein Puls-Code-Modulationssignal-zu-Analog-Stellsignal-Wandler oder vielleicht etwas kürzer ein PCM-Demodulator. Solche Wandler hat man früher in analoger Schaltungstechnik erbaut. Mehr oder weniger zuverlässig und mehr oder weniger aufwendig, was die Zahl der Bauteile betrifft. Diese Zeiten sind vorbei, heute verwendet man dazu einen ganzen Computer. Keinen Intel-PC, aber einen richtigen Computer mit Programmsteuerung, Ein- und Ausgangsleitungen, RAM-Speicher, einem nichtflüchtigen EEPROM-Speicher und vielem anderen mehr. Bloss halt keine Festplatte, aber das kommt später auch noch in das kleine achtpolige IC hinein.
So ein Kleinst-Kleinst-Rechner im achtpoliger IC-Fassung, AT90S2323 genannt, hat einen Eingang, an dem das Fernsteuersignal anliegt. Der mit einem Quarz oder einem Keramikschwinger getaktete Rechner braucht nun nur noch mitzählen, für welchen Zeitraum das Pulssignal anliegt. Dann ist rechnerintern klar, auf welche Größe die Rudermaschine eingestellt werden sollte. Die braucht aber die Information in einer anderen Form, nämlich analog. Damit wir uns den entsprechenden DA-Wandler sparen können, wird ein Ausgangspin dergestalt abwechselnd Null und Eins geschaltet, dass an dem Pin im Mittel die richtige analoge Spannung anliegen würde. Das Signal wird mittels eines Widerstandes auf einen Kondensator geleitet, der diese Mittelung vornimmt und ein wunderschönes analoges Signal abgibt. Dies deshalb, weil er mit dem ständigen Aufladen und Entladen nicht mitkommt und letztlich nur noch das Zeitverhältnis zwischen Nullen und Einsen anzeigt, das Pulsverhältnis.
Die beiden Vorgänge, das Ausmessen des Pulses am Eingang und das Takten des Ausganges im richtigen Pulsverhältnis, müssen sehr rasch und gleichmässig parallel erfolgen. Jede Verzögerung oder Unterbrechung ist zu vermeiden, deshalb besteht die ganze Programmierkunst ausschließlich darin, die entsprechenden Zählschleifen vom Timing her hinzukriegen. Jeder normale Rechner wäre damit überfordert, weil er ständig unterbrochen und durch irgendwelchen User-Unsinn wie Mausklicke aus dem Tritt kommt. Nicht so ein entsprechend nur mit diesen beiden Aufgaben programmierter Rechner, der sonst nichts anderes zeitlich koordinieren muss.

Zum Anfang des Dokumentes

Erforderliche Hardware

Das Schaltbild des Decoders (auch als PDF-Datei verfügbar) sieht so aufgeräumt aus wie ein Feinschmecker-Abendessen.

Schaltbild PCM2PWG

Der Quarz übernimmt die Zeitsteuerung des Rechners, die beiden Kondensatoren sorgen für das zuverlässige Anschwingen des internen Taktgenerators. An Pin 1 des Rechners wird durch eine Kombination von Widerstand und Kondensator ein zuverlässiges Reset-Signal für den Rechner erzeugt, so dass auch nach Spikes auf der Versorgungsleitung der ganze Rechner sein Programm mit Null beginnt und sich selbst in einem solchen üblen Fall von Einwirkung wieder fängt.
Das Eingangssignal wird über einen Widerstand von 1 k (hier nicht eingezeichnet) zugeführt, damit es bei Überspannung nicht gleich das IC zerschießen kann. Das Ausgangssignal geht über den bereits besprochenen Widerstand auf den Mittwertbildner-Kondensator. Der noch freie dritte Ein-/Ausgang ist über einen Widerstand mit einer Leuchtdiode verbunden, die im Fehlerfall (wie z.B. zu kurze oder zu lange Impulsdauer, mehrfaches Fehlen des Fernsteuersignals) anzeigt und nur für Testzwecke dient. Im echten Betrieb kann die Beschaltung dieses Ausganges entfallen.

Zum Anfang des Dokumentes

Programmaufbau, Software

Die gesamte Software baut auf zeitsensitiven Schleifen auf und verwendet keine Interrupts.
HTML-Format Quellcode-Format Flußdiagramm in GIF-Format Flußdigramm in PDF-Format
Die Dauer des Pulses wird im vorliegenden Fall mit 233 Einzelstufen zu je 6 µs Dauer ermittelt, die den Zeitraum von 0,8 bis 2 ms überdecken. Pulse, die geringfügig kürzer oder länger sind, werden ohne Fehleranzeige noch als korrekt eingeordnet. Pulse, die deutlich kürzer als 0,8 ms sind (>10% kürzer) oder deutlich länger als 2,2 ms sind, werden als fehlerhaft übergangen. Pausen, die deutlich kürzer als vorgeschrieben dauern oder das Ausbleiben des Signales werden als Fehler interpretiert. Nach einem mehrfachen Auftreten des Fehlers in nicht unterbrochener Folge über eine einstellbare Zahl von Perioden hinaus wird ein vorher definierter Default-Wert (z.B. Null oder im vorliegenden Fall die halbe Versorgungsspannung) eingestellt, so dass bei Signalfehlern schnell der sichere Wert eingestellt wird.
Das Impuls-/Pausen-Verhältnis am Ausgang ist mit (2,2 - 0,8) = 1,4 ms entsprechend 714 Hz getaktet. Lediglich bei bei Vollaussteuerung ist keine Frequenz messbar, da der Ausgang dauerhaft auf High-Pegel liegt. Die Auflösung des Verhältnisses beträgt ebenfalls 233 Schritte, so dass ein Fehler von max. 0,43% bei der Messung und bei der Analogwandlung eingehalten wird. Das dürfte auch für High-Precision-Anwendungen tolerabel sein.



Zum Anfang des Dokumentes

©2002 by http://www.avr-asm-tutorial.net