Abfragen von Spannung und Strom

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
McLovin2u
User
Beiträge: 1
Registriert: Mittwoch 9. November 2016, 17:28

Hallo erstmal,
ich habe folgendes Projekt vor und habe leider nur sehr begrenzte Erfahrung mit dem Pi und Python.
Ich möchte die Leistung einer Solarzelle abfragen und diesen Wert in eine Variable packen, wenn die variable kleiner als ein bestimmter wert ist soll etwas passieren. Nun mein Problem: wie kann ich die Leistung messen? Ich schätze ich muss Spannung und Strom abfragen und diese multiplizieren, doch wie erhalte ich dann Spannung und Strom? Zum zweiten, wie integriere ich diese werte in meinen Code, (wie kommt der Wert in eine Variable?).
Ich würde mich über jede Art von Antwort sehr freuen.

Mit Freundlichen Grüßen, Paul L
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Doppelpost mit http://www.forum-raspberrypi.de/Thread- ... -und-strom.

Falls jemand das Thema interessiert: im Raspi Forum gibt's schon konkrete Antworten.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Da kommen gleich mehrere Dinge auf einmal zusammen. Wenn du das geschafft hast, weißt du was ein Spannungsteiler ist, wie man den Strom indirekt misst, du lernst die Bussysteme SPI/I2C kennen, weißt was ein ADC macht und wie man die Berechnungen dazu durchführt. Ich kann jetzt in diesem Beitrag nicht mal eben Grundlagen Elektrotechnik vermitteln.

Der Raspberry Pi hat keine analogen Eingänge. Das ist aber nicht weiter tragisch, da es auf dem Markt eine große Auswahl an ICs gibt, die an den Raspberry PI über das Bussystem I2C oder SPI angebunden werden. Hierbei ist unbedingt zu beachten, dass der Signalpegel beim Raspberry Pi 3.3V ist. Schließt man Hardware mit einem 5V Signalpegel an, wird man danach sehr unglücklich sein. Von Adafruit gibt es diese Steckboards. Sowas kann hilfreich bei der Entwicklung sein, da man dann nicht sofort den Lötkolben auspacken muss.

Als nächstes müsstest du die Charakteristika der Solarzelle kennen. Die maximale Spannung und der maximale Strom müssen bekannt sein.

Ein bisschen Grundlagen Elektrotechnik gehört auch dazu.
Spannung messen: http://www.elektronik-kompendium.de/sit ... 505041.htm
Strom messen: http://www.elektronik-kompendium.de/sit ... 505051.htm
Spannungsteiler: http://www.elektronik-kompendium.de/sit ... 201111.htm

Um die Spannung zu digitalisieren (ADC), kannst du z.B. den MCP3008 verwenden. Wie man das IC an den Raspberry Pi anschließt, haben die hier beschrieben: https://learn.adafruit.com/raspberry-pi ... rs/mcp3008

Du musst im Hinterkopf behalten, dass die Eingangsspannung niemals höher als die Referenzspannung sein darf. In dem Fall sind es die 3,3V. D.h. du musst die Spannung, die du messen willst, mit einem Spannungsteiler verringern. Hier kannst du die Werte eintragen und berechnen lassen: http://www.raltron.com/cust/tools/voltage_divider.asp

Ein Beispiel
Input = 12V
R1 = 6800Ω
R2 = 2400Ω
Output = 3.13V

Der Strom, der durch den unbelasteten Spannungsteiler fließt, beträgt dann U/(R1+R2) = 1.30mA
Current Drain (Stromverbrauch) bei den Eingängen beträgt laut Datenblatt 150µA maximal.
Man könnte Theoretisch noch größere Widerstände wählen.

Am besten ist es, wenn du ein Multimeter nimmst und zuerst den Eingang misst, bevor du das an das IC anschließt.

Der Teil um den Strom zu messen, ist etwas komplizierter. Du könntest einen Hall-Sensor nutzen oder ganz klassisch mit einem Shunt. Ein Shunt ist ein sehr niederohmiger Widerstand. Beträgt der Shunt z.B. 2mΩ durch den ein Strom von 5A fließt, fällt dort eine Spannung von 2.5V ab. Diese Spannung kann man messen und darüber den Strom berechnen.

Du bist nicht der einzige, der auf diese Idee kommt Messungen vorzunehmen. Durch die vielen Elektrofahrzeuge haben wir das Glück, dass die Chiphersteller neue bezahlbare Produkte auf den Markt schmeißen. Einmal gibt es die Hall-Sensoren, mit denen man das Magnetfeld messen kann. Also Berührungslos. Alternativ gibt es ICs, die Spannung und Strom messen können. Eins davon: http://www.ti.com/product/INA220/datash ... BOS4037859

Der Software-Part ist aber einfacher. Da muss man nur passend zum Chip die richtige Seqeunz über den Bus schicken, um dann die Werte auszulesen. Die Werte müssen dann wieder normalisiert werden. Da du zuvor z.B. die max Eingangsspannung von 12V auf 3.3V reduziert hast müsstest du das wieder zurück rechnen. Wenn der analoge Eingang eine Auflösung von 10 Bit hat, gibt es (2**10) 1024 Möglichkeiten 0V - 3.3V bzw. 0V - 12-V aufzulösen. Das wären dann eine Auflösung von 3.3V / 1024 = 3,2 mV bzw. 12V / 1024 = 11,7mV. Wenn du den analogen Eingang ausliest, bekommst du einen Integer zurück, der bei 10 Bit maximal 1023 betragen würde. Bekommst du z.B. 750 geliefert, dann multiplizierst du das mit der berechneten Spannung. In diesem Fall wäre es für die 12V 750 * 11.7mV bzw. für die 3.3V 750 * 3.2mV.

Den Strom wirst du auch umrechnen müssen. Auch hier misst der analog Eingang eine Spannung und liefert dir einen Integer zurück. Daraus musst du dann wieder zuerst die reale Spannung berechnen, wie zuvor schon beschrieben. Danach mit dem Widerstandswert des Shunts multiplizieren. Bekommen wir z.B. den Wert 750 zurück, würden wir den Strom folgendermaßen berechnen: U / R = I, (750 * 11,7mV) / 2mΩ.

Hier ein paar Funktionen, die ich zur Berechnung verwendet habe (hoffentlich ohne Fehler)

Code: Alles auswählen

def voltage_divider(in_voltage, out_voltage, current=1e-3):
    r1 = in_voltage / current
    r2 = out_voltage / current
    return r1, r2 

def normalise_voltage(value, max_voltage, resolution_bit=10):
    resolution = (2 ** resolution_bit) - 1 # ='0b1111111111'
    volt_per_step = max_voltage / resolution
    return value * volt_per_step

def calc_current(voltage, shunt):
    return voltage / shunt
Im Nachhinein fällt mir auf, dass ein IPython Notebook für diese Erklärung ganz gut gewesen wäre. Naja, auf jeden Fall wirst du viel lernen. Schau dir auch das Beispiel in dem Raspberry Pi Forum an. Der ACS712 scheint einer dieser Hall Sensoren zu sein, die den Strom über das Magnetfeld messen und die Messung ist nahezu verlustfrei. Dort schreiben sie auch, wie man den MCP3008 anspricht.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten