Referenzspannung zu klein?

Gast #3225605
Lesenswert?

Ich habe vorhin in der Mittags noch schnell eine Schaltung mit einem 
TSic501 in Betrieb nehmen wollen. Die Temperatur wollte ich auf einem 
Standard LCD anzeigen soweit alles kein Problem. Da der TSic aber eine 
Ausgangsspannung von 0-1V habe ich eine externe Referenzspannung von 1V 
an den ARef angelegt. Aber als Ergebnis bekomme ich Werte die stark um 
500 schwanken +- 50LSB.  Die Ausgangsspannung des TSic beträgt auch 
0,5V, somit eigentlich 512LSB. Aber es schwankt wie Teufel. Da ich das 
eigentlich schon 100 mal gemacht habe, wundert es mich das es nicht 
geht! Kann es an der 1 referenzsspannung liegen? Diese ist zwar Super 
genau und sauber auf 1V eingestellt, aber nur 1V. Müsste doch eigentlich 
gehen oder? Wie gesagt, hatte bis jetzt noch keine große Möglichkeit 
nach dem Fehler zu suchen, bin nur grad an der theoretischen 
Fehlersuche!
Gast #3225739
Lesenswert?

[Zitat von gelöschtem Beitrag gelöscht]

1 Volt funktioniert bei mir mit 'nem mega32 (uralter Knochen).
Müsste also auch bei deinem Controller gehen.
Zur Not fahr halt die Referenzspannung ein bisschen hoch z.B. 2 Volt
Dann hast du halt nicht mehr ein so genaues Ergebnis nur noch von (0- 
512). Aber immer noch besser als gar keins :)
#3225741
Lesenswert?

Kurz und bündig: Ja!
1V Referenz ist grad noch möglich für schnelle 8Bit oder langsame 
10Bit-Wandlung bei dem AVR. Aber wieso drauf anlegen, wenn es doch 
unnötig ist.
Wieso den Aufwand für 1V Referenz betreiben um den TSIC direkt 
anzuschließen und nicht direkt die interne Referenz nehmen und dann die 
Bauteile zur Verstärkung des TSIC Analogausgangs nehmen

Probiers mal hiermit:
- Vorverstärkung hochsetzen
- interne Referenz von 2,56V nehmen. So schlecht ist die nicht.
- Die Referenz hübsch mit Cs stabilisieren
- Nach der größeren Vorverstärkung einen RC-Filter an den ADC legen
- Mehr Samples mitteln, z.B. durch gleitenden Mittelwert.

Wenn du dann noch Probleme hast:
- Spannungsquelle prüfen (Restwelligkeit?)
 - vor allem des Sensors und direkt am µC
- Leitungslängen prüfen
- Leitungsverlauf prüfen (vorbei an Leitungen mit hohem Strom, usw...)

PS: Die Dinger haben doch auch nen Digitalausgang. Wieso den nicht in SW 
gegossen bedienen?
Gast #3225835
Lesenswert?

Probiere es mal mit den internen 1.1V oder 2.56V, wenn das nicht geht 
ist was faul.

Miss mal die Spannung am Vref-Pin, vielleicht gibt es einen Kurzschluss.

Die analoge Versorgungsspannung musst du auch ordentlich abblocken, dazu 
gehört eine kleine 10µF Spule und ein paar Kondensatoren, je mehr desto 
besser.

Wie schaut dein Schaltplan aus?
Gast #3226052
Lesenswert?

Also, hier mal der Code zum initialisieren:
1
void Init_AVR ( void )
2
{
3
  // Mutecontroll, Mute ON
4
  DDRD |= ( 1<<PD2 );
5
  MUTECONTROL &= ~ ( 1<<MUTE );
6
  
7
  // Pullups for Buttons 
8
  PORTD |= ( 1<<PD6 ) | ( 1<<PD7 );  
9

10
  // Systemtimer
11
  TCCR0B |= ( 1<<CS00 ) | ( 1<<CS01 );  // Prescaler 64
12
  TIMSK0 |= ( 1<<TOIE0 );
13
  
14
  // ADC
15
  ADMUX =  7;
16
  ADCSRA |= ( 1<<ADPS1 ) | ( 1<<ADPS2 ) | ( 1<<ADEN ) | ( 1<<ADATE ) ;  // Prescaler 64
17
  ADCSRB |= ( 1<<ADTS2 );
18

19
  // Global Interrupt enable
20
  sei();
21

22
}

Der ADC wird immer angestoßen, wenn der Timer0 überläuft, mit etwa 
488Hz.
Der Mega läuft auf 8MHz.

Hier die Messfunktion, die in der Timerüberlauf ISR aufgerufen wird, um 
die Messung abzuschließen:
1
void Messen ( void )
2
{
3
  Temperatur.Messcounter = ++Temperatur.Messcounter & ( NR_OF_MIDDLE_VALUES-1 );
4
  while (ADCSRA & (1<<ADSC));        
5
  Temperatur.Buffer[Temperatur.Messcounter] = ADC;
6
}

