Hallo,
ich habe folgendes Problem:
Ich versuche ein Oszilloskop für einen Drehstrommotor zu entwerfen.
Bis jetzt habe ich ein Programm geschrieben, welches über den internen
ADC den Wert des Stromes misst und einen externen ADC der über SPI die
Werte der Spannung ausließt. Die Daten sollen über Full-Speed USB (HS
nicht möglich) an den Rechner geschickt und dort weiter verarbeitet
werden. Ich habe die Werte auch schon erfolgreich über den virtuellen
Port und Hterm auslesen können.
Das Problem das ich jetzt habe ist, dass ich nun keine definierte Zeit
habe und somit die Messung eigentlich Mist ist oder?
Kann mir jemand sagen wie ich die Werte in Echtzeit auf meinen Rechner
bekomme um somit eine Leistungsanalyse machen kann?
Eingesetzte Hardware:
STM F7 64 Pins mit 3 Internen ADC und 3 SPI Schnittstellen.
Drei externe ADC (ADS7883 12Bit 3MSPS)
Tobias Dudek schrieb:> Hallo,>> ich habe folgendes Problem:>> Ich versuche ein Oszilloskop für einen Drehstrommotor zu entwerfen.> Bis jetzt habe ich ein Programm geschrieben, welches über den internen> ADC den Wert des Stromes misst und einen externen ADC der über SPI die> Werte der Spannung ausließt. Die Daten sollen über Full-Speed USB (HS> nicht möglich) an den Rechner geschickt und dort weiter verarbeitet> werden. Ich habe die Werte auch schon erfolgreich über den virtuellen> Port und Hterm auslesen können.> Das Problem das ich jetzt habe ist, dass ich nun keine definierte Zeit> habe und somit die Messung eigentlich Mist ist oder?
Dazu einfach den Zeitstempel bei jeder Messung abspeichern und
mitübertragen.
> Kann mir jemand sagen wie ich die Werte in Echtzeit auf meinen Rechner> bekomme
Für "Echtzeit" musst du die Daten gleich schnell/schneller übertragen
als du sie misst. So wie es aussieht bist du durch das Full Speed USB
begrenzt. Falls du schneller misst (messen musst) kannst du die Daten ja
im uC vorverarbeiten und dann nur entsprechende Durchschnitts (plus ev.
Min Max Werte) an den PC schicken.
>um somit eine Leistungsanalyse machen kann?
Damit das Sinn macht solltest du dir Gedanken über den systematischen
Fehler deines Aufbaus machen: du misst Strom und Spannung nicht zur
gleichen Zeit (du hast einiges zwischen die ADC Abfragen reingepackt),
Änderungsgeschwindigkeit der Eingangssignale vs Abtastfrequenz, etc...
Dabei müssen sich die zeitlichen Anforderungen zur sinnvollen
Strom/Spannungsmessung für eine ausreichend genaue Leistungserfassung ja
nicht unbedingt mit der benötigten Anzahl der
(Durschnitts)leistungswerte für die Echtzeitanalyse am PC decken. Als
(extremes) Beispiel: Eventuell reicht dir ja ein
Durchschnittsleistungswert je Sekunde am PC für die Analyse, aber der uC
muß mit 10kHz samplen, damit die Daten Sinn machen...
Tobias Dudek schrieb:> ich habe folgendes Problem:
Du hast noch ganz andere Probleme.
... wenn du es nicht schaffst einfache Regeln zu beachten
und deine Tabulierung der Source in den Griff zu kriegen.
Das spricht Bände ....
@Christian U.
Danke für deine Antwort.
Ich werde es gleich versuchen.
Christian U. schrieb:> Dazu einfach den Zeitstempel bei jeder Messung abspeichern und> mitübertragen.
Was mir bei dieser Thematik noch nicht klar ist, ist ob ich ein
separates Programm schreiben muss für die Übertagung per USB oder wie
ich mir die Werte am besten sinnvoll abspeichern kann, um sie nachher
weiter zu verarbeiten.
Ich wollte die Visualisierung mit Python und Dash umsetzten. Macht es
Sinn es alles in eine Textdatei zu schreiben und diese hinterher
auszulesen?
Christian U. schrieb:> So wie es aussieht bist du durch das Full Speed USB> begrenzt. Falls du schneller misst (messen musst) kannst du die Daten ja> im uC vorverarbeiten und dann nur entsprechende Durchschnitts (plus ev.> Min Max Werte) an den PC schicken.
Also muss ich in einer definierten Zeit Messen (wenn ja wie?) und den
Wert auf dem µC speichern und anschließend übertragen?
In dem Fall wüsste ich ja welcher Zeitabstand zwischen meinen Messungen
liegt oder?
Wegen der Echtzeit wäre es nicht so schlimm, wenn ich mir schon mal
zeitversetzt mir den Sinus anzeigen lassen könnte.
dann mach dich mal schlau ...
es gibt mehrere ADC die sich zB durch einen timer triggern lassen
damit diese sogar syncron laufen
Die Daten zB timergetriggert per DMA in einen buffer und diese Daten
lassen sich dann auch halbwegs verwerten
Das zu konfigurieren ist aber ein krampf ^^
Da muss man schon mal gut überlegen
Tobias Dudek schrieb:> Was mir bei dieser Thematik noch nicht klar ist, ist ob ich ein> separates Programm schreiben muss für die Übertagung per USB oder wie> ich mir die Werte am besten sinnvoll abspeichern kann, um sie nachher> weiter zu verarbeiten.>> Ich wollte die Visualisierung mit Python und Dash umsetzten. Macht es> Sinn es alles in eine Textdatei zu schreiben und diese hinterher> auszulesen?
Das ist deine Entscheidung - du kannst sie auch "gleichzeitig" anzeigen
und abspeichern...
> Also muss ich in einer definierten Zeit Messen (wenn ja wie?) und den> Wert auf dem µC speichern und anschließend übertragen?> In dem Fall wüsste ich ja welcher Zeitabstand zwischen meinen Messungen> liegt oder?
Fang noch mal "ganz von vorne" an.
Was willst du messen: eine Phase des Drehstrommotors - um welche
Drehzahlbereiche geht es, welche Frequenzen ergeben sich daraus?
Oder doch die gleichgerichteten 3 Phasen?
Wie schaut die Last aus: mögliche Lastwechsel (wie schnell, oft und wie
"stark")
Was möchtest du analysieren/anzeigen?
Daraus ergeben sich die Anforderungen an deine ADCs: wie oft musst du
messen, wie genau muss dein Zeitstempel sein, wie "gleichzeitig"
brauchst du die Messung von U und I. Wenn du entscheidest in konstanten
Zeitabständen zu messen, entfällt dir die Ubertragung des Zeitstempels
an den PC...
Dann kommt deine USB Übertragung. Schafft sie die notwendigen Daten in
Echtzeit? (Kleiner Tipp: wenn du keinen fixen Text mitüberträgst sondern
nur die Daten geht es um einiges flotter. Auch die Daten selbst solltest
du nicht als Text übertragen, falls es Durchsatzprobleme gibt)
Falls sich die Übertragung ebenfalls ausgeht steht deiner
Echtzeitauswertung/anzeige nichts mehr im Weg.
Falls nicht kannst du entweder die Daten im uC speichern und verzögert
am PC bearbeiten, und/oder (weniger) Durchschnittswerte weiterhin in
Echtzeit zum PC schicken.
Oder du möchtest nur ein U/I Oszilloskop mit deinen vorhandenen
Bauteilen - dann schau wo die Beschränkung liegt, und übertrage einfach
mal was maximal möglich ist.
Viel Spaß bei der Analyse und den ersten Tests. Halte und am Laufenden
mit deinen Fortschritten!
Christian U. schrieb:> ang noch mal "ganz von vorne" an.> Was willst du messen: eine Phase des Drehstrommotors - um welche> Drehzahlbereiche geht es, welche Frequenzen ergeben sich daraus?> Oder doch die gleichgerichteten 3 Phasen?> Wie schaut die Last aus: mögliche Lastwechsel (wie schnell, oft und wie> "stark")> Was möchtest du analysieren/anzeigen?
Also ich möchte nur einen Drehstrommotor anschließen, welcher mit einem
normalen Drehstromnetz verbunden ist (50Hz) die Idee ist dabei den Sinus
der Spannung und des Stromes anzeigen zu lassen. Optimal wäre es auch
Oberwellen zu sehen. Ich dachte im grobsten Fall würde ja für den Sinus
eine Abtastrate von 100Hz reichen (ganz grob). Wenn ich jetzt mit Faktor
10 oder 100 abtaste ist das ausreichend in erster Linie.
Wenn ich die Abfrage so mache wie ich sie momentan durchführe, würde es
ausreichen wenn ich die Wandelzeit herausfinde und den Rest durch
HAL_Delay(die restliche zeit bis 0.1ms); ?
Oder kann ich damit nicht sicherstellen das ich wirklich mit 1K Sample
abtaste?
Oder muss ich schauen wie ich das durch Interrupts löse?
Eingangs seitig habe ich meine Platine so ausgelegt das ich die Strang
Spannung und den Sprang Strom messe.
Hardware seitig kann ich leider nichts mehr drehen weil ich die Platine
schon entworfen habe und alle Bauteile bestellt sind.
Mein großtes Problem ist wie ich definiert Sachen kann das ich zum
Beispiel mit 1K Sample abtaste.
Das ist mein erstes Projekt mit einem STM32.
Christian U. schrieb:> Das ist deine Entscheidung - du kannst sie auch "gleichzeitig" anzeigen> und abspeichern...
An dieser Front bin ich schon soweit das ich die Daten welche ich mir
den obigen Code erzeuge anzeigen lassen kann.
Das alles bringt mir nur nichts wenn die Werte nur quatsch sind die ich
messe.
Tobias Dudek schrieb:> Also ich möchte nur einen Drehstrommotor anschließen, welcher mit einem> normalen Drehstromnetz verbunden ist (50Hz)
Was ist für dich ein normales Drehstromnetz? Der 380V Drehstrom?
Dann hast Du hoffentlich eine ordentliche galvanische Trennung
vorgesehen?
>die Idee ist dabei den Sinus> der Spannung und des Stromes anzeigen zu lassen.
Einer Phase?
Optimal wäre es auch
> Oberwellen zu sehen. Ich dachte im grobsten Fall würde ja für den Sinus> eine Abtastrate von 100Hz reichen (ganz grob).
Um die 50Hz zu messen reichen 100Hz gerade nicht ?- nach dem
Abtasttheorem braucht man mehr als die doppelte Samplingrate. Allerdings
sieht man da nicht viel wenn du die gemessenen Werte einfach nur
anzeigst - du müsstest dann den Sinus wieder "rekonstruieren": z.B.:
https://de.m.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem> Wenn ich jetzt mit Faktor> 10 oder 100 abtaste ist das ausreichend in erster Linie.> Wenn ich die Abfrage so mache wie ich sie momentan durchführe, würde es> ausreichen wenn ich die Wandelzeit herausfinde und den Rest durch>> HAL_Delay(die restliche zeit bis 0.1ms); ?>> Oder kann ich damit nicht sicherstellen das ich wirklich mit 1K Sample> abtaste?
Dann müsstest du die Zeit messen, die du für die zwei ADCs, die
Datenübertragung und das Programm selbst brauchst, dann kannst du die
Restzeit mit dem delay warten.
> Oder muss ich schauen wie ich das durch Interrupts löse?
Wäre einfacher.
Und du solltest einmal überlegen ob sich das zeitlich ausgeht.
Wandelzeit und Übertragungszeit.
> Eingangs seitig habe ich meine Platine so ausgelegt das ich die Strang> Spannung und den Sprang Strom messe.>> Hardware seitig kann ich leider nichts mehr drehen weil ich die Platine> schon entworfen habe und alle Bauteile bestellt sind.>> Mein großtes Problem ist wie ich definiert Sachen kann das ich zum> Beispiel mit 1K Sample abtaste.> Das ist mein erstes Projekt mit einem STM32.
Dann besorg dir Bespielprogramme, Beschreibungen, les dich ein und
teste!
So wie es (derzeit) aussieht macht das niemand für dich.
> Christian U. schrieb:>> Das ist deine Entscheidung - du kannst sie auch "gleichzeitig" anzeigen>> und abspeichern...>> An dieser Front bin ich schon soweit das ich die Daten welche ich mir> den obigen Code erzeuge anzeigen lassen kann.> Das alles bringt mir nur nichts wenn die Werte nur quatsch sind die ich> messe.
Die Werte sind per se nicht quatsch - du weißt was du wann, wie wo
gemessen hast und musst sie richtig interpretieren. Oder so
messen/vorbereiten, dass sie für deine Aufgabe sinnvoll(er) nutzbar
sind.
Deswegen im Post davor die vielen Fragen - das wäre ein Start das du
etwas Systematik in dein Projekt bringst und anfängst zu verstehen was
du warum machst...