Winkelbestimmung mit Hilfe eines Lagesensors

Gast #3122981
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
Gast #3123060
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
Gast #3123095
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
Gast #3123130
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.
#3123171
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.
Gast #3123196
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
#3123201
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.

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