Forum: Mikrocontroller und Digitale Elektronik Problem: ADC wackelt an AT90CAN128


von Johannes P. (ohanica)


Lesenswert?

Hallo zusammen,

an meinem AT90CAN128 verwende ich von den 8 Eingängen die Kanäle ADC0, 
ADC1 (jeweils Potiausgang, direkt am ADC-Pin) und ADC7 (Stromsensror 
0.25...4.75V). Wenn ich am Poti von ADC0 dreh, dann wackelt die Spannung 
am AD-Pin ADC7, und zwar um knapp 2 V (Stromsensorausgang nicht 
angeschlossen). Dreh ich am anderen Poti, passiert nichts ?!?! obwohl 
alles genau gleich aufgebaut ist. Schließe ich den Stromsensor nun an, 
wackelt die Spannung viel weniger (nur noch ca. 10...12mV) - aber auch 
nur wenn ich an dem einen Poti drehe. Verwende ich einen anderen Kanal, 
zB ADC6 für den Stromsensor, dann tritt genau das gleiche Verhalten auf.

Wenn ich die Pull-ups an den ADC-Pins einschalte dann verfälscht das 
meine Messung (es entsteht offensichtlich ein Spannungsteiler), dafür 
wackelt sie aber nicht mehr.

Hat jemand sowas schon erlebt? Oder ist der AD-Wandler des uC hin? Was 
geht da ab?

Danke für Tipps bzw. Aufklärung!

Mg,
Johannes

von Dirk H. (arm-dran)


Lesenswert?

Hallo Johannes,

welche Widerstandswerte habe Deine Potis ?
Hast Du Dämpfungskondesatoren über die Potieingänge geschaltet?

von Wolfram (Gast)


Lesenswert?

Verstehe ich das richtig, du versuchst an einem nicht angeschlossenen 
Pin die Spannung zu messen?

von Dirk H. (arm-dran)


Lesenswert?

Außerdem,

an einem unbeschaltetem AD-Eingang ( mit welchem Messgerät) ist heikel.
Der Widerstand des Meßgerätes selbst stellt schon eine Fehlerquelle dar.
Wenn schon denn schon solltest Du Dir gemessenen AD Werte über die 
Wandlung des Controllers ansehen.
Du hast doch sicher ein Display dran oder ?

von Johannes P. (ohanica)


Lesenswert?

Hallo,

die Widerstände der Potis sind 10k. Dämpfungskondenstoren hab ich nicht 
eingebaut - müsste man die von Masse zum Poti-Ausgang schalten? Was für 
Kondensatoren/Werte nimmt man da?

Ich hab einfach mal die AD-Wandlung gemacht, ohne den Pin zu beschalten 
(hängt frei in Luft) - das ist aber natürlich nicht Sinn und Zweck der 
Sache... Dabei wackelt die Spannung halt stark (ok, das kann ja von mir 
aus sein). Aber sie wackelt nur, wenn ich an einem der beiden Potis 
drehe, das wundert mich. Warum nicht auch beim anderen? Und wenn ich 
dann den  Ausgang des Stromsensors dranhänge messe ich die Spannung, das 
funktioniert auch sehr gut und genau, aber die Spannung wackelt halt ein 
wenig wenn ich an dem einen Poti drehe.
Die AD-Werte wandle ich in einen Stromwert um, den ich Anzeige (auf 
einem LC-Display :) ). Die Änderung dieses Wertes entspricht 2-3 LSB des 
ADC-Wertes. Multipliziert mal der Auflösung des AD-Wandlers (4,8mV) 
ergibt das die Werte um 10..12mV, genau die Differenz, die ich mit dem 
Multimeter auch messe.

Irgendwie ist die Sache komisch...

Mg,
Johannes


von Johannes P. (ohanica)


Lesenswert?

Kaum beschreibt man seine Probleme, fängt man an "richtig" zu suchen...

