sinusberechnung mittels µC

Gast #23937
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.
Gast #23939
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

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