Hallo Forum, ich möchte mir ein mehrkanaliges DSO auf Basis eines STM32F4 Discovery board bauen. Weiss aber nicht genau ob mein Ansatz falsch oder richtig ist . Vorraussetzungen: 8 Kanäle 10-12 Bit Samplerate von 1Mhz ~ 100Khz Analogbandbreite je Kanal. STM32F4 Discovery board Programmierung in C Ausgabe der Daten über USB an PC (Windows) und Darstellung der Kurven. Wie stellt man den sicher daß die 8 Kanäle zeitlich synchron sind? Meine idee wäre: 8 x int_16 Array mit der größe 800 (entspricht der Horizontalen Pixel anzahl der Anzeige) Diese Arrays werden in einer ISR (jede µs) mit den Werten der DACs befüllt (DMA?) Ist das Array "voll" wird es per USB an den PC übertragen. Trigger lass ich erst mal außen vor! Ist dies vom Prinzip der richtige Weg oder ist es total falsch? Geht das von der Geschwindigkeit auch wenn ich später extern Wandler nehmen möchte? Hier auch die Antwort warum ich so etwas brauche: Für mein polyphones Synthesizer Projekt muss ich immer 8 Steuerspannungen, Hüllkurven, oder Modulationsgeneratoren im Blick haben und auch deren Synchronität beurteilen können. Vielen Dank im Voraus Gruß Oliver
:
Bearbeitet durch User
Hat der nicht nur 3 ADCs? Also maximal 3 Messungen exakt gleichzeitig ...
Andreas K. schrieb: > Hat der nicht nur 3 ADCs? Also maximal 3 Messungen exakt gleichzeitig > ... Hallo Andreas, Auszug aus dem Datenblatt: << 2.2.35 Analog-to-digital converters (ADCs) Three 12-bit analog-to-digital converters are embedded and each ADC shares up to 16 external channels, performing conversions in the single-shot or scan mode. In scan mode, automatic conversion is performed on a selected group of analog inputs. Additional logic functions embedded in the ADC interface allow: • Simultaneous sample and hold • Interleaved sample and hold The ADC can be served by the DMA controller. An analog watchdog feature allows very precise monitoring of the converted voltage of one, some or all selected channels. An interrupt is generated when the converted voltage is outside the programmed thresholds. To synchronize A/D conversion and timers, the ADCs could be triggered by any of TIM1, TIM2, TIM3, TIM4, TIM5, or TIM8 timer. >> liest sich für mich dass ich bis zu 16 analoge Kanäle lesen kann. Aber wenn es mit den internen ADCs nur 3 Kanäle sind ist das für die generelle Vorgehensweise auch egal. Gruß Oliver
Oliver F. schrieb: > Samplerate von 1Mhz ~ 100Khz Analogbandbreite je Kanal. > STM32F4 Discovery board 8 Kanäle mit 1MHz Samplerate gibt 8MS/s. Das schaffen die STMs meines Wissens nach nicht. Dann bräuchtest Du einen externen DAC. Oliver F. schrieb: > Diese Arrays werden in einer ISR (jede µs) mit den Werten der DACs > befüllt (DMA?) > > Ist das Array "voll" wird es per USB an den PC übertragen. Das sind dann 16MB/s bei 8MS/s. Nicht lasch aber braucht schon auch eine sorgfältig aufgesetzte Datenpumpe, denn du hast die Werte dreimal zu bewegen: einmal vom ADC/SPI in den Speicher, einmal vom Speicher auf's Display und einmal von Speicher zum USB (das könnte man evtl auch sein lassen), sind netto 48MB die Deine DMA bewegen soll. Und rechnen soll der Pruzessor auch noch. Hmm, da bleibt nicht viel Rechenleistung übrig. Also wirst Du nicht mit 1MHz / 800pixel = 1,25kHz refreshen können sondern erstmal samplen mit DMA, dann auswerten, dann Anzeigen und USB transferieren und gleichzeitig neu samplen (aber dann eben nicht mehr rechnen). Was dann effektiv an Displayrate bleibt muss mann sehen. rgds
Oliver F. schrieb: > Wie stellt man den sicher daß die 8 Kanäle zeitlich synchron sind? Wenn Du zeitlich synchron genau nimmst, dann sind es nur 3 Kanäle, jeweile einer pro ADC. 16 Kanäle kannst Du zwar einlesen, aber nicht alle zum exakt gleichen Zeitpunkt. Gruß, Stefan
6a66 schrieb: > Das sind dann 16MB/s bei 8MS/s. Nicht lasch aber braucht schon auch eine > sorgfältig aufgesetzte Datenpumpe, denn du hast die Werte dreimal zu > bewegen: einmal vom ADC/SPI in den Speicher, einmal vom Speicher auf's > Display und einmal von Speicher zum USB (das könnte man evtl auch sein > lassen), sind netto 48MB die Deine DMA bewegen soll. Hallo, Hier habe ich mich schlecht ausgedrückt am STMBoard ist kein Display angeschlossen. Die 800 Pixel sind die vom Fenster(Anzeigebereich) auf dem PC. Gruß Oliver
Oliver F. schrieb: > Für mein polyphones Synthesizer Projekt muss ich immer 8 > Steuerspannungen, Hüllkurven, oder Modulationsgeneratoren im Blick haben Muß man dafür denn so schnell abtasten? Klär mal Deinen tatsächlichen Bedarf.
m.n. schrieb: > Oliver F. schrieb: >> Für mein polyphones Synthesizer Projekt muss ich immer 8 >> Steuerspannungen, Hüllkurven, oder Modulationsgeneratoren im Blick haben > > Muß man dafür denn so schnell abtasten? Klär mal Deinen tatsächlichen > Bedarf. Hallo, geht auch mit 10Khz Bandbreite da die Hüllkurven aktuell eine Updaterate von 1 kHz haben. Dies möchte ich später nach oben hin optimieren. Möchte aber auch bis in den Audio bereich messen. Gruß Oliver
Oliver F. schrieb: > geht auch mit 10Khz Bandbreite da die Hüllkurven aktuell eine Updaterate > von 1 kHz haben. Dies möchte ich später nach oben hin optimieren. Möchte > aber auch bis in den Audio bereich messen Dann taste mit 10 kHz ab. Wenn Du den/die ADCs mit 1 µs Zyklus betreibst, hast Du spätestens alle 10 µs alle acht Kanäle eingelesen. Alles kein Problem.
Ich möchte dir davon abraten, ein Discovery Board als Oszilloskop zu verwenden. Es wird sicher machbar sein, jedoch wird es kein professionelles Messgerät sein. Probleme hierbei sind: - Die drei ADCs des STM32F4 können zusammen bis zu 7,2MSPS erreichen. Also schaffen diese bei 16 Kanälen nur bis zu 450kSPS, und das auch nur im optimalen Fall bei voller Auslastung. - Die ADCs des STM sind alles andere als genau. Je nach Board design kann man etwa 6 bis 8 Bit der möglichen 12 Bits auswerten, weil der Rest in Rauschen untergeht. - Und da kommt man schon zum nächsten Punkt: Das Discovery Board ist nicht für Analogmessungen ausgelegt. - Die USB-Schnittstelle des Discovery Boards hat nur USB Full Speed, also schaffst du maximal 1,5MB/s, wenn sonst niemand auf dem Bus unterwegs ist. Aber wie gesagt, machbar ist es sicher, aber es wird nicht leicht und du musst Abstriche machen. Ein Kommerzielles Produkt, was etwa das kann, was du benötigst: Der Saleae Logic 8 https://www.saleae.com/ Der hat 10bit und kann mit 8 kanälen bis zu 2,5MSPS. Verbaut ist hier ein Spartan6
Little B. schrieb: > - Die ADCs des STM sind alles andere als genau. Je nach Board design > kann man etwa 6 bis 8 Bit der möglichen 12 Bits auswerten, weil der Rest > in Rauschen untergeht. Dann machst Du offensichtlich grundlegende Sachen falsch! > - Und da kommt man schon zum nächsten Punkt: Das Discovery Board ist > nicht für Analogmessungen ausgelegt. So ein Blödsinn! > Also schaffen diese bei 16 Kanälen nur bis zu 450kSPS, Hör auf zu jammern; das ist Faktor 45 schneller als erforderlich.
Hallo, Dann werde ich meine Specs massiv nach unten korrigieren: Ich starte dann mit 100kSPS~ etwa 10kHz Analogbandbreit langt für Hüllkurven und Modulation. Wenn die internen Wandler so schlecht sind kommen später halt externe dran. Gruß Oliver
Little B. schrieb: > - Die ADCs des STM sind alles andere als genau. Je nach Board design > kann man etwa 6 bis 8 Bit der möglichen 12 Bits auswerten, weil der Rest > in Rauschen untergeht. Man kommt problemlos auf 1-2LSB Rauschen herunter. und auf <3 LSB kommt man ganz leicht, ohne Hirnschmalz in die Schaltung zu investieren. Ich habe schon öfter einfache analoge Sachen mit STM32 umgesetzt, und das ging bisher immer auf <3LSB Rauschen, auch mit 12 Bit Auflösung. Der Kardinalsfehler der meisten ist halt, die verrauschte digitale Versorgung als 1:1 als Referenz oder Analogversorgun zu verwenden. Nimmt man die als Referenz, dann hat man den ganzen Rippel der Versorgung gleich in der Messung. Und 5mV Rippel sind nicht viel für einen Schaltregler, aber schon mal schnell 6 LSB Rauschen in der Messung... @Topic: Alleine das RAM ist schon viel zu klein! Dazu die Samplerate: Ein billiges Rigol hat 1GSPS, der STM32 schafft so 8MSPS. Da reden wir von Faktor 125. Der STM32F4 ist zum steuern von Toastern oder Heizungen gedacht, für ein Oszilloskop braucht man schon eine ganz andere Kategorie.
Ich denke, der TS hat sich mit "Oszilloskop" etwas unglücklich ausgedrückt. Seine wahren Anforderungen sind viel niedriger als es dieses Wort suggeriert. Und damit auch locker mit dem STM32F4 machbar. Gruß, Stefan
Oliver F. schrieb: > Ich starte dann mit 100kSPS~ etwa 10kHz Analogbandbreit langt für > Hüllkurven und Modulation. Gut, fang erst einmal mit erreichbaren Vorgaben an. Wichtiger als die Erfassung wäre meines Erachtens, den Transport der Daten hinreichend schnell zu organisieren. Viel Erfolg!
m.n. schrieb: > Little B. schrieb: >> - Die ADCs des STM sind alles andere als genau. Je nach Board design >> kann man etwa 6 bis 8 Bit der möglichen 12 Bits auswerten, weil der Rest >> in Rauschen untergeht. > > Dann machst Du offensichtlich grundlegende Sachen falsch! > >> - Und da kommt man schon zum nächsten Punkt: Das Discovery Board ist >> nicht für Analogmessungen ausgelegt. > > So ein Blödsinn! > >> Also schaffen diese bei 16 Kanälen nur bis zu 450kSPS, > > Hör auf zu jammern; das ist Faktor 45 schneller als erforderlich. Ich untermauer meine Aussage mal mit ein paar Quellen Beitrag "STM32 schwankende ADC Werte..PULL Widerstände steuern" http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00050879.pdf Hier wird genau das Problem beschrieben. ST ist das bekannt und hat deshalb eine Application Note veröffentlicht. (Hier wird sogar vorgeschlagen, wegen der Ungenauigkeit Mittelwerte zu bilden). Auf dem Discovery Board wird Vref mit Vdd versorgt, dazu noch (vermutlich) lange Messleitungen und Masseschleifen, dann noch USB auf der selben Platine. So komme ich auf die pessimistische Einschätzung von 8 nutzbaren Bits. Für den STM32F7 gibts demoapplikationen für ein DSO, aber nur 1-kanalig. Dieses ist schnell mit STQube zusammen geklickt und wurde bei dem STM32F7-Handson demonstriert. Du musst nur alle drei ADCs verwenden und die Kanäle gleichmäßig auf diesen verteilen. Der DMA füllt dann einen Puffer, den du Anschließend über USB raus haust. Aber vergiss nicht, dass du langsamer senden kannst, als du samplen kannst! Entweder Samplerate deutlich reduzieren, oder Fenster-weise übertragen, oder One-Shot den Speicher voll laufen lassen und dann erst alles übertragen.
Oliver F. schrieb: > Wie stellt man den sicher daß die 8 Kanäle zeitlich synchron sind? Indem man 8 ADC-Kanäle hat, jeden mit seiner eigen S&H-STufe. Und die synchron ansteuert (taktet und startet). > Hier auch die Antwort warum ich so etwas brauche: > Für mein polyphones Synthesizer Projekt muss ich immer 8 > Steuerspannungen, Hüllkurven, oder Modulationsgeneratoren im Blick haben > und auch deren Synchronität beurteilen können. Dazu brauchst du aber keine 8 synchron laufenden ADC-Kanäle. Dafür ist es vollkommen ausreichend, wenn die 8 Analog-Eingänge mit einem ADC im Scanmodus bei konstanter Frequenz eingelesen werden. Durch die zeitliche Diskretisierung besteht so ein Signal auf der Digitalseite ohnehin nur aus diskreten Stützstellen, zwischen denen interpoliert werden muß. Wenn die Software die Abtast-Sequenz der Hardware kennt, dann kann sie die Stützstellen auch korrekt auf dem Display anordnen. Sofern man überhaupt so weit in das Signal reinzommt, daß mehr als 1 Pixel pro Abtatstzyklus vorhanden ist. Mal zur Einordnung: früher haben wir mit analogen Zweikanal-Oszis gearbeitet, die zwischen den Kanälen mit ein paar kHz umgeschaltet haben. Das hat vollkommen gereicht.
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.