Geber, Resolver Winkelmessung aus zwei Kurven, Sin,Cos mittels arctan2
Verfasst: Sonntag 29. März 2026, 10:28
Hallo,
weiter geht es mit meinem Projekt.
Ich möchte nun aus Gerbern für Servomotoren welche analoge Informationen zur Verfügung stellen auswerten.
Einige Geber geben zusätzlich oder nur zwei Spuren Sinus / Cosinus aus.
Typisch wären auch Revolver, 2polig....6polig
Über die höhe der Spannungen kann ich aktuell noch nichts sagen, scheinen sich aber um die 2,5Volt zu bewegen. Mit Sicherheit gibt es auch höhere
Diese Spannungen möchte ich über einen AD-Wandler auf den Raspberry ziehen.
Die Umwandlung der Spannungen sollte hier aber kein Thema sein. Oder doch?
Im Netz findet man so einiges.
Hier aus der Implementierung des Protokolls der Sick-Geber
Im Netz habe ich folgendes gefunden und etwas abgewandelt. Nur mal so gedacht.
Gehe ich richtig in der Annahme, das das np.array den Aufbau des Signal für eine komplette Umdrehung wäre?
Die 180° gibt es nur deshalb, da die negativen Spannung so bearbeitet aind, das diese sich nur im positiven Bereich bewegen?
Oder doch mit 360° laufen lassen. Kann man testen
Für einen 4poligen Resolver wäre der np.array eventuell so? Nur mal so gedacht.
Gruß Ralf
weiter geht es mit meinem Projekt.
Ich möchte nun aus Gerbern für Servomotoren welche analoge Informationen zur Verfügung stellen auswerten.
Einige Geber geben zusätzlich oder nur zwei Spuren Sinus / Cosinus aus.
Typisch wären auch Revolver, 2polig....6polig
Über die höhe der Spannungen kann ich aktuell noch nichts sagen, scheinen sich aber um die 2,5Volt zu bewegen. Mit Sicherheit gibt es auch höhere
Diese Spannungen möchte ich über einen AD-Wandler auf den Raspberry ziehen.
Die Umwandlung der Spannungen sollte hier aber kein Thema sein. Oder doch?
Im Netz findet man so einiges.
Hier aus der Implementierung des Protokolls der Sick-Geber
Muss ich da eine Tabelle zur Verfügung stellen?Die Hochauflösung (Arctan-Interpolation)
Zur Berechnung des hochaufgelösten Winkels innerhalb einer Periode sind viele Verfahren bekannt. Das folgende
Verfahren (Abbildung 4) hat sich dabei als guter Kompromiss bzgl. Codegröße und Ausführungsgeschwindigkeit be-
währt:
1. Reduzierung der Berechnung auf den 1. Oktanten (0 … 45°) durch vertauschen und/oder invertieren der Sinus-
und Cosinuswerte, damit die nachfolgende
2. Berechnung der Division sin (x)/cos (x) immer ein Ergebnis < = 1 hat.
3. Tabellengestützte Linearisierung des Divisionsergebnisse zur Annäherung an die Arcus-Tangens-Funktion
(ca. 32 Stützpunkte erforderlich).
4. Rücktransformation & Erweiterung des Ergebnisses in den unter 1) ermittelten Oktanten.
3. Tabellengestützte Linearisierung des Divisionsergebnisse zur Annäherung an die Arcus-Tangens-Funktion
(ca. 32 Stützpunkte erforderlich).
Im Netz habe ich folgendes gefunden und etwas abgewandelt. Nur mal so gedacht.
Code: Alles auswählen
import numpy as np
x = np.array([-1, +1, +1, -1])
y = np.array([-1, -1, +1, +1])
cos = 0.3
sin = 0.1
angles = np.arctan2(cos,sin) * 180 / np.pi
print(angles)
Die 180° gibt es nur deshalb, da die negativen Spannung so bearbeitet aind, das diese sich nur im positiven Bereich bewegen?
Oder doch mit 360° laufen lassen. Kann man testen
Für einen 4poligen Resolver wäre der np.array eventuell so? Nur mal so gedacht.
Code: Alles auswählen
x = np.array([-1, +1, +1, -1, -1, +1, +1, -1])