sinusberechnung mittels µC

Gast #23936
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
Gast #23937
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 #23938
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?
Gast #23939
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
Gast #23940
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
Gast #23941
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.