Powermanagment-IC auf Abwegen Temperatur fernabfragen (Teil 1)

Teil 3

Applikationen mit einem einzigen Leistungsregler profitieren vom Monitoring durch ein Powermanagement-IC. Doch die meisten dieser ICs haben mehr als nur einen Kanal. In Anwendungen mit nur einem Leistungsregler gibt es daher brachliegende D/A- und A/D-Wandler, die sich anderweitig nutzen lassen.

von Nathan Enger, Senior Applications Engineer bei Linear Technology.

Statt die Kanäle eines Powermanagers ungenutzt zu verschwenden, können diese sowie ein Bit des Mikrocontrollercodes dazu benutzt werden, um die Temperatur aus der Ferne abzufragen. Jeder Kanal hat zwei 14-bit-A/D-Wandler, um die Spannung und den Strom zu messen und einen 8-bit-D/A-Wandler, der einen Bipolartransistor treiben kann, um eine Delta-UBE-Messung durchzuführen und der Mikrocontroller kann die gemessenen Spannungen dazu verwenden, die Temperatur zu berechnen. Die Kosten der dafür nötigen Komponenten liegen im Bereich von drei bis vier Cent.

Die Schaltung

Damit der LTC2970 einen Sensor zur Temperaturfernabfrage bekommt, schickt man zwei unterschiedliche Ströme (ILOW und IHIGH) durch den Transistor und misst UBE bei beiden Strömen (UBE,LOW und UBE,HIGH). Der Unterschied (∆UBE) ist eine direkte Funktion der Temperatur. Man verwendet Gleichung (1) um die Temperatur im Bipolartransistor (BJT) zu berechnen:

(1) T equals capital delta U subscript B E end subscript times fraction numerator q over denominator n times k end fraction times fraction numerator 1 over denominator I n open square brackets begin display style I subscript H I G H end subscript over I subscript L O W end subscript end style close square brackets end fraction

Der LTC2970 hat alles, was man benötigt, in einem seiner beiden Kanäle (Bild 1). Der IDAC-Ausgang treibt einen programmierbaren Strom zwischen 0 µA und 255 µA. Einer der A/D-Wandlereingänge kann  UBE über den BJT direkt messen. Der andere A/D-Wandlereingang misst durch Abtasten der Spannung über einem Widerstand den Strom. Diese Anordnung vermeidet mehrere traditionelle Probleme mit Halbleiter-Temperatursensoren. Das erste ist, zu wissen, wie groß die gemessene UBE-Spannung wegen des Spannungsabfalls in der Verdrahtung zwischen der Stromquelle und dem Transistor tatsächlich ist. Hier misst man UBE direkt am Transistoranschluss und nicht am Pin des D/A-Wandlerausgangs, was den Widerstand in der Leitung weniger wichtig macht (deshalb wird der interne Widerstand des Transistors die Messung etwas beeinflussen). Die zweite Schwierigkeit ist, das genaue Verhältnis der Ströme ILOW und IHIGH zu kennen. Da man die Spannung an einem Widerstand misst, der nicht von IDAC abhängt, hat man ein gutes Verständnis über das Verhältnis dieser Ströme. Man muss nicht wissen, wann der D/A-Wandler präzise Stromverhältnisse liefert und man muss ebenfalls den aktuellen Widerstandswert nicht kennen. Die Spannung über ihn ist eine reine Funktion des Stroms und das Verhältnis der beiden Spannungen ist damit gleich dem Verhältnis der beiden Ströme.

Programmierung

Der LTC2970 ist ein programmierbarer Baustein, er enthält Register, um den IDAC-Strom zu steuern und die Werte des A/D-Wandlers anzuzeigen. Die Temperaturberechnung muss aber extern über Software erfolgen. Eine einsatzfertige Plattform dafür ist Linduino, ein Ardino-Klon mit isolierter Stromversorgung, hergestellt von Linear Technology. Linduino kommuniziert mit dem LTC2970 über den I²C/SM-Bus und mit nur einigen Zeilen C-Code führt er die nötigen Temperaturberechnungen durch. Jedes gleichartige System kann mit dem LTC2970 über den I²C/SM-Bus sprechen, den C-Code ablaufen lassen und die Temperatur mit dieser Methode berechnen.

Bild 2 zeigt ein Flussdiagramm für den sehr einfachen Algorithmus zur Temperaturmessung. Die blaue Farbe zeigt I²C-Bus-Transaktionen an, rot meldet eine Verzögerung und grün zeigt eine Berechnung an. Nicht dargestellt sind Schritte, um die Temperaturwerte zu filtern. Das Filtern ist separat und wird als ein unabhängiger Punkt später in diesem Artikel behandelt.

Bild 3 zeigt einen Ausschnitt des Linduino-Codes. Die Zeilen sind farbcodiert, um ihre Funktion anzuzeigen, korrespondierend zum Flussdiagramm Bild 2. Die einfache Hauptaufgabe des Algorithmus ist es, zwei Ströme zu erzeugen, die daraus resultierenden Spannungen zu messen und anschließend die Gleichung zur Temperaturberechnung zu lösen.

Der LTC2970 verwendet einen A/D-Wandler mit einem Multiplexer-Frontend, um die Messungen an jedem der sieben Eingänge durchzuführen. Diese Eingänge werden in Round-Robin-Manier abgetastet, die Zeitspanne zwischen zwei aufeinander folgende Abtastungen eines Eingangs hängt davon ab, wie viele Eingänge für das Einschreiben in das ADC_MON-Register ausgewählt wurden. Wenn der Round-Robin-A/D-Wandler so programmiert ist, jeden Eingang abzutasten, wird jeder Eingang einmal alle 240 ms abgetastet. Der LTC2970 bietet eine »neue« Ein-Bit-Anzeige in jedem A/D-Wandler-Register, um anzuzeigen, dass die Daten noch nicht gelesen wurden. Jedes Mal, wenn der A/D-Wandler ein neues Wandlungsergebnis speichert, wird das »neue« Bit gesetzt und jedes Mal, wenn das Register gelesen wird, wird das Bit wieder gelöscht.