Forum: Mikrocontroller und Digitale Elektronik ADC Probleme beim MSP430F1611


von Hase (Gast)


Lesenswert?

Hallo Zusammen,

Thena: ADC des MSP430F1611
habe drei Fragen:

1. die Sample&Hold-Zeiten kann man einstellen - nur welchen Wert nimmt 
man? kann mir jemand verraten, welche Überlegungen man zur Berechnung 
(Einstellung) der Sample&Hold-Zeiten anstellen muß? Hat die S&H Zeit 
Einfluß auf die Genauigkeit oder die Reproduzierbarkeit der Meßwerte?

2. da ist noch eine merkwürdige Sättigung beim ADC: wenn ich eine 
Spannung von 0V bis 2,5V anlegen, mißt der ADC (REF 2,5V) alles korrekt 
bis 2,34V. Dann bleibt er einfach "hängen" - das heißt, der ADC-Wert 
bleit bei 2,34V (3841) stehen und folgt den höheren Spannungswerten 
einfach nicht mehr!?! Was kann da falsch sein (oder kaputt) sein? Was 
kann ich tun?

3. wenn ich nach eine Folge von 10 ADC-Sequenzen mit je 4 ADC-Channeln 
laufen lasse und die jeweilige Ausführungszeit messe, so schwankt diese 
scheinbar zufällig und die Ausführungszeit für die erste Sequenz ist 
immer kürzer als die folgenden!?! Hat jemand eine Idee?

Bin für jeden Tip dankbar!!

von HildeK (Gast)


Lesenswert?

Ich kann nur was zu Punkt 1) beitragen:
Die Samplezeit sollte theoretisch gegen Null gehen, praktisch muss man 
aber den Speicher für die Hold-Phase genügend genau auf- bzw. umladen. 
Das dauert. Wird die Samplezeit zu groß, dann ergibt sich dadurch eine 
Ungenauigkeit, da während dieser Zeit das Eingangssignal sich ja ändert.
Erinnert mich irgendwie an die Heisenbergsche Unschärferelation ;-)

Die Hold-Zeit muss so lange sein, bis der AD fertig gewandelt hat. Zu 
lange Hold-Zeit führt durch Lastströme z.B. des AD-Eingangs zu einer 
Entladung des Speichers und damit zu einer Verfälschung.
Ausserdem bestimmt die Summe aus Sample- und Hold-Zeit die 
AD-Wandelrate.

von Hase (Gast)


Lesenswert?

Ah ja - Danke für den Hinweis! Das es noch eine separate "Hold"-Zeit 
gibt wußte ich gar nicht... wie kann man denn die Einstellen? Ich 
hantiere zur Zeit mit SHTO_0 bis SHTO_15 herum (für ADC12CTL0). Das ist 
dann wohl die Sampledauer. Und wie stelle ich dann die Hold Zeit ein?

von Arno H. (arno_h)


Lesenswert?

Hallo,
teste mal, ob diese Schwelle betriebsspannungsabhängig ist.

Arno

von Hase (Gast)


Lesenswert?

leichter gesagt als getan! ich verwende ein OLIMEX-board und das hat 
einen spannungsregler und der läßt sich leider nicht mal eben so 
umgehen. ich müßte da direkt in der schaltung herumlöten und das möchte 
ich eigentlich lieber vermeiden (alles smd-bauteile...).

von Michael (Gast)


Lesenswert?

Hallo Hase,

noch einige weitere Tipps:

zu 1)
Die Sample/Hold-Zeit hängt auch vom Innenwiderstand Deiner Quelle ab. 
Der AD-Multiplexer hat einen Innenwiderstand von 2K, dazu kommt Dein 
Quellwiderstand. Die Abtastzeit muss so lange eingestellt sein, dass die 
interne Kapazität aufgeladen ist. Näheres im Datenbuch unter Sample 
Timing Considerations.
zu 2)
Wenn man die interne Referenz verwendet muss man am Pin Vref+ die 
Kondensatoren 10µF und 100nF anschließen. Die Vorgaben des Datenblattes 
peinlich genau beachten!
zu 3)
Wie triggerst Du Wandlungen?

Gruss, Michael

von Hase (Gast)


Angehängte Dateien:

Lesenswert?

ich starte jede ADC-Sampling-Sequenz durch setzen von ADC12SC in 
ADC12CTL0. Wenn ich das richtig vertsanden habe, wird ADC12SC nach 
Durchlaufen der Sequenz automatisch zurückgesetzt, so daß ich die 
nächste Sequenz wieder durch Setzen von ADC12SC starten kann.

Anbei meine ADC-Initialisierung und die Schleife mit der Sequenz als 
c-Datei.

von Hase (Gast)


Lesenswert?

P.S.: vielen Dank schon mal für die Tips, Michael! Grüße Hase

von Michael (Gast)


Lesenswert?

Hallo Hase,

ich hab mir mal Deinen Code angesehen. Leider bin ich kein 
C-Programmierer, und kann nur Vermutungen anstellen. Aber was ich so 
erkennen kann, scheint die Initialisierung in Ordnung zu sein. Ein Punkt 
zur Überprüfung: Wenn man die Referenzspannung einschaltet, muss man 
ziemlich lange warten (17ms), bis der Kondensator an Vref+ geladen ist 
(s. Datenblatt SLAS368C S. 39 unten) und den Parameter t_REFON darüber. 
Erst dann sollte man mit den Wandlungen beginnen, also sicherstellen, 
dass zwischen Initialisierung und Wandlung die notwendige Wartezeit 
verstreicht - probier mal mindestens 100ms.
Bei der Zeitmessung verwendest Du den Timer B. Vielleicht kommen Dir 
noch irgendwelche Interrupts dazwischen, so dass der Timerstand nicht 
genau definiert übernommen wird?
Noch ein Punkt: Hat Deine Betriebsspannung 3V oder mehr?

Weiteres: Du verwendest die interne ADC12-CLK ohne Vorteiler. Das sind 
lt. Datenblatt zwischen 3.7 und 6.3MHz, nominell 5 MHz. Versuche mal 
einen anderen Takt (vielleicht den, der auch den TimerB taktet) und/oder 
verwende mal einen Vorteiler.

Gruss, Michael

von Hase (Gast)


Lesenswert?

hab' den Fehler (2. / 3.) gefunden -> war ein kleines problem mit Little 
& Big Endian Zahlenkonversion... :(
Nochmals VIELEN DANK FÜR DIE UNTERSTÜTZUNG!

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.