Forum: Mikrocontroller und Digitale Elektronik Winkelfunktionen nutzen auf STM32F1 (Cortex-M3)


von Manuel W. (multisync)


Lesenswert?

Hallo zusammen,

ich stehe gerade zum ersten Mal vor der Anforderung Winkelfunktionen 
benutzen zu müssen, und bin ehrlich gesagt ein wenig planlos.

Grund: In allen Anleitungen die ich bisher über Google gefunden habe, 
wird behauptet, dass der Rückgabewert von z. B. sin() vom Datentyp float 
ist. Nun ja, mein Cortex-M3 hat jedoch keine FPU, die gibt's erst ab dem 
-M4. Also kann das für mich schonmal nicht so ganz anwendbar sein.

Ich habe mal testweise ein paar Winkelfunktionen aufgerufen, hier was 
rückgeliefert wurde:

cos(0) --> 1
cos(45) --> 0
cos(90) --> 0
cos(180) --> 0

tan(0) --> 0
tan(45) --> 1
tan(90) --> -1

Viel schlauer bin ich jetzt aber auch nicht. Dass tan(45) 1 rückliefert 
kann als Indiz genommen werden, dass das Argument in Grad vorliegen 
muss, wirklich stichhaltig ist das für mich aber nicht. Ich vermute 
eigentlich, dass das Argument eher in Bogenmaß angegeben sein muss. Dann 
frage ich mich aber, wie ich den Winkel angeben soll, denn ich habe ja 
nur Integer auf diesem µC. Kann es sein, dass hier Fixkommaarithmetik 
zum Einsatz kommt? Wenn ja: An welcher Stelle hat das Komma zu sein?

Irgendwie weiß ich nicht wo ich weiter recherchieren soll.

Danke!

Ich programmiere übrigens mit Em::Blocks. Das verwendet eine eigene 
Version der GCC, denke ich.

von Christian K. (the_kirsch)


Lesenswert?

1. Fließkommavariablen kannst du auch nutzen wenn du keine FPU hast, 
dann wird das alles in Software gemacht, ist dann halt langsamer.

2. Trigonometrische Funktionen mit Konstanten werden bereits vom 
Compiler berechnet.

3. Nein, es wird in Bogenmaß gerechnet. bei dir werden die Ergebnisse 
nur auf Ganzzahl gerundet

cos(0) --> 1
cos(45) --> 0,52 -> 0
cos(90) --> -0,4 -> 0
cos(180) --> -0,56 -> 0

tan(0) --> 0
tan(45) --> 1,62 ->  1
tan(90) --> -1,99 -> -1

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Kauf dier ein Buch über die Programmiersprache "C". Ohne ordentliche 
Lektüre wirst Du das Ganze eher nicht verstehen.

Übrigens: "Float" kann sogar ein 8-Bitter wie AVR benutzen, da dauern 
die Berechnungen dann halt bedeutend länger.

von Manuel W. (multisync)


Lesenswert?

Christian K. schrieb:
> 1. Fließkommavariablen kannst du auch nutzen wenn du keine FPU hast,
> dann wird das alles in Software gemacht, ist dann halt langsamer.
>
> 2. Trigonometrische Funktionen mit Konstanten werden bereits vom
> Compiler berechnet.
>
> 3. Nein, es wird in Bogenmaß gerechnet. bei dir werden die Ergebnisse
> nur auf Ganzzahl gerundet

Alles klar, vielen Dank!

von RP6conrad (Gast)


Lesenswert?

Auch nicht vergessen : #include math.h library !! Dan soll ess 
problemlos functionieren. Ichselbe verwende das auf den STM32VL 
Discovery, lauft relatif schnell mit sofware float Berechnungen.

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.