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!!
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.
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?
Hallo, teste mal, ob diese Schwelle betriebsspannungsabhängig ist. Arno
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...).
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.