Forum: Mikrocontroller und Digitale Elektronik STM32F407 ADC Übersprechen zwischen Kanälen


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von M. Н. (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag und frohe Feiertage zusammen,

Für ein kommendes Projekt teste ich gerade den ADC des STM32F407. Das 
Ganze ist ein Dev-Board aus Fernost (Sowas hier: 
https://www.ebay.de/i/172870434182?chn=ps&norover=1&mkevt=1&mkrid=707-134425-41852-0&mkcid=2&itemid=172870434182&targetid=526297542870&device=c&mktype=pla&googleloc=1004026&poi=&campaignid=1669295758&mkgroupid=63847509999&rlsatarget=pla-526297542870&abcId=1139676&merchantid=112395739&gclid=Cj0KCQiA0ZHwBRCRARIsAK0Tr-pfXnzSIu8iQh4PACINfG51vnbjMpgYp2teiGjk4XXvRuGuUzycAcoaAlSlEALw_wcB). 
Ist allerdings schon etwas verbastelt :).

Ich habe ADC1 im kontinuierlichen SCAN Mode in Betrieb. Die Sequenz 
misst 3 Kanäle in folgender Reihenfolge:

1) ADC_IN2 (1 Hz Sinus von Funktionsgenerator)
2) Interner Temperatursensor (ADC_IN16)
3) Interne Bandgap-Referenz (ADC_IN17)

Ich beobachte nun in meinem Debugger, dass sich irgendwie der Sinus vom 
Eingang auf die darauffolgende Messung des Temperatursensors auswirkt. 
Die Swankung dieses Rippels beim Temp-Fühler sind über 100 LSB; 
dargestellt in "adc1-stm32f4.png"

Woran kann das liegen? Zum Testen, habe ich die Sequenzreihenfolge 
verändert:
1) ADC_IN2 (1 Hz Sinus von Funktionsgenerator)
2) Interne Bandgap-Referenz (ADC_IN17)
3) Interner Temperatursensor (ADC_IN16)

Daraus ist dann das Verhalten in "adc-sequenz-getauscht.png" entstanden.

Ist es normal, dass Messungen so stark von der vorherigen Abhängen? Die 
Messung der Referenzspannung ist auf diese Weise unbrauchbar, auch beim 
Temperaturfühler sieht man einen kleinen Effekt. Bei der niedrigen 
Frequenz des Sinus (1 Hz) sollte ein Überkoppeln eigentlich nicht zu 
sehen sein. Um ein Problem mit dem Referenzeingang auszuschließen, habe 
ich weitere 100 nF (SMD 0603) und 10 uF (SMD 1210) an den VREF Pin 
gehängt. Diese sitzen recht nah am Pin. Eine Messung mittles Oszi zeigt, 
dass der VREF Pin ein gewisses Rauschen + HF Krams aufweist (ca. 50 
mVpp), aber diese Periodische Störung vom Sinus an ADC_IN2 ist nicht am 
Referenzpin zu sehen.

Kennt ihr solche Effekte? Was kann ich tun, damit das Ganze besser wird?

Meine nächsten Ansätze sind:
Samplingzeiten der Channels hochsetzen  und wenn das nichts bringt den 
externen Eingang mittels ADC2/3 zu messen.

Frohen Feiertag!

von M. Н. (Gast)


Angehängte Dateien:

Lesenswert?

Okay,

ich habe die Samplezeit der Temperatur- und Refrenzmessung auf 28 Zyklen 
hochgestellt. Und schwupps, die Störungen sind nicht mehr zu sehen.

Jetzt ist trotzdem meine Frage: Warum? Sind die internen Signale so 
"hochohmig" angebunden?

von Info Deliverer (Gast)


Lesenswert?

Das Umladen des S&H-Kondensators dauert halt einen Moment und braucht 
Strom.

von Einer K. (Gast)


Lesenswert?

M. H. schrieb:
> Jetzt ist trotzdem meine Frage: Warum? Sind die internen Signale so
> "hochohmig" angebunden?

(meine STM32 Kenntnisse sind eher , naja, )

Dir fehlte offensichtlich die Zeit zum Umladen des Sample&Hold 
Kondensators.
Ein Spannungsfolger/Impedanzwandler vor dem Eingang, kann das Umladen 
beschleunigen.

Das Datenblatt sollte die Details benennen und Empfehlungen geben.

