Guten Tag, ich habe ein eigentlich(!?) triviales Problem zu lösen - ich möchte die Spannung an einem Solarmodul messen (0V < U < ~15V). Als ADC steht mir der TLC549CP zur Verfügung, der von Haus aus höchstens 6,1V Input bekommen darf. Nun wollte ich die zu Messende Spannung durch einen Spannungsteiler(R1, R2) "skalieren" und die proportional kleinere Spannung das messen. Das klappt mit dem Multimeter prima, schließe ich jedoch den ADC an, verhält dieser sich wider erwarten nicht mehr linear, was er eigentlich sollte und anderweitig schon bewiesen hat. Bei U=6V gibt er gerade einmal einen Wert um die 30, bei U=12V von ca 130 aus. Misst man so überhaupt Spannungen? Habe ich irgendeine Tücke übersehen? Gibt es in der Anordnung einen systematischen Fehler? Ich bitte um Eure Mithilfe. Gruß luoc. Datenblatt bei Conrad: http://www.produktinfo.conrad.com/datenblaetter/150000-174999/171026-da-01-en-IC_8BIT_AD_WANDLER_TLC_549_CP__DIP8__TID.pdf Erklärung zur angehängten Grafik: .:: Spannung U wird an Testpunkt TP1 angelegt .:: R1 = 330Ohm .:: R2 = 1000Ohm .:: Die drei freien Pins gehören zum SPI-Bus .:: der Rest sollte selbsterklärend sein ;)
Versuche zunächst mal einen Kondensator 100nF parallel zu R1. Ansonsten einen OPV als Spannungsfolger vor den ADC.
Martin H. schrieb: > Versuche zunächst mal einen Kondensator 100nF parallel zu R1. Ansonsten > einen OPV als Spannungsfolger vor den ADC. Danke für die rasche Antwort. Ich habe den Aufbau wie beschrieben geändert, es bleibt aber alles beim alten. -.-
mal gemessen welche Spannung wirklich am AIN-pin anliegt während der TLC
in der Fassung steckt ???
mmhhh bei 6V/13300Kohm*3300Kohm = 1,48872.....V sollten 76bit sein.
Bei einer Aref von 5V gibts die Auflösung von
5V/256bit = 0.01953..V also 19,53mV/bit * 30 = 0,585V die direkt am AIN
*130 = 2,539V.
anliegen sollten.
>> Misst man so überhaupt Spannungen?
vom Prinzip her JA aber nehme einen höheren Spannungsteilerwert sprich
die Messquelle sollte mit mindestens 100kohm oder mehr belastet werden
nicht weniger weil du sonst Messwertverfälschungen bekommst.
Probier doch mal einen Spannungsteiler aus der ca. 150kOhm zu 50kOhm
ist, heisst am AIN sollte eine Spannung bei 6V von 2V anliegen das wären
bei einer Aref von 5V = 2V/(5V/256bit)= 102 bits die du auslesen
müsstest.
Aber zeigt doch mal deine Software.
chris schrieb: > mal gemessen welche Spannung wirklich am AIN-pin anliegt während der TLC > in der Fassung steckt ??? das habe ich gemacht, ja. Auch die Widerstände habe ich erhöht (33k, 100k). Leider nach wie vor der gleiche Mist.. Ausgelesen wird der ADC der Einfachheit halber erstmal mit einem Arduino. Wenn ich das Datenblatt richtig interpretiert habe, so ist das erste gelesene Byte, der Wert der letzten Messung und das zweite der aktuelle. Mein Code ließt nur das erste aus, so bekomme ich halt das Ergebnis der letzten Messung, was ja nicht weiter dramatisch ist.
1 | #include <Config.h> |
2 | #include <SPI.h> |
3 | |
4 | void setup(){ |
5 | Serial.begin(9600); |
6 | |
7 | // CS-Pins als Ausgänge setzten
|
8 | pinMode(CS_ETH, OUTPUT); |
9 | pinMode(CS_SDC, OUTPUT); |
10 | pinMode(CS_0, OUTPUT); |
11 | |
12 | // alle angeschlossenen SPI-Geräte deaktivieren
|
13 | digitalWrite(CS_ETH, HIGH); |
14 | digitalWrite(CS_SDC, HIGH); |
15 | digitalWrite(CS_0, HIGH); |
16 | |
17 | // SPI-Bus initialisieren
|
18 | SPI.begin(); |
19 | }
|
20 | |
21 | void loop(){ |
22 | Serial.println(readSPI(CS_0)); // Wert ausgeben |
23 | delay(500); |
24 | }
|
25 | |
26 | byte readSPI(int csPin){ |
27 | byte temp; |
28 | |
29 | pinMode(csPin, LOW); // ADC aktivieren |
30 | temp = SPI.transfer(0); // Daten empfangen |
31 | pinMode(csPin, HIGH); //ADC deaktivieren |
32 | |
33 | return temp; |
34 | }
|
:
Bearbeitet durch User
Hm, wollte eigentlich nur das Bildchen schicken (geht aber nicht :-)
Habe den Code nochmal angepasst: Byte1 wird verworfen, Byte2 gelesen, entsprechende Pausen wurden eingefügt. Das Bild zeigt nochmal den entsprechenden Abschnitt aus dem Datenblatt.. Hier der geänderte Code-Abschnitt ...
1 | byte readSPI(int csPin){ |
2 | byte temp; |
3 | |
4 | pinMode(csPin, LOW); // ADC aktivieren |
5 | delayMicroseconds(1400); // dem ADC etwas Zeit zum reagieren geben (t_su) |
6 | SPI.transfer(0); // Wert der letzten Konversation lesen |
7 | pinMode(csPin, HIGH); |
8 | delayMicroseconds(17000); // Pause (t_wH) |
9 | pinMode(csPin, LOW); |
10 | delayMicroseconds(1400); // dem ADC etwas Zeit zum reagieren geben (t_su) |
11 | temp = SPI.transfer(0); // Daten empfangen |
12 | pinMode(csPin, HIGH); //ADC deaktivieren |
13 | |
14 | return temp; |
15 | }
|
Nach wie vor ist das Resultat weder linear, noch stabil. Der Wert schwankt und ist immer wieder 0.
:
Bearbeitet durch User
Die Access-und Sample-Phase des TLC549 ist von deinem Arduino-SPI-Clk abhängig und der Wert ist möglicherweise zu hoch, da du durch den Spannungsteiler die Sample-Zeit verlängerst. Setze mal den Takt mit Hilfe der Funktion "SPI.setClockDivider()" herunter.
Ich habe die Taktrate halbiert (4Mhz->2Mhz) und jetzt läuft es super. Danke isnah und an all die anderen, die mir geholfen haben ;) Besucht doch mal www.SolArduino.info (noch im Aufbau), dort ist unser aktuelles Projekt zu finden. Wir sind zwar noch Schüler und dem ein oder anderen "Elektronik-Hardliner" werden die Haare zu Berge stehen, wenn er sieht was wir da veranstalten - aber es geht ja um den Lerneffekt.
Der Arduino hat doch aber auch Analogeingänge(?) Und wenn schon externer Wandler - warum tust du dir das Altertümchen TLC549 an? Ok, bei mir läuft der auch noch in einem Gerät mit nem 89C2051, verkauf ich seit gefühlten 20 Jahren unverändert. Der hatte damals (tm) den Riesenvorteil, dass Ref+ und Ref- herausgeführt waren. Aber für neue Sachen packe ich den bestimmt nicht mehr an. Naja, nun läufts ja.
Der Grund ist denkbar simpel; die Stelle, an der die Spannung gemessen werden soll ist mehere Meter vom µC entfernt. Um Fehler zu vermeiden digitalisiere ich das Signal lokal...
gegen die lokale digitalisierung spricht ja nix aber warum nur 8bit? denn wäre doch die wahl auf einen externen 10-12bit wandler wie z.B. LTC1286/1298, Max187 usw.
chris schrieb: > gegen die lokale digitalisierung spricht ja nix aber warum nur 8bit? > > denn wäre doch die wahl auf einen externen 10-12bit wandler wie z.B. > LTC1286/1298, Max187 usw. Naja Chris, heute würde so einiges anders machen. Ich bin noch Schüler, habe zwar Physik Lk und schon einen Eindruck von dem Physikalischen Hintergrund, aber die Realität ist dann doch manchmal anders. Defacto habe ich mir alles was ich über Elektronik weiß, das ist schon eine Menge mehr als früher aber immer noch nicht viel, im Laufe des Projekts* angeeignet. Ich habe mir einen Haufen Teile auf gut Glück bestellt und versuche daraus jetzt etwas zu basteln. Im Kontext des Projekts* macht es auch wenig Sinn, noch genauere "Messinstrumente" zu benutzen, da es ohnehin nur um einen groben Überblick und die Vergleichbarkeit von Daten, nicht um die absoluten Werte geht. *Das Projekt Gebaut wird ein mechanischer Unterbau für ein Solarmodul, das Bewegungen in der horizontalen wie auch in der vertikalen Achse ermöglicht. Dazu kommt eine Arduino gestützte Steuerelektronik mit einigen Sensoren. Via Ethernet wird das ganze von einer Webplattform(diesen Part übernimmt ein Mitschüler) aus überwacht, analysiert und gesteuert. Peripherie/Sensoren: .:: RTC .:: Thermometer .:: Anemometer .:: Anemoskop .:: Suntracker (erstellt Helligkeitskarte des Himmels) .:: Voltmeter .:: Amperemeter .:: Motoren .:: Ethernet-Controller Damit wollen wir die Frage klären, ob es sinnvoll ist ein Solarmodul nachzuführen (erstmal nur unter dem Gesichtspunkt der Energiebilanz, nicht ökonomisch). Es ergeben sich auch neue Verfahren der Nachführung, nicht nur rein helligkeitsorientiert, sondern auch astronomisch, programmiert oder eine Mischung aus all dem. Nach dem Sinn des ganzen fragen wir uns selbst öfter, aber im Vordergrund steht zuerst der pädagogische Charakter - Wir lernen eine Menge und wir hoffen, dass es noch viele nach uns tun.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.