Forum: Mikrocontroller und Digitale Elektronik sinusberechnung mittels µC


von ulrich strobel (Gast)


Lesenswert?

hey hallo, hat von euch einer ne ahnung wie man mit nem atmel ne sinus 
cosinus tangens und das gleiche rückirkend machen kann? hab den ganzen 
tag getüfftelt und fand keine lösung. wäre echt mal genial

von Wolfram (Gast)


Lesenswert?

Hi Ulrich

Entweder mit einer Taylorreihe das ist aber sehr rechenaufwendig
oder mit einer Tabelle(da kann man die Symetrien die bestehen)
ausnutzen
CU Wolfram

von crazy horse (Gast)


Lesenswert?

Und wo ist dein Problem dabei?
3 Möglichkeiten:
1.Compiler benutzen, i.a. unterstützen die trig. Funktionen
2. Funktion z.B. von Excel berechnen lassen, die Ergebnisse in 
gewünschter Abstufung und Genauigkeit als Tabelle im Prozessor 
abspeichern
3. passende Assemblerroutinen suchen (selbst schreiben dürfte langwierig 
werden)

Variante 1 ist vorzuziehen, arbeitet auch genauer, allerdings ist ein 
Zugriff auf eine fertige Tabelle viel schneller, braucht aber viel 
Speicher (Beispiel 16bit Genauigkeit, Winkelauflösung 0,1° -> 1800 
byte).
Du brauchst allerdings nur einen Quadranten abzuspeicher, den Rest kann 
man einfach daraus ableiten.
Ich hatte mal so ein Beispiel bei einem Rundlaufmeßgerät, als 
Eingangsgrößen ein Winkelenkoder und ein berührungsloses 
Abstandsmesssystem, Ausgabemedium war ein xy-Schreiber, der ein 
Polardiagramm zeichnen sollte, und das in Echtzeit. Daß habe ich aus 
Zeitgründen mit einer Tabelle gemacht.

von ulrich strobel (Gast)


Lesenswert?

tya geht leider nicht, soll eine nc bohrmaschine werden die das 
excellon-format (Bohrdaten) in echtzeit auf zwei winkel um ememuliert, 
wo könnte man da passende assemblerroutinen finden? oder wie könnte sie 
selber erstellen? finde keine mathematische lösung?

von Oliver K. (Gast)


Lesenswert?

Wo ist denn Dein Problem?

Die Tabellenlösung mit Ausnutzung der Symetrie ist das Schnellste, was 
man bekommen kann. Zwischenwerte (Xi), die nicht in der Tabelle 
aufgeführt sind, werden folgendermaßen ermittelt:
f(Xi) = (f(Xi-1) + f(Xi+1)) / 2
Da man in Assembler in der Regel nur mit Ganzzahlen arbeitet, muß man 
halt die Funktionswerte mit einem Faktor multiplizieren. So ist der 
sin(90) also nicht 1, sondern z.B. 100.

Technisch praktisch wird bei Compilernroutinen so eine Funktion immer 
durch ein Polynom n-ten Grades hinreichend approximiert. Der 
Funktionswert wird dann sehr schnell durch das Horner-Schema ermittelt.

Grüße
Oliver

von Gerhard Humer (Gast)


Lesenswert?

Hi Ulrich

in Bascom gehts ganz einfach

Dim A as Single
Dim B as Single
Dim C as Single
A = 10          'Winkel
B = Deg2rad(a)  'Umrechnung ins Bogenmass
C = Sin(b)      'und das ist der Sinus von A


Gruss Gerhard

von Johannes (Gast)


Lesenswert?

Hi!

Das geht auch mit dem sog. CORDIC - Algorithmus. Einfach mal danach 
googeln. Man kann damit iterativ trigonometrische Funktonen berechnen 
und braucht im Wesentlichen nur Additionen und Shift - Operationen.

Wurde früher in Kampf-Flugzeugen zur Navigation verwendet...

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.