Strommessgrät mit Stromwandler und Bargraph-Anzeige
Home > Elektronik > Amperemeter + Bargraphanzeige  
 

[Feb. 2015] (PIC) Amperemeter mit Stromwandler (Current Transformer - CT) und LED Bargraph-Anzeige

Dieses Amperemeter (Strommessgerät) ist zugleich ein schönes Geschenk und eine Fingerübung um zwei neue Komponenten an einen Mikrocontroller zu häkeln: Ein Schieberegister und einen Stromwandler (CT).
Der ganze Apparat soll später als Lastanzeige für Musikequipment genutzt werden, daher gib es "nur" eine LED Balken-/Bargraph-Anzeige und ein robustes Aluminium Gehäuse.

Eigenstromverbrauch: max. 0,5 W
Messbereich: 0 - 16 A
Anzeige: 8 LEDs

 

top PIC Programm

Aus einer gewissen Bequemlichkeit kam wieder der PIC 12F675 zum Einsatz. Er bringt aber auch alle nötigen Funktionen, wie ADC und EEPROM mit. Die geringe Anzahl Ausgänge wurde mit einem 74HC595 Schieberegister erweitert, was praktischerweise auch als LED Treiber dient.

Der Mikrocontroller macht in der Hauptsache folgendes (nach dem üblichen Initialisierungszeug):

Programmablauf

  1. Abspielen einer "Einschaltanimation" (jede zweite LED im wechsel Einschalten und einmal Lauflicht)
  2. Offset Wert aus dem EEPROM lesen
  3. Ermitteln der ADC Werte - 160 mal
  4. Berechnen des Durchschnitt über n Messwerte
  5. Taster Abfragen
  6. Timerinterrupt ca. alle 16ms und 240ms zum errechnen des Messwerts und Aktualisierung der Anzeige

Das Moped läuft wieder mit dem internen 4 MHz Taktgenerator (mit externem Quarz wären 20 MHz möglich), was bei dieser Anwendung aber locker ausreicht.

PIC Frequenz effektive Frequenz Vorteiler zu TMR0 TMR0 Interruptfrequenz "timer2" Zähler Variable
4 MHz 1 MHz 64

256 - 250 = 6

(1MHz / 64 ) / 250 = 62,5 Hz

15
(Wird bis 0 herunter gezählt) = 4,1667Hz

Strommessung

Der verwendete Stromwandler kann bis zu 30 Ampere messen. Bei 30 A beträgt seine Ausgangsspannung 1 Volt. Der Nullpunkt des Stromwandlers wird auf 2,5 V angehoben, so erhalten wir immer eine positive Messspannung, welche zwischen 1,5 und 3,5 Volt liegt und dem Sinusverlauf des Wechselstroms folgt.
Da das Messgerät an einem mit 16 A abgesicherten Anschluss zum Einsatz kommen soll, wird die maximale Ausgangsspannung statt auf 1 V nur auf 0,533 V ansteigen, von ein paar Stromspitzen einmal abgesehen.

Nachdem ich mir angeschaut hatte wie beim OpenEnergyMonitor und der dazu gehörigen Arduino Energy Monitoring Library (Emon Library) die Messung abläuft, nämlich mit etwa 1200 Samples, musste ich mir etwas weniger Arbeitsspeicherintensives überlegen, da sich kaum float, geschweige double Variablen mit meinem kleinen Mikrocontroller verarbeiten lassen.
Bei meiner Messung wird 160 mal der Analogwert, bei deaktivierten Interrupts, ausgelesen und abzüglich des Offsets gespeichert. Dieser Messvorgang dauert fast genau 20 ms (die Periodendauer einer 50 Hz Sinusschwingung). Von den 160 Messwerten wird der Durchschnittswert ermittelt und dann wieder weitere 16 mal aggregiert und als Durchschnittswert für die Anzeige verwendet.
Um nachvollziehen zu können wie lange die Messung wirklich dauert, kann im Quellcode der TESTMODE aktiviert werden. Dann wird der freie Ausgang (GP1) so lange auf HIGH gesetzt wie die Messung andauert. Auf meinem kleinen DSO sieht das dann so aus:

 
Gut
 
Nicht gut
 
 
 
 
 
Alle ca. 20 ms wird eine neue Messung gestartet.
(Eine "Rasterweite" = 5 ms)
 
Hier dauert eine Messung knapp 30 ms. D.h. es kommt immer eine Halbwelle dazu und verzerrt den Durchschnittsmesswert.
(Eine "Rasterweite" = 10 ms)
 

 

Schieberegister

Das Schieberegister wurde mit der Minimalbeschaltung von drei Pins am Mikrocontroller angebunden. Daten Pin, Shift- und Storage-Register Takt Pin.

GP2 -out- (Data in (DS) of 74HC595)
GP4 -out- (storage register clock pin (ST_CP) of 74HC595)
GP5 -out- (shift register clock pin (SH_CP) of 74HC595)

Im C-Programm wird mit der Funktion shiftOut() ein Byte übertragen. Dabei wird ganz "normal" der Daten Pin für die Zeit eines Shift-Register Takts je nach Wertigkeit der Bit-position, auf LOW oder HIGH gesetzt.
Für die Funktion show_animation() wird der Daten Pin für die Zeit eines Shift-Register Takts auf HIGH gesetzt, danach "wandert" diese 1 durch schalten des Shift- und Storage-Register Takts alle 128ms eine Stelle weiter.

 

top Aufbau

Die Oberseite der Platine wirkt relativ unspektakulär, da sich Schriftregister IC, Gleichrichter und alle Widerstände (Bauform 1206) auf der Unterseite verbergen.

Die LEDs schauen ein wenig "schief" aus der Platine, da ich nur die 5mm Durchmesser eingeplant hatte, ohne den unteren größeren Rand zu berücksichtigen. Es wird zeit das Makro im Layout Programm anzupassen...

 
Alle Bauteile und das unbearbeitete Gehäuse im Überblick.
Das blaue Teil ist der Stromwandler mit einen aufklappbaren Kern, so kann er auch einfach an Bestehenden Stromleitungen (Adern)angebracht werden.
 

 

top Gehäuse

Bearbeitet wurde Gehäuse und Plexiglas mit meiner CNC-Fräse, was für die regelmäßigen Leser hier keine Überraschung sein dürfte.

Rechts das bereits Ausgefräste und auch eingesetzte milchige Plexiglas. Damit der angesetzte Knopf vernünftig gedrückt werden konnte, musste der Steg nachträglich deutlich dünner gemacht werden. Auch die Dicke des Plexiglas über den LEDs wurde in einem weiteren Arbeitsschritt reduziert, um weniger Licht zurückzuhalten.

Der Nullpunkt der Ausfräsung liegt im Zentrum der LED Anzeige. Dieser Punkt konnte nach der Montage der Platine im Gehäuse einfach auf den Deckel übertragen werden.

 

 
Das komplette montierte Messgerät an seinem zukünftigen Einsatzort. Das Holzbrett dient nicht nur als Träger für die Bauteile, sondern auch als Wickelhilfe für die Zuleitung.

top Schaltpläne/Layout

Zugegeben, diesmal wenig gebrauchte Bauteile verbaut.

Schaltplan als PDF Datei.

 
PIC C-Code als MPLAB X IDE Projekt.