von Guest (Gast)


Lesenswert?

M. H. schrieb:
> Jetzt ist trotzdem meine Frage: Warum? Sind die internen Signale so
> "hochohmig" angebunden?

Sind Sie nicht aber es ist doch logisch, dass das SH eine Zeit x braucht 
um den richtigen Wert an zu nehmen. Je mehr Strom dir zur Verfügung 
steht desto schneller geht das. Daher macht man wie bereits erwähnt 
eigentlich immer einen Impedanzwandler vor den ADC um diesen 
entsprechend treiben zu können. Zumal wenn man schnell messen möchte.

Ich rate mal, du hast falls überhaupt ein RC-Glied an deinem Eingang, 
das vermutlich noch einen recht großen Widerstand beinhaltet. Das mag 
bei den Bastelprojekten für Arduino mit den langsamen ADCs funktionieren 
in der Praxis aber eher nicht.

Schau dir für zukünftige Projekte mal aktive Filter an. Beispielsweise 
Sallen-Key. Du kannst natürlich auch die Sample Zeit hochstellen wenn du 
die Geschwindigkeit nicht brauchst aber selbst dann schadet das nicht.

von M. Н. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ein Spannungsfolger/Impedanzwandler vor dem Eingang, kann das Umladen
> beschleunigen.

Guest schrieb:
> Sind Sie nicht aber es ist doch logisch, dass das SH eine Zeit x braucht
> um den richtigen Wert an zu nehmen. Je mehr Strom dir zur Verfügung
> steht desto schneller geht das. Daher macht man wie bereits erwähnt
> eigentlich immer einen Impedanzwandler vor den ADC um diesen
> entsprechend treiben zu können. Zumal wenn man schnell messen möchte.

Wie bereits geschrieben: Die betroffenen Signale sind Chipintern. Da 
kann ich keinen Einfluss drauf nehmen. Die extern angebundenen Signale 
sehen i.O. aus.
Ich hatte nur irgendwie erwartet, dass man bei den internen Signalen des 
STMs auch kürzere S&H-Zeiten fahren kann, da das sonst den kompletten 
ADC ausbremst.

Ich werde das einfach auf einen anderen ADC auslagern, dann wird die 
Samplerate des "Haupt"-ADCsnicht beeinflusst.

von Motormensch (Gast)


Lesenswert?

Hab ich leider auch schon erlebt. Ursache ist ganz
einfach, dass bei mehreren Channeln immernoch der
selbe S&H-Kondensator verwendet wird. Hat dieser
nicht Zeit zu fast 100% den neuen Spannungswert
anzunehmen, z.b. durch einen externen Widerstand,
ist noch ein Teil von der alten Spannung auf dem
Kondensator, und beeinflusst das Ergebnis.

Du kannst es dir wie:
1
Spannung_Kondensator = 10% letzte Messung + 90% diese Messung
vorstellen.

von noreply@noreply.com (Gast)


Lesenswert?

M. H. schrieb:
> Ich werde das einfach auf einen anderen ADC auslagern, dann wird die
> Samplerate des "Haupt"-ADCsnicht beeinflusst.

Es gibt ellenlange Abhandlungen zu kapazitiven ADC's.

Lesen und verstehen.

von void (Gast)


Lesenswert?

Gem. Datenbltt brauchen sowohl die Interne Bandgap-Referenz (ADC_IN17) 
als auch die Interner Temperatursensor (ADC_IN16) einen Samplingtime von 
10us. (DocID022152 Rev 8 Table 69, 72)

von noreply@noreply.com (Gast)


Lesenswert?

@void
Danke.
@Nachricht an mich.
Bei Abfrage des internen Temperatursensors von STM32F0 mindestens eine 
Sambletime von 55.5 Cycles bei 14 Mhz ADC Frequenz beachten. Bei Messung 
von Vrefint ähnliches beachten.

von M. Н. (Gast)


Lesenswert?

void schrieb:
> Gem. Datenbltt brauchen sowohl die Interne Bandgap-Referenz (ADC_IN17)
> als auch die Interner Temperatursensor (ADC_IN16) einen Samplingtime von
> 10us. (DocID022152 Rev 8 Table 69, 72)

Alles klar. Danke. Das habe ich nicht gesehen.
Dann werde ich mit ADC1 die interen Signale samplen und mit ADC2 die 
externen.

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.