|
|
Mittelwertbildung über variable Zeitschritt-Zahl in Echtzei |
|
Geri1710 |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 11.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.06.2013, 14:51
Titel: Mittelwertbildung über variable Zeitschritt-Zahl in Echtzei
|
|
|
|
|
Hallo zusammen,
ich bin langsam am verzweifeln, deshalb möchte ich mein Problem mal hier schildern in der Hoffnung, dass jemand DIE Lösung hat.
Und zwar möchte gerne in einem Simulinkmodell die Fräskraft über eine Fräserumdrehung in Echtzeit mitteln. Die Kräfte und Fräserdrehzahl erhalte ich über eine Eingangskarte.
Meine Abtastzeit liegt bei 0,1ms. Wenn ich beispielsweise gerade eine Drehzahl von 8000 U/min habe, so dauert eine Umdrehung
und ich müsste über die letzten 75 Zeitschritte mitteln.
Ich habe bisher versucht, das Ganze in einer Embedded Matlab Function umzusetzen, bei der als Eingangsgrößen die aktuelle Kraft und Drehzahl hereinkommen. In einem persistenten Array füge ich die einzelnen Kräfte hintereinander ein, bis das Ende erreicht ist, dann wird der erste Wert überschrieben usw.
Wenn ich jetzt eine andere Drehzahl habe, so ändert sich auch die Anzahl der Werte, über die ich mitteln muss. Da liegt auch das Problem in der Embedded Matlab Function, da deren Ausführung in jedem Zeitschritt unterschiedlich lang dauern kann.
Hat vielleicht von euch jemand eine Idee, wie ich mein Vorhaben umsetzen kann?
Gruß,
Gerold
|
|
|
|
|
Bibonaut |
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 06.06.13
|
|
|
|
Wohnort: Berlin
|
|
|
|
Version: 2013a
|
|
|
|
|
|
Verfasst am: 18.06.2013, 23:21
Titel:
|
|
Hallo,
ich hab gerade auch lange überlegt.
Ich gehe jetzt einfach mal davon aus, dass du immer für ganze Umdrehungen den Mittelwert bilden willst.
Hab da mal was ausprobiert, liegt im Anhang
Und zwar ist meine Idee, das ganze mit Integration zu lösen:
Du hast dein Signal und erzeugst dir daraus ein verzögertes Signal .
Dann solltest du dir den Mittelwert mit
berechnen können. Wenn du t_0 änderst macht der Integrator einen Fehler, also sollten die Integratorblöcke in Simulink wieder resettet werden. Braucht dann leider auch eine Umdrehung, bis der korrekte Wert neu berechnet wird.
Vielleicht hilft es ja. Mathematisch nicht so schön, aber mir ist gerade nicht eingefalle, wie ichs besser schreiben kann Ist ja eigentlich auch ein diskretes Signal...
Schau am besten in die Datei
Viele Grüße
Beschreibung: |
|
Download |
Dateiname: |
dyn_moving_average.mdl |
Dateigröße: |
43.01 KB |
Heruntergeladen: |
407 mal |
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.06.2013, 12:45
Titel:
|
|
Zitat: |
Da liegt auch das Problem in der Embedded Matlab Function, da deren Ausführung in jedem Zeitschritt unterschiedlich lang dauern kann. |
Wieso ist das ein Problem? Ist es nicht egal solange die Ausführung schneller beendet wird als sie erneut aufgerufen wird?
Wieso kannst nicht einfach über die benötigte Anzahl mitteln:
|
|
|
Geri1710 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 11.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2013, 09:16
Titel:
|
|
|
|
|
Also erstmal vielen Dank für eure Mühen.
@knilumis_baltaM:
Das n berechnet sich aus der Eingangsvariablen der Drehzahl. Dadurch ist n ja auch eine Variable. Jedenfalls krieg ich immer die Fehlermeldung
"Could not determine the size of this expression" bzgl. dem Ausdruck (1:n)
Beim Recherchieren habe ich gelesen, dass die Embedded Matlab Function keine dynamische Speicherreservierung unterstützt und dadurch die Größe jeder Datenstruktur bereits beim Kompilieren festgelegt sein muss (siehe dazu http://www.mathworks.com/matlabcent.....reader/view_thread/248277).
Und da mein n ja kein fester Wert ist, sondern sich ständig ändert mit der Drehzahl funktioniert das so nicht.
@Bibonaut:
Deinen Ansatz find ich ganz interessant, auf die Idee, das Ganze über Integration zu lösen, wär ich nie gekommen.
Dein Anhang war war bei mir leider ein leeres Simulinkmodell. Aber ich weiß nicht ob das so bei mir funktionieren würde. Ich berechne mir ja aus der aktuellen Drehzahl die Zeit für eine Umdrehung und mittle die Kraft über diese Zeitschritte, und das in jedem Abtastschritt.
Ich hab das ganze jetzt etwas umständlich mit vielen Memory-Blöcken und Switches gelöst, wobei n in den Bedingungseingang des Switches geht und dort als Kriterium u2 >= Threshold eingestellt ist.
Falls es einen interessiert, lade ichs mal hoch
Grüße,
Gerold
Beschreibung: |
|
Download |
Dateiname: |
Kraftmittelung_ueber1Umdrehung.mdl |
Dateigröße: |
435.54 KB |
Heruntergeladen: |
445 mal |
|
|
|
knilumis_baltaM |
Forum-Century
|
|
Beiträge: 241
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2013, 09:51
Titel:
|
|
Du brauchst ja keinen dynamischen Speicher. Speichere einfach so viele Werte wie viel du brauchst bzw. erwartest. Setze fest das du z.B. höchsten die letzten 300 Werte brauchen wirst. Dann noch selber Mittelwert bilden und es sollte klappen.
Analog mit der Geschwindigkeit. Code lässt sich problemlos erstellen.
|
|
|
Bibonaut |
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 06.06.13
|
|
|
|
Wohnort: Berlin
|
|
|
|
Version: 2013a
|
|
|
|
|
|
Verfasst am: 20.06.2013, 10:24
Titel:
|
|
@Geri: Vielleicht liegt es an der Version. Welche Version nutzt du denn?
|
|
|
Geri1710 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 11.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.06.2013, 11:01
Titel:
|
|
@ knilumis_baltaM:
So hatte ich es auch schon versucht, kamen aber auch Fehlermeldungen.
Ich habe hier MATLAB Version 7.6.0.324 (R2008a).
Ich benutze RT-Lab um aus dem Simulinkmodell Echtzeitcode zu generieren, und deswegen kann ich keine neuere Version nutzen, da unsere RT-Lab-Version damit nicht kompatibel ist (laut meinem Betreuer).
Vielleicht liegt es wirklich an meiner Version...
Grüße
Gerold
|
|
|
Bibonaut |
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 06.06.13
|
|
|
|
Wohnort: Berlin
|
|
|
|
Version: 2013a
|
|
|
|
|
|
Verfasst am: 20.06.2013, 11:14
Titel:
|
|
|
|
|
Höchstwahrscheinlich Ich hab nochmal ein bisschen rumgebastelt.
Das Ergebnis ist eine Mittelwertberechnung mit Integrator und ein Halteglied mit Integrator.
Hier gab es auch eine ähnliche Frage, wo ich das mit dem Halteglied kurz erläutert habe: http://www.gomatlab.de/wie-werte-in.....fend-erneuern-t29341.html
Wenn du die DSP-System Toolbox hast, kannst du am besten dessen Halteglied (Sample and Hold) verwenden.
Ist das System denn sehr dynamisch in der Drehzahl oder werden Betriebspunkte gehalten?
Schau dir das ganze mal an. Ich hatte Probleme bei der Mittelwertbildung wegen der Integratoren. Dann hab ich die Diskreten genommen, kenne mich damit aber nicht so gut aus.
Prüfe mal die Sample-Rate der einzelnen Blöcke, wenn du das so oder so ähnlich verwenden willst. Ich gebe keine Garantie Leichte Abweichungen beim Mittelwert sind noch zu erkennen...
Vielleicht hilfts
Viele Grüße
Beschreibung: |
|
Download |
Dateiname: |
dyn_moving_average_2008a.mdl |
Dateigröße: |
26.92 KB |
Heruntergeladen: |
401 mal |
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|