NewBee Frage : Integerüberlauf bei Sensorwerten verrechnen

Gast #1373505
Lesenswert?

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
#1373516
Lesenswert?

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.
Persönliche Seite #1373529
Lesenswert?

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?
Gast #1373531
Lesenswert?

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
Gast #1373535
Lesenswert?

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
#1373739
Lesenswert?

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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren