|
[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 |
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
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 |
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.
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. |
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. |
Zugegeben, diesmal wenig gebrauchte Bauteile verbaut.
Schaltplan als PDF Datei. |
||
PIC C-Code als MPLAB X IDE Projekt. | ||
loetmeister ©2015