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

Überlauf eines Winkels von 360° zu 0°

 

Patrick1990
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 27.10.2015, 15:14     Titel: Überlauf eines Winkels von 360° zu 0°
  Antworten mit Zitat      
Hallo,

ich möchte einen Winkel phi, wenn er den Wert 360 erreicht hat zu 0 überlaufen lassen,, sodass der winkel dann immer von 0-360 Grad geht.
Bisher habe ich den Winkel verglichen und dann zu 0 gesetzt.
Geht dies auch eleganter?

Grüße,
Patrick
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: 27.10.2015, 15:24     Titel:
  Antworten mit Zitat      
Zitat:
Bisher habe ich den Winkel verglichen und dann zu 0 gesetzt.

ohne code kann man schlecht verbesserungsvorschläge machen.
mod
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick1990
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 27.10.2015, 15:35     Titel:
  Antworten mit Zitat      
Ich habe da keinen Code, habe das im Simulink mit Blöcken realisiert.
Mein Winkel kommt aus einem Integrator. Hinter dem Integrator vergleiche ich dann, ob der Winkel größer gleich 360 ist. Wenn ja, wird der Integrator zurückgesetzt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2015, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

wäre es sinnvoll, mit
Code:
winkel = mod(winkel, 360);

zu arbeiten?

Wenn man keinen anderen Weg findet, könnte man das in eine MATLAB Function einbauen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick1990
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 27.10.2015, 16:24     Titel:
  Antworten mit Zitat      
Hallo Harald,
Das klappt so, wie ich es auch vorher hatte. Finde deine Lösung allerdings eleganter.
Danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2015, 22:52     Titel: Re: Überlauf eines Winkels von 360° zu 0°
  Antworten mit Zitat      
Patrick1990 hat Folgendes geschrieben:

ich möchte einen Winkel phi, wenn er den Wert 360 erreicht hat zu 0 überlaufen lassen,, sodass der winkel dann immer von 0-360 Grad geht.
Bisher habe ich den Winkel verglichen und dann zu 0 gesetzt.
Geht dies auch eleganter?


Das geht vor allem richtiger. Wenn Du auf 0 setzt, wenn der Winkel >=360° ist, machst Du immer dann einen Fehler, wenn der Winkel >360° ist. Weil dann nämlich z.B. 365° zu 0° wird, statt 5°.

Darum ist mod nicht nur eleganter, sondern auch besser im Sinne von richtiger.
Private Nachricht senden Benutzer-Profile anzeigen
 
ppks
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.12.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2019, 12:25     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mal eine Frage im Zusammenhang mit diesem Thema:

Ich stehe vor folgendem Problem:

Ich möchte gerne die Zustände eines mechanischen Systems mittels Zustandsbeobachter rekonstruieren. Der Beobachter soll dabei unter anderem den Winkel des Motors verwenden. Simulativ werden die Zustände sehr gut rekonstruiert (sofern der Motorwinkel nicht begrenzt wird (sondern gegen unendlich läuft)). Dies ist in Realität aber nicht der Fall. Der Winkel läuft eben immer von 0 bis 2 Pi. Die Unstetigkeit von 2 Pi zu 0 kann der Beobachter nicht bewältigen, sodass die Zustände kurzzeitig exorbitant große Werte annehmen.

Meine bisherigen Versuche: Dem rekonstruierten Winkel für diese Sprungstelle ein vorgegebenes Verhalten aufzwingen, also quasi den rekonstruierten Winkel zu 0 setzen, wenn der gemessene Winkel 0 wird. Funktioniert leider nicht. Ich denke, weil der exakte Zeitpunkt bzw. der exakte Wert von dem aus auf 0 gesprungen wird nicht bekannt ist.

Eine weitere Idee war die Unstetigkeit zu "beseitigen", indem im Bereich der Unstetigkeit anstatt des Sprungs die Sprungantwort eines PT2 Gliedes verwendet wird, aber dabei stellt auch wieder die richtige "Platzierung" ein ziemliches Problem dar und schön ist diese Lösung auch nicht.

Ein weiterer Lösungsansatz ging so in die Richtung vom gemessenen Winkel den Sinus/Cosinus zu nehmen, sodass dem Beobachter dann ein wellenförmiger Verlauf zugefügt wird, aber damit bin ich noch nicht weiter.

Meine Frage ist jetzt eigentlich: Das Problem ließe sich ja ganz leicht lösen, wenn man aus dem gemessenen Signal wieder ein monoton steigendes bastelt um die Unstetigkeit nicht drin zu haben. Das bedeutet dann ja aber, dass der Winkel immer größer wird und gegen unendlich läuft.

Jetzt meine (recht dämliche) Frage: Stellt das ein Problem für Simulink da, wenn ein Wert gegen unendlich läuft? Also mir ist klar, dass die Solver bei instabilen Systemen irgendwann abbrechen wenn die Werte zu groß werden. (Wobei ich mich dann gefragt habe, ob dies nicht auf die Änderungsrate zurückzuführen ist)

Falls ja, hat jemand vielleicht einen Lösungsansatz (ich erwarte keine Anleitung Razz), wie das Problem mit der Unstetigkeit gelöst werden kann (Meiner Einschätzung nach sollte das ein weit bekanntes und gelöstes Problem sein)?


Vielen dank für eure Ratschläge!
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.