Der LIN-Bus – interessant auch für den industriellen Einsatz Robust und kostengünstig

Protokollabwicklung in den Slaves

Zuerst eine Beschreibung der von der Anzahl her wichtigeren Slaves (Bild 3), bei denen drei Phasen zu unterscheiden sind:

  1. Erkennung der Sync-Bedingung, Ermittlung der Baudrate und Zeitüberwachung des Busses,
  2. Empfang von Daten,
  3. Übertragung von Daten.

Für die Erkennung der Sync-Bedingung, die Ermittlung der Baudrate und die Busüberwachung werden ein 16-bit-Timer, ein GPIO-Interrupt (General Purpose I/O) und die „Capture“-Fähigkeit des Timers eingesetzt. Als Hilfs-Hardware ist ein digitaler Inverter erforderlich.

Jeder Pin des Bausteins kann bei Veränderung des Zustandes gegenüber dem letzten gelesenen Zustand einen Interrupt erzeugen, sowohl bei steigender als auch bei fallender Flanke. Der 16-bit-Timer arbeitet mit einer Frequenz von 8 MHz. Er bietet eine Capture-Funktion, die über eine steigende Flanke am Steuereingang ausgelöst wird. Die Capture-Funktion wird verwendet, um präzise Zeitmessungen ohne schnelle Software-Reaktionen zu ermöglichen. Da das Triggersignal – der RX-Pin – aber unterschiedliche Flanken zu den interessierenden Zeitpunkten aufweist, ist der digitale Inverter erforderlich.

So wird im Ruhezustand des Busses der RX-Pin-GPIO-Interrupt auf fallende Flanke programmiert, das invertierte RX-Signal aber als Trigger für die Capture-Funktion des Timers verwendet. Für die Erkennung des „End_of_Sync“-Signals wird der Interrupt dagegen auf steigende Flanke programmiert und das Signal des RX-Pins direkt als Trigger für die Capture-Funktion verwendet. Die Bestimmung der Baudrate erfolgt durch Zeitmessung am Sync-Feld, wobei vier Bitzeiten gemessen und dann durch 4 geteilt werden, um die Messgenauigkeit zu erhöhen.

Nur wenn alle Zeitbedingungen eingehalten sind und eine gültige Baudrate ermittelt wurde, geht der Slave in den Übertragungsmodus über und empfängt das ID-Byte. Dazu wird umkonfiguriert: Ein 8-bit-Timer dient zur Baudratenerzeugung, ein digitaler Block, und zwar ein Kommunikationsblock, als Empfänger. Zur Überwachung der Time-out-Bedingungen wird ein zweiter 8-bit-Timer zusammen mit einem Software-Timer eingesetzt. Dies soll Ressourcen schonen und ist beim Empfang auch nicht kritisch, da die Anforderungen an die Genauigkeit der Zeitmessung nicht so hoch sind.

Je nach Art des ID-Feldes empfängt der Slave ein Response-Feld oder sendet eines. Wenn der Slave empfängt, sind keine Änderungen erforderlich, wenn er aber senden soll, muss umkonfiguriert werden.

Die Baudratenerzeugung erfolgt wie im Empfangsfall, der Kommunikationsblock wird zum Sender (Transmitter) umkonfiguriert. Auch der zweite 8-bit-Timer wird weiter verwendet, nun aber zur Erkennung von Bitfehlern. Das LIN-Bus-Protokoll schreibt nämlich vor, dass während des Sendevorganges Bit für Bit überprüft werden muss, d.h., es muss für jedes gesendete Bit überprüft werden, ob der LIN-Bus dieses Bit auch tatsächlich überträgt. Dazu erzeugt der zweite Timer in der Mitte jeder Bit-Zelle einen Interrupt, und es wird geprüft, ob RX- und TX-Pin identisch sind.

Ließe sich das PSoC nicht dynamisch konfigurieren, dann wären für die oben beschriebenen Aufgaben folgende Ressourcen erforderlich:

  • zwei digitale Basisblöcke für einen 16-bit-Timer,
  • ein digitaler Basisblock für einen Inverter,
  • ein Basisblock für den Baudratengenerator,
  • ein Kommunikationsblock für den Empfänger,
  • ein Basisblock für die Zeitüberwachung,
  • ein Kommunikationsblock für den Sender,
  • ein Basisblock für die Erkennung von Bitfehlern.

Es wären also insgesamt alle acht digitalen Blöcke des Bausteins erforderlich; dank der dynamischen Rekonfigurierbarkeit sind es allerdings nur drei. Für die eigentliche Applikation stehen also fünf digitale und alle zwölf analogen Blöcke zur Verfügung.

Implementierung eines LIN-Bus-Masters

