Zeitbasis des Oszilloskops

Ich arbeite an einem persönlichen Projekt, um ein Remote-Oszilloskop mit einem PIC32 mit WLAN-Modul für Android-Telefone zu erstellen.

Bisher habe ich viele Dinge getan, wie das Verbinden des WLAN-Moduls des PIC32 mit Android und die Entwicklung der Basissoftware für Android.

Ich bin jetzt in einem Schritt, ADC-Werte von PIC32 zu erhalten und sie auf dem Android anzuzeigen. Ich bin mir nicht sicher, wie ich das so machen kann, dass es wie ein echter Bereich funktioniert.

Zum Beispiel habe ich in der Software einen Timer eingerichtet, der je nach Benutzerwahl den ADC-Wert aus dem Bild in Zeitintervallen von beispielsweise 1, 0,5, 0,1 und 0,01 Sekunden lesen kann. Angenommen, der Benutzer hat eine Zeitbasis von 1 Sekunde ausgewählt, dann fordert das Programm den ADC-Wert in 1-Sekunden-Intervallen an und verbindet diese Datenpunkte auf dem Diagramm, um ein Wellensignal zu bilden. Ist dies dasselbe wie in realen Bereichen?

Ich habe keinen Funktionsgenerator oder ein echtes Oszilloskop in meinen Händen, um das zu überprüfen!

Dies ist die Benutzeroberfläche der Software, die ich für Android geschrieben habe:Geben Sie hier die Bildbeschreibung ein

Meine Frage ist also im Grunde, wie soll ich den Lesevorgang von Werten aus dem PIC32 behandeln? Soll ich mich einfach an den Timer in Java halten oder so viele Werte wie möglich lesen und auf dem Bildschirm zeichnen? Wie soll ich damit umgehen?!

Der PIC32 selbst ist nicht Wi-Fi-fähig. Beziehen Sie sich auf das Wi-Fi Comm Demo Board , das Microchip kürzlich herausgebracht hat? Bevor Sie sich für bestimmte Zeitbasen entscheiden, müssen Sie uns die Spezifikationen des Oszilloskops mitteilen, das Sie zusammenstellen möchten. Ich bezweifle, dass Sie viel mehr als Audiofrequenzen anzeigen können.
Ja, ich glaube, ich habe das Multimedia-Demoboard in meinen Händen (ich habe das Paket nicht, also bin ich mir nicht sicher, was es ist ... es hat definitiv ein WLAN-Modul drauf: P)
Ich ziele nicht auf eine hohe Spezifikation ab, ich möchte, dass es zumindest für Audiofrequenzen funktioniert, wie Sie sagten.
Dies ist das Board microchip.com/stellent/…
Das Board, auf das Sie verlinkt haben, ist viel schicker als das, das ich gefunden habe. Hübsch.

Antworten (3)

Ein Oszilloskop zeichnet die Spannung als Funktion der Zeit auf, sodass Ihre Anzeige so vernünftig ist, wie Sie sie zeigen. Der Begriff "Zeitbasis" ist jedoch bedeutungslos, um die Skala der X-Achse anzugeben. Was Sie wollen, ist "s/div" (oder ms/div oder µs/div). Dies ist unabhängig von der Abtastrate, obwohl es wenig Sinn macht, mehr als ein paar Pixel pro Abtastung zu verwenden.

Die von Ihnen erwähnten Abtastzeiten sind für gewöhnliche Oszilloskope sehr langsam. Einige Signale werden bei diesen Raten einigermaßen sichtbar sein, aber die meisten Dinge, denen Sie begegnen, werden es nicht sein.

Ich würde wahrscheinlich herausfinden, was die schnellste Abtastrate ist, die Sie unterstützen können, und dann immer mit dieser Rate abtasten. Wenn die Anwendung anzeigt, dass sie Proben nicht so schnell benötigt, können Sie mehrere Proben zu einer zusammenführen, bevor Sie sie über das Netzwerk senden. In diesem Fall möchten Sie keine herkömmliche Dezimierung durchführen, bei der versucht wird, Frequenzen mit diesem Alias ​​zu eliminieren. Senden Sie stattdessen für jeden Datenpunkt die minimalen und maximalen A/D-Abtastwerte, die von diesem Datenpunkt abgedeckt werden. Jeder Datenpunkt sollte dann so angezeigt werden, dass er diesen Min/Max-Bereich vertikal abdeckt. Wenn der Benutzer eine langsame Abtastrate auswählt und ein schnelleres Signal abgetastet wird, das aber noch innerhalb der Möglichkeiten des A/D und der zugrunde liegenden schnellen Abtastrate liegt, dann ist die Anzeige ein horizontaler Balken mit vertikaler Breite, der die Signalspitzen anzeigt. Das ist eine viel bessere Anzeige als etwas, das einen Alias ​​darstellt.

