Hallo =)
ich habe ein neues Projekt und zwar möchte ich einen Batteriecomputer programmieren der misst, was an Energie in die Batterie fließt und was entnommen wird. Hierzu nutze ich den INA219.
Da der interne Shunt nur für maximal 3.2A ausgelegt ist, habe ich mir von Conrad einen Shunt bis 100A besorgt. (https://www.conrad.de/de/p/weigel-60…0-a-120921.html)
Bei 100A fallen hier 0.06V ab.
sudo pip3 install Adafruit-SSD1306 && sudo pip3 install pi-ina219 && sudo pip3 install openpyxl
Ich habe den Shunt über I2C angeschlossen und die Bibliothek von Adafruit installiert und kann auch die Versorgungsspannung (Bus-Voltage laut Demo) auslesen. Diese habe ich mit dem Multimeter kontrolliert und das passt gut. Ich habe eine LED mit Vorwiderstand an den 3,3V oder den 5V-Port des Raspi angeschlossen, was eine korrekte Spannung der Verbraucher ausgibt. Jedoch ist die Spannung am Shunt absolut falsch, hier werden mir Werte von 0,01-0,04V ausgegeben, was ja einen Stromfluss von 16-67A bedeuten würde.
Mein Script ist folgendes:
#!/usr/bin/env python
# Funktion Shunt: https://www.rutronik.com/de/artikel/detail/News/wie-wird-eine-strommessung-mit-shunt-durchgefuehrt/
from ina219 import INA219
from ina219 import DeviceRangeError
SHUNT_OHMS = 0.0006
#MAX_EXPECTED_AMPS = 20
def read():
ina = INA219(shunt_ohms=SHUNT_OHMS) # ,max_expected_amps=MAX_EXPECTED_AMPS, address=0x40
ina.configure(voltage_range=ina.RANGE_16V, gain=ina.GAIN_AUTO)
print("Bus Voltage: %.3f V" % ina.voltage())
try:
print("Bus Current: %.3f mA" % ina.current())
print("Power: %.3f mW" % ina.power())
print("Shunt voltage: %.3f mV" % ina.shunt_voltage())
except DeviceRangeError as e:
# Current out of device range with specified shunt resistor
print(e)
if __name__ == "__main__":
read()
Alles anzeigen
Hier ein Beispiel:
forum-raspberrypi.de/attachment/28480/
Gemessene Shunt-Spannung liegt bei 0,04V, woraus sich 66,6A ergeben würden. Angeschlossen habe ich eine LED, die laut Multimeter 15,7mA zieht.
Ich bin mir nun nicht sicher, wie ich weiter vorgehen soll. Die ausgegebene Versorgungsspannung der Verbraucher ist korrekt. Lediglich die Shuntspannung (und damit wohl zusammenhängend der Strom) stimmt nicht.
Zweiter Ansatz:
-----------------------------------------------------------------------------------------------------------------------
Ich habe ebenso diese Anleitung probiert: https://cdn-learn.adafruit.com/downloads/pdf/…or-breakout.pdf
sudo pip3 install adafruit-circuitpython-ina219
Jedoch hänge ich bei der Installation der Adafruit's CircuitPython library bundle. (Steht auf Seite 17 der Anleitung)
Es wird auf Seite 17 der Dokumentation geschrieben, dass ebenfalls Adafruit's CircuitPython library bundle (https://adafru.it/zdx) installiert werden soll. Die Beschreibung bezieht sich jedoch nicht auf Linux oder konkret den Raspberry Pi. Die Anleitung (https://learn.adafruit.com/welcome-to-cir…ython-libraries) besagt, ich solle im Ordner CIRCUITPY einen Ordner lib erstellen. Ich habe an zwei Orten im Betriebssystem einen solchen Ordner:
- \usr\lib\python3\dist-packages\thonny\plugins
- \proc\1161\task\1161\root\usr\local\lib\python3.7\dist-packages
Fehlermeldungen bekomme ich jedoch keine! Mein hierfür genutzter Quellcode:
#!/usr/bin/env python
#https://cdn-learn.adafruit.com/downloads/pdf/adafruit-ina219-current-sensor-breakout.pdf
import time
import board
from adafruit_ina219 import ADCResolution, BusVoltageRange, INA219
i2c_bus = board.I2C()
ina219 = INA219(i2c_bus)
print("Config register:")
print(" bus_voltage_range: 0x%1X" % ina219.bus_voltage_range)
print(" gain: 0x%1X" % ina219.gain)
print(" bus_adc_resolution: 0x%1X" % ina219.bus_adc_resolution)
print(" shunt_adc_resolution: 0x%1X" % ina219.shunt_adc_resolution)
print(" mode: 0x%1X\n" % ina219.mode)
ina219.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # optional : change configuration to use 32 samples averaging for both bus voltage and shunt voltage
ina219.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S
ina219.bus_voltage_range = BusVoltageRange.RANGE_16V # optional : change voltage range to 16V
while True: # measure and display loop
bus_voltage = ina219.bus_voltage # voltage on V- (load side)
shunt_voltage = ina219.shunt_voltage # voltage between V+ and V- across the shunt
current = ina219.current # current in mA
print("PSU Voltage: {:6.3f} V".format(bus_voltage + shunt_voltage)) #INA219 measure bus voltage on the load side. So PSU voltage = bus_voltage + shunt_voltage
print("Shunt Voltage: {:9.6f} V".format(shunt_voltage))
print("Load Voltage: {:6.3f} V".format(bus_voltage))
print("Current: {:9.6f} A\n\n".format(current/1000))
time.sleep(5)
Alles anzeigen
Hier werden mir jedoch trotz permanenter Spannungsquelle ohne irgendwelche Änderungen am System mal Spannungen ausgegeben und mal nicht.
Es hängt eine weiße LED direkt an 3,3Volt. Sie soll laut Datenblatt 20mA ziehen, mit dem Multimeter habe ich 17,5mA gemessen.
Ausgabe der Ina siehe hier:
forum-raspberrypi.de/attachment/28483/
Womit ich konkret Probleme habe ist folgendes. Ich denke, in der Konfiguration stimmt noch etwas nicht.
Müsste ich hier die 60mV angeben, die beim Shunt abfallen wenn dieser mit dem maximalen Strom von 100A belastet wird? Die Option gibt es nämlich nicht.
ZitatAlles anzeigen/* Set PGain
* Gain * * Shunt Voltage Range * * Max Current *
PG_40 40 mV 0,4 A
PG_80 80 mV 0,8 A
PG_160 160 mV 1,6 A
PG_320 320 mV 3,2 A (DEFAULT)
https://wolles-elektronikkiste.de/ina219 (Die Anleitung ist allerdings für Arduino!)
Ich danke euch für jeden Tipp und hoffe, das ganze bald fertigstellen zu können!
Viele Grüße
Peter