Translate

15 Mai 2013

Strommessung mit einem LEM HASS 200-S am MCP3426

Die Ansteuerung des MCP3426 funktioniert sehr gut,
Das Umrechnen der beiden Datenbyte zu einem Integer-Wert (mit Vorzeichen)
klappt auch ohne Probleme, also habe ich jetzt auch noch einen LEM HASS 200-S
Stromwandler am AD-Wandler angeschlossen.
Ich hatte zwar insgeheim gehofft, auf den Nullabgleich verzichten zu können, wenn ich
die Referenz des Stromwandlers benutze, aber ganz passte der Nullpunkt dann doch nicht.
Es fehlt um 0,00375 Volt was doch immerhin 1,2A entspricht Bei einem Messbereich von
+ - 655A sind das 0,1% vom Messbereich.

Am Programm habe ich noch ein bisschen rumgebastelt,
deshalb hier nochmalder aktuelle Hauptteil
Die Variable Ergebnis1a ist übrigens eine "long"-Variable
weil die Multiplikation mit 0,8 ganzzahlig anders nicht verlustfrei machbar ist.
Die Offset- einstellung ist nicht zufällig an dieser Stelle zwischen den Rechnungen,
Ich wollte den Offset unbedingt am Anfang der Berechnungen bitweise einstellen können.
Die Integer-Variable ist im 16Bit-Modus voll ausgenutzt, da kann ich nichts
addieren oder subtrahieren ohne dass es dann irgendwo am Ende zu Fehlern kommt,
das geht dann erst in der "long"-Variablen
und wenn ich es vor der Multiplikation mit 100
gemacht hätte dann hätte ich eine Zeile mehr gebraucht.
Statt * 100 und dann / 125 hätte auch * 4 und / 5 funktioniert, aber so könnte ich noch die
linearität ein bisschen korrigieren falls nötig


Do
'init
I2cstart
'Adressierung
I2cwbyte &B1101_0000 '3426 Schreibadresse

'Konfigurieren
'Bit 7 "Ready/"
'Bit6-5: 00:kanal1 01:Kanal2 10:Kanal3 11:Kanal4
'bit4 1=cont 0=Single
'bit3-2 00:12bit 240sps 01:14bit 60sps 10:16bit 15sps
'bit1-0: gain 00:x1 01:x2 10:x4 11:x8

'I2cwbyte &B0001_0000 'kanal1 12Bit
'I2cwbyte &B0001_0100 'kanal1 14bit
'I2cwbyte &B0001_1000 'kanal1 16bit
I2cwbyte &B0011_0100 'kanal2 14bit
'I2cwbyte &B0011_1000 'kanal2 16bit

I2cstop

Waitms 100 'auf Sample-Zeit + reserve einstellen
'Ready/ -bit muss 0 sein, wird hier in Readbyte3 eingelesen
'lesen
I2cstart

'I2creceive &B1101_0001 , Ergebnis1 , 1 , 3

I2cwbyte &B1101_0001 '3426 Leseadresse

I2crbyte Readbyte1 , Ack 'hohes Byte
I2crbyte Readbyte2 , Ack 'niedriges Byte
I2crbyte Readbyte3 , Nack 'Konfigurationsbyte zurück

'inclusive "ready-bit"
Ergebnis1 = Readbyte1 * 256
Ergebnis1 = Ergebnis1 + Readbyte2
Ergebnis1a = Ergebnis1 * 100
Ergebnis1a = Ergebnis1a - 1500 'offset
Ergebnis1a = Ergebnis1a / 125

Ergebniss1 = Str(ergebnis1a)
Ergebniss1 = Format(ergebniss1 , " 0.0")


Ich habe als Funktionsdemonstration ein kleines Video gemacht,
aber das ist noch nicht fertig hochgeladen.
das kommt noch!

vermutlich hier:
http://youtu.be/sfVUjZq0aCI

Bis dann!

Ach ja, und ein kleines Foto will ich Euch nicht vorenthalten:

Das E-Motorrad meiner Tochter hat jetzt einen Beiwagen bekommen!

Keine Kommentare:

Kommentar veröffentlichen