PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 10 Bit ADC aber 13 Zyklen. Wie geht das?



sking86
17.04.2010, 12:11
Probiere grade den ADC im ATMEGA32 zu verstehen.

Der arbeitet ja mit Sukzessiver Approximation und gibt ein 10 Bit Wert raus. Aber wieso arbeitet er dann in 13 Zyklen und nicht in 10?

Die Formel für den Wert des ADC lautet ja wie folgt:

ADC=(Vin*1024)/Vref (Brüche lassen sich hier schlecht darstellen)

Hab als Beispiel einen Wert Vin von 2,65V und Vref von 5V angenommen. Komme auf einen Wert von rund 543.
Wenn ich das ganze jetzt über die Sukzessive Approximation versuche kommen ich, wenn ich das ganze in 10 Zyklen mache, auf den binären Wert 0100001111, was dezimal 271 macht.

Ich habe davon ein Diagramm mit 13 Zyklen in den Anhang gepackt. Vielleicht kann mir jemand von Euch sagen was ich falsch mache?

Wäre Euch echt dankbar.

Besserwessi
17.04.2010, 14:59
Der 10 Bit Wandler durch Sukkzessive Approximation wird auch schon 10 Schritte machen, um je 1 Bit zu gewinnen. Für die Komplette Wandlung kommt dann unter anderem noch die Sample and Hold Zeit dazu, nach Datenblatt sind das 1,5 Zyken des AD Taktes. Dazu kommt dann vermutlich noch 1/2 Zyklus Pause. Wo der AD Wandler sonst noch extra Zeit braucht, weiss ich nicht genau, aber es könnte gut sein, dass für das 1 te Bit mehr Zeit verwand wird, und ggf. noch etwas Zeit am Ende gebraucht wird. Es wird bei der ersten wandlung noch ein zusätzlicher Abgleich gemacht. Der muß auch noch irgendwo einfließen Der Wandler ist halt noch etwas komplizierter als die einfache sukkzessive Approximation aus dem Lehrbuch.

Die PIC µCs brauchen 11 Zyklen - das aber auf kosten einer kurzen S&H Zeit so daß der Eingang etwas niederohmiger sein muß.

sking86
17.04.2010, 17:30
Danke für die schnelle und ausführliche Antwort.

Das die Zyklen nicht zwangsläufig mit den Schritten zusammenhängen habe ich jetzt verstanden, aber wieso komme ich bei meiner Beispielrechnung nicht auf das richtige Ergebnis?

Hab das jetzt nochmal für 10 Bit gemacht und in den Anhang geschmissen.

sking86
17.04.2010, 17:42
Hier nochmal zu Verdeutlichung.

Soll-Ergebnis:
dezimal 543
binär 0b1000011111

Ist-Ergebnis:
dezimal 271
binär 0b0100001111

Also wenn ich das Ist-Ergebnis um ein Bit nach links verschiebe würde es passen. Aber ich wüsste natürlich noch gerne wieso? Wird der erste Schritt bei der Sukzessiven Approximation nicht mitgezählt?

for_ro
17.04.2010, 17:48
Ich glaube, dass dein erster Schritt Aref=5V keinen Sinn macht. Man würde mit 2,5V, der Hälfte des Max. Wertes anfangen.
Dann wäre der 10. Schritt 2,6514, was wieder eine 0 bekommen würde.
Damit hättest du als Ergebnis
10_0001_1110 = 542
und als berechnetes Ergebnis
2,65*1024/5 = 542,72

Scheint mir ok zu sein.

s.frings
17.04.2010, 19:02
Nach der Wandlung braucht der ADC einen Takt, um das Ergebnis in das ADC Register zu übertragen. Während der ADC sich schrittweise an das Ergebnis heran tastet, verändert sich der Inhalt des ADC Register dadurch praktischerweise nicht.

Das ADC Register ist also NICHT das interne Arbeitsregister des Wandler. Und nun wissen wir, wozu der 13. Takt gut ist.

Da gibt es noch etwas zu beachten: Wenn man den ADC freilaufend einstellt, aktualisiert er das ADC Register fortlaufend mit dem Ergebnis der Messungen und löst dabei jedesmal einen Interrupt aus. Soweit ist noch alles klar. Die Überraschung kommt jetzt:

Wenn Du in der Interrupt Routine den Kanal (Multiplexer) umstellst, dann wirst Du den Wert für den gerade eingestellten Kanal nicht im nächsten Interrupt erhalten, sondern erst im übernächsten.

Denn auch die Kanalumschaltung ist doppelt gepuffert. Während Du den Kanal umschaltest ist der ADC nämlich bereits mit der nächsten Wandlung beschäftigt. Die Umschaltung wird erst nach dieser nächsten Wandlung wirksam, so dass das passende Ergebnis erst nach der übernächsten Wandlung verfügbar ist.

sking86
17.04.2010, 20:06
Ich muss sagen, dass das echt aufschlussreiche Antworten von Euch sind. Danke

Ich finde der ADC hat auch sehr interessante Features.

Hab mich noch nicht an den Freerun-Mode, mit mehreren Kanälen, heran getraut. Bin nämlich noch relativ neu im Mikrocontroller basteln. Werde ich aber demnächst mal in Angriff nehmen.

s.frings
18.04.2010, 18:45
Wenn Du noch mehr analoge Kanäle brauchst, schau DIr den MCP3204 oder MCP3208 an. Diese beiden Chips werden seriell (SPI) angesprochen und sind genau so einfach zu verwenden, wie der interne ADC.