LabVIEWForum.de - Inkrementalgebersignal

LabVIEWForum.de

Normale Version: Inkrementalgebersignal
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

das Problem ist denke nicht all zu schwierig, steht aber ein wenig auf dem Schlauch.
Ich lese ein permanentes Inkrementalgebersignal aus.
Ich benötige im weiteren einfach nur eine fortlaufende Wegedifferenz des Signals in der Form: delta S = Position(t) - Position(t-1)

Wäre Klasse wenn mir jemand einen Anstoß geben könnte.
Hi,

Inkrementalgeber liefern i.d.R. nur x Impulse pro Längeneinheit oder Umdrehung (jenachdem, ob linear oder rotierend).

Ein permanentes Signal gibt es in dem Sinne doch eigentlich nicht. Vielmehr bekommt man bei Bewegung des Inkrementalgebers eine bestimmte Anzahl von digitalen Flanken.

Wird der Geber nicht bewegt, ist das Signal Hi oder Lo... erst bei Bewegung erscheint die nächste Flanke und man weiß, dass der Geber bewegt wurde. Die Anzahl der Flanken (bei bekannter Impulszahl pro Länge od. Umdrehung) wird dann genutzt um die relative Änderung zu vorherigen Position zu bestimmen.

Beispiel:
Inkrementalgeber, rotierend, 50 Imp

Du zählst nur die digitalen Flanken und kommst am Ende der Bewegung auf
50 Stück ... -> das war eine Umdrehung => 50 Imp * 360° / 50 Imp = 360°
25 Stück ... -> das war eine halbe Umdrehung => 25 Imp * 360° / 50 Imp = 180°
0 Stück ... -> das war keine Umdrehung => 0 Imp * 360° / 50 Imp = 0

Du weißt aber nie von wo du startest, es sei denn du fährst vorher in einen Endschalter o.Ä..


Ok, du musst also während der Bewegung die Flanken zählen und dann Umrechnen.

Gibt es bei dir kein definiertes Bewegungsende kannst du ja alle X ms Umrechenen.


Gruß SeBa
Danke für deine schnelle Antwort.

Muss aber doch noch mal nachfragen, hab das nicht so ganz verstandenSad
Nutze zur Bestimmung einen rotierenden Inkrementalgeber.
Ich fahre zu Fahrtbeginn in einen Endlagenschalter um meine Startposition zu bestimmen und reset den Quadraturencoder.
Meine Position ermittle ich alle 1ms.


Nun doch noch mal zum eigentlichen zurück, was ich nicht verstanden habe:

Ist es nicht möglich, mittels Timer und Hilfsvariablen mein delta S zu betimmen, indem ich meinen Quadraturwert auf eine Hilsgröße schreibe und 1ms später vom aktuellen Wert subtrahieren?
Wenn du beim Start den Zähler auf Null setzt, kannst du doch jederzeit den Zähler abfragen und (solange Niemand den Notaus drückt xD) deine Position relative zum Start bestimmen... das entspricht dann eigentlich der absoluten Position.

Jetzt nimmst du eine Whileloop und ein Shiftregister. In der Whileloop fragst du den Zähler ab, im Shiftregister speicherst du den Zählerwert zwischen (initialisieren des Shiftreg. mit Null).

(Aktueller Zähler minus Zähler aus dem Shiftregister) mal Impulskonstante ist gleich der relativen Positionsänderung.

Die Whileloop kannst du ja mit Wait nur alle 1ms ausführen lassen.

Gruß SeBa
Na die absolute Position interessiert mich im Moment nicht so rechtWink

Das zweite scheint sehr hilfreich für mich zu sein.

Meinste die Struktur wie in folgender Art und Weise?Smile

Lv86_img
Deine äußere Schleife wird nur ausgeführt, wenn die Innere beendet ist... also nur beim Starten (weil da alle Elemente in der Schleife einmal ausgeführt werden.

Gruß SeBa

EDIT:
So in etwa... schön langsam laufen lassen, sonst siehst du die rel. Änderung nicht.

[attachment=23049]
Referenz-URLs