Lassen Sie uns einen allgemeinen Überblick über die Funktionen eines Oszilloskops geben:
Zuerst haben wir das analoge Frontend. Hier haben wir ein Impedanzanpassungsnetzwerk für die Sonden (aber die Sonden müssen auch einen Kapazitätsanpassungsteil haben), einen Dämpfungsabschnitt (sehr wichtig, damit wir den ADC nicht überlasten oder hohe Spannungen einlassen), Triggern und Anschließen an Analog-Digital-Wandler. Ich werde nicht zu viel darüber reden, da ich nicht so gut mit analogen Sachen umgehen kann, aber das Fazit lautet: Mit Pi können wir in diesem Abschnitt nichts anfangen.
Als nächstes haben wir den Analog-Digital-Wandler Teil. Sie benötigen mindestens einen ADC für jeden Kanal. Mehr kann für eine höhere Abtastrate verwendet werden. Im herkömmlichen Bereich ist der ADC mit einem ASIC oder einem FPGA-Gerät verbunden. Sie werden verwendet, weil herkömmliche Computer nicht in Echtzeit genug sind (und Echtzeit nicht mit Schnelligkeit verwechseln!), Um die vom ADC bereitgestellten Daten zu verarbeiten. Diese Daten werden dann in irgendeiner Art RAM gespeichert. Einige Geräte verwenden statisches RAM, andere dynamisches RAM. Im Allgemeinen ist der SRAM-Ansatz traditioneller und bei namhaften Herstellern zu beobachten, während der DRAM-Einsatz der neuere Ansatz zu sein scheint, der bei billigeren, in China entworfenen Einheiten zu beobachten ist.
Die Größe des Arbeitsspeichers und seine Geschwindigkeit bestimmen, wie viele Samples gespeichert werden können. Fast immer handelt es sich bei dem ADC um einen 8-Bit-ADC. Beispielsweise benötigen wir für ein Mega-Beispiel 8 mal 100000 = 8 MB oder 1 MB RAM. Für eine MSa / s benötigen wir RAM, das mit dieser Geschwindigkeit arbeiten kann. Heute sollte das relativ einfach zu bekommen sein. Das FPGA steuert normalerweise den RAM direkt an und ist für die Speicherung der Daten verantwortlich. Es füllt den Samplespeicher, solange der Raum noch frei ist, und überschreibt ihn, wenn er voll ist. Wenn es mehrere ADCs pro Kanal gibt, werden diese vom FPGA so eingestellt, dass zuerst mit dem Abtasten begonnen wird, dann mit der nächsten Taktsekunde und so weiter. Wenn sie die Abtastung beendet haben, wird zuerst der Abtastwert des ersten ADC in den Speicher geschrieben, dann der Abtastwert des zweiten ADC. Dadurch sieht es so aus, als würden die ADCs schneller abtasten als sie es tatsächlich sind.
Der nächste Punkt in diesem Abschnitt ist, dass die Proben zeitlich äquidistant sein sollten. Dies ist das Hauptproblem bei der Verwendung von PCs in Oszilloskopen und der Grund, warum FPGAs und ASICs vorherrschen. Wenn einige Proben zu spät oder zu früh eintreffen, ist das auf dem Bildschirm dargestellte Bild nicht korrekt.
In diesem Teil sehen wir die erstmögliche Verwendung des Pi. Wenn die Abtastrate niedrig genug ist, können wir die ADCs möglicherweise direkt vom Pi aus ansteuern und ihre Ergebnisse im RAM des Pi speichern. Wie schnell wir gehen können, hängt davon ab, wie der ADC mit dem Pi verbunden ist und wie Pi seine E / A ausführt. Wie ich gelesen habe, beträgt die höchste Geschwindigkeit der I ^ 2C-Ports von Pi 150 MHz (wie einfach dies unter GNU / Linux zu erreichen wäre, ist eine andere Frage), während die höchste standardisierte Geschwindigkeit 5 MHz und für SPI die höchste Geschwindigkeit in ist Pi ist 250 MHz. Ich bin nicht sicher, was die höchste Standardgeschwindigkeit von SPI ist, aber ich gehe davon aus, dass sie maximal im Bereich von 100 MHz liegt.
Theoretisch haben wir also mehr als genug Geschwindigkeit auf Pi, um einen ADC im niedrigen MSa / s-Bereich zu betreiben. Ich habe das Gefühl, dass die RAM-Geschwindigkeit hier kein Problem darstellt, aber ich habe keine Daten, um das zu sichern. In diesem Fall hätten wir einen großen Vorteil gegenüber herkömmlichen Bereichen: Es wäre sehr viel Erfassungsspeicher verfügbar. Wenn wir beispielsweise dem Programm 32 MiB RAM für den Sample-Speicher widmen und über zwei Kanäle verfügen, verbleiben 16 MiB für jeden Kanal oder etwas mehr als 134 Mb oder 134 Mega-Samples pro Kanal. Das haben viele Oszilloskope auch heute noch nicht.
Der Nachteil ist, dass wir umfangreiche Änderungen am Betriebssystem vornehmen müssen, um hier genaue Stichproben zu erhalten. Ich habe keine Erfahrung mit Echtzeit-Linux, deshalb weiß ich nicht, wie einfach das sein würde.
Kommen wir zum nächsten Schritt. Wir haben also ein Sampling-System, das den Arbeitsspeicher auffüllt. Der nächste Teil ist der Auslöser. Der Auslöser hängt eng mit der Bildschirmaktualisierungsrate zusammen. Im Grunde genommen findet es ein interessantes Sample und speichert es im Gedächtnis. Wenn das Oszilloskop ausgelöst wird, setzt es die Abtastung nach dem Auslösen fort, bis der Speicher voll ist, und sendet sie dann zur Verarbeitung und Anzeige auf dem Bildschirm. Während die Daten verarbeitet werden, wird das Probenahmesystem häufig eingefroren und wartet auf die Anzeige der Daten. Aus diesem Grund weisen Low-End-Bereiche niedrigere Aktualisierungsraten auf, während High-End-Bereiche spezielle Anzeigen mit hoher Aktualisierungsrate aufweisen und viel weniger Zeit darauf verwenden, auf die Anzeige der Daten zu warten.
In diesem Abschnitt befindet sich häufig ein weiterer ASIC oder FPGA, der die Signalverarbeitung für die Samples ausführt, die Protokolldecodierung, sofern das Oszilloskop dies unterstützt, und die eigentliche Ansteuerung des Displays.
Dies ist der Teil, von dem aus ich sehen kann, dass der Pi wirklich scheint. Es kann ein schönes 1920x1080-Display steuern (während sich Bereiche häufig im Sub-800x600-Bereich befinden) und Protokolldecodierungen sehr gut durchführen. Das einzige Problem, das ich sehen kann, ist die Geschwindigkeit und die Auswirkung der Verarbeitung auf die Wartezeit. Wenn wir eine niedrige Bildwiederholfrequenz anstreben, können wir damit einen wirklich guten Logikanalysator bekommen.
Zum Schluss noch ein Wort zu USB-Oszilloskopen und warum USB für diese Art von Projekten generell schlecht ist: Herkömmliche USB-Oszilloskope führen Eingaben und Abtastungen durch und senden die Abtastdaten zur Verarbeitung an den PC, für den eine Host-Anwendung vorhanden ist. Grundsätzlich würde man mit Pi auch etwas sehr Ähnliches machen. Normalerweise sind die PC-Anwendungen schlecht gestaltet und voller Fehler. Das nächste schlechte Teil ist USB selbst. Es wird als schneller Bus beworben, der im "Hi-Speed" -Modus 480 Mbit / s kann. Die Wahrheit ist, dass es extrem selten ist, einen USB-Controller zu finden, der so hohe Geschwindigkeiten unterstützt (der Durchschnitt scheint etwa 250 Mbit / s zu betragen, was ich gesehen habe) und dass er als Protokoll für kein reales Protokoll besonders geeignet ist -Zeit-Anwendung. Zuerst wird es von allen Geräten an einem Hub gemeinsam genutzt (und Pi hat nur einen USB-Anschluss, an den Ethernet + USB-Hub angeschlossen ist). hat einen relativ hohen Overhead (im Vergleich zu SPI) und eine hohe Latenz (denken Sie daran, dass bei 1 MSa / s jedes Sample nur 1 µs dauert, sodass wir Speicher auf unserer Platine haben müssen, da wir keine Samples in Echtzeit senden können über USB). Die Verwendung von USB würde den Datenerfassungsteil schließlich zu einem weiteren USB-Oszilloskop machen, und hier verlieren wir alle Vorteile der Verwendung von Pi: Herkömmliche Desktop-Computer sind viel häufiger, schneller, einfacher zu beziehen und verfügen über viel bessere USB-Funktionen.
BEARBEITEN
Ich habe einen relativ neuen Beitrag von Gert van Loo gelesen und ihm zufolge betragen die realistischen Raten für Pi I ^ 2C 400 kHz und für SPI 20 MHz.
Wir haben festgestellt, dass der Raspberry Pi eine hervorragende Plattform für die Ausführung der Software ist, die Sie für ein Projekt wie dieses benötigen. Das Problem besteht darin, die Signale in erster Linie in das RPi einzuspeisen und eine schnelle, jitterfreie Echtzeit-Signalerfassung auf derselben CPU durchzuführen, auf der auch das Betriebssystem und die Anwendungssoftware ausgeführt werden. Unsere Lösung ist das BitScope Raspberry Pi-Oszilloskop, das ein BitScope (für die Hochgeschwindigkeits-Signalerfassung mit gemischten Signalen) mit dem Raspberry Pi kombiniert, auf dem die gesamte erforderliche Software ausgeführt wird.
quelle
NB: Dies ist eher ein lautes Stück Text als eine echte Antwort
Die Idee ist mir auch schon vor einiger Zeit in den Sinn gekommen und ich mag immer noch die allgemeine Idee!
Soweit ich weiß, sind die High-End-Bereiche seit 15 Jahren (oder noch mehr) nur Computer (PC) mit einer Reihe spezialisierter Hochgeschwindigkeits-E / A. Ich denke, dass, wenn ähnliche E / A entworfen / mit dem RPi verbunden werden, das Ergebnis möglicherweise überraschend gut ist.
IMHO ist eine gute Möglichkeit, dies zu tun, indem das RPi die gesammelten Daten (die zum Beispiel über den USB-Port empfangen werden) einfach speichert und anzeigt und einige spezialisierte Hardware die Hochgeschwindigkeitsmessung durchführen lässt. Diese Hochgeschwindigkeitsmesseinheit kann dann auch vom RPi auf der Grundlage von Benutzereingaben oder ähnlichem gesteuert werden.
In der ersten Version auf dem RPi gab / gibt es einige Probleme mit den USB-Ports, ich habe in letzter Zeit nicht gesucht, ob diese im Moment gelöst sind. Ich hörte auch ein Gerücht, dass die neue Version 2.0 des RPi diese Probleme nicht haben sollte, aber ich habe dieses Gerücht auch nicht überprüft.
Ich denke, dass die Ergebnisse ohne externe (spezialisierte) Hardware aufgrund der Anzahl der E / A-Ports und der Tatsache, dass ein ganzes Betriebssystem darauf ausgeführt wird (was die Echtzeitoptionen einschränkt), begrenzt sind. Sofern Sie nicht vorhaben, Ihr eigenes Betriebssystem zu schreiben?
Auch wenn Sie zu diesem Zweck beispielsweise I2C-Chips verwenden, reicht die Geschwindigkeit nicht aus, um etwas wirklich Schönes zu tun. SPI bietet bereits viel mehr Bandbreite (bis zu 100 MHz von oben), aber ich würde mich für USB entscheiden und bei Bedarf komprimieren oder ein gutes Codierungsschema vor dem Senden der Daten verwenden, um mehr Bandbreite zu gewinnen.
Ich denke, es ist möglich, aber die Hardware, die zum RPi hinzugefügt werden muss, ist viel teurer als das RPi selbst.
Zu guter Letzt (bevor ich aufhöre, über dieses Thema zu träumen) wäre ich nicht überrascht, wenn eine Suche im Internet dazu führen würde, dass eine Gruppe bereits damit beschäftigt ist.
quelle
Die Antwort ist ja.
Es ist stark genug! Aber nur für bestimmte Frequenzen - wie schon wegen der Einschränkungen hervorgehoben.
SO! -> Sie müssen sich fragen, was Sie messen wollen?
Oszillatoren reichen von einfachen tiefen Frequenzen, die 5 USD kosten, und von anderen bis zu 50 GHz + - das kostet so viel wie ein kleines Haus! 75.000USD-100.000USD!
Ich denke, der Raspberry wird gut genug sein, um Sub-Giga-Frequenzen zu messen, wie 433-MHz-Funksignale, langsame CPU-Bus-Kommunikation, TTS / UART, I2C-Debugging - nicht viel mehr wirklich. Und die höheren Frequenzen werden nicht wirklich genau sein, da das Raspberry von Natur aus kein Echtzeitbetriebssystem ausführt. Sie müssen also mit dem Betriebssystem beginnen (oder wie erwähnt mit externen Echtzeitgeräten - aber worum geht es dann?)
Wenn Sie jedoch wirklich Signale messen möchten, können Sie ein wirklich gutes und preisgünstiges Gerät kaufen, das den Raspberry-Spezifikationen entspricht. Ist aber schon gut designt, voller Features, wirklich ausgereift im Design und hat sich in einem Hobby-Umfeld als praktisch erwiesen.
Hier muss das Rad nicht neu erfunden werden. Zum Beispiel ein DSO Nano für unter 100USD Single Channel.
Ein DSO Nano Quad Channel für unter 200 USD
Und dann, was ein Himbeer- oder ähnliches Gerät NICHT KANN!
Und ein kleines Vermögen kosten ...
quelle
Sie können eines unserer TiePie Engineering Handyscope HS5- Oszilloskope / Arbitrary Waveform-Generatoren an den USB-Anschluss anschließen. Eine Bibliothek, die für den Raspberry Pi kompiliert wurde, um ein oder mehrere Oszilloskope gleichzeitig zu verwenden, steht zum Download zur Verfügung. Das Instrument verwendet sein eigenes Timing und Gedächtnis, so dass es keinen Leistungsverlust gibt. Also ja, der Pi ist leistungsfähig genug für ein Oszilloskopprojekt.
Hauptmerkmale des Oszilloskops: 2 Kanäle, 14 Bit, 500 MS / s, 250 MHz Bandbreite, 20 MS / s, 14 Bit kontinuierliches lückenloses Streaming, 32 MS-Speicher pro Kanal, 1 ppm Zeitbasisgenauigkeit.
Schlüsselspezifikationen des Arbitrary Waveform Generators: Wellenformen von 1 µHz bis 30 MHz, 240 MS / s, 14 Bit, 64 MS-Speicher, -12 bis 12 V-Ausgang (24 Vss), 1 ppm Zeitbasisgenauigkeit.
quelle
Versuchen Sie am besten, ob Sigrok und sein Frontend libsigrok auf Pi kompiliert werden können, und kaufen Sie dann kompatible Oszilloskop-Hardware. Auf diese Weise können Sie Signale mit bis zu 24 Mega-Samples pro Sekunde erfassen. Mit genügend Wissen können Sie die Software nach Ihren Wünschen anpassen, einschließlich der drahtlosen Übertragung auf mobile Geräte.
quelle
Jemand, der über Sigrok spricht. Ich denke, der nächste Weg ist die Verwendung des gut dokumentierten CY7C68013A mit dem Treiber EZ-USB FX2LP. Auf dem Desktop-PC funktionierte es nicht mit Weezy, aber auf Jessy funktioniert es gut. Hier liegt die bekannte Einschränkung bei ca. 24 Msps. Ich denke über einen anderen Weg nach, das Kamerainterface zu benutzen. Diese Schnittstelle kann 2,1 Megapixel und 30 Bilder pro Sekunde verwalten, was bedeutet, dass Daten mit einer Geschwindigkeit von über 60 Megapixeln pro Sekunde an die GPU übertragen werden können. Soounds sind nützlicher als 20MHz SPI oder USB.
quelle
Wenn es Ihnen nichts ausmacht, auf Audiofrequenzen beschränkt zu sein, verwende ich einen kostengünstigen MCP3202 12-Bit-Zweikanal-A / D-Wandler, um auf dem Pi mit spidev Daten zu erfassen, und pydatascope, um Daten anzuzeigen, die über Ethernet via TCP-Socket übertragen werden. Pydatascope fungiert auch als Spektrumanalysator!
Ich habe relativ triviale Änderungen am Open Source Code von pydatascope vorgenommen, um zwei Kanäle zu haben, hauptsächlich, weil es einfach war und nicht, dass ich es wirklich brauchte.
Poste Follow-Ups oder maile mir direkt, wenn du Fragen hast, ich helfe dir gerne weiter.
quelle