Forum: Mikrocontroller und Digitale Elektronik ADC Beschaltung


von Beate (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

wie beschaltet man den einen ADC korrekt? Denn bei meiner Schaltung 
kommt es zu einer erheblichen Schwankung der Messwerte. Habe gelesen das 
mit einem 100uF Kondensator gearbeitet werden soll und das dies genauer 
im Datenblatt erläutert wird. Arbeite derzeit mit einem MSP430F5529 und 
finde keine Schaltung im Datenblatt wo könnte man den einen Schaltplan 
beziehen?

Benutze die int. Ref. Spg. (2,5V), der ADC misst über einen 
Spannungsteiler siehe Anhang.

Könnte mir jemand hierzu eine Hilfestellung geben? Gibt es im Netz 
Artikel  oder Unterlagen bzgl. der Erhöhung der Messgenauigkeit der 
Schaltung?

Denke nicht das es an der Programmierung liegt. Da ich zwar nur kurz 
gemessen wird und wenig mit Mittelwerte gemacht wird aber die Sprünge 
hierfür einfach zu groß sind. Habe auch mit der SHT experimentiert und 
mit längeren Pausen zwischen Messstart und auslesen rumprobiert. Deshalb 
denke ich nicht das es am Code liegt.

Aber dennoch (die ftoa Konvertierung ist noch ein Überbleibsel der 
Ausgabe der Spannung, ich weiß das das in diesem Fall unnötig ist):
1
void mess(void)
2
{
3
  buttonsPressed = 0;  
4
  Dogs102x6_clearScreen();
5
  messprep();
6
  messung = 0; 
7
  ADC12CTL0 |= ADC12SC; // start conversion
8
  messung = 0; 
9
  messung = (ADC12MEM0);
10
  ftoa(display,messung,3,4,1);
11
  return;
12
}
13
/***************************************************************************/ 
14
void messprep(void)
15
{
16
  ADC12CTL0 = ADC12ON+ADC12SHT03+ADC12MSC+ADC12REFON+ADC12REF2_5V;  // ADC12 anschalten, n=1, mehrere konvertierungen, referenz auf 2,5V setzen
17
  ADC12CTL1 = ADC12SHP;
18
  ADC12MCTL0 = ADC12SREF_1+ADC12INCH_12;  // Vr+=Vref+ select (A12)
19
  ADC12CTL0 |= ADC12ENC;       // jetzt anfangen ...
20
  return;
21
 }
22
/***************************************************************************/
23
void messend(void)
24
 {
25
   ADC12CTL0 &= ~ADC12ENC;                           // Disable conversions
26
   ADC12CTL0 &= ~ADC12ON;                             // ADC12 off
27
   return;
28
 }

Hoffe es kann mir jemand helfen.

von Beate (Gast)


Lesenswert?

Ach ganz vergessen, es werden nur jede Sekunde Messungen vorgenommen, 
also keine Hochfrequenzangelegenheit.

von Karl H. (kbuchegg)


Lesenswert?

gleich vorweg:
Ich kenne den MSP430F5529 nicht.

Aber das

  ADC12CTL0 |= ADC12SC; // start conversion
  messung = 0;
  messung = (ADC12MEM0);

kommt mir spanisch vor.
Du kannst doch nicht einfach so mir nichts dir nichts einfach einen Wert 
vom ADC holen! Du musst schon warten, ob der auch fertig ist.

Und in der Sequenz

  messung = 0;
  messung = (ADC12MEM0);

schmeisst dir jeder Wald und Wiesen Compiler, der auch nur das Wort 
Optimierung mal von ferne gehört hat, die erste Zuweisung raus. Das 
heißt, das IST keine Verzögerung!

Mach es richtig. Schau im Datenbglatt nach, woran du erkennst, dass der 
ADC fertig ist (wahrscheinlich wird irgendein Bit in irgendeinem 
Register gesetzt oder gelöscht) und erst dann holst du dir den Wert.

von Beate (Gast)


Lesenswert?

Danke für die fixe Antwort. Das messung = 0 ist keine Verzögerung 
sondern ein überbleibsel aus einem Versuch. Die eigentliche Verzögerung 
wird mit __delay_cycles(xxx) durchgeführt. Welches leider ausversehen 
nicht im obigen Code aufgeführt ist. Jedoch konnte auch hiermit keine 
Verbesserung der Genauigkeit erziehlt werden.

Ich habe mir die Beispiele von mathar.com angeschaut und hier kommt 
nichts dergleichen (Bit) vor sondern lediglich eine Verzögerung. In 
meiner Lektüre (Das MSP430 Mikrocontroller Buch) finde ich in den 
Beispielen auch nichts dergleichen. Jedoch steht im Buch dass, das 
ADC12SC automatisch nach der Konvertierung gelöscht wird. Daran mache 
ich mich mal denke zwar nicht das sich was ändert aber probieren muss 
man es. Melde mich sobald ich Ergebnisse habe!

Danke nochmal für die Antwort!

von Beate (Gast)


Lesenswert?

Wie überprüfe ich denn ob das Bit gesetzt ist oder nicht? Mit 
(ADC12SC==0) oder wie funktioniert das?

von Beate (Gast)


Lesenswert?

Hab mich nochmal dranngesetzt und bin natürlich selber drauf gekommen 
weiß auch nicht was da gestern los war.

Das hat jetzt also soweit geklappt mit der Bitabfrage. Die Schwankungen 
wurden jetzt auch geringer. Habe nun mal versucht meinen Spannungsteiler 
wegzulassen und direkt mit dem Sensor in den ADC zu gehen (natürlich mit 
begrenzem Messbereich um meine zul. Spannungen nicht zu überschreiten). 
Daraufhin haben sich die Schwankungen nochmal verringert. Weiß jemand 
wie sich die Messwerte generell in einem Spannungsteiler verhalten? 
Sprich wie kann ich diese Schwankungen weiter eingrenzen? Geringere 
Widerstände benutzen?

Und bzgl. des Kondensators würde dieser die Genauigkeit noch weiter 
verbessern?

von Wolfgang-G (Gast)


Lesenswert?

wurde Vref mit mind. 10µF/100nF beschaltet?
Ich habe mal mit zu niedrigen C-Werten Stunden vertrödelt.
Wie groß ist denn die Streung der ausgegeben Werte?
Hast Du schon die Anleitung slau208 durchgearbeitet? Seite 509 sagt 
etwas zu den Abblockkondensatoren
Mfg

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.