Die Implementierung des LIN-Bus-Masters (Bild 4) bereitet nun keine Schwierigkeiten mehr. Wichtigster Unterschied zur Implementierung der Slaves sind die höheren Anforderungen an die Präzision der Zeitbasis. Beim CY8C26xxx kann dies durch den Einsatz eines 32-kHz-Quarzes erreicht werden.

Für die Synchronisationsphase werden auch beim Master drei digitale Blöcke benötigt:

  • ein 8-bit-Zähler erzeugt die Baudrate,
  • ein 8-bit-Zähler, dessen Eingangssignal die Baudrate ist, erzeugt die Break-Bedingung nach 13 Bitzeiten,
  • ein weiterer 8-bit-Zähler, ebenfalls mit der Baudrate getaktet, erzeugt Interrupts zur Überwachung der Bitfehler, wie es schon beim Slave beschrieben wurde.

Übertragung und Empfang von Daten erfolgen wie beim Slave per 8-bit-Baudratengenerator, Sender oder Empfänger sowie 8-bit-Zähler für die Bitfehlererkennung oder die Überwachung der Buszeiten.

Alle Funktionen von Master und Slave werden in den hier vorgestellten Implementierungen in Hardware ausgeführt und über Interrupts der Software signalisiert. Dadurch sind Echtzeit-Anwendungen ohne weiteres möglich. Die Belastung der CPU ist denkbar gering und liegt zwischen den Übertragungen von Daten bei Null, bei Übertragungen mit 19 200 Baud unter 10 % der verfügbaren CPU-Leistung, bei niedrigeren Baudraten entsprechend niedriger.

Beispiel: Empfänger für Infrarotübertragungen

Als Beispielapplikation bietet sich ein Empfänger für Infrarotübertragungen in seinen Grundzügen an (Bild 5). IR-Kommunikation, wie sie etwa auch in den Fernbedienungen von Fernsehgeräten und HiFi-Anlagen verwendet wird, basiert auf der Amplitudenmodulation einer Trägerwelle, konkreter: Um eine „1“ zu übertragen, wird der Träger eingeschaltet, für eine „0“ ausgeschaltet. Die Frequenz der Trägerwelle kann in einem Bereich von etwa 30 bis 60 kHz liegen. Durch die Verwendung der Trägerwelle wird die Störsicherheit gegen Umgebungslicht wesentlich verbessert.

Der Empfänger bedient sich einer Fotodiode, um das IR-Signal in ein elektrisches Signal umzuwandeln. Die Diode wird so beschaltet, dass der Pegel des elektrischen Signals zwischen 0 und 5 V symmetrisch zu einem Bezugspegel des C8C26xxx liegt (AGND). Um das digitale Signal zu rekonstruieren, muss das Fotodiodensignal gleichgerichtet und mit einem Tiefpassfilter geglättet werden.

Wie bei der Vorstellung der FPAAs und PSoCs in [1, 2] erwähnt, gehören Tiefpassfilter zur Standardausstattung dieser Bausteine, Gleichrichter jedoch nicht. Die Idee, auch ohne Gleichrichter ein Signal gleichzurichten, ist ganz einfach. Man verstärkt das Signal mit einem Operationsverstärker und wählt dessen Verstärkungsfaktor als +1, wenn das Signal positiv ist und als –1 wenn das Signal negativ ist. Dadurch entsteht ein pulsierender Gleichstrom, der dann mit dem Tiefpassfilter geglättet werden kann.

[1]Mackensen, E.; Kuntz, W.: Einfacher Zugang zur Analogwelt – Teil 1. Elektronik 2003, H. 14, S. 68ff.
[2]Mackensen, E.; Kuntz, W.: Einfacher Zugang zur Analogwelt – Teil 2. Elektronik 2003, H. 15, S. 50ff.
[3]Homepage des LIN-Bus-Konsortiums: www.lin-subbus.org, LIN Bus Specification Package 1.3.
[4]Homepage von Cypress Microsystems: www.cypressmicro.com: Application Notes AN2045, AN2044.

Dr. Klaus Diebenbusch betreibt ein Ingenieurbüro mit den Hauptarbeitsgebieten Embedded Systems und Vernetzung industrieller Applikationen. Der gebürtige Westfale studierte Physik in Köln und Regensburg mit dem Schwerpunkt Festkörpertheorie. Nach Tätigkeiten an der Universität Düsseldorf, der Fraunhofer-Gesellschaft in Karlsruhe und in der Applikation bei Intel in München folgten selbstständige Arbeiten auf den Gebieten in-dustrieller Feldbusse, Grafik-anwendungen für die Prozessautomatisierung und ASIC-Entwicklung.
E-Mail: Klaus.Diebenbusch@t-online.de