LabVIEWForum.de - Differenzwinkelerfassung durch Impulsgeber

LabVIEWForum.de

Normale Version: Differenzwinkelerfassung durch Impulsgeber
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag Community,
leider hab ich auch nach intensiverer suche hier im Forum nichts zu dem folgenden Thema gefunden:

Ziel:
Ziel ist es einen Differenzwinkel zwischen zwei Impulsgebern zu messen.

Vorgaben:
Zwei Wellen drehen sich mit ~2500U/min. An beiden Wellen sind Impulsgeber
befestigt. Eingesetzte Hall-Sensoren(digital) zeigen also 24 steigende/fallende Zähne
pro Umdrehung. Am eingesetzten Messsystem stehen 2 Counter zur Verfügung. Es
soll der Differenzwinkel zwischen beiden Wellen ermittelt werden.

Bisherige Problematik:
Im Vergleich zu einem Referenzsystem zeigen alle Versuche eine hohe, aber nicht
gleichmäßige Abweichung im Differenzwinkel.

Neuste Herangehensweise:
Erfassen von Periodendauern --> Umrechnen in Winkelgeschwindigkeiten --> Durch
Interpolation in ein äquidistantes Signal umgewandelt --> Integration über die
Winkelgeschwindigkeit --> Beide Winkelverläufe von einander abgezogen

Ich hab zum besseren Verständniss ein Schaubild der Signalerfassung angefügt.
Vielleicht fällt jemandem von euch ja eine vollkommen andere Herangehensweise ein, den ich steh inzwischen ziemlich auf dem Schlauch.
Für Rückfragen sowie Antworten stehe ich gern zur Verfügung.

Mit freundlichen Grüßen,
Scenic626
Hallo Scenic,

pragmatische Herangehensweise:
-Mit beiden CTR die Pulse zählen.
-Beide CTR mit der gleichen Taktquelle arbeiten lassen.
-Beide CTR abfragen und Differenz der CTR-Werte bilden: Differenz = Winkelversatz

Genauer könnte es werden, wenn man zusätzlich auch noch den zeitlichen Versatz der steigenden Flanken beider Signale bestimmt. Da müsste ich aber auch erst einmal in den mitgelieferten Beispiel-VIs wühlen...
War auch mein erster Gedanke.
Leider würde ich damit in meinem Fall nur eine Genauigkeit von 15° erreichen.
Das ist leider viel zu ungenau für unsere Anwendung.
Es gibt einige Beispiele zum Verwenden von Standardwinkelaufnehmern (A,B und ggf. Z-Ausgänge).
Allerdings hat dieses Art von Messtask den Nachteil, dass er auch nur eine Genauigkeit von 15° bietet, wenn man nur einen Einganganschluss definiert.

Eine weitere Strategie von mir war folgende: (code-artig ausgedrückt %--> Comment)

diff_winkel=0;
while(Messung nicht beendet){
p1=Periodendauer an Impulsgeber 1; %Vergleiche read_task VI [Timeout=-1]
p2=Periodendauer an Impulsgeber 2;
if(p1>p2){pl=p1;}
else{pl=p2;}
omega1=15/p1; %Winkelgeschwindigkeit am ersten Impulsgeber
omega2=15/p2;
d_omega=omega1-omega2; %Differenz Winkelgeschwindigkeit zwischen beiden Impulsgebern
winkel=d_omega*pl; %Differenzwinkel während diesem Schleifen durchlaufes
diffwinkel=diffwinkel+winkel; %kommulierter Differenzwinkel
}

In diesem Beispiel gehe ich natürlich davon aus, dass die Winkelgeschwindigkeit zwischen zwei Schleifendurchläufen konstant bleibt. der beobachtete Fehler bei diesem Vorgehen ist jedoch weit größer als das er durch diese Annahme verursacht werden könnte. Vielleicht hab ich auch einen größeren Logikfehler drin.

Gruß,
Scenic626
Hallo Scenic,

1. Du kannst sowohl auf steigende als auch auf fallende Flanken achten. Dies verdoppelt die Pulse pro Umdrehung und du erreichst 7.5° statt 15° Auflösung.

2. Wenn du Periodendauern misst, musst du ebenfalls auf die Flanken warten. Vorher bekommst du keinen Messwert...
(23.07.2013 10:28 )GerdW schrieb: [ -> ]-Beide CTR mit der gleichen Taktquelle arbeiten lassen.

