Forum: Projekte & Code Signalplotter mit STM32, LCD und SD Karte - ähnlich einem Scope


von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Vielleicht gibt es ja Interesse an meinem STM32 "Scope".

Entstanden aus der Motivation zu sehen was an den Eingängen des STM los 
ist, ist daraus ein "Ist kein vollwertiges Scope" Projekt geworden. Und 
da meine eigene Platine sowieso niemand außer mir hat, habe ich das 
ganze noch auf ein Nucleo-64 Board mit STM32F411 (war das bei Reichelt 
verfügbare Nucleo-64 mit dem größten RAM) portiert.

Features:
* Bis zu 200kHz Samplerate (unabhängig von der Anzahl der gewählten 
Eingänge). Der Begrenzende Faktor ist hier die Interrupt Verarbeitung um 
die Triggerbedingung zu überprüfen. Nicht ohne Grund sind in einem 
richtigen Scope meist FPGAs verbaut ;) Der ADC des STM könnte 20x mehr.
* Bis zu drei Eingänge aus den ADC Eingängen wählbar.
* X (Zeit) und Y (Spannung) Skalierung.
* Einstellbarer Y Offset.
* Als Trigger sind Level, steigende Flanke und fallende Flanke 
verfügbar.
* Als Analyse kann der Max, Min und Durchschnittswert pro Eingang 
angezeigt werden.
* Die Sampletime des ADC wird automatisch auf das mögliche Maximum 
angepasst.
* Einstellungen können auf der MMC/SD/SDHC/SDXC Karte gespeichert und 
geladen werden. Ebenfalls können Screenshots als komprimiertes .tga 
abgespeichert werden.

Bevor jetzt aber jemand sagt "das ist kein Scope" - stimmt. Dazu fehlen 
(mindestens) folgende Features:
* Der X Offset ist nicht einstellbar. Der Trigger ist immer in der Mitte 
des Bildschirms.
* Der Y Offset und Skalierung ist immer für alle Eingänge gleich.
* X-Y Modus.
* Es ist halt nur für Eingangssignale bis ~20kHz sinnvoll nutzbar.
* Es gibt keine auswählbare Eingangsskalierung - bei 3.3V ist Schluss, 
und unter 0V geht auch nicht.
* Die Eingangsimpedanzen sind halt die vom ADC und eine ordentliche 
Analog/Digital Trennung fehlt auch.
* Es gibt keinen "Graustufen" Modus in der Darstellung. Ist die 
Triggerbedingung öfters erfüllt als die GUI die Daten verarbeiten kann, 
so werden die Daten dazwischen schlicht nicht aufgezeichnet, statt ein 
überlagertes Bild zu generieren.

Das alles reicht aber um zum Beispiel das Verhalten eines analogen 
Joysticks (im Bild Universalbox angeschlossen) zu analysieren. Als 
Schüler mit knapper Kasse hätte ich mich drüber gefreut.
Als Hardware wird derzeit benötigt:
STM32F411 mit ILI9341 LCD.
Optional eine angeschlossene SD Karte. Ohne können halt keine 
Screenshots und Einstellungen gespeichert werden.
Am einfachsten lässt sich die GUI per serieller Schnittstelle steuern 
(W-A-S-D Tasten).
Für andere STM32 wäre etwas Portierungsarbeit notwendig. Auf meiner 
Platine läuft ein STM32L452, so dass der ADC Code dort auch fertig wäre. 
Generell werden ca 70KiB Programm und ca 90KiB RAM Speicher benötigt.

Und ganz ohne Hardware lässt sich das Programm unter Linux (oder 
vermutlich auch mit Windows und WSL2) ausprobieren. Dazu im Verzeichnis 
apps/11-adc-scope/pc-simulator "make" und dann "make test" ausführen. 
Vorher muss vermutlich noch freeglut3-dev installiert werden. Die 
Steuerung ist dann in der GUI per Cursor und in der Konsole per W-A-S-D 
Tasten möglich.

Falls das Programm jemand nutzt, freue ich mich über Feedback und Bilder 
vom Aufbau :)

von Monk (roehrmond)


Lesenswert?

Ich bin Neugierig: Hast du Schrauben als Tastenkappe verwendet? 
Fotografiere das mal von innen. Ich würde gerne sehen wie das mechanisch 
gelöst wurde.

von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Monk schrieb:
> Ich bin Neugierig: Hast du Schrauben als Tastenkappe verwendet?
> Fotografiere das mal von innen. Ich würde gerne sehen wie das mechanisch
> gelöst wurde.
Ich hab die aus einer 10mm Aluplatte gefräst (mit einer auf CNC 
umgebaute Proxxon MF70). Das ganze war ziemlich fummelig, da die Taster 
nur einen Hub von 0,25mm haben und ich entsprechend zum Gehäuseabstand 
ohne eine vollwertige 3D Fräse ein exakt passendes Loch von der 
Rückseite bohren musste. Hinzu kommt, dass sich das Gehäuse selbst ein 
wenig verbiegt, sobald die Ober mit der Unterseite verschraubt wird. Ich 
habe da mit gefühlt X Iterationen immer versucht das Loch 0,05mm tiefer 
zu bekommen bis es endlich passte. Der Button auf dem Foto war zu tief 
geworden, so dass ich 1x von vorne anfangen musste.

von Monk (roehrmond)


Lesenswert?

Danke für die Info. In der Tat ziemlich aufwändig.

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
Noch kein Account? Hier anmelden.