Breitband   LambdaMechanische   und   elektronische   Messsysteme

Ansteuerung   des   CJ125:

Die Ansteuerung des CJ125 erfolgt über ein SPI-Interface. Die Werte für Ri und IP werden dagegen Analog ausgegeben und müssen digitalisiert werden. Zuerst stellt sich die Frage, was denn eigentlich alles über das SPI-Interface gesteuert werden muss bzw. was alles ausgelesen werden kann:

  • Aktivieren der Messung
  • Verstärkung von UA (= Proportionale Spannung zu IP)
  • Einstellen des Referenzpumpstroms
  • Ausgeben der Offsetspannungen zur Korrektur der Messergebnisse
  • Fehler Diagnose
  • Identifikation des Controllers

Zur Übersicht gibt es im Datenblatt folgendes Diagramm:

Dieses Diagramm zeigt die verschiedenen Register, die im CJ125 mittels SPI gelesen bzw. geschrieben werden können:

Die Beschriftung des IC ist wie bei vielen SMD-ICs etwas kryptisch. Bisher hatte ich zwei Varianten:

IDENT_REG (RD: 48H)

Wenn man das Register 0x48 (=Hexadezimal!) ausliest, bekommt man folgende Bits zurück (MSB first): 01100 XXX. Die ersten 5 Bits sind für jeden CJ120 oder CJ125 gleich, die letzten drei Bits sind je nach Version unterschiedlich (bei mir z.B. "011"). Mit diesem Register kann man z.B. überprüfen, ob die Kommunikation Fehlerfrei läuft.

INIT_REG1 (RD: 6CH / WR: 56H)

In diesem Register kann man folgende Einstellungen vornehmen:

PA: Pump current control
RA: Measurement current for Ri
LA: Pump current sense amplifier
VL: Pump current sense amplifier

Ist PA "0", so ist die Regelung des Pumpstroms aktiv und man erhält am Ausgang UA eine Spannung.
Ist RA "0", so befindet man sich im "Messmodus" für Ri , ist RA "1" so kann man am Ausgang UR die Offsetspannung messen (= die Spannung, die bei der optimalen Temperatur d. Sonde anliegt).
Ist LA "0", so ist der "Messmodus" für IP aktiviert, bei "1" wird die Offsetspannung, welche man von der Messspannung abziehen muss, angezeigt (bzw. an UA angelegt).
Ist VL "0", so beträgt die Verstärkung der Spannung an UA 8, bei "1" beträgt sie 17.

INIT_REG2 (RD: 7EH / WR: 5AH)

Das Bit "ENSCUN" ist für die Fehlerauswertung bzw. Identification am Pin "UN" verantwortlich ("1" = aktiviert). Die Bits PR3 bis PR0 sind für den Referenzpumpstrom verantwortlich. Die Bits können auch kombiniert werden und ein Gesamtreferenzstrom von 150µA eingestellt werden.

Werden die einzelnen Register-Bits gesetzt, so verändert sich die die Spannung an UR wie folgt (gemessen im Stand-Alone Modus und kalter Sonde, kein "Calibration-Mode"): Der Referenzpumpstrom wird für den Betrieb von LSU4.9 Sonden am CJ125 benötigt. Diese Sonden legen ohne den Referenzpumpstrom einen hohen Drift an den Tag, Werte von rund 20µA sollen genügen.

Eine schnelle Analyse mit Excel ergab folgende Näherungen für den Bereich zwischen 50µA und 150µA:

Potenziell: y = 45154x-2,299
Polynomisch: y = -8 * 10-6 x3 + 0,0029x2 - 0,3703x + 17,198

PR0:10µA
PR1:20µA
PR2:40µA
PR3:80µA

DIAG_REG (RD: 78H)

In diesem Register werden mögliche Fehler abgelegt und nach den auslesen des Registers gelöscht (ist der Fehler noch da, so wird er wieder ins Register geschrieben).
Die Fehler sind in vier Gruppen unterteilt: "Ext. Heater", "IA/IP", "UN" und "VM". Um eine Messung vornehmen zu könnn, müssen alle Bits in diesem Register auf "1" stehen.

Das   SPI-Interface

Wie müssen nun die Signale für das SPI-Signal genau aussehen? Diese Frage lässt sich ganz einfach mit dem Datenblatt beantworten:

Bevor die Übertragung beginnen kann, muss der /SS (Slave Select, Low aktiv) auf Low gezogen und nach der Übertragung wieder auf High gesetzt werden. Ein Datenbit wird bei der fallenden Flanke von SCK (Taktleitung) als Gültig erklärt. Eine Übertragung besteht aus 16Bits und die max. Datenrate liegt bei 2MBaud/s (das entspricht einem max. Takt von 2MHz auf SCK). Bei allen Übertragungen gilt: MSB first!

SPI-Lesevorgang

Man sieht hier deutlich, dass eine Adresse für den CJ125 eigentlich aus 4 Gruppen besteht:

CJ125 "Unteradresse" welche mit "01" beginnt (mit dieser Funktion können bis zu vier Slaves an einer /SS Leitung betrieben werden)
CJ125 "Kommando": Bei uns ist das die eigentliche Register Adresse
Parity: Wird zur Fehlererkennung genutzt
DC: "Don't Care"

Das Datenblatt liefert uns schon das fertige Adressbyte, man muss sich hier also um nichts kümmern.
Während der Übertragung des Adressbytes übermittelt der CJ125 auf seiner SO Leitung auch Daten, welche für uns aber uninteressant sind. Die mit der angeforderten Daten werden nach der Adresse mit dem SCK-Takt ausgegeben (man muss also noch 8 Takte auf der SCK-Leitung liefern). Welche Daten während dieser 8 Takte auf der SI-Leitung liegen, ist egal.
Ist die Adresse falsch, so geht die SO-Leitung in den Tristate Modus und die Empfangenen Daten sind Müll.

SPI-Schreibvorgang

Um Daten in die Register zu schreiben muss man so vorgehen wie beim Lesen, nur dass hier nach dem Adressbyte keine Daten hineingetaktet werden, sondern weiter auf der SI-Leitung an den CJ125 ausgegeben werden.
Ist der Befehl (sprich Adresse) richtig, so wird während dem eintakten der Daten auf der SO-Leitung "0H" ausgegeben.