Aufnahme von U-I-Kennlinien von Dioden mit dem Arduino
Aufnahme von U-I-Kennlinien von Dioden mit dem Arduino | |
Kurzbeschreibung | |
---|---|
Spannung - Strom - Kennlinien verschiedener LEDs | |
Kategorien | |
Digitales Messen, Elektrizitätslehre | |
Einordnung in den Lehrplan | |
Sonstiges | |
Durchführungsform | Demoexperiment |
Anzahl Experimente in dieser Unterkategorie | 2 |
Anspruch des Aufbaus | leicht |
Informationen | |
Name: | Tobias Ludwig, Lilly Pyras |
Kontakt: | @ |
Uni: | Humboldt-Universität zu Berlin |
Inhaltsverzeichnis
Didaktischer Teil
Digitales Messen setzt ein Messewerterfassungssystem voraus. Neben den etablierten Systemen der Lehrmittelhersteller stellen kostengünstige Mikrocontrollerplatinen wie der Arduino Uno eine Möglichkeit dar, physikalische Messwerte im Physikunterricht zu erfassen.
Die für die Erfassung von Kennlinien notwendigen Größen von Stromstärke und Spannungen können ebenso gut mit einem Arduino Uni gemessen werden. Die visuelle Auswertung erfolgt in diesem Beispiel mit dem Pony Plot.
Versuchsanleitung
Die digitalen Messwerterfassungssystemen der Lehrmittelhersteller bieten die Möglichkeit, U-I Kennlinien automatisiert zu erfassen. Die Grundeinstellungen lassen sich häufig in den dazugehörigen Softwarepakten einfach auswählen.
Der Arduino Uno bietet a priori keine unmittelbare Möglichkeit eine Spannungsrampe "zu fahren" und dabei die Messung der Stromstärke gleichzeitig aufzunehmen. Grund dafür ist die fehlende Möglichkeit digitale Signale in Analoge umzuwandeln, die Gegenrichtung ist problemlos möglich.Dennoch gibt es mehrere Möglichkeiten die gewünschte Messung durchzuführen.
1. Halbautomatisiert: Die Schaltung wird durch ein Potentiometer ergänzt, welches manuell geregelt werden kann. Die Spannung wird also "mit der Hand" verändert. Der Arduino Uno nimmt dann Wertepaar von Spannung und Stromstärke auf.
2. Automatisiert: Einige digitale Pins des Arduino Unos verfügen über die Möglichkeit der Pulsweitensimulation (PWM). Um kleine Spannungen zu realisieren werden die digitalen PWM Signale über einen Tiefpassfilter derart geglättet, dass eine nahezu konstante Gleichspannung in 256 Schritten erzeugt werden kann. Die während der so ausgegebene Spannung gemessene Stromstärke kann anschließend als Wertepaar ausgegeben werden.
Aufbau
Halbautomatisiert mit Potentiometer
Die vom Arduino bereitgestellte Gleichspannung von 5 V wird über ein Potentiometer (10 kΩ, linear) so aufgeteilt, dass Werte von U1 = 0…5 V abgegriffen werden können. Diese Spannung wird über einen analogen Eingang des Boards gemessen (hier: Pin A0, vgl Abb. 1). Der Spannungsabfall über den Widerstand R=100 Ω ermöglicht die Bestimmung der Stromstärke durch diese Masche des Stromkreises über . U2 wird ebenfalls über einen analogen Eingang des Arduinos gemessen (hier A1). Dies entspricht auch dem Strom, der durch die LED fließt. Trägt man nun I über U2 auf, erhält man eine U-I-Kennlinie für das Bauteil.
Abb. 1: Schaltplan der halbautomatisierten Messung
Automatisierte Schaltung mit Pulsweitenmodulation (PWM)
Zur Spannungssteuerung werden zwei Ausgänge verwendet, die PWM steuern können, hier Pin D3 und D11. Die werden durch einen Tiefpassfilter geglättet, sodass ein Spannungsanstieg modelliert werden kann.
Am analogen Pin A0 wird die Ausgangsspannung U_out des Tiefpassfilters gemessen. Die Stromstärke durch das zu vermessende Bauteil wird am analogen Pin A1 über den Spannungsabfall an R3 gemessen: siehe Abb. 2. Diese Funktionalität wird über ein Arduino-Skript an der seriellen Schnittstelle bereitgestellt. Die Wertpaare für Stromstärke und Spannung können mit dem offenes Programm pony plot eingelesen und graphisch dargestellt werden. Dieser Plotter wurde speziell auf die Bedürfnisse des Physikunterrichts hin programmiert.
Abb. 2: Schaltplan der automatisierten Messung durch PWM
Durchführung
Bei dem halbautomatisierten Aufbau kann die Spannung über das Potentiometer geregelt werden. Zur Regelung der Spannung mit PMW wird ein kurzes Programm auf dem Arduino ausgeführt. Im Pony Plot können die Messwerte dargestellt werden. Download Source Pony Plot, Version 0.4.7
Datei für den Arduino: Datei:IVcurve pony.zip
Plotter in Processing: Datei:Arduino plotter multi.zip
Ergebnisse
Abb. 3: Stromstärke in Abhängigkeit der Spannung bei verschiedenen Widerständen
Auswertung
Bei dem Vergleich von Glühlampe, linearem Widerstand, roter und blauer LED werden die unterschiedlichen Arten von Widerständen deutlich. Während die Steigung der Widerstandsdaten nicht verändert nehmen die der LED ab einem bestimmten Wert rasch zu. Die Stromstärke über der Glühbirne steigt zu Beginn schnell und flacht danach etwas ab.
Code
Download Source Pony Plot, Version 0.4.7
Datei für den Arduino: Datei:IVcurve pony.zip
Plotter in Processing: Datei:Arduino plotter multi.zip
IV_Curve Code für Arduino:
/* von Ferdinand Streicher 19.12.2018 basierend auf https://www.instructables.com/id/Measuring-the-IV-Curve-of-Semiconductors-With-an-A/ von rgco */ //Messung des Stroms in Abhängigkeit der Spannung mit zwei Anschlüssen. Besonders nützlich für LEDs //Verbinde den RC-Tiefpassfilter mit dem Timer-Ausgang an D11 und D3, R = 100Ohm, C = 100muF, tau = 10ms //Ausgabe des Filters an A0 //100Ohm Widerstand vom Filter zum Plus-Anschluss des untersuchten Geräts //Plus Anschluss auch an A1 void setup() { Serial.begin(9600); Serial.println(); Serial.println(F("start:")); //Serial.println(F("title:UI-Kennlinien")); //Serial.println(F("subtitle:Showing magic")); Serial.println(F("setMaxY:20")); Serial.println(F("setMinY:0")); Serial.println(F("setMinX:0")); Serial.println(F("setMaxX:5")); Serial.println(F("setYFormat:#.###")); Serial.println(F("setXFormat:#.#")); Serial.println(F("setXAxisLabel:Spannung in Volt")); Serial.println(F("setYAxisLabel:Strom in Milliampere")); Serial.println(F("setPointColor:0,50,255")); Serial.println(F("setXDataLength:256")); Serial.println(F("button:B:Blaue LED:0,0,255")); Serial.println(F("button:R:Rote LED:255,0,0")); Serial.println(F("button:L:Gluehlampe:34,127,48")); Serial.println(F("button:r:Widerstand:0,0,0")); pinMode(11,OUTPUT); // PWM out pinMode(3,OUTPUT); // PWM out pinMode(A0,INPUT); // analog input pinMode(A1,INPUT); // analog input TCCR2A = B10100011; //schnelle PWM an A and B TCCR2B = B00000001; //Keine Voreinstellung für Timer2 } float Rseries=100; void measure(byte val, byte nrep) { unsigned int v0=0; unsigned int v1=0; OCR2A=val; OCR2B=val; delay(30); for(byte i=0; i<nrep; i++){ v0+=analogRead(A0); v1+=analogRead(A1); delay(5); } float volt0 = 5.0 * v0 / 1024.0 /nrep; float volt1 = 5.0 * v1 / 1024.0 /nrep; float ampere = 1000.0*(volt0-volt1)/Rseries; if (ampere<=0) ampere = 0; Serial.print(volt1); Serial.print(" "); Serial.println(ampere); } char command=0; void loop() { if (command!=0) { switch (command) { case 'R' : // Rote LED Serial.println(F("activeGraph:0")); Serial.println(F("setPointColor:255,0,0")); Serial.println(F("setLineWidth:0")); break; case 'B' : // Blaue LED Serial.println(F("activeGraph:2")); Serial.println(F("setPointColor:0,0,255")); Serial.println(F("setLineWidth:0")); break; case 'L' : // Glühlampe Serial.println(F("activeGraph:5")); Serial.println(F("setPointColor:34,127,48")); Serial.println(F("setLineWidth:0")); break; case 'r' : // Widerstand Serial.println(F("activeGraph:6")); Serial.println(F("setPointColor:0,0,0")); Serial.println(F("setLineWidth:0")); break; } // starte eigentliche Messung 256 Messpunkte von 0...255 for (int i=0;i<256;i++) { measure(i,32); } command =0; } // Lese Kommando von der seriellen Schnittstelle if(Serial.available()){ command=Serial.read(); } }
Siehe auch
Die Darstellung wurde mit dem Programm Pony Plot erzeugt.