INA219 Stromsensor

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Teil1: Beispiel für die Standardkonfiguration eines INA219 mit den Bereichen 0-26V und 0-3,2A
    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:

    Source Code

    1. 'INA219 Test auf Arduino UNO
    2. 'IN219 Standardplatine mit 0,1Ohm shunt und standard I2C Adresse (keine Brücke gesetzt)
    3. 'Ideen kamen hier her, habs zur vereinfachung aber mal aufs minimum gebracht
    4. 'http://www.elektron-bbs.de/elektronik/projekte/avr/netzteil/downloads.htm
    5. $regfile = "m328pdef.dat"
    6. $crystal = 16000000
    7. $hwstack = 40
    8. $swstack = 16
    9. $framesize = 32
    10. Baud = 115200
    11. 'I2C konfigurieren
    12. $lib "i2c_twi.lbx" ' Hardware I2C wird benutzt
    13. Config Scl = Portc.5 ' SCL pin name -pin A5 am UNO , dazu noch ein 4,7k Pullup Widerstand
    14. Config Sda = Portc.4 ' SDA pin name -pin A4 am UNO , dazu noch ein 4,7k Pullup Widerstand
    15. Config Twi = 400000
    16. I2cinit
    17. Config Portb.5 = Output 'Konfigurieren des Ausgangs der Onboard LED
    18. Dim Durchlauf As Byte 'Variable fuer Durchlaufe setzen
    19. Durchlauf = 0 'Durchläufe auf null setzen, default ist 255
    20. Dim Ina219_adr_w As Byte ' Schreibadresse INA219
    21. Dim Ina219_adr_r As Byte ' Leseadresse INA219
    22. Ina219_adr_w = &H80 ' Schreibadresse INA219
    23. Ina219_adr_r = &H81 ' Leseadresse INA219
    24. Dim Ina219_reg As Byte 'INA219 register
    25. Dim W As Word
    26. Dim W_low As Byte At W Overlay : Dim W_high As Byte At W + 1 Overlay
    27. Dim V_shunt As Word
    28. Dim V_shunt_low As Byte At V_shunt Overlay : Dim V_shunt_high As Byte At V_shunt + 1 Overlay
    29. Dim V_rail As Word
    30. Dim V_rail_low As Byte At V_rail Overlay : Dim V_rail_high As Byte At V_rail + 1 Overlay
    31. Print "Bascom Test auf Arduino UNO R3"
    32. 'W = &B 0 0 1 11 0011 0011 111 Default Configuration Register 00h
    33. ' | | | || |||| |||| |||
    34. ' | | | || |||| |||| +++- MODE 1-3
    35. ' | | | || |||| ++++- SADC 1-4
    36. ' | | | || ++++- BADC 1-4
    37. ' | | | ++- PG 0-1
    38. ' | | +- BRNG
    39. ' | +- -
    40. ' +- RST
    41. 'W = &B0011100110011111 ' Default Configuration Register 00h
    42. 'W = &B0011111111111111 ' Register 00h, 12 Bit, 128 Samples, Bus Voltage Range 32 V
    43. 'W = &B0001111111111111 ' Register 00h, 12 Bit, 128 Samples, Bus Voltage Range 16 V
    44. 'W = &B0001011111111111 ' Register 00h, 12 Bit, 128 Samples, Bus Voltage Range 16 V, Gain +4 (160 mV)
    45. 'INA219 reset
    46. W = &B1011100110011111 'defaultwerte Lt Datenblatt
    47. Ina219_reg = &H00
    48. I2cstart ' send start
    49. I2cwbyte Ina219_adr_w ' send write address
    50. I2cwbyte Ina219_reg ' Calibration Register
    51. I2cwbyte W_high ' write MSB
    52. I2cwbyte W_low ' write LSB
    53. I2cstop
    54. Waitms 100
    55. 'INA219 konfiguration
    56. W = &B0011100110011111
    57. Ina219_reg = &H00
    58. I2cstart ' send start
    59. I2cwbyte Ina219_adr_w ' send write address
    60. I2cwbyte Ina219_reg ' Calibration Register
    61. I2cwbyte W_high ' write MSB
    62. I2cwbyte W_low ' write LSB
    63. I2cstop
    64. Do
    65. Print "Durchlauf Nr " ; Durchlauf
    66. 'Strom bzw Spannung über dem Shunt messen
    67. Ina219_reg = &H01
    68. I2cstart ' send start
    69. I2cwbyte Ina219_adr_w ' send write address
    70. I2cwbyte Ina219_reg ' send register pointer
    71. I2crepstart
    72. I2cwbyte Ina219_adr_r ' send read address
    73. I2crbyte V_shunt_high , Ack ' read MSB
    74. I2crbyte V_shunt_low , Nack ' read LSB
    75. I2cstop
    76. Print "V_shunt register ist " ; V_shunt ; " Bit"
    77. V_shunt = V_shunt / 100 ' im Standardmodus ist die Ausgabe als 0.01mV per bit, d.h.100 bit ergeben 1mV
    78. Print "V_shunt ist " ; V_shunt ; "mV"
    79. 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
    80. 'V_shunt = V_shunt * 20 'hier ist mal ein 0,05ohm widerstand verbaut, 20x der widerstand währe 1 ohm, daher durch 20 teilen
    81. Print "I ist " ; V_shunt ; "mA"
    82. 'Rail Spannung messen
    83. Ina219_reg = &H02
    84. I2cstart ' send start
    85. I2cwbyte Ina219_adr_w ' send write address
    86. I2cwbyte Ina219_reg ' send register pointer
    87. I2crepstart
    88. I2cwbyte Ina219_adr_r ' send read address
    89. I2crbyte V_rail_high , Ack ' read MSB
    90. I2crbyte V_rail_low , Nack ' read LSB
    91. I2cstop
    92. Print "V_rail register ist " ; V_rail ; " Bit"
    93. Shift V_rail , Right , 3 'ausgabewert 3 nach rechts shiften laut Datenblatt
    94. Print "V_rail nach 3x shift right " ; V_rail ; " Bit"
    95. 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
    96. Print "V_rail ist " ; V_rail ; " V"
    97. 'Wandlung im INA219 dauert im standardmodus 532µs, daher kann eine wartezeit notwendig sein, hier eher aus lesbarkeitsgründen 5s
    98. Wait 5
    99. Incr Durchlauf
    100. Loop
    101. End
    Display All



    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

    409 times viewed