Forum: Mikrocontroller und Digitale Elektronik Kreuzspulmesswerk mit Sin/Cos Lookup Table


von amrius (Gast)


Angehängte Dateien:

Lesenswert?

Mein Thread bezieht sich quasi auf das Ende dieses Threads 
Beitrag "Treíber für Kreuzspulinstrument" wo jemand die 
Kreuzspulmesswerk Anzeigen in seinem Tachometer per µC ansteuern wolte.

Nun bin ich selbst auch dabei ein Tacho bzw dessen Instrumente direkt 
anzusteuern. Leider bisher nur per linearer berechnung der Die 
Drehspulmesswerke bewegen sich auch durch jeden Quadranten bis zum Ende, 
jedoch schwankt die Genauigkeit der angezeigten Werte sehr stark je nach 
Bereich, sodass ich nun schon seit Monaten versuche eine gescheite ergo 
schmale sin/cos lookup Tabelle einzupflegen, scheitere jedoch an meinen 
dafür wohl doch noch zu geringen C Kentnissen... Oder ich stelle mich 
einfach nur zu dumm an.

Doch bevor ich hier einfach nach nem C Codebeispiel bettle wollte ich 
mich mal bei den Profis erkundigen ob ich denn mit meinem Ansatz 
generell richtig läge.

Die invertierung der Spulenantreibenden Portpins je nach Quadrant 
geschieht ja im Programm, also braucht die lookup Tabelle schonmal keine 
negativen Werte.
Zudem ist der Cosinus einfach nur Sinus + 90° ,also brauch man in seiner 
Tabelle doch nur einen gleichgerichteten Sinus einer bestimmten Länge 
(je nachdem wie gut man es programmieren kann ja nur 45°) um alle Winkel 
bzw Sollwerte ansteuern zu können.
Ich suche ja sonst immer so lange nach Beispielen in C bis ich was 
verwertbares gefunden habe von dem ich etwas gescheites lernen kann aber 
bei diesen speziellen Air Core Metern finde ich leider nichts 
brauchbares.

von Karl H. (kbuchegg)


Lesenswert?

Mir ist nicht klar, was da jetzt das grosse Problem sein soll.

Die sin/cos Tabelle erzeugt man sich sinnerweise zb mit Excel. Zb. pro 1 
Grad schreibt man sich zb den Sinus Wert in eine Tabelle (die dann im C 
Programm zum Array wird). Sinnigerweise wird man sich dann auch gleich 
noch den Tabellenwert so umrechnen, dass man ihn gleich für zb eine PWM 
brauchen kann, ohne dass man im µC dann noch gross rumrechnen muss.

von lrep (Gast)


Lesenswert?

amrius schrieb:
> Zudem ist der Cosinus einfach nur Sinus + 90° ,also brauch man in seiner
> Tabelle doch nur einen gleichgerichteten Sinus einer bestimmten Länge
> (je nachdem wie gut man es programmieren kann ja nur 45°)

Du brauchst nur eine einzige dieser Funktionen über 90° oder pi/2 
tabelliert. Der Rest ist Adressierung.
Wenn du weisst, dass deine Argumente äquidistant sind und du über eine 
genaue Gleitkommaarithmetik verfügst, kannst du unter Verwendung der 
Additiontstheoreme sogar mit einem einzigen Wert auskommen und so 
Speicherplatz gegen Rechenzeit eintauschen.

Je nach Aufgabenstellung ist es evtl. sogar möglich ganz auf derartige 
Klimmzüge zu verzichten, wenn man sich erinnert, dass diese Funktionen 
ja ursprünglich am rechtwinkligen Dreieck definiert sind; der Sinus z.B. 
als Verhältnis von Gegenkathete zur Hypotenuse.
Wenn also zufällig schon deine Eingangsdaten in dieser Form vorliegen, 
genügt eine simple Division...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hier ist ein kleiner Online Tabellengenerator mit einstellbaren 
Parametern:
http://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml

Erzeugt Copy&Paste fähige Tabellen für C/C++.
Du machst dir dann zwei Pointer auf die Tabelle (einen für Spule 1 und 
einen für Spule 2), die du mit deinem Messwert auf der Tabelle hin- und 
herschiebst. Die Tabellenwerte schickst du auf 2 PWMn und diese auf die 
Spulen.
Ich habe hier auch noch so ein Ding aus einem Segelschiff (Windlass) und 
werde damit irgendwann auch mal rumspielen.

: Bearbeitet durch User
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.