Forum: Mikrocontroller und Digitale Elektronik Winkelbestimmung mit Hilfe eines Lagesensors


von Tomas (Gast)


Lesenswert?

Hallo Community,

ich hab folgendes Problem:
ich mochte mit Hilfe eines PIC Mikrocontroller (16F1455) den Lagewinkel 
bestimmen. Ich habe einen 3- Achs Lagesensor welcher mir jeweils 10 Bit 
(x,y,z) liefert. nun möchte ich aus diesen Werten den winkel berechnen. 
2D reicht aus.

Also ich will im Grunde die Neigung in Grad oder Bogenmaß in Bezug auf 
waagerecht.

Ich dachte an Skalarprodukt nur wie setze ich das in Assembler um?

Mfg
Tomas

von Erich (Gast)


Lesenswert?

Zunächst solltest du die Werte deines Lagesensors als Zahlenwerte über 
den ADC des uC ermitteln. Evtl. Werte Filtern, glätten, 
plausibilisieren.
Dann stellst du deine Rechenvorschrift(en) auf, in mathematischen 
Formeln, auf Papier z.B. ; mit'm Taschenrechner.
Dann tippst du die Schritte der Rechenvorschriften in skalierten Werten, 
ausgegehend von den ADC Zahlen, in eine EXCEL Tabelle ein (Open Office 
Calc)!
Dort rechnest du das dann Schritt für Schritt durch, und zwar möglichst 
unter Verwendung von GANZZAHL und RUNDEN, sowie möglich wenig Dividieren 
und wenn nur durch ganze Vielfache von 2.
Nach jeden Schritt das Ergebnis abprüfen ob es in einen 8-Bit, einen 
16-Bit oder höchstens in einen 32-Bit-Wert paßt.
Zum Schluß muss (in EXCEL) das korrekte Ergebnis für die Eingangswerte 
rauskommen.

Jetzt kannst an den Eingangswerte "rumspielen", v.a. minimale und 
maximale Werte, einzeln oder alle zusammen usw.

Wenn alles paßt, erst dann sollte man die Umsetzung nach ASM tun (oder 
doch besser nach C).

Gruss

von Tomas (Gast)


Lesenswert?

Hallo Danke für deinen Tip!

Hab das ganze auf dem Blatt durchgerechnet ist da ja auch kein Problem,

ist ja nur Skalarprodukt.

also acos((a*b)/(|a|*|b|))

die Aufnahme der ADC werte ist auch kein Problem.

Das einzige Problem das ich habe ist, das ich nicht weiß wie ich 2x 10 
Bit in Assembler multipliziere, dividiere (16f1455) und wie ich den ACOS 
bilde.

Gruß Tomas

von Uwe (Gast)


Lesenswert?

Wenn der keinen Hardware Multiplizierer hat dann mit addition und ner 
schleife bis der. Bei der Division mit ner schleife und nem 
Subtrahierbefehl. Und für Sin u. cos nimmt man lookup Tabellen und 
interpoliert den Rest.

von Tomas (Gast)


Lesenswert?

vielen Dank für die Antwort werde mir das Thema look up Tabellen ect. 
mal ansehen.

Gibt es da schon fertige Schleifen für 10 bit * 10 bit Multiplikation?


Gruß
Tomas

von Guest (Gast)


Lesenswert?

Wieso nutzt du nicht einfach C?

von Karl H. (kbuchegg)


Lesenswert?

Tomas schrieb:
> vielen Dank für die Antwort werde mir das Thema look up Tabellen ect.
> mal ansehen.
>
> Gibt es da schon fertige Schleifen für 10 bit * 10 bit Multiplikation?

Das Prinzip kannst du dir hier ansehen.
AVR-Tutorial: Arithmetik8: Multiplikation in Software
AVR-Tutorial: Arithmetik8: Division in Software


Ist zwar für einen AVR ausprogrammiert aber das tut der Sache ja keinen 
Abbruch, da du all das bereits in der Grundschule (sogar in der 
verschärften Form im Dezimalsystem) gelernt hast.
UNd der Rest: den nennt man programmieren.

von Tomas (Gast)


Lesenswert?

ok vielen Dank für deine Antwort Karl Heinz.
Werde das dann mal für 10 bit Umsetzen.

@ Guest: Ich besitze keinen C Compiler für dem Oben genannten PIC 
16F1455 sondern nur einen Assembler Compiler.

Noch so ne frage zu den LUT's.
Muss ich mir die LUT selbst erstellen?

Ich finde im Netz keine fertige LUT für acos.
pi/2 wurde mir ja reichen aufgrund Symmetrie,..

Gruß Tomas

von Karl H. (kbuchegg)


Lesenswert?

Tomas schrieb:


> Ich finde im Netz keine fertige LUT für acos.

Na ja, komm.
Sowas ist mit Excel schneller gemacht, als du in Google acos eintippen 
kannst.

Oder, 'Gott bewahre', auf dem hoffentlich auf dem PC ohnehin 
installierten C-Compiler ein 4 Zeilen Programm geschrieben, welche die 
LUT ausgibt und die man aus der CommandLine in ein File redirected.

von Jobst M. (jobstens-de)


Lesenswert?

Ich hätte da noch eine 32-Bit ARCCOS-Berechnung für 8051-ASM ...
Legt den Prozessor allerdings lahm.


Gruß

Jobst

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.