In Beitrag "Mega8 ADC Meßproblem" steht: "...aber meiner
Erfahrung nach muss nach dem Umschalten des MUX eine Pause von min. 40µs
'rein, sonst kommt Mist 'raus. Probier's einfach mal mit Pausen zwischen
den Kanälen. "

Vielleicht liegt es daran, daß ich eine Wandlung hinter der nächsten 
mache. Nach dem Auswählen des Kanals muss man scheinbar zuerst ein wenig 
warten. Im Datenblatt des AT90CAN128 steht (bei mir auf seite 272) The 
user is thus advised  not to write  new channel or reference selection 
values to ADMUX until one ADC clock cycle after ADSC is written. Leider 
steht aber nichts dergleichen im Abschnitt "Operating the ADC"...
Ich werds mal mit einer kleinen Pause nach dem ADMUX = KANAL7 - Befehl 
probieren.

Datenblatt lesen bildet - hoffentlich liegt es daran.

Mg,
Johannes

von Dirk H. (arm-dran)


Lesenswert?

Hallo Johannes,

die Kondensatoren sind nur dazu gedacht, das der gemessenen Wert der 
Potis
nicht ständig hin und her zappelt. Eine gewisse Trägheit sozusagen.
C = 10n zwischen Gnd und Schleifer.

Du mußt freilich Pausen zwischen den Wandlungen machen. Normalerweise
gibt es eine Art Busy Flag, welches angibt, wann die Wandlung beendet 
ist.
Deswegen haben AD Wandler auch Sample and Hold Stufen.
Ich habe bei dem Controller noch nicht nachgeschaut, werde ich später 
aber mal tun.
Melde mich dann hier nochmal im Forum.

von Dirk H. (arm-dran)


Lesenswert?

Hallo Johannes,

habs mir grad mal angesehen.

65-260µs Conversion Time
bis zu 15Ksps

den freerunning mode würde ich nicht benutzen.
Beim lesen der Potis mußt du (sofern es ein 270 oder 300° Poti ist)
sowieso eine Filterung der unteren Bits vornehmen.
Bei 10Bit kann keiner mehr am Poti drehen, ohne das der Wert zappelt.

Beim anderen AD Eingang. Wie hoch ist dort die Strombelastung?
Hast Du die AD-Referenz verwendet?
Lies mal das Kapitel noise reduction.

Gruß
Dirk

von Wolfram (Gast)


Lesenswert?

@Johannes Philippi:
Wenn dein Eingang nicht beschaltet, ist ist er sehr hochohmig gegen 
Masse
für den ADC ist irgendetwas zwischen 20k und 100k. Dein freier Pin ist 
induktiv und kapazitiv mit JEDEM Gegenstand im Raum gekoppelt. Er ist 
wie eine kleine Antenne. Da er sehr hochohmig ist verschiebt sich das 
Potential, was du als Spannungsänderung mißt. Du kannst ja mal den Pin 
auf eine definiertes Potential legen und ihn dann wieder unbeschaltet 
messen. Er ist wie ein kleiner Kondensator ca 10pF. Mit jedem 
Samplevorgang entlädst du ihn ein bißchen, wie stark kommt auf den ADC 
an.


Ansonsten halte dich an das Datenblatt, nicht an zitierten Thread, wer 
eine 10fach zu hohe Samplerate an den ADC anlegt muss sich nicht wundern 
wenn da nur noch Schrott rauskommt.

von Johannes P. (ohanica)


Lesenswert?

Hallo Dirk, hallo Wolfram,

danke für die Tipps. HAbe gerade ausprobiert zwischen ADMUX-Auswählen 
und Start Conversion eine Zeit lang zu warten (16us...100us). Das 
Ergebnis bleibt immer das gleiche. Ich habe dann zwischen alle Befehle 
eine Warteschleife eingefügt (16us). Die drei AD-Wandlungen mache ich 
jede Sekunde einmal hintereinander. Hat alles nichts gebracht... ich 
vermute, daß das Problem nicht in meiner Software liegt.
Den Prescaler für den ADC-clock hatte ich auf 64 (=4us-Takt für den 
ADC). Jetzt hab ich ihn auf 128 gesetzt ==> alles beim Alten... keine 
Verbesserung

