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!
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?
Das Umladen des S&H-Kondensators dauert halt einen Moment und braucht Strom.
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.
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.
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.
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.
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.
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)
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.