Sensor + Controller: Gemischtes Doppel

Nutzung eines Hall-Sensors in Verbindung mit einem 8-bit-Controller

7. Februar 2011, 13:51 Uhr | Von Ralf Hickl
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 4

Abgleich der Takte und Ermittlung der Daten-Nibbles

Ähnlich wie bei LIN wird der Beginn eines Frames von einem Synchronisationsfeld angeführt. Bei SENT ist dies ein 168 µs langes Sync-Intervall. Die Dauer dieses Intervalls wird gemessen und daraus ein Korrekturfaktor ermittelt, mit dem alle weiteren Zeitintervalle der Daten-Nibbles skaliert und damit korrigiert werden.

Durch diesen kontinuierlichen Abgleich der Taktzyklen der Timer von Mikrocontroller und TLE4998S können im Sensor und auch im Mikrocontroller interne Ring- oder RC-Oszillatoren mit vergleichsweise großen Toleranzen verwendet werden.

Nach dem Sync-Intervall folgen acht Daten-Nibbles. Aus der gemessenen Dauer zwischen zwei negativen Flanken wird ein Tabellenindex für den Wert des Nibbles ermittelt:

 

dauer = ((u16)(168*dauer + (dauer_sync/2)))/((u16)dauer_sync) – 35;

 

Divisionen sind für Mikrocontroller rechenintensiv und damit zeitaufwendig. Ohne Hardware-Unterstützung auf dem Chip übersetzen die Com­piler Multiplikationen und Divisionen in Unterprogrammaufrufe entsprechender Bibliotheksroutinen. Hier bietet der STM8 den Vorteil, dass sein Kern sowohl über MUL- als auch DIVW-Befehle verfügt, wobei letzterer mit nur maximal 17 Zyklen zu Buche schlägt. Damit werden auch Divisoren akzeptabel, die keine Zweierpotenzen sind.

Falls nicht anders programmiert, entsprechen beim TLE4998S 3 µs einem LSB im Daten-Nibble. Da nicht jeder 8-bit-Mikrocontroller über eine Hardware-Divisionseinheit verfügt, kann die Look-up-Tabelle um den Faktor 3 gespreizt werden, um weitere Divisionen zu vermeiden:

 

uc8 TLookup[] = {0,0,0, 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7, 8,8,8, 9,9,9, 10,10,10, 11,11,11, 12,12,12, 13,13,13, 14,14,14, 15,15,15};

 

Die Variable dauer ist damit als Index für diese Tabelle mit 48 Einträgen geeignet. Das Datum eines Nibbles ergibt sich damit durch:

 

nibble[nibble_counter++] = *(TLookup+dauer);


  1. Nutzung eines Hall-Sensors in Verbindung mit einem 8-bit-Controller
  2. In-Circuit-Debugger mit USB-Schnittstelle
  3. SENT-Protokoll für hochauflösende Sensoren
  4. Auswahl eines Timers
  5. Abgleich der Takte und Ermittlung der Daten-Nibbles
  6. CRC, Datenübergabe und Frequenztoleranz

Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Rutronik Elektronische Bauelemente GmbH