Mikrocontroller Genauigkeit für lange Zeit
Die hohe Integrationsdichte neuer universeller 8-Bit-MCUs ermöglicht eine kosteneffiziente Realisierung elektronischer Verbrauchszähler. Dabei muss eine Langzeitgenauigkeit und exakte Erfassung und...
Anbieter zum Thema
Größere Flexibilität, zusätzliche Leistungsmerkmale und sich ändernde Kundenansprüche sind die wesentlichen Gründe der Energieversorger für die Einführung elektronischer Stromverbrauchszähler. Diese Geräte müssen sowohl einen Standard hinsichtlich ihrer Genauigkeit erfüllen als auch einen niedrigen Eigenenergieverbrauch und geringe Kosten bieten. Deshalb sind zusätzliche Kosten durch externe Bauteile, wie z.B. Präzisions-A/D-Wandler (ADCs) zu vermeiden.Die grundlegende Funktion eines Stromzählers ist die Ermittlung des Gesamtenergieverbrauchs während des Abrechnungszeitraums. Zur Digitalisierung dieses Vorgangs wird die verbrauchte Spannung bzw. der verbrauchte Strom periodisch abgetastet. Das Produkt aus dieser U- und I-Abtastung wird über der Zeit addiert und daraus der Gesamtstromverbrauch ermittelt. Hinsichtlich der Abtastgenauigkeit bestehen strenge Vorgaben, einschließlich der Auflösung jeder Abtastung sowie der Abtastfrequenz. Der ADC muss hinreichend genau sein und der Prozessor die notwendigen Berechnungen innerhalb der erforderlichen Zyklusdauer berechnen. Die Genauigkeit von Stromzählern wird durch den Standard IEC61036 für Geräte der Klasse 1 definiert und von Regulierungsbehörden weltweit angewendet. Dieser verlangt eine Genauigkeit von ±1% für den Bereich, in dem die Strom-amplitude zwischen ihrem Maximalwert und dem 0,0125-fachen ihres Maximalwerts liegt. Für Stromamplituden zwischen dem 0,0125- und 0,005-fachen ihres Maximalwerts muss die Genauigkeit ±1,5% betragen. Mit kleiner werdender Stromamplitude nimmt die absolute Wandlungsgenauigkeit demnach zu. Skalierung der StromsignalformEin Fehler von 1,5% beim 0,005-fachen Wert beträgt 1/13333. Die Ungenauigkeit bei der Strommessung muss demnach geringer als 1/13333 des Maximalwertes sein. Da 13333 in etwa 213,7 entspricht, ist eine effektive ADC-Auflösung von mindestens 14 Bit erforderlich, um Ströme im niedrigen Bereich mit ausreichender Genauigkeit messen zu können. Nur so wird die Klasse-1-Voraussetzung erfüllt. Mithilfe von Techniken wie Stromskalierung, Überabtastung und Mittelwertbildung lässt sich die effektive, ursprüngliche Auflösung des integrierten 10-Bit-ADCs einer 8-Bit-MCU (z.B. aus Toshibas TMP86-Familie) so verbessern, dass die Anforderungen für Klasse-1-Stromzähler erfüllt sind.Bei niedriger Stromamplitude lässt sich durch Skalierung des Signals um einen bekannten Multiplikator die Wandlungsgenauigkeit verbessern und somit Klasse-1-Anforderung erzielen. In der Praxis lässt sich eine Skalierung z.B. durch eine Operationsverstärkerstufe oder durch Änderung des effektiven Nebenwiderstands in einem Stromwandler erzielen. Die Veränderung der Skalierung um eine Zahl, die einer einfachen Verschiebung im Binärsystem wie 2, 4 oder 8 entspricht, vereinfacht die Berechnung. Eine Skalierung niedriger Ströme um den Faktor 4 erhöht z.B. die Auflösung des ADC effektiv um 2 Bit. Durch die gleichzeitige Einspeisung des ursprünglichen und skalierten Stromsignals in getrennte Eingänge des ADC kann die Wandler-Leseroutine der MCU testen, ob das multiplizierte Signal nahe oder über dem Grenzwert des Wandlers liegt. Ist dies der Fall, lässt sich das ursprüngliche Signal verwenden, da eine zusätzliche Auflösung bei größeren Signalen nicht erforderlich ist.Bei der Entwicklung von Stromzählern ist vor allem darauf zu achten, dass nicht nur unmittelbare Genauigkeit sondern auch Genauigkeit über sehr lange Zeiträume vorliegt. Die Auswirkungen aufsummierter Quantisierungsfehler lassen sich durch eine höhere effektive Auflösung des ADC minimieren, indem Überabtastung und Mittelwertbildung angewandt werden. Dabei muss das Signal mit einem messbaren Rauschen belegt werden, so als ob ein neues Signal entsteht, dass sich über einige ADC-Schritte erstreckt. Dieses Rauschen kann bereits über die Messelektronik vorliegen oder absichtlich hinzugefügt werden. Das daraus resultierende Signal „schwankt“ (Bild 1 im Heft). Das hinzugefügte Rauschsignal kann eine zufällige Signalform oder eine Sägezahnform aufweisen. Die Ergebnisse hängen von der Charakteristik und der Amplitude des hinzugefügten Signals ab.Leistungsberechnung mit besonderer Codierung verhindert OverheadDurch Stromskalierung und Hinzufügen eines Rauschsignals zum Eingangssignal lässt sich also die effektive Auflösung des integrierten 10-Bit-ADCs so erhöhen, dass die Anforderungen für Klasse-1-Stromzähler erfüllt sind. Der Prozessor der TMP86FM-MCU-Familie muss nicht nur gewährleisten, dass eine genügend genaue Messung stattfindet, sondern auch die notwendigen Multiplizier- und Addierfunktionen (MACs) in ausreichender Geschwindigkeit durchführen. Hinsichtlich der Strommenge, die durch den Stromzähler während des Betriebs fließt, liegt eine Begrenzung vor. Es ist daher wünschenswert, dass die Leistungsaufnahme des Prozessors so gering wie möglich ausfällt.Die Verbrauchsberechnung beruht auf dem Produkt U ? I, wobei beide Werte als 16-Bit-Integer-Zahl vorliegen und ein 32-Bit-Ergebnis zustande kommt. Um diese Berechnung in C zu programmieren, wären beide Operanden vom Typ INT erforderlich, das Ergebnis wäre vom Typ LONG. Vor der Multiplikation werden jedoch beide Operanden als LONG ausgewiesen. Die zwei LONG-Operanden werden dann zu einem LONG-Ergebnis multipliziert. Damit entsteht bezüglich der Leistungsberechnung ein erheblicher Overhead. Eine erneute Kodierung dieser Multiplikation in Assembler vermeidet diesen Overhead. Die Kodierung in Assembler-Routinen bietet ebenfalls Vorteile bei der Addition der Werte zu einem 64-Bit-Gesamtwert. Für spezielle hochleistungsfähige Berechnungen steht auch der TMP86FS23, ein weiteres Derivat der Toshiba-870/C-Familie zur Verfügung. Diese MCU enthält eine MAC-Einheit, die in nur 750 ns zwei 16-Bit-Werte multiplizieren und einen 32-Bit-Wert addieren kann, was die Leistungsfähigkeit signifikant steigert. Masken- und OTP-Versionen dieser MCU sind in Volumenstückzahlen erhältlich, eine Version mit 60 KByte Flash wird ebenfalls angeboten.Implementierung mit TMP86FM29 Bild 2 zeigt das Blockdiagramm des TMP86FM29 für ein Stromzähler-Referenzdesign. Der Quellcode ist auf Anfrage verfügbar. Um ein genaues Timing zu gewährleisten, wird der Abtast- und Berechnungs-Code über einen Timer-Interrupt gesteuert. Die Timer/Counter 3 und 4 sind dafür als 16-Bit-Timer konfiguriert. Ein fc/8-Takt erlaubt Perioden mit einer Auflösung von 0,5 µs. Mit einem 16-Bit-Modulo-Register kann der Timer eine Periode zwischen 0,5 µs und 32,7675 ms generieren. Bei 50 Hz Versorgung sind anfangs zehn Abtastungen pro Halbzyklus geplant. Damit ist eine Abtastperiode von 1 ms erforderlich. Eine schnellere Periode würde mehr Abtastungen pro Zyklus bereitstellen und genauere Ergebnisse liefern. Der Interrupt muss mithilfe des ADC zuerst die Spannung und den aufgenommenen Strom abtasten. Der TMP86FM29 verfügt über vier ADC-Kanäle. Bei der Wahl von Kanal 3 als U-Eingang und Kanal 0 als direkten I-Eingang bleiben Kanal 1 für einen 2-fach und Kanal 2 für einen 4-fach multiplizierten I-Eingang frei (wie beschrieben für den Fall niedriger Ströme). Die Nulllinie wird mittig zwischen UAREF (ADC-Referenzspannung) und GND angenommen.Ist eine genaue Messung niedriger Ströme erforderlich, muss der ADC mindestens vier Abtastungen vornehmen. Er benötigt mindestens 312/fc s für eine Messung. Mit einer Taktfrequenz fc von 16 MHz ergibt sich eine Mess-dauer von 19,5 µs. Aufeinander folgende Abtastungen dauern geringfügig länger, da zuerst das vorherige Ergebnis aus dem ADC-Register entfernt, der nächste Kanal für die Abtastung vorbereitet und dann die eigentliche Abtastung startet. Tests, die prüfen, ob eine Abtastung stattfinden kann, nehmen zusätzliche wenige Zyklen in Anspruch. Als konservativer Ansatz lassen sich 50% Overhead zur Abtastdauer hinzufügen. Bei vier Kanälen ergeben sich somit 4 ×19,5 × 1,5 = 117 µs. Dieser Wert liegt weit unter der anfänglichen Anforderung von 1 ms.Hohe Genauigkeit durch Vergleich verschiedenartig berechneter WerteAnschließend führt der Interrupt die Leistungsberechnung durch. Die dafür verantwortliche Firmware berechnet die Leis-tung aus der getrennten Addition von U ? I und aus den durchschnittlichen effektiven Strom- und Spannungswerten über alle Punkte. Die Genauigkeit der CPU lässt sich nun durch die Berechnung des Leistungsfaktors und den Vergleich der berechneten Werte evaluieren. Zuerst wird der geeignete Stromkanal gewählt, indem das ADC-Ergebnis des direkten und des skalierten Kanals überprüft wird. Dort, wo die Eingangsspannung zu niedrig ist (?GND), ist das Ergebnis gleich null. Ist die Spannung zu hoch (?UAREF), ist das Ergebnis der maximal mögliche Wert: 0x03FF (1023) für den 10-Bit-ADC. Die Ströme werden angepasst, um einen relativen Bezug untereinander herzustellen. Dies lässt sich über einige wenige Verschiebungen und Additionen bewerkstelligen, was der Skalierungs- und Nulllinienjustierung dient. Als Endergebnis variiert der Strom zwischen null und 0x0FFC (4092). Die Berechnungsdauer variiert in ähnlicher Weise. Tests ergaben, dass die MCU beim Betrieb des Stromzählers und des LCD eine Leistung von etwa 12 mW bei 3,3 V aufnimmt. Neun verschiedene Power-Saving-Modi, die die MCU in den 32-kHz-Betrieb (12 µA/3,3 V) bis zum Highspeed-16-MHz-Betrieb (6 mA) schalten, sorgen dafür, dass der Gesamtstromverbrauch über der Zeit auf ein Minimum begrenzt bleibt.
(ID:158022)