Forum: Mikrocontroller und Digitale Elektronik TLC549CP: Spannungen über 5V (bis 15V) messen


von Bastel B. (luoc)


Angehängte Dateien:

Lesenswert?

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 ;)

von Martin H. (disjunction)


Lesenswert?

Versuche zunächst mal einen Kondensator 100nF parallel zu R1. Ansonsten 
einen OPV als Spannungsfolger vor den ADC.

von Bastel B. (luoc)


Lesenswert?

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. -.-

von chris (Gast)


Lesenswert?

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.

von Bastel B. (luoc)


Lesenswert?

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
von H.Joachim S. (crazyhorse)


Angehängte Dateien:

Lesenswert?

Hm, wollte eigentlich nur das Bildchen schicken (geht aber nicht :-)

von Bastel B. (luoc)


Angehängte Dateien:

Lesenswert?

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
von isnah (Gast)


Lesenswert?

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.

von Bastel B. (luoc)


Lesenswert?

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.

von H.Joachim S. (crazyhorse)


Lesenswert?

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.

von Bastel B. (luoc)


Lesenswert?

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...

von chris (Gast)


Lesenswert?

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.

von Bastel B. (luoc)


Lesenswert?

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
Noch kein Account? Hier anmelden.