Steuerung des ADC

Als allgemeiner Ansatz würde ich die steuernde App dem PIC32 mitteilen, welche Abtastrate verwendet werden soll. Sie wählen also beispielsweise ein Zeitintervall von 0,1 Sekunden, und der PIC32 tastet jetzt 10 Mal pro Sekunde ab. Der PIC32 könnte Samples sofort streamen oder sie in kleineren Zeitschritten wie alle 3 Sekunden usw. bündeln. Wenn die Anwendung jedes einzelne Sample anfordert, ist dies meiner Meinung nach mit unnötiger Latenz verbunden.

Ich würde wahrscheinlich so etwas tun: Beispielwerte über UDP mit einem Zeitstempel senden, wann sie aufgenommen wurden. Asynchrone Übertragung, damit meine steuernde App nicht ausflippt, wenn der Link beschissen ist, und mir genügend Informationen liefert, um meine Daten zum Zeichnen in der steuernden App zu speichern.

Zeichnen des Signals

Dies hängt hauptsächlich von Ihrer Zeiteinteilung ab. Sie müssen genügend Samples im Speicher behalten, um die gesamte Zeitspanne des Diagramms zu zeichnen. Die Aktualisierungsrate liegt jedoch bei Ihnen. Sie könnten einfach die neuesten Werte in einem Puffer speichern, sie dann, wenn es an der Zeit ist, das Diagramm zu aktualisieren, an den Puffer der anzuzeigenden Werte anhängen und alle Werte entfernen, die jetzt älter sind als die neueste Stichprobe abzüglich der Zeitspanne des Diagramms.

Einfach gesagt: Wenn Ihr Diagramm zehn 1-Sekunden-Unterteilungen hat und Ihr letztes Sample einen Zeitstempel von 37 Sekunden hat, möchten Sie nur Samples zeigen, bei denen der Zeitstempel größer als (37 - 10) = 27 Sekunden ist.

Es gibt auch Optimierungen, die durchgeführt werden können, z. B. das Begrenzen der Anzahl der Werte, die Sie pro Zeiteinheit behalten, um die Speichernutzung zu begrenzen, und das Zeichnen von Samples, die sowieso geglättet werden.

Es löst ein Problem aus

Antwort: Wählen Sie zum Starten den manuellen Auslöser (Schaltfläche) und Sie werden das Projekt einfach abschließen.

Längere Erklärung für die nächste Phase, wenn Sie sich für einen echten Trigger entscheiden: Er ist kein trivialer Bestandteil jedes Oszilloskops, sowohl für digitale als auch für analoge Oszilloskope. Dies ist insbesondere bei digitalen Oszilloskopen schwieriger, da der Abtasttakt nicht auf die Phase des Eingangssignals trainiert werden kann. Berücksichtigen Sie die häufigsten Anwendungsfälle: Der Benutzer möchte Trigger mit AC, DC, Trigger durch Front oder Abfall, Impuls oder Einbruch, mit einem bestimmten Pegel oder manuell oder mit digitaler Signatur oder synchron mit Netzwechselstrom oder synchron mit TV koppeln Sendung usw. Es ist keine Kleinigkeit.

Um damit fertig zu werden, muss jeder Anwendungsfall berücksichtigt werden und sollte eine separate Lösung haben. Sie fragen im Grunde danach, jahrzehntelanges patentiertes Wissen zu beschreiben (vielleicht rechtlich veraltet).

Das Gute an modernen Teilen ist, dass Sie erstklassige Lösungen mit FGPA, Festkomma-Numerik, Pegel-/Zeit-Interpolation, Splines, Subsample-Geometrie, schnellem Dual-Port-Speicher auf dem FPGA selbst auswählen und statistische Sample-Körbe, Fensterkomparatoren, Sub implementieren können Zeitstempel und Digital-Phosphor-Lösung. Es klingt ein bisschen monströs, aber das, was viele für einen unltimativen Auslöser halten könnten. Alles, was weniger als FPGA ist, wie eine reine Softwarelösung, ist entweder in der Geschwindigkeit sehr begrenzt oder hat ein hohes Phasenrauschen.