LabVIEWForum.de
Encoder Auslesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Encoder Auslesen (/Thread-Encoder-Auslesen)



Encoder Auslesen - creo_123 - 04.04.2013 12:09

Hallo,

ich bräuchte mal wieder etwas Hilfe. Ich versuche aus einem Encoder-Signal (A und B, jeweils 500 Inkremente) die Drehzahl zu bestimmen.
Dazu nutze ich die zwei Counter von einem Labjack U3. In meiner While-Schleife subtrahiere ich dann den alten Counter-Wert vom Neuen
und berechne mir daraus die Drehzahl, da ich ja weiß, dass die Schleife 0,5 Sekunden lang läuft. Dazu reicht ja eigentlich ein Counter. Habe einen
Screenshot von einem VI angehängt.. stimmen diese Überlegungen schonmal soweit?

Mein Problem ist jetzt aber, dass ich dieses VI später in ein anderes komplexeres Programm integrieren will. Und da fängt es schon damit an,
dass meine While-Schleife den Drehzahlwert ja überhaupt nicht ausgibt.. da könnte ich zwar mit lokalen Variablen arbeiten, aber man liest immer,
dass man diese, wenn überhaupt, nur vorsichtig nutzen soll..

Das nächste Problem betrifft die Laufzeit.. also für meine Rechnung muss ich ja gewährleisten können, dass meine Drehzahl-Mess-Schleife genau
0,5 Sekunden lange läuft.. ist das dann auch in einem größeren Programm der Fall?

Später würde ich gerne auch noch mit dem zweiten Counter die Drehrichtung bestimmen, habe dazu aber noch keine so wirkliche Idee.. Das wichtigste
ist mir jetzt aber vorerstmal die korrekte Bestimmung der Drehzahl und ob meine Überlegungen dazu wenigstens schonmal halbwegs Sinn machen..


Schonmal Danke für die Hilfe..


RE: Encoder Auslesen - GerdW - 04.04.2013 12:50

Hallo creo,

Zitat:.. stimmen diese Überlegungen schonmal soweit?
Ja.

Zitat:Und da fängt es schon damit an, dass meine While-Schleife den Drehzahlwert ja überhaupt nicht ausgibt.
Datenaustausch zwischen parallelen Schleifen wird hier oft diskutiert. Da findest du jede Menge Threads zum Thema. Ich verwende gern FGVs, man kann auch globale Variablen, Queues oder Notifier nutzen - je nach gewünschter Architektur. (Ich gehe davon aus, dass die gezeigte Routine ein subVI wird...)

Zitat:also für meine Rechnung muss ich ja gewährleisten können, dass meine Drehzahl-Mess-Schleife genau 0,5 Sekunden lange läuft.. ist das dann auch in einem größeren Programm der Fall?
Das ist unter Windows weder bei einem kleinen noch bei einem großen Programm der Fall: Windows wird dir immer dazwischenhauen...
Du kannst:
- eine TimedWhileLoop nehmen, die sollen etwas genauer arbeiten und liefern dir gleich Hinweise zu "late execution" etc.
- die Timestamps ebenfalls in einem Schieberegister speichern und nicht nur delta(Counter), sondern auch delta(Zeit) berechnen, statt mit einer Konstanten 500ms vorauszusetzen

Zitat:gerne auch noch mit dem zweiten Counter die Drehrichtung bestimmen ... Encoder-Signal A und B
Dazu nutzt man eigentlich nur einen Counter, der aber sowohl für A als auch B Eingänge hat! Der Counter zählt dann automatisch hoch oder runter. Ansonsten musst du auf beiden Signalen auf Flanken achten, bzw. auf welchen Signal die Flanke zuerst erscheint. Könnte fummelig werden...


RE: Encoder Auslesen - jg - 04.04.2013 13:05

(04.04.2013 12:50 )GerdW schrieb:  Hallo creo,
Zitat:.. stimmen diese Überlegungen schonmal soweit?
Ja.
Diese Aussage korrigiere ich auf "ja, aber erst ab dem 2. Schleifendurchlauf. Der erste Durchlauf wird in der Regel weniger als 500 ms dauern.

Ach ja, und falls mal die Schleife länger als 500 ms Durchführungszeit braucht, dann wartest du natürlich insgesamt 1000 ms.

Gruß, Jens


RE: Encoder Auslesen - GerdW - 04.04.2013 13:12

Hallo Jens,

aber creos Überlegungen sind doch zutreffend, oder?
Nur an der Umsetzung gibt es ein paar Kritikpunkte... Big Grin


RE: Encoder Auslesen - creo_123 - 08.04.2013 13:26

Hey.. danke für die AnregungenSmile

habe ein Beispielprogramm gefunden, dass entsprechend der Drehrichtung positiv bzw. negativ zählt, also ist das
Drehrichtungsproblem gelöst.

Die Zeit für einen Schleifendurchlauf messe ich jetzt mit und um die Werte aus der Schleife herauszugeben, habe ich
mich für Melder entschieden..