www.mikrocontroller.net

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


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah, erst jetzt gesehen
  unsigned long summand1;
  unsigned long summand2;

  summand1 += (long)Sensorwert1; 
  summand2 += (long)Sensorwert2;

  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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

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

edit:

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Danke,

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

Danke & Viele Grüße
Bernd

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.