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 ?
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
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 hast Du aber (sehr) falsch verstanden.
Er hat halt noch den Z80 im Hinterkopf du Banause.
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.
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.