Ich lasse mir derzeit noch den Temperatur.Buffer[0] ausgeben, und wie 
gesagt, die Were schwanken teilweise um 150LSB um die ~500 umher. Wenn 
ich die externe Referenzspannung erhöhe, schwankt es halt um einen 
kleineren Wert und das Schwanken wird kleiner, aber immernoch deutlich 
zu groß!

Was hab ich übersehen? Die Variablen sind alles volatile, die Ausgabe 
auf dem LCD erfolgt über ein Flag, das in der Timer-ISR gesetzt wird. 
Die Ausgabe mit einer Festen Ziffer funktioniert auch, is wie gesagt ne 
oft bewährte Routine von mir.


Ingo
Gast #3226132
Lesenswert?

Was soll's denn bringen mit so tiefer Referenz zu arbeiten ? Die Werte 
werden nicht besser, denn das absolute Rauschen bleibt gleich. Mach mal 
die interne Referenz, und einen 100nF an den AREF pin.
Gast #3226137
Lesenswert?

Dumpf Nilp schrieb:
> Was soll's denn bringen mit so tiefer Referenz zu arbeiten ? Die Werte
> werden nicht besser, denn das absolute Rauschen bleibt gleich
Naja, die Auflösung wird halt besser. Rauschen auf den letzten Bits 
kriegt man durch Mittelung weg.

> Mach mal
> die interne Referenz, und einen 100nF an den AREF pin.
Is ne fertige Platine, is so ohne Weiteres nicht möglich
Gast #3226149
Lesenswert?

So, jetzt läuft nur das hier in der while(1):
1
     _delay_ms(1000);
2
    ADCSRA |= (1 << ADSC );
3
    while (ADCSRA & (1<<ADSC));
4
    Temperatur.Buffer[0] = ADC;
5
    lcd_setcursor(1,1);
6
    lcd_formatierte_zahl( Temperatur.Buffer[0] , 4, 0 );

und ich kriege trotzdem schaukelnde Werte. Messung wird nun per Hand 
gestartet (in der Initialisierung den autotrigger ausgeschaltet) und die 
Wert schaukeln genau wie vorher!
#3226161
Lesenswert?

Ingo schrieb:
> Is ne fertige Platine, is so ohne Weiteres nicht möglich

Kondensatoren kann man immer noch dazulöten...
Welche Platine ist das denn? Sollte man davor warnen? ;-)

Hast Du wenigstens eine Schaltung? Die Verdrahtung ist auch wichtig, 
besonders des GND. Geht der GND des TSic direkt (sternförmig) an den GND 
des µC (am besten der GND, der zu AVCC gehört)?

Teste mal mit einem C (100n) am ADC7 gegen GND.

Andere Testmöglichkeit: ein 10k Poti an der Referenz, Schleifer an ADC7.

Wenn die Ergebnisse dann stabil sind, kommt der Dreck vom TSic 
einschließlich seiner Versorgung und Deine µC-Schaltung ist OK.

Wenn nicht, liegt es am µC und/oder der externen Referenz.

Aber die Stabilität der Referenz kann man auch Testen, indem man mal die 
interne Referenz verwendet.

So kannst Du Stück für Stück mögliche Quellen ausschließen.

Gruß Dietrich
Gast #3226902
Lesenswert?

Ja, so ist es. Sollten eigentlich 100pF sein, aber irgendwie hat sich da 
ein 100nF eingeschlichen... Und mit nem Oszi wurde es erst sichtbar. 
Hätte mit 100pF keine Schwingneigung erwartet, aber 100nF sieht halt 
böse aus!
#3230883
Lesenswert?

Allgemein:
Bitte die 100nF an den 10k/10k Spannungsteiler hinter der Z-Diode. Da 
die Referenz praktisch nicht belastet wird, könnte da auch der OpAmp 
aus. Der macht sowieso Ärger, wenn er eine so große Kapazität umladen 
soll.

Ich würde daher entweder:
- 100nF hinter dem OpAmp weg bzw. deutlich runtersetzen oder mit 
RC-Glied ergänzen

Oder (bevorzugt):
- Du hast da eine teure Referenzquelle eingebaut, die auch recht stabil
  sein  sollte. Ein zusätzlicher C am Teiler macht da den OpAmp
  berflüssig.
  10k/10k sind mit 0,125mA eigentlich ok. Kannst aber auch auf 2x3,3k
  gehen, wenn du damit ein schlechtes Gefühl hast.

Und insgesamt zur Vereinfachung:
Die 4040 gibt es in einer 3,00V-Version. Mit 3,3V-Versorgung wirds da 
zwar eng, aber wenn du irgendwo eine 5V-Versorgung hast (selbst wenn die 
stark schwankt), kannst du dir den Abgleich mit Verwendung von 3 
0,1%-Widerständen auch gleich schenken:
3V-Referenz über R an die 5V und mit drei gleichen 0,1%-Widerständen
runterteilen und ein C dranpacken.

Oder: Wenn du schon R/C/OpAmp verbaust:
Verstärke den Ausgang deines Sensors und nimm die interne Referenz des
Controllers. Da bitte an das C am VREF denken.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren