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.
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 ?
Simonium schrieb:> Wenn ich es richtig verstanden habe, unterbricht DMA den normalen> Programablauf um die Samples aufzunehmen ...
Das hast Du aber (sehr) falsch verstanden.
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.
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.
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.
Eine eigene Frage?
Dieser Thread ist über 6 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.