Wie funktioniert ein Oszilloskop-Puffer?

Ich mache ein einfaches 1-MHz-Oszilloskop mit einem eingebetteten System, das auf ARM und Android basiert. Ich habe einen ADC mit einer Geschwindigkeit von 12 MSa/s, der die Samples aufnimmt. Ich brauche es, um die Samples an einen PIC-Mikrocontroller zu senden, um sie über USB an mein Android-System zu senden.

Ich kann keine 12 MSa/s Daten über USB senden, also habe ich nachgeforscht und denke, ich muss einen RAM-Puffer verwenden. Ich habe im Internet recherchiert, aber ich kann nicht verstehen, wie sie funktionieren.

Soweit ich das verstehen kann: Nehmen wir an, ich habe 2 RAM-ICs . Ich fange an, RAM 1 mit Samples von meinem ADC zu füllen, und wenn es gefüllt ist, fange ich an, RAM 2 zu füllen . Mein Mikrocontroller beginnt mit dem Lesen von Daten aus RAM 1 . Die USB-Übertragungsgeschwindigkeit ist nicht schnell genug, um den gesamten RAM-Inhalt zu lesen, bevor RAM 2 gefüllt ist, sodass der ADC warten muss, bis RAM 1 leer ist, sodass ich Samples von meinem ADC verliere.

Gibt es eine Möglichkeit, dies zu verhindern? Mein Entwicklungsboard ist ein PandaBoard. Ich verwende Android 4 darauf und es funktioniert perfekt, aber ich habe dieses Problem bezüglich der Hardwarepufferung.

Entschuldigung, meine Muttersprache ist nicht Englisch. Ich habe einige Korrekturen vorgenommen und den Text formatiert :) Danke für den Rat :)
@pipe - Bitte nehmen Sie keine trivialen Änderungen an alten, bereits gelösten Fragen vor - es stößt sie nur ohne wirklichen Zweck an den Anfang der Hauptseite und lenkt von Fragen ab, die aktuelle Aufmerksamkeit verdienen.
@ChrisStratton Wenn Sie ein Problem damit haben, dass bearbeitete Fragen nach oben sprudeln, wenden Sie sich an die Website-Designer, ein Benutzer kann dies nicht verhindern. Wenn Sie ein Problem damit haben, dass ich alte Fragen bearbeite, sehen Sie sich bitte die Antworten auf diese Meta-Frage an. Solange alte Fragen durchsuchbar sind und in der Seitenleiste auftauchen, verdienen sie es, auf die gleiche Weise wie jede andere Frage bearbeitet zu werden.
Die Fähigkeit, eine Kosten-Nutzen-Analyse durchzuführen, ist eine Schlüsselkompetenz des Ingenieurs.

Antworten (1)

Sie können nicht kontinuierlich sampeln.
Dies ist jedoch normalerweise bei Oszilloskopen kein allzu großes Problem, da die meisten dies nicht tun (zumindest bei höheren Geschwindigkeiten). Selbst ein analoges Oszilloskop zeigt keine kontinuierlichen Informationen an, da Sie die Strahlrücklaufperiode haben.

Ein typisches digitales Speicheroszilloskop wartet auf einen Trigger, füllt seinen Puffer mit hoher Geschwindigkeit und sendet die Daten dann mit niedrigerer Geschwindigkeit zur Anzeige an den Mikrocontroller (oder Android in Ihrem Fall). Wie Photon erwähnt, geschieht dies schnell genug (z. B. über 15 Datenframes pro Sekunde), damit es für den Benutzer kontinuierlich aussieht.

Je größer der RAM-Puffer, desto mehr Samples (Zeit) können natürlich erfasst werden. Aus diesem Grund werden Sie DSOs sehen, die für große Erfassungspuffer werben. Bei hoher Geschwindigkeit kann dies einen großen Unterschied machen - bei 2 Gigasamples pro Sekunde und einem Erfassungspuffer von 10 KB erhalten Sie nur 5 us an Informationen. Einige mit größeren Puffern können nur einen Teil davon mit der höchsten Geschwindigkeit verwenden - mein DSO hat beispielsweise 10 MB Puffer mit bis zu 1 Gsps, kann aber nur 10 KB mit 2 Gsps verwenden.

In Ihrem Fall könnten Sie bei Geschwindigkeiten, zu denen USB in der Lage ist, auf kontinuierliche Erfassung umschalten (z. B. < 1 Msps). Sie könnten möglicherweise auch die Verwendung von Komprimierung in Betracht ziehen.
Entweder das, oder schauen Sie sich die Verwendung von High/Super-Speed-USB an.

Schön, wusste ich nicht :) Also, was ist der Vorteil der Verwendung eines Puffers? Ist es nicht dasselbe, die Proben zu nehmen und sie direkt über USB zu senden? Wie verhalten sich beispielsweise die USB-Oszilloskope?
@Andres: Sie können nicht erwarten, USB-Geschwindigkeiten von 400 Mb / s mit einem PIC zu senden, der mit 16 MHz getaktet ist? :-)
@Andres, ohne eine Art Puffer könnten Sie nur so schnell abtasten, wie Sie die Daten an die Anzeige senden könnten. Alle "zusätzlichen" Daten, die Sie erfasst haben, hätten Sie keinen Ort, an dem Sie sie ablegen könnten, und Sie müssten sie verwerfen. Mit einem Puffer können Sie den Puffer sehr schnell füllen und dann mit einer langsameren Rate zum Display übertragen ... was immer noch so schnell sein kann, dass der Benutzer keine Verzögerung bemerkt.
Genau, ich habe auf meinem Android-System einen Empfangspuffer für den USB-Empfang, aber ich dachte, dass ich mit einem RAM-Puffer in meinem ADC eine hohe Abtastrate mit einer nicht so hohen Übertragungsgeschwindigkeit anzeigen könnte, aber jetzt verstehe ich das mit der Puffergröße , der Trick besteht darin, einen großen Puffer zu haben, damit ich einige Zeit kontinuierlich sampeln kann, sagen wir, meine Bildschirmbreite hängt von Zeit / Div ab :)
Ja, Sie möchten, dass mindestens Ihre Bildschirmbreite gepuffert wird, mehr, wenn Sie nach links/rechts durch die Wellenform scrollen möchten.
Ich verstehe :) Also, es gibt fast keinen einfachen Weg, einige Samples nicht zu verpassen, ich brauche einfach einen Puffer, der so groß wie möglich ist.