Hallo,
über gibt es sie als Modul, nur irgendwie hatte ich nichts einfaches gefunden wie der Strom/Spannungssensor INA219 ausgelesen wird, vor allem wenn man andere Shuntwiderstände nehmen will um mehr als 3,2A messen zu können.
Hier im Teil1 gehts ersteinmal nur darum die Spannung am Shuntwiderstand und die Spannung der Last (Rail) anzuzeigen, dies alles in der Standardbestückung mit den 0,1Ohm Widerstand auf dem Modul.
Standardwerte sind daher max 0-26V und 3,2A:
Alles anzeigen
Die Rechnerei für die Ausgabe würde wohl einfacher mit fleiskommazahlen zu verstehen sein...nur versteht ich die Rechnerei damit grad nicht brauch wohl mal
Der INA219 kann noch mehr, mit eingestellten Kalibrierwerten kann er Strom und Leistung direkt ausgeben, das kommt im 2. Teil
Tobias
über gibt es sie als Modul, nur irgendwie hatte ich nichts einfaches gefunden wie der Strom/Spannungssensor INA219 ausgelesen wird, vor allem wenn man andere Shuntwiderstände nehmen will um mehr als 3,2A messen zu können.
Hier im Teil1 gehts ersteinmal nur darum die Spannung am Shuntwiderstand und die Spannung der Last (Rail) anzuzeigen, dies alles in der Standardbestückung mit den 0,1Ohm Widerstand auf dem Modul.
Standardwerte sind daher max 0-26V und 3,2A:
Quellcode
- 'INA219 Test auf Arduino UNO
- 'IN219 Standardplatine mit 0,1Ohm shunt und standard I2C Adresse (keine Brücke gesetzt)
- 'Ideen kamen hier her, habs zur vereinfachung aber mal aufs minimum gebracht
- 'http://www.elektron-bbs.de/elektronik/projekte/avr/netzteil/downloads.htm
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 40
- $swstack = 16
- $framesize = 32
- Baud = 115200
- 'I2C konfigurieren
- $lib "i2c_twi.lbx" ' Hardware I2C wird benutzt
- Config Scl = Portc.5 ' SCL pin name -pin A5 am UNO , dazu noch ein 4,7k Pullup Widerstand
- Config Sda = Portc.4 ' SDA pin name -pin A4 am UNO , dazu noch ein 4,7k Pullup Widerstand
- Config Twi = 400000
- I2cinit
- Config Portb.5 = Output 'Konfigurieren des Ausgangs der Onboard LED
- Dim Durchlauf As Byte 'Variable fuer Durchlaufe setzen
- Durchlauf = 0 'Durchläufe auf null setzen, default ist 255
- Dim Ina219_adr_w As Byte ' Schreibadresse INA219
- Dim Ina219_adr_r As Byte ' Leseadresse INA219
- Ina219_adr_w = &H80 ' Schreibadresse INA219
- Ina219_adr_r = &H81 ' Leseadresse INA219
- Dim Ina219_reg As Byte 'INA219 register
- Dim W As Word
- Dim W_low As Byte At W Overlay : Dim W_high As Byte At W + 1 Overlay
- Dim V_shunt As Word
- Dim V_shunt_low As Byte At V_shunt Overlay : Dim V_shunt_high As Byte At V_shunt + 1 Overlay
- Dim V_rail As Word
- Dim V_rail_low As Byte At V_rail Overlay : Dim V_rail_high As Byte At V_rail + 1 Overlay
- Print "Bascom Test auf Arduino UNO R3"
- 'W = &B 0 0 1 11 0011 0011 111 Default Configuration Register 00h
- ' | | | || |||| |||| |||
- ' | | | || |||| |||| +++- MODE 1-3
- ' | | | || |||| ++++- SADC 1-4
- ' | | | || ++++- BADC 1-4
- ' | | | ++- PG 0-1
- ' | | +- BRNG
- ' | +- -
- ' +- RST
- 'W = &B0011100110011111 ' Default Configuration Register 00h
- 'W = &B0011111111111111 ' Register 00h, 12 Bit, 128 Samples, Bus Voltage Range 32 V
- 'W = &B0001111111111111 ' Register 00h, 12 Bit, 128 Samples, Bus Voltage Range 16 V
- 'W = &B0001011111111111 ' Register 00h, 12 Bit, 128 Samples, Bus Voltage Range 16 V, Gain +4 (160 mV)
- 'INA219 reset
- W = &B1011100110011111 'defaultwerte Lt Datenblatt
- Ina219_reg = &H00
- I2cstart ' send start
- I2cwbyte Ina219_adr_w ' send write address
- I2cwbyte Ina219_reg ' Calibration Register
- I2cwbyte W_high ' write MSB
- I2cwbyte W_low ' write LSB
- I2cstop
- Waitms 100
- 'INA219 konfiguration
- W = &B0011100110011111
- Ina219_reg = &H00
- I2cstart ' send start
- I2cwbyte Ina219_adr_w ' send write address
- I2cwbyte Ina219_reg ' Calibration Register
- I2cwbyte W_high ' write MSB
- I2cwbyte W_low ' write LSB
- I2cstop
- Do
- Print "Durchlauf Nr " ; Durchlauf
- 'Strom bzw Spannung über dem Shunt messen
- Ina219_reg = &H01
- I2cstart ' send start
- I2cwbyte Ina219_adr_w ' send write address
- I2cwbyte Ina219_reg ' send register pointer
- I2crepstart
- I2cwbyte Ina219_adr_r ' send read address
- I2crbyte V_shunt_high , Ack ' read MSB
- I2crbyte V_shunt_low , Nack ' read LSB
- I2cstop
- Print "V_shunt register ist " ; V_shunt ; " Bit"
- V_shunt = V_shunt / 100 ' im Standardmodus ist die Ausgabe als 0.01mV per bit, d.h.100 bit ergeben 1mV
- Print "V_shunt ist " ; V_shunt ; "mV"
- V_shunt = V_shunt * 10 'Standartbestückung der Module ist ein 0,1ohm widerstand verbaut, 10x der widerstand währe 1 Ohm, daher durch 10 teilen
- 'V_shunt = V_shunt * 20 'hier ist mal ein 0,05ohm widerstand verbaut, 20x der widerstand währe 1 ohm, daher durch 20 teilen
- Print "I ist " ; V_shunt ; "mA"
- 'Rail Spannung messen
- Ina219_reg = &H02
- I2cstart ' send start
- I2cwbyte Ina219_adr_w ' send write address
- I2cwbyte Ina219_reg ' send register pointer
- I2crepstart
- I2cwbyte Ina219_adr_r ' send read address
- I2crbyte V_rail_high , Ack ' read MSB
- I2crbyte V_rail_low , Nack ' read LSB
- I2cstop
- Print "V_rail register ist " ; V_rail ; " Bit"
- Shift V_rail , Right , 3 'ausgabewert 3 nach rechts shiften laut Datenblatt
- Print "V_rail nach 3x shift right " ; V_rail ; " Bit"
- V_rail = V_rail / 250 'im standardmodus ist ein bit = 4mV, 1Volt sind somit 250 bit, wir teilen die bits daher durch 250 um Volt zu bekommen
- Print "V_rail ist " ; V_rail ; " V"
- 'Wandlung im INA219 dauert im standardmodus 532µs, daher kann eine wartezeit notwendig sein, hier eher aus lesbarkeitsgründen 5s
- Wait 5
- Incr Durchlauf
- Loop
- End
Die Rechnerei für die Ausgabe würde wohl einfacher mit fleiskommazahlen zu verstehen sein...nur versteht ich die Rechnerei damit grad nicht brauch wohl mal
Der INA219 kann noch mehr, mit eingestellten Kalibrierwerten kann er Strom und Leistung direkt ausgeben, das kommt im 2. Teil
Tobias
5.951 mal gelesen