Das machen sie bei einer NI-Karte doch sowieso immer. Ein gemeinsamer Start-Trigger für beide Counter-Tasks ist aber nötig...also erst mal beide Tasks entsprechend konfigurieren, dann "scharf schalten" (Start Task) und beim ersten Triggersignal laufen beide los. Beispiele dafür gibts im Example Finder...

A.
(23.07.2013 10:51 )Scenic626 schrieb: [ -> ]Leider würde ich damit in meinem Fall nur eine Genauigkeit von 15° erreichen.

Das Problem ist doch eigentlich, dass du nicht genug "Striche" hast...die von dir schon erwähnten Standarddrehgeber sind ja viel genauer. Wenn du also bessere Auflösung brauchst, ist die Lösung doch naheliegend!

A.
Hallo GerdW,

zu 1.:
Das ist schonmal eine gute Idee, die mir bisher noch nicht gekommen ist. Gibt es eine Möglichkeit die besagte Aufgabe dennoch mit 2 Countern zu erledigen? Gibt es vielleicht eine Einstellung mit der die Periodendauer sowohl bei steigenden als auch bei fallenden Flanken misst? Dies würde in unserem Fall, da die Impulse in Bezug auf den Winkel äquidistant sind, funktionieren.

zu 2.:
Deshalb die Annahme, dass die Winkelgeschwindigkeit zwischen zwei Messungen gleich bleibt. Nehmen wir an p1 wäre > p2. Durch den Datenfluss liegt p2 schon vor p1 vor. Sobald p1 gemessen wurde gehe ich davon aus, dass sich auch Impulsgeber 2 für den Zeitraum p1 mit der aus p2 errechneten Winkelgeschwindigkeit weiterbewegt hat. Ich weiß nicht ob das jetzt verständlich war, vielleicht hilft es aber weiter.

@Achim:
Mit den Drehgebern hasst du recht. Die Anzahl der Inpulse/Umdrehung zu erhöhen ist natürlich eine naheliegende Lösung. Allerdings schafft es das verwendete Referenzsystem (DEWEsoft auch mit 2 Hall-Sensoren an den gleichen Impulsgebern) auch mit 24 Impulsen auf eine Genauigkeit die wesentlich höher als 15° ist.
Außerdem ist mir bis jetzt auch nich nicht der Gedanke gekommen den Start der Tasks genauer zu triggern. Sollte ich mir vielleicht auch nochmal ansehen. Allerdings dachte ich, das die Periodendauer ja ohnehin mit jedem Impuls resettet werden.

Mir ist grad außerdem noch eine Frage eingefallen:
Gibt es eine Möglichkeit, dass die Messwertabfrage (diesmal mit Time-Out=1ms o.Ä.) bei einem Teimeout den gleichen Wert wie bei der letzten erfolgreichen Messung liefert?

Gruß,
Scenic626
Hallo Scenic,

Zitat:Gibt es eine Möglichkeit, dass die Messwertabfrage (diesmal mit Time-Out=1ms o.Ä.) bei einem Teimeout den gleichen Wert wie bei der letzten erfolgreichen Messung liefert?
Nein. Aber dafür bekommst du doch einen TimeOut-Fehler geliefert, den du auswerten kannst: WENN TimeOut DANN "verwende letzten Messwert noch einmal".
Abgesehen davon: ich bezweifle, dass dein VI in irgendeiner Weise "genauer" wird, wenn du einen TimeOut in der Größenordnung von 1ms vorgibst...
(23.07.2013 11:12 )Scenic626 schrieb: [ -> ]Allerdings schafft es das verwendete Referenzsystem (DEWEsoft auch mit 2 Hall-Sensoren an den gleichen Impulsgebern) auch mit 24 Impulsen auf eine Genauigkeit die wesentlich höher als 15° ist.

Wie genau? Und wie stellst du das fest?
@ GerdW
Die "Fehlerauswertung" wäre noch eine gute Idee. Die 1ms hab ich nur Beispielhaft angegeben. Es könnte auch einfach 0 sein. In wiefern sich das auf die Genauigkeit auswrkt hab ich allerdings noch nicht ganz verstanden.

@Achim
Das Referenzsystem wurde an einem Prüfstand getestet. Wie es das mach ist eine gute Frage, zu der sich auch der hersteller nicht äußert. Im wesentlichen erstelltman dort zwei Kanäle für die Winkel. Als Mathematik hinterlegt man, dass die Differenz der beiden ausgegebenen Winkel dem gesuchten Wert entspricht. Die Winkel werden bei diesem Programm linear interpoliert. Ich gehe also davon aus, dass die Entwickler so wie ich von einer konstanten Winkelgeschwindigkeit ausgehen.

Gruß,
Scenic626
Referenz-URLs