Forum: Mikrocontroller und Digitale Elektronik Software zur Erkennung des Winkels durch 2 hallsensoren


von Pad S. (padesmos)


Lesenswert?

Hallo Leute ,
ich bekomme 2 Hallspannungen, die ich mit einem AD unwandle, und will 
mit deren Werten den Winkel erkennen. Ich weiß es geht durch Arctanges, 
habe aber nicht viel Ahnung in C, da ganz Anfänger.
Hat jemand eine idee wie ich es realisieren kann bzw. eine Code-Muster?
Ich freue mich für jede baldige Antwort, da ich mit dem projekt Ende Mai 
fertig sein muß.

von Karl H. (kbuchegg)


Lesenswert?

Ali Serbouti wrote:
> Hallo Leute ,
> ich bekomme 2 Hallspannungen, die ich mit einem AD unwandle, und will
> mit deren Werten den Winkel erkennen. Ich weiß es geht durch Arctanges,
> habe aber nicht viel Ahnung in C, da ganz Anfänger.

Die Arcus Tangens Funktion heist in C atan().
Meist benutzt man aber die atan2() Funktion, da sie
* einfacher zu benutzen ist
* den Quadranten auch richtig bestimmt.

Details zu atan bzw atan2 findest du in jedem C-Buch bzw. mit
google.

Noch ein Hinweis: Du bekommst den Winkel in Radianten, nicht in
Grad.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Wenn du einen Mikrocontroller dabei hast, dann würde ich den Winkel über 
eine LUT (look up table) aus den Sensordaten ermitteln. Wird genauer ...

Frank

von Peter X. (vielfrass)


Lesenswert?

Frank Esselbach wrote:
> Wenn du einen Mikrocontroller dabei hast, dann würde ich den Winkel über
> eine LUT (look up table) aus den Sensordaten ermitteln. Wird genauer ...
>
Wie bitte sehr, soll denn eine Tabelle mit sagen wir mal 1024 Werten 
genauer sein, als eine Berechnung folgender Art:

   Winkel_in_grad = atan2(Sensor_x / Sensor_y) * 180 / PI;

Auf die Tabelle zugreifen ist zwar schneller, aber der Zeitgewinn ist 
spätestens dann wieder verloren, wenn man interpolieren muss.

von Peter X. (vielfrass)


Lesenswert?

Sorry, muss natürlich (Sensor_y / Sensor_x) heissen!

von Pad S. (padesmos)


Lesenswert?

hallo,
Danke für die schnelle Antwort,
ich benutze einen S08 von Motorola mit einer 10Bit Auflösung.
>dann würde ich den Winkel über eine LUT
meinst du etwa wie das Beispiel:

HAL_POS__Deg[2][180] =
                            {{  0, 2,  4,  5,  7,   9, 11, 12,
                               14, 16, 17, 19, 21, 22, 24, 25,
                               27, 28, 29, 31, 32, 33, 35, 36,
                               37, 38, 39, 40, 41, 42, 43, 44,
                               45,...,180},
                             {  0, -2, -4, -5, -7, -9,-11,-12,
                              -14,-16,-17,-19,-21,-22,-24,-25,
                              -27,-28,-29,-31,-32,-33,-35,-36,
                              -37,-38,-39,-40,-41,-42,-43,-44,
                              -45,...,-180}
                            };
Ich bekomme 2 u-werte in Form von Bytes(0..1023)
Wie kann ich diese mit der LUT verbinden?
Gruß

von Pad S. (padesmos)


Lesenswert?

Hallo Peter X,
>der Zeitgewinn ist spätestens dann wieder verloren, wenn man >interpolieren muss.
Meinst du etwa die Mittelwertbildung von mehreren Werten durch ein 
Filter?
Gruß

von yalu (Gast)


Lesenswert?

Welche Signale liefern die beiden Sensoren?

Ich nehme an, es handelt sich um einen rotierenden Magnet, dessen Feld
von zwei Hallsensoren gemessen wird. Bei geeigneter Form des
Magnetfelds und geschickter Anordnung der Sensoren liefern diese bei
einem zweipoligen Magnet Signale, die zum Sinus bzw. zum Cosinus des
Drehwinkels proportional sind. Der Drehwinkel lässt sich dann leicht
aus den Messwerten berechnen:

  winkel = atan2(hall_y, hall_x);

