Forum: Mikrocontroller und Digitale Elektronik NewBee Frage : Integerüberlauf bei Sensorwerten verrechnen


von Bernd (Gast)


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

von Vlad T. (vlad_tepesch)


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.

von Simon K. (simon) Benutzerseite


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?

von Bernd (Gast)


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

von Bernd (Gast)


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

von Vlad T. (vlad_tepesch)


Lesenswert?

warum summierst du nicht die differenzen?
da sollte der bereich um einiges länger reichen

edit:

von Bernd (Gast)


Lesenswert?

Hallo Danke,

das sind die Differenzen ;)
ähm, gibt es keinen Weg das zu verrechnen?

Danke & Viele Grüße
Bernd

von Bernd (Gast)


Lesenswert?

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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Nicht dauernd aufsummieren, sondern nur die letzten N Werte (also nur 
einen gegebenen Zeitbereich).

von Karl H. (kbuchegg)


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)

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
Noch kein Account? Hier anmelden.