WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Signalschleifen mit Anfangswert und Zähler

 

Pat87
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 01.09.2015, 10:21     Titel: Signalschleifen mit Anfangswert und Zähler
  Antworten mit Zitat      
Hallo,
nachdem mich dieses Forum unzählige Male bei meiner Schwerpunktarbeit geholfen hat, will ich die letzten Probleme beseitigen und hab mich deshalb angemeldet, denn ich betrachte mich noch als Anfänger ^^

Meine Schwerpunktarbeit handelt über eine Simulation eines Verbrennungsmotors.

Ich versuche mal die Probleme so gut es geht allgemein zu schildern.
Aus einem festen Parameter (Drehzahl/Winkelgeschwindigkeit) soll ein Signal (Kurbelwinkel) mit einem Anfangswert (180°) generiert werden.
Funktionierte erstmal mit dem Integrator super, allerdings soll das Signal nur bis 720° gehen und dann von vorne beginnen (ähnlich Sägezahn) ohne den Anfangswert (also bei 0°).
Ich habe es schon mit Signal Builder und Repeating Sequence probiert ohne Erfolg.
Ich habe das Signal aus mehreren Blöcken mal zusammen gebastelt, sieht aber nicht schön aus und man muss feature('ModeIterationsInAlgLoops',0) aktivieren.

Gibt es nicht eine schöne elegante Lösung?

Vielen Dank schon mal!

Motor31.slx
 Beschreibung:
Signal soll so aussehen

Download
 Dateiname:  Motor31.slx
 Dateigröße:  14.87 KB
 Heruntergeladen:  487 mal
Private Nachricht senden Benutzer-Profile anzeigen


Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 01.09.2015, 10:34     Titel:
  Antworten mit Zitat      
Ach ja, ich hatte noch vergessen zu erwähnen,
dass die Durchläufe (immer wenn 720° erreicht ist) gezählt werden sollen.

Ich würde nämlich die Werte von Simulink nach z.b. 5. Durchgang plotten,
wäre das vielleicht mit einem Switch oder so machbar?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 01.09.2015, 11:34     Titel:
  Antworten mit Zitat      
hmm kenn mich in simulink nicht so gut aus aber ich muss da irgendwie an mod denken. vielleicht kann man das als matlabfct einbaun
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 01.09.2015, 12:03     Titel:
  Antworten mit Zitat      
Mit mod kann man doch sowohl ganzzahlig durch die Zahl teilen
als auch den Rest ausgeben lassen (z.b 13 / 3 = 4 Rest 1) ??

Hab den Befehl nicht mehr so in Erinnerung, aber wenn das stimmt,
könnte ich die Durchgänge zählen und sogar die Restwerte zur Steuerung verwenden,
z.b. Zündung bei 380° mit mod durch 360 teilen (=1 -> erste Umdrehung) und Rest
(20 -> bei 20° zünden).
Das könnte die elegante Lösung sein, die ich gesucht habe, Danke für Tipp^^

probiere ich mal heut Abend aus Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2015, 13:35     Titel:
  Antworten mit Zitat      
Guck Dir doch mal wrapTo360 an.

Ein klassischer Fehler, den Du vermeiden solltest: Du willst nicht von 720° auf 0° zurücksetzen, sondern auf "aktueller Winkel - 720°". Sonst machst Du bei jedem Umbruch einen kleinen Fehler, weil der exakte Vergleich Winkel == 720° in der Regel fehlschlägt und der Winkel tatsächlich schon etwas größer als 720° ist. Setzt man dann auf 0° zurück, macht man einen kleinen Hüpfer zurück.

Nachtrag: so, wie Du es im Modell hast, macht man es eigentlich auch. Nur dass man nicht den Ausgang zurück führt, sondern im Integrator-Block den State-Port aktiviert und den auf den Reset zurückkoppelt. Steht auch in der Hilfe und sieht bei Dir dann so aus:

Die 180° Anfangsverdrehung stehen in dem IC-Block drin, den findest Du in der Signal Attributes-Bibliothek.

integrator.PNG
 Beschreibung:

Download
 Dateiname:  integrator.PNG
 Dateigröße:  51.3 KB
 Heruntergeladen:  498 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 01.09.2015, 18:45     Titel:
  Antworten mit Zitat      
Vielen Dank,
hat wunderbar geklappt und sieht auch besser aus und ohne den feature Kram. ^^
Mit Signal Attributes hatte ich bisher noch nie zu tun, wieder eine Ecke zum beschäftigen Wink
Stimmt das ==720 hat auch nie wirklich geklappt Embarassed

Meintest du mit wrapto360 eine matlab fcn zu bauen, um so das Signal bis 360° zu begrenzen?
Auch ne nette Idee, allerdings muss mein Signal bis 720° gehen und
ich versuche Matlab fcn allgemein zu umgehen, da schon eine handvoll viel Zeit kosten.
Ich muss später viele Simulationen hintereinander durchspielen (Anpassung an einem realen Motor).

Hättest du noch ein Tipp, wie ich die Peaks möglichst ohne fcn zählen könnte?
Glaube, bei fcn hieß der Befehl findpeaks, wenn ich mich nicht irre.

Will die Daten, wie zb Druck, erst nach dem 3. Durchgang oder so plotten, wenn das System eingependelt ist, hoffe das ist möglich, aber dazu später ^^

Aber nochmals Danke!! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2015, 19:44     Titel:
  Antworten mit Zitat      
Ja, Matlab-Functions sind leider langsam. Das wrapTo360 wäre die Alternative zum rückgekoppelten Integrator gewesen und dann auch in einer Matlab-Function gestanden.

Durchgänge Zählen ohne Matlab-Function ist schwer. Es gibt glaube ich in der DSP-Toolbox einen Counter-Block, keine Ahnung, wie schnell der so ist.

Alternativ musst Du ja nicht unbedingt die Umbrüche zählen sondern kannst ja einfach mit einem zweiten Integrator die Drehzahl integrieren, ohne irgendein Zurücksetzen und wenn der Integrator dann bei (5*720-180)° steht, hast Du die 5 Umdrehungen. Das kostet kaum Rechenzeit und funktioniert auch...

EDIT: Im Integrator musst Du noch den Haken bei "Limit output" wegmachen. Die Begrenzung passiert ja automatisch durch die äußere Beschaltung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 02.09.2015, 21:50     Titel:
  Antworten mit Zitat      
In der DSP Box den Counter-, Peakfinder- und Maximum-Block haben leider nicht funktioniert, aber ich hab das mit einem 2. Integrator erledigt.

Wenn du mir jetzt noch verraten könntest, wie ich ab der n-Wiederholung die Daten mit to workspace oder im xy-Plot bekomme, ohne das er vorherige Werte mit einbezieht,
hättest du erstmal wieder Ruhe vor mir Razz

Hab das erstmal mit einem Switch probiert, sieht im Diagramm auch gut aus, da ich ja beide Werte (phi und zb Druck) darüber steuer,
nur zieht er noch am Anfang und am Ende irgendwelche Linien, die nicht so schön auf dem Diagramm sind.

Wenn ich nur den Druck über Switch steuer, kommt nichts vernünftiges.

Also irgendwie die vorherigen Werte überschreiben, diesmal akzeptiere ich auch ne fcn, weil ich da echt keine Idee habe,
hätte das bei einem anderen Model auch gebraucht, also ich probiere das schön länger... Crying or Very sad

Druckverlauf.png
 Beschreibung:

Download
 Dateiname:  Druckverlauf.png
 Dateigröße:  17.14 KB
 Heruntergeladen:  470 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 06.09.2015, 12:39     Titel:
  Antworten mit Zitat      
Ich vermute, das das ganze mit Simulink Blöcken gar nicht geht, sondern eher in Richtung Programmierung geht.
Ich werde das als neue Frage formulieren, da das ein anderes Problem ist als im Titel.
Vielen Dank nochmal für die schnelle Hilfe !!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.