Hat der Magnet 2*n Pole, so wiederholen sich die Signale periodisch
nach einer Drehung um 2*pi/n, die Messwerte sind also mehrdeutig. Um
den Winkel über eine Volldrehung zu bestimmen, müssen die Perioden der
Signale gezählt werden. Der Winkelversatz innerhalb einer Periode ist

  winkelversatz = atan2(hall_y, hall_x) / n;

Leider sind die von den Hallsensoren gelieferten Signale meist nicht
exakt sinusförmig, sondern verzerrt. Um ein genaues Ergebnis zu
erhalten, muss diese Verzerrung ermittelt und beim Einlesen der
Messwerte herausgerechnet werden.

Bevor du dich mit LUTs herumschlägst, würde ich es erst einmal mit der
atan2-Funktion probieren, sofern die Laufzeitbibliothek deines
C-Compilers diese unterstützt. Die geneuigkeit des Ergebnisses hängt
dann praktisch nur von der Geneuigkeit der Messignale ab. Erst wenn du
damit zufrieden bist, kannst du beginnen, eine rechenzeitoptimierte
und genauigkeitsreduzierte Lösung mit LUTs zu suchen.

von Pad S. (padesmos)


Lesenswert?

Hallo,
es ist eigentlich kein rotierender magnet.
Es sind 2 magnete und 2 Hallsensoren. Jeder Magnet bewegt sich 
horizontal
um seinen Hallsensor in einem bereich von 3,2mm.
Das heisst zB. bei x=0mm-->Ux=0,5V(Offset)
                   x=3,2mm-->Ux=4,5V
Jeder Magnet hat nur 2 Pole(N&S) .
Hier hast was gesagt, das mich sehr stört, und finde noch nicht den Weg
dafür:
>Leider sind die von den Hallsensoren gelieferten Signale meist nicht
>exakt sinusförmig, sondern verzerrt. Um ein genaues Ergebnis zu
>erhalten, muss diese Verzerrung ermittelt und beim Einlesen der
>Messwerte herausgerechnet werden.
wie kann ich es dann ermitteln, soll ich eine "Soll-Kennline" erstellen 
und sie dann zu meinem Hall-x bzw. Hall-y betrachten??
Wie kann ich überhaupt die Nichtlinearität bestimmen?
Danke nochmal für eure Zeit und Mühe!
Gruß

von yalu (Gast)


Lesenswert?

> Es sind 2 magnete und 2 Hallsensoren. Jeder Magnet bewegt sich
> horizontal
> um seinen Hallsensor in einem bereich von 3,2mm.
> Das heisst zB. bei x=0mm-->Ux=0,5V(Offset)
>                    x=3,2mm-->Ux=4,5V

Das habe ich jetzt nicht ganz verstanden: Was sind das für Magnete?
Stabmagnete? Wie genau sieht die Bewegung aus? Sind die beiden Magnete
miteinander verbunden, oder bewegen sie sich unabhängig voneinander?
Wo taucht der zu messende Winkel auf? Gibt es vielleicht eine kleine
Skizze zu der ganzen Geschichte?

von Pad S. (padesmos)


Angehängte Dateien:

Lesenswert?

Hallo
das Stabmagnete mit 8x3x3mm.
Bitte schau mal die Skizze

von Pad S. (padesmos)


Lesenswert?

Wie kann ich eine Aussage über das Messsystem vorher darstellen?
da bei mir Hardware(Mechanik) eine grosse Rolle spielt,
das sich der Abstand zw. Magnet und Hallsensor mit der 3. Potenz
auf die Ausgangsspannung einwirkt.
Gruß

von STK500-Besitzer (Gast)


Lesenswert?

Wo ist denn der gesuchte Winkel im Bild?

von Pad S. (padesmos)


Lesenswert?

Hallo,
in der Skizze kannst du keine Winkel dargestellt sehen,
es werden aber 360° durch den ganzen U-Änderungsbereich
verteilt und berechnet.

von Pedro Pafit (Gast)


Angehängte Dateien:

Lesenswert?

kapier nix xD

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.