Hallo Zusammen, ich hab ein kleines Problem, ich integriere einen Sensorwert (Gyro Gradangaben), irgendwann kommt der natürlich an sein Limit (bei Int +65.XXX) und hüpft "radikal" auf -65.XXX... (habs natürlich auf Long, aber da kenne ich die Limits nicht) Sprich die Regelung macht einen Maximalen Ruck. Weiß jemand wie ich das lösen kann? Alles würde klappen, wenn der Überlauf nicht da wäre. Danke & Viele Grüße Bernd
und warum integrierst du die so lang? brauchst du denn die positive UND die negative richtung? falls nicht, benutz doch einen unsigned, da ist der werteberteich doppelt so groß. Abgesehen davon kann es nicht sein, dass er von +65535 auf -65536 springt, da ein signed int nur von -32768 - +32767 geht. Wenn du wirklich den von dir beschriebenen Überlauf hast, dann berechnest du irgend wo etwas falsch. tip: für Arithmetik benutze die typen aus dem stdint.h, da ist unabhängig von der Plattform immer klar, wie breit dein Datentyp ist.
Bernd schrieb: > Hallo Zusammen, > > ich hab ein kleines Problem, ich integriere einen Sensorwert (Gyro > Gradangaben), irgendwann kommt der natürlich an sein Limit (bei Int > +65.XXX) und hüpft "radikal" auf -65.XXX... (habs natürlich auf Long, > aber > da kenne ich die Limits nicht) > > Sprich die Regelung macht einen Maximalen Ruck. > > Weiß jemand wie ich das lösen kann? Alles würde klappen, > wenn der Überlauf nicht da wäre. > > Danke & Viele Grüße > Bernd Was willst du genau machen und wie sieht dein Code aus?
Hallo, vielen Dank. Ja klar. Ich wußte nur nicht genau wie die Grenzen liegen. Geht auch vielmehr allgemein, es muß doch möglich sein, bei begrenzten Zahlen (mit Überlauf) ein konstantes Signal auszugeben. Mir fehlen leider hier die Hintergründe. Danke & Viele Grüße Bernd
ah, erst jetzt gesehen
1 | unsigned long summand1; |
2 | unsigned long summand2; |
3 | |
4 | summand1 += (long)Sensorwert1; |
5 | summand2 += (long)Sensorwert2; |
6 | |
7 | Diff = summand1 - summand2; |
Irgendwann wir ja einer der beiden Summanden den Überlauf erreichen, dann wird plötzlich die Differenz riesig. Riesensprung in der Regelung... Danke & Viele Grüße Bernd
warum summierst du nicht die differenzen? da sollte der bereich um einiges länger reichen edit:
Hallo Danke, das sind die Differenzen ;) ähm, gibt es keinen Weg das zu verrechnen? Danke & Viele Grüße Bernd
nachtrag, natürlich kann ich das Problem irgendwie umgehen, werte kleiner skalieren etc. Aber es muß doch eine sauber Lösung geben. ... aber, trotzdem vielen Dank
Nicht dauernd aufsummieren, sondern nur die letzten N Werte (also nur einen gegebenen Zeitbereich).
Welchen Sinn macht es, Grade zu integrieren? Wenn dir dein Winkelsensor jede Sekunde 30° meldet, dann hast du 30 60 90 120 150 was ist nach 5 Sekunden die Aussage der 150° ? Bei einer Regelgung wird die Differenz des Istwerts zum Sollwert aufintegriert. Ist deine Regelstrecke sauber eingeschwungen, dann ist diese Differenz ständig 0 und die Summe daher auch 0 (Persönlich denke ich, dass du der nächste bist, der auf die harte Tour lernt, dass Gyros nicht dazu taugen eine Lage im Raum durch aufintegrieren zu bestimmen und nachzuführen. Die Gyrodrift macht dir das Leben zur Hölle: Der Gyro meldet eine Drehbewegung wo objektiv gesehen keine vorhanden ist)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.