Das mit der Antenne ist mir bewusst, aber daß sich deswegen die Spannung 
um mehrere Volt ändert glaube ich kaum, einige mV oder zig mV würde ich 
aus solchen Gründen akzeptieren (rein gefühlsmäßig, bin kein HF-Fritze). 
Und warum passiert das Ganze nur beim Drehen einem Poti? Das andere ist 
2cm nebenan und hat überhaupt keinen Effekt. Die Potis sind genau 
gleich...

Den free-running mode verwende ich gar nicht, sondern ganz normal den 
single conversion mode.

Ich habe den uC im  Verdacht, daß der ein wenig geschädigt ist... wie, 
oder warum kann ich leider nicht sagen.

Jetzt hab ich noch eine Idee: vielleicht ist der AD-Kanal von dem Poti 
"kaputt", ich könnt ja den einmal an einen anderen Kanal hängen und 
schauen was passiert...

Mg,
Johannes

von Dirk H. (arm-dran)


Lesenswert?

Ändere doch mal die Konvertierungsreihenfolge.

AD-Eingang zu erst, dann die Potis.

von Johannes P. (ohanica)


Lesenswert?

Genau, anstatt Poti1, Poti2, Sensor mal Sensor,Poti1,Poti2 probieren.
gute Idee, danke.

Mg,
Johannes

von Johannes P. (ohanica)


Lesenswert?

Hallo!

jetzt hab ich beides probiert: Reihenfolge ändern (also Sensor-ADC zu 
erst, dann Potis) und Kanal des "spinnenden Potis" gändert, hat beides 
nichts geholfen...Alles nach wie vor beim gleichen Verhalten. Ich 
versteh die Welt immer weniger. "Manchmal braucht man einfach eine gute 
Idee zum weiterkommen." Darauf wart ich jetzt mal...

Mg,
Johannes

von Johannes P. (ohanica)


Lesenswert?

es kann doch nicht am Poti liegen?!?! das ist doch kein Funkmast!
Johannes

von Dirk H. (arm-dran)


Lesenswert?

Was hast <du denn momentan am AD-Port angeschaltet?

von Johannes P. (ohanica)


Lesenswert?

Am AD-Port hängen drei zu messende Teile: zwei Potis und der 
StromSensor.

Die Pins 2 und 3 des ADPorts (PortF) verwende ich um zwei Schalter 
anzuschließen. Pin 2 und 3 sind also als Input konfiguriert (DDRF- 
Register).

Hätte ich vielleicht gleich am Anfang schreiben sollen... Hmm, kann es 
damit aber zusammenhängen, daß ein AD-Kanal einen anderen beeinflußt? 
Also sowas hab ich noch gemacht, und bislang keine Probleme gehabt. Aber 
wer weis... vielleicht hatte ich es ja auch nur nicht gemerkt.

Mg,
Johannes

von Johannes P. (ohanica)


Lesenswert?

Hab grad etwas im Netz nach solchen Störungen gesuht, aber nicht viel 
gefunden. Hat jemand einen Tipp dazu? Warum ein AD-Kanal einen anderen 
beeinflusst?

mg,
Johannes

von tom (Gast)


Lesenswert?

leg mal die nicht verwendeten AD-Eingänge auf Masse oder ein anderes 
festes Potential. Wenn die offen sind gibts auf jeden Fall Störungen.

von Hauke Radtki (Gast)


Lesenswert?

AVCC richtig anständig mit VCC verbunden (über LC filter) und AGND auch 
anständig mit GND (sternförmige masseführung)

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.