Forum: Mikrocontroller und Digitale Elektronik Frage zum STM32 - ADC Auswertung


von Simonium (Gast)


Lesenswert?

Der Mikrocontroller meiner Wahl (STM32L433, 80MHz) soll an einem Sample 
and Hold ein relativ kurzlebiges Signal messen, bzw. die Hold-Time 
möglichst kurz lassen.

Nun hat ST in einer App-Note aufgezeigt, das der ADC im "Normalbetrieb" 
extrem ungenau ist. Biespielsweise 16.28% bei 5 MSPS und 3V 
Eingangsspannung. Das ist natürlich sehr unschön. Nun empfielt ST den 
Wert zu mitteln und gibt an das der Fehler bei Mittelwert über 6 Samples 
0.13% und bei 8 Samples 0.006% ist. Macht man 8 Samples und löscht die 4 
die am meisten daneben sind, erreicht man 0.04% was erheblich besser ist 
als die 0.38% von 4 Sampels.

Also bevorzuge ich die Variante mit 8 Samples.

Nun kenne ich nur die Auswertung des ADC mit dem DMA. Bei 5MSPS würde es 
aber ja bedeuten das der DMA alle 200ns etwas tun muss, und vorallem 
wird er für die meiste Zeit garnicht bentöigt, denn es braucht nur 
gesampelt werden, wenn ein Triggersginal ansteht.

Kann der ADC auch anderst ausgewertet werden? Also z.b. mit einer 
Funktion? Ich habe schon gesucht, aber ich finde nicht welche funktion 
der DMA aufruft, dann könnte man die ja direkt auswerten. Das ganze 
sollte natürlich auch ziemlich schnell sein.

Gibt es irgendwo Tipps/Anleitungen wie man in Fällen von schnellen 
Abläufen Programmiert? Ich habe auch schon Code-Fragemente gesehen wo 
z.b. die I/O anderst angesprochen werden, weil die ST Bibliothek 
scheinbar "zu langsam" war.

von MaWin (Gast)


Lesenswert?

Simonium schrieb:
> aber ich finde nicht welche funktion der DMA aufruft

Keine. Daher heisst er ja DMA, D für direct.

Aber man kann den ADC auch aus einer Funktion ansprechen. Über HAL 
bekommt man aber so weit ich weiss keine 1Msps.

Auch höre ich von dir das erste Mal, dass der ADC so ungenau sein soll. 
Normalerweise kommen 10 sinnvolle bit raus.

Welche AppNote war es denn ?

von Simonium (Gast)


Lesenswert?

Ich benötige 5MSPS, aber natürlich nicht dauerhaft, sondern nur für 8 
Samples nach einem Triggersignal.

Wenn ich es richtig verstanden habe, unterbricht DMA den normalen 
Programablauf um die Samples aufzunehmen, wen man also davon ausgeht das 
pro DMA Messsung ein Zyklus benötigt wird, sind das 5MHZ, was die 
Taktrate des MCU von 80MHz auf 75Mhz verringert. Für das Umwandeln der 8 
gemessenen werte sind 517 Zyklen notwendig gem. ST

Gefunden habe ich es hier:
AN4073
https://www.st.com/content/ccc/resource/technical/document/application_note/a0/71/3e/e4/8f/b6/40/e6/DM00050879.pdf/files/DM00050879.pdf/jcr:content/translations/en.DM00050879.pdf

von . . (Gast)


Lesenswert?

Simonium schrieb:
> Wenn ich es richtig verstanden habe, unterbricht DMA den normalen
> Programablauf um die Samples aufzunehmen ...

Das hast Du aber (sehr) falsch verstanden.

von Taiga Wutzzz (Gast)


Lesenswert?

> Das hast Du aber (sehr) falsch verstanden.

Er hat halt noch den Z80 im Hinterkopf du Banause.

von Jürgen W. (Firma: MED-EL GmbH) (wissenwasserj)


Lesenswert?

Wie kommst Du auf den Unsinn, daß der Fehler 16% betragen soll? Steht 
doch im Datenblatt, daß der ADC 12 Bit Auflösung bei 5,33MSPS auf den 
schnellen Kanälen (was das auch immer sein mag) kann; die ENOBs sind mit 
10.4 bit angegeben.

Jedweder Fehler kann also nur durch eine mangelhaft äußere Beschaltung 
auftreten, nicht aber durch den ADC selbst.

von Simonium (Gast)


Lesenswert?

Es steht so in der ST-Appnote? Es ist ja auch nicht so das der ADC 
immer ungenau ist, somit kann das Datenblatt schon stimmen, nur setzt 
es vermutlich voraus das die Software entsprechend geschrieben ist, das 
wird ja in dem Datenblatt so erklärt, man kommt auf 0.04% Genauigkeit. 
Meine Frage war aber eher wie denn die beschriebene Software erstellt 
werdne kann.

von Bauform B. (bauformb)


Lesenswert?

Simonium schrieb:
> Nun empfielt ST den Wert zu mitteln und gibt an das der Fehler
> bei Mittelwert über 6 Samples 0.13% und bei 8 Samples 0.006% ist.
> Macht man 8 Samples und löscht die 4 die am meisten daneben sind,
> erreicht man 0.04%.
> Also bevorzuge ich die Variante mit 8 Samples.

Hast du mal 2 bis 3 Seiten weiter geblättert? In der AN4073 geht es doch 
vor allem darum, dass Flash-Zugriffe den ADC stören. Also werden drei 
Flash-Betriebsarten verglichen. Und die von dir zitierten Fehler 
erreichst du mit der ungünstigsten Betriebsart.

In der Betriebsart laut Tabelle 4 sind schon die Rohdaten fast so gut 
und einfach nur 4-fach gemittelt ist schon besser.

Simonium schrieb:
> Ich benötige 5MSPS, aber natürlich nicht dauerhaft, sondern nur für 8
> Samples nach einem Triggersignal.

Unter den Umständen geht evt. eine 4. Betriebsart: du könntest die CPU 
während der Wandelzeit komplett anhalten = noch weniger Störungen.

Die AN4073 handelt von Chips die 1 oder 2 Generationen älter sind als 
dein L433. Das Flash ist beim F20x 128Bit breit, beim L433 64Bit = halb 
so viele Störungen. Die drei Betriebsarten aus der AN sind aber noch so 
ähnlich möglich.

.. schrieb:
> Simonium schrieb:
>> Wenn ich es richtig verstanden habe, unterbricht DMA den normalen
>> Programablauf um die Samples aufzunehmen ...
>
> Das hast Du aber (sehr) falsch verstanden.

Das kommt darauf an. Simonium hätte Recht, wenn das Programm aus dem RAM 
ausgeführt würde und per DMA in das gleiche RAM geschrieben würde. Der 
Bus kann eben auch nur 80MHz. Allerdings hat der L433 zwei getrennte 
RAMs mit eigenem Bus und die CPU benutzt zum Flash hin einen dritten. Im 
besten Fall sind 5 parallele Transfers möglich.

Dazu kommt, dass der L433 in Hardware mitteln kann (2,4,8,16-fach). D.h. 
auch für 8 Samples ist nur ein DMA-Transfer nötig -- und keine 
Rechnerei. Also, alles gut.

Ach ja, ein ADC hat ja diverse verschiedene Fehler. Der 
Verstärkungsfehler kann gut in Prozent angegeben werden, aber das sind 
ganz andere Prozente als die aus der AN.

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.