BAUELEMENTE Einfache Spannungsmessung mit dem Mikrocontroller MSP430 LUTZ BIERL Obwohl das Universal Timer/Port Modul der Mikrocontroller-Familie MSP430 von Texas Instruments eigentlich nur für das Messen resistiver Grössen gedacht ist, können mit dem vorgestellten Meßprinzip hochgenaue - allerdings relativ langsame – Spannungs- und Strommessungen realisiert werden. Erklärt werden die beiden Meßprinzipien (Entladeund Lademethode) und die Spannungs- und Strommessung gezeigt. Ferner werden verschiedene Anwendungen - wie die Messung von zwei Spannungsquellen, Brückenschaltungen und R-2R-Schaltungen – erklärt. Zu allen gezeigten Beispielen sind die Berechnungsgleichungen angegeben. Die Spannungsmessungen mit dem Universal Timer/Port Modul (Bild 1) werden als erstes erklärt. Diese Lösungen haben den geringsten Hardwareaufwand. Die Meßmethode liefert ein sehr präzises Ergebnis, falls eine ZweiPunkt-Kalibration mit zwei Spannungen jeweils an den Grenzen des Meßbereiches durchgeführt wird. Eine realisierte Applikation lieferte die folgenden Ergebnisse: nungsbereiches ist mit dem Universal Timer/Port Modul der MSP430-Familie möglich: Normalerweise ist ein zweiter Schaltkreis (AD-Wandler) für diesen Zweck notwendig. Die Funktion der Schaltung wird mit der Schaltung (Bild 2) ist erklärt. (CPON, TPD.6, Adresse 04Eh) wird der Anschlußpin von LCD-Betrieb auf die Komparatorfunktion umgeschaltet. Bild 2 zeigt einen Spannungsmeßkreis, mit zwei verschiedenen Eingangsstufen für die Eingangsspannung Vmess. Relativ niederohmige Span- e Genauigkeit zwischen +8 V und +16 V für eine 12 V Akkumulatoren-Steuerung besser als ±10-3 (±0,1%); ein Zwei-Punkt Abgleich wurde verwendet. e Temperaturgang zwischen -25 °C und +25 °C besser als 50 ppm/°C Universal Timer/Port Modul Das Universal Timer/Port Modul ist eigentlich für das Messen resistiver Sensoren – wie zum Beispiel Temperatursensoren – gedacht. Es besteht aus zwei voneinander unabhängigen Teilen, die bei der Messung von Widerständen oder Spannungen zusammenarbeiten: e Zähler mit Zählersteuerung: Zwei 8-bitZähler, die auch in Reihe zu einem 16-bitZähler geschaltet werden können. Dazu gehören der Kontrollteil und je ein Komparatoreingang Ixx und ein Schmitt-TriggerEingang CIN e Ein-/Ausgabe Port: Fünf Ausgänge (TP.0... TP.4), die hochohmig geschaltet werden können und ein Ein-/Ausgabe-Pin TP.5 Der Komparatoreingang Ixx, der für die Spannungsmessung normalerweise verwendet wird, hat eine Umschaltschwelle VCP von nominal 0,25xVcc mit engen Toleranzen. Die Umschaltschwelle VCP selbst ist temperaturunabhängig. Der Komparator benötigt ungefähr 300 µA Strom. Er sollte also nur eingeschaltet sein, wenn er verwendet wird. Die Messung eines eingeschränkten Span- 24 http://e-industrie.huethig.de Bild 1: Blockschema des Universal Timer/Port Moduls Für die Spannungsmessung wird bei der MSP430x3xx-Familie nicht der Analogeingang CIN – ein Eingang mit Schmitt-TriggerCharakteristik – verwendet, sondern der Komparatoreingang Ixx mit seiner gut definierten Eingangsschwelle von 0,25 x Vcc. Der Komparatoreingang Ixx hat verschiedene Namen bei den verschiedenen MSP430-Familienmitgliedern, da er normalerweise den Anschlußpin der LCD-Selektleitung mit der höchsten Nummer mitverwendet: e MSP430x31x: I27 (S27) e MSP430x32x: I20 (S20) e MSP430x33x: CMPI (S29) Mit einem Kontrollbit im Timer/Port Modul nungsquellen werden direkt an den Eingang Vmess0 angeschlossen. Die Eingangsimpedanz der Wandlerschaltung ist in der Größenordnung Megaohm (siehe Beispiel in Bild 4). Sehr hochohmige Spannungsquellen werden an den Impedanzwandlereingang Vmess1 angeschlossen. Die Eingangsimpedanz ist in der Größenordnung Gigaohm. Es ist immer nur eine der beiden Eingangsstufen in der Schaltung von Bild 2 möglich. Falls mehrere Eingangsspannungen gemessen werden sollen, ist eine der Schaltungen, die später gezeigt sind, zu verwenden. Der Spannungsbereich für die Spannung Vin (gesehen am Eingang Ixx), der mit der Schaltung aus Bild 2 (Entladeschaltung) gemessen © elektronik industrie 2 – 1999 BAUELEMENTE werden kann, ist auf den folgenden Bereich beschränkt: Umrechnung dieser Zeiten tx in die gemessenen Zählimpulse nx geschieht durch die Formel: [1] Das bedeutet bei einer Versorgungsspannung Vcc von +5 V, Spannungen zwischen 0,26 x 5 V = 1,3 V und +5 V gemessen werden können. Mit dem Spannungsteiler, bestehend aus den Widerständen R1 und R2, ergibt sich ein nominaler Eingangsspannungsbereich für Vmess0 von: wobei fMCLK die CPU-Frequenz MCLK des MSP430 ist. Die Spannung Vmess wird aus den beiden gemessenen Zeiten tmess und tvcc mit der folgenden Formel berechnet: [2] [3] Die Sequenz für die Messung einer Spannung Vmess ist wie folgt: Die Nummern der Folge entsprechen den Nummern der Umwandlungs-Stati in Bild 3. Die Software ist im MSP430 Application Report enthalten. wobei: Vmess Vcc Die zu messende Eingangsspannung [V] Versorgungsspannung des MSP430 (als Referenz benutzt) [V] Spannungsteilerwiderstände am Eingang Ixx [W] Entladezeit der untersetzten Vmess bis zur Schwelle VCP [s] Entladezeit von Vcc bis zur Schwelle VCP [s] Zeitkonstante des Entladekreises (τ ≈ R4 x Cm) [s] Schwellenspannung des Kompara- 1. Der Ausgang TP.3 ist hochohmig geschalR1,R2 tet. Dadurch lädt sich der Meßkondensator Cm während der Zeit zwischen zwei Spantmess nungsmessungen (tauflade) auf die untersetzte, zu messende Spannung Vmess auf. tvcc 2. Die Spannungsmessung beginnt: TP.3 wird auf 0 V geschaltet und entlädt dadurch τ Cm. Zugleich wird die Zeitmessung der Zeit tmess mit dem als 16-bit-Zähler geschalteVCP ten Universal Timer/ Port gestartet. Beim Erreichen der unteren Spannungsschwelle VCP wird die Zeitmessung automatisch gestoppt. 3. Die gemessene Zeit tmess bis zum Erreichen der Spannung VCP wird gespeichert 4. TP.3 wird auf Vcc geschaltet und lädt Bild 2: Spannungsmessung mit dem Universal Timer/Port Modul dadurch den Meßkondensator Cm bis auf die Speisespannung Vcc auf. Die Zeit tcharge beträgt toreinganges Ixx [V] 5τ...7τ (τ ≈ R4 x Cm) je nach gewünschter tconv Zeit zwischen zwei vollständigen Genauigkeit. Spannungsmessungen [s] 5. Die Referenzmessung beginnt: TP.3 wird Um einen konstanten Wert für τ zu erhalten, auf 0 V geschaltet und entlädt dadurch ist ein teurer, hochstabiler Kondensator Cm Cm. Die Zeitmessung für tvcc wird ebenfalls notwendig. Um diesen Kondensator zu vergestartet. Beim Erreichen der unteren Spannungsschwelle VCP wird die Zeitmessung automatisch gestoppt. 6. Die gemessene Zeit tvcc wird gespeichert. In allen folgenden Formeln erscheinen nur gemessene Zeiten. Die 26 http://e-industrie.huethig.de © Bild 3: Abschnitte der Spannungsmessung (Entlademethode) © elektronik industrie 2 – 1999 BAUELEMENTE meiden, wird der Wert τ der Gleichung (3) substituiert. Aus der Gleichung (4) für die Kondensatorentladung [4] wird τ errechnet: [5] Eingesetzt in Gleichung (3) führt das zu: [6] Mit der Gleichung (6) wird Vmess berechnet. Die Gleichung (6) wird auch im Softwarebeispiel (rechts) verwendet. Bei dem Kondensator Cm ist für die Spannungsmessung – nach der Gleichung (6) – nur wichtig, daß er einen konstanten oder aber sehr hohen Isolationswiderstand besitzt: Der Isolationswiderstand des Kondensators Cm liegt parallel zum Spannungsteilerwiderstand R2 und ändert daher das Untersetzungsverhältnis des Spannungsteilers falls er sich – z. B durch die Temperatur - ändert. Die obige Formel zeigt die Abhängigkeit der Spannungsmessung von der Speisespannung Vcc – die ja die Referenz darstellt, von der Schwellenspannung VCP, der Genauigkeit der Widerstände R1 und R2 und der Temperaturdrift dieser Werte. Um ohne Abgleich mit der Meßgenauigkeit in den Bereich von ±1% für Vmess zu kommen, sind die folgenden Maßnahmen notwendig: e Stabile Versorgungsspannung Vcc: Sie muß innerhalb von ±25 mV für den gewünschten Temperaturbereich sein. Der tatsächliche Wert von Vcc spielt keine Rolle, falls Kalibration benutzt wird. e Ixx als Komparatoreingang: Die relativ gut definierte Schwelle VCP (0,25 x Vcc) ermöglicht bessere Resultate als der normale Schmitt-Trigger-Eingang CIN mit seinen großen Toleranzwerten für die Umschaltschwellen e Temperaturdrift der Widerstände maximal ±50ppm/°C e Ausreichende Aufladezeiten für den Meßkondensator Cm e Für eine Meßgenauigkeit von einem Prozent sind ungefähr 5τ notwendig (e5 = 148,41) e Für eine Meßgenauigkeit von einem Promille sind 7τ notwendig (e7 = 1096.63) Falls eine Zweipunkt-Kalibration verwendet wird, werden die errechneten Werte für Steigung und Ablage in einem externen EEPROM, oder falls die Batterie immer an das MSP430 28 http://e-industrie.huethig.de ; Spannungsmessung für Vakku: ; Vakku = factor · exp(((tmess/tvcc) -1) · ln(Vcc/VCP)) ; Mit factor = Vcc x (R1+R2)/R2 ; ; Eingang: ADCref: Gemessener Referenzwert Vcc: tvcc ; ADCbatt: Gemessener Spannungswert: tmess ; Ausgang: Akt. Stack Berechnete Spannung Vakku @SP ; Calc_Volt SUB #4,SP ; Platz auf Stack reservieren MOV #ADCbatt,RPARG ; ADC-Wert der Spannung tmess CALL #CNV_BIN16U ; In vorzeichenlose Zahl wandeln MOV @RPRES+,x ; Resultat in x speichern. MSBs MOV @RPRES+,x+2 ; LSBs MOV #ADCref,RPARG ; ADC-Wert von Vcc tvcc CALL #CNV_BIN16U ; In vorzeichenlose Zahl wandeln MOV #x,RPRES ; tmess adressieren CALL #FLT_DIV ; tmess/tvcc JN Calc_Error ; Fehler MOV #FLT1,RPARG ; 1.0 adressieren CALL #FLT_SUB ; (tmess/tvcc) - 1.0 MOV #FLTLN4,RPARG ; Ln(Vcc/VCP) adressieren CALL #FLT_MUL ; [(tmess/tvcc) - 1] * ln(Vcc/VCP) CALL #FLT_EXP ; exp[(tmess/tvcc) - 1)*ln4] JN Calc_Error MOV #factor,RPARG ; Vcc x (R1+R2)/R2 adressieren CALL #FLT_MUL ; Vakku = factor * exp[...] ; ; Korrektur von Vakku mit errechnetem Slope und Offset ; Vakku’ = factor*exp[(tmess/tvcc)-1)*ln4]*Slope + Offset ; MOV #Slope,RPARG ; Slope adressieren CALL #FLT_MUL ; Vakku * Slope MOV #Offset,RPARG ; Offset adressieren CALL #FLT_ADD ; Vakku’ = Vakku * Slope + Offset ; MOV @RPRES+,6(SP) ; Korrigierte Vakku auf Stack MOV @RPRES+,8(SP) ; LSBs ADD #4,SP ; Stack freigeben RET ; Rückkehr ; ; Rechenfehler (N = 1 nach Rückkehr): FFFF,FFFF als Ergebnis Calc_Error MOV #0FFFFh,6(SP) MOV #0FFFFh,8(SP) ADD #4,SP ; Stack korrigieren SETN ; N-Bit als Fehlerindikation setzen RET ; Rückkehr, N = 1 ; ; factor enthält die Speisespannung Vcc und den Spannungsteiler ; factor .float 23.292683 ; 5V * (3,0M+820k)/820k FLTLN4 .float 1.38629436 ; ln Vcc/VCP. (nom. ln 4.0) FLT1 .float 1.0 ; Konstante 1.0 System angeschlossen ist, im RAM gespeichert. Auflösung der Messung Um die Auflösung für einen Zählerschritt nmess zu finden, wird die Gleichung (3) differenziert. Zuvor werden noch die Zeiten tx durch die gemessenen Zählimpulse nx ersetzt. Die Auflösung für einen Zählerschritt nmess der Spannungsmessung ist dann: [7] Das bedeutet für das Beispiel in Bild 4 im ungünstigsten Falle, also wenn Vmess = Vmessmax ist: elektronik industrie 2 – 1999 © BAUELEMENTE [11] Die Auflösung ist also maximal 2,7 mV für Vakku = 18 V, Cm = 47 nF, R4 = 47 kΩ, fMCLK = 3 MHz. Dies entspricht einer minimalen Wandler-Bitbreite a von Mit den Werten aus Bild 4 (rechte Schaltung) ergibt sich für die Zeit tconv zwischen zwei vollständigen Messungen: [12] [8] (ld = log2) Die Auflösung dieser Schaltung liegt also zwischen einem 12-bit- und einem 13-bit-AD-Wandler. Die Auflösung kann durch eine Vergrößerung der Zeitkonstante τ verbessert werden, allerdings verlängert sich damit auch die Meßzeit. Für den interessierenden Spannungsbereich am Eingang Ixx (VCP bis Vcc) kann die nichtlineare Charakteristik der Exponentialfunktion auch durch eine Hyperbel dargestellt werden. Dies hat den Vorteil, daß keine zeitaufwendige Reihenentwicklung – wie bei der Exponentialfunktion – notwendig ist, sondern nur eine Division: [9] Die Werte für A, B und C können durch das Lösen von drei Gleichungen (siehe MSP430 Application Report) oder mit einem PC-Programm wie z. B. MATHCAD errechnet werden. Für die Berechnung der obigen Formeln ist das MSP430 Gleitkommapaket FPP4 sehr gut geeignet: Es enthält alles Notwendige wie z. B die Exponential- und die Logarithmusfunktion. Meßzeiten Mit den obigen Formeln läßt sich die Zeit tconv zwischen zwei vollständigen Spannungsmessungen berechnen. Dies ist die Zeit, die die höchste Wiederholfrequenz unter ungünstigsten Bedingungen für Spannungsmessungen bestimmt. Die Zeit tconv ist die Summe aller Zeiten die in Bild 3 gezeigt sind. [10] Mit den Werten, die die obigen Zeiten bestimmen, kann die Zeit tconv bestimmt werden. Es wird mit einer Genauigkeit von 1% gerechnet, falls die Genauigkeit höher sein muß, ist der ln100 in der Gleichung durch den Logarithmus der gewünschten Genauigkeit zu ersetzen z. B. durch ln1000 für ein Promille. Die Zeit tmess ist als maximal angesehen: Also für Vin = Vcc 30 http://e-industrie.huethig.de Für ein Promille Genauigkeit (10-3) ergeben sich 233 ms für tconv. Durch Veränderung der Werte von R1, R2, R4 und Cm läßt sich die Zeit zwischen zwei Messungen stark beeinflussen. Die Dimensionierung in Bild 4 ist für eine hochgenaue Spannungsmessung gemacht worden. Die Werte der Komponenten können bei geringeren Ansprüchen an die Genauigkeit durchaus verändert werden. Anwendungen zusammen mit TP.3 in den gleichen Modus geschaltet (0 V, +5 V, hochohmig). Nach dem Aufladen von Cm hat die Akkuspannung dadurch keinerlei Einfluß mehr auf die Umwandlung. Software-Beispiel Die Spannungsberechnung wird für die rechte Schaltung in Bild 4 gezeigt. Die Messungen von tmess und tvcc werden wie oben beschrieben durchgeführt. Die Gleichung (6) ist in Software implementiert worden. Für die Berechnung selbst wird das MSP430 Gleitkommapaket FPP4 verwendet (32-bit Format). Alle Subroutinenaufrufe sind FPP4Funktionen. Das RAM-Wort ADCref enthält das 16-bit-Resultat der Vcc Messung tvcc. Das RAM-Wort ADCbatt enthält das 16-bit-Resultat der Vakku Messung tmess. Beide Zeiten werden in MCLK Zyklen gemessen. Strommessung mit der Lademethode Im Folgenden wird gezeigt, wie verschiedene, Ströme, die über einen Shunt fließen, können zu messende Spannungsquellen an das Uniebenfalls gemessen werden. Diese Spannunversal Timer/Port Modul angeschlossen wergen sind klein, da der Shunt normalerweise den können. Abhängig von der Art der externen Spannungsquelle sind unterschiedliche Hardware-Konfigurationen notwendig. Bild 4 zeigt zwei Schaltungen, mit denen die Spannung eines 12-VAkkumulators gemessen werden kann. Als Referenz dient – wie bei allen anderen Schaltungen auch – die Bild 4: Messung der Spannung eines Akkumulators Speisespannung Vcc. Diese kann zwischen +3 V und +5 V liegen. Bei einer Speisespansehr niederohmig ist (der Leistung I2 x Rshunt nungsänderung muß nur der Widerstand R1 wegen). Die Spannung am Shunt wird nicht neu dimensioniert werden. Zwei verschiedene durch einen Spannungsteiler untersetzt, um Schaltungen sind gezeigt, bei denen die Eindie volle Auflösung zu erhalten. Bild 5 zeigt gangsspannung Vakku unterschiedlichen Einfluß während der Umwandlung haben kann. Bei der rechten Schaltung hat die Eingangsspannung Vakku auch während der Referenzmessung mit Vcc einen kleinen Einfluß (Größenordnung hier R4/R1). Bei der linken Schaltung wird mit dem Ausgang TP.2 die Akkuspannung von der eigentlichen Messung isoBild 5: Schaltung der Strommessung © liert: TP.2 wird immer elektronik industrie 2 – 1999 BAUELEMENTE die Schaltung für die Strommessung. Der Spannungsbereich am Widerstand Rshunt reicht von -0,3 V bis VCP (VCP ist 0,25xVcc beim MSP430). Der Wert -0,3 V ist die maximale, negative Spannung die an einem MSP430-Eingang zulässig ist. Um Ströme oder Spannungen vom Nullpunkt weg messen zu können, ist eine UmkehBild 6: Strommessung mit der Lademethode rung der vorher gezeigten Meßmethode (Entlademethode) notwendig: Der Kondensator wird auf die zu mesDie erste Logarithmusfunktion ergibt die sende Spannung bzw. das Potential 0 V entlaZählschritte beim Strom Imess, die zweite die den und die Zeiten gemessen, bis die Zählschritte beim Strom Null. Mit R2 = 47 kΩ, Komparatorschwelle VCP wieder erreicht ist. Cm = 33 nF (τ = 1,55 ms) und fMCLK = 3,3 Dieses Verfahren – die Lademethode – hat MHz ergeben sich 1036 Zählschritte pro Volt. eine geringere Auflösung als die zuvor Falls also 1 A über einen Shunt mit 0,1 Ω fließt, gezeigte Entlademethode, kann aber dafür dann ist die Auflösung des Stromes ungefähr Spannungen um den Nullpunkt herum mes10 mA. sen. Bild 6 zeigt die Spannung am Kondensator Zusammenfassung Cm bei der Messung zweier Ströme: Vin0 ist positv, Vin1 hat negatives Vorzeichen. Wie Obwohl eigentlich für die Messung resistiver zuvor beschrieben, dient die Meßzeit tvcc als Sensoren entwickelt, ermöglicht das Universal Referenzmessung: Die Speisespannung Vcc Timer/Port Modul auch sehr genaue Spanwird gemessen. Die Ersatzschaltbilder über nungs- und Strommessungen. Der notwendem Spannungsverlauf zeigen die Wirkung dige Hardwareaufwand ist dabei minimal. der Zustände des Ausgangs TP.0 (Vss, Vcc, HiZwei Widerstände und ein Kondensator. Zwei Z). Die Gleichung für die Berechnung des verschiedene Meßverfahren wurden gezeigt, Stromes Imess ist: die Entlademethode mit höherer Auflösung, und die Lademethode mit der Möglichkeit, [13] auch Spannungen um den Nullpunkt herum messen zu können. (oe) Die kompliziert erscheinende Gleichung (13) wird in der Software durch die Form 695 Lutz Bierl arbeitet bei Texas Instruments in Freising ausgedrückt, wobei a und b Konstanten – gegeben durch die Speisespannung Vcc, das Verhältnis VCP/Vcc und den Meßwiderstand Rshunt – sind. Die Schaltung hat den großen Vorteil, daß der Meßwert, der der Spannung 0 V (Vss) entspricht, genau bekannt ist: Es ist der Meßwert tvcc. Es sind also keine zusätzlichen Messungen notwendig, um den Nullpunkt (Imess = 0) festzulegen. Die Auflösung der Strommessung kann mit Hilfe der folgenden Gleichung berechnet werden. Für den Strom Imess ergibt sich eine Differenz der Zählschritte ∆nin von: Literatur MSP430 Family Architecture Guide and Module Library 1996 SLAUE10B MSP430 Application Report 1998 SLAAE10C Data Sheet MSP430x31x 1998 SLAS165A [14] 32 http://e-industrie.huethig.de elektronik industrie 2 – 1999