LabVIEWForum.de - Quadratur Encoder: Counter Werte einzeln auslesen?

LabVIEWForum.de

Normale Version: Quadratur Encoder: Counter Werte einzeln auslesen?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,
Als erstes das Setup: Ich verwende eine NI 6259 DAQ Karte und ein BNC 2110 Terminal um ein quadratur Signal aufzunehmen.

Ich habe das ganze bereits manuell zum laufen gebracht in dem ich A und B einzeln digital aufnehme und manuell mir mein Positionssignal berechne. Dazu habe ich einfach die 20Mhz Sample Clock genommen und meinen Encoder auf 200ns gestellt. Damit hatte ich 4 Abtastpunkte pro Bit, war also auf der sicheren Seite, funktioniert prima.

Nun sind 200ns nicht besonders toll weshalb ich mal die Counter ausprobieren wollte. Gesagt getan, DAQ-Assistent benutzt um die 80MHz Clock zu verwenden, scheint soweit auch super zu funktionieren, die Encoder Clock ist auf 60ns und der DAQ-Assistent gibt richtige Werte aus. Das VI das ich benutze ist im Anhang und heißt AquadB_one_value.

Jetzt werden die Daten die mir der DAQ-Assistent ausspuckt aber viel zu langsam ausgegeben, der durschnittliche Abstand ist 6us!
Gibt es eine Möglichkeit wie ich mir die Werte wirklich auch mit 80Mhz ausgeben lassen kann? Sodass jeder Wert sich wirklich nur um -1/0/1 unterscheidet?
Ich dachte das geht in dem ich n-Werte auslese so wie ich das vorher gemacht hatte, geht aber irgendwie nicht da mir mein VI einen Fehler liefert den es beim anfordern nur eines Wert nicht liefert o0
Der Fehler bezieht sich auf die Verbindung der Eingänge PFI9 und PFI10, ich verbinde diese, da mein Terminal nur die Eingänge FPI0-0 ausgibt. Ich verstehe aber nicht wieso es im n-werte fall einen Fehler liefert nicht aber wenn ich nur einen Wert anfordere.

Ich habe zusätzlich noch ein VI ausprobiert names Counter - Read Encoder und es leicht angepasst. Es läuft ist aber leider genauso langsam, ca. 6us Punktabstand.

Was mache ich falsch? Es scheint ja die Berechnung tatsächlich bei 80Mhz durchzuführen, da es bei Encoder Clock von 60ns noch richtige Werte gibt, ich würde nur gerne schneller diese Werte abfragen können. Dachte eben das geht indem ich n-Werte abfrage so wie ich es vorher "manuell" gemacht hatte und dann hinterher all diese auslese aber irgendwie klappt das nicht so recht. Kann mir jemand helfen? Bin langsam echt am verzweifeln Sad

[attachment=50515]
[attachment=50514]
[attachment=50513]
Hallo Daniel. Vorab, ich beschäftige mich selbst erst seit 4 Wochen mit LabVIEW und weiß eigentlich auch nicht sehr viel.

Ich habe aber auch ein Projekt, wo es darum geht, die Flanken eines Encoders zu zählen.

Ich zähle jedoch nur Flanken der A-Spur, sample diese mit 10 kHZ und lese dann immer 100 Werte aus.

Ich hab dir mal ein kleines BSP VI gemacht, wie ich das vereinfacht gemacht habe.

Vielleicht bringt es dir ja was, wenn nicht, dann können dir die Profis bestimmt helfen Smile

freundliche Grüße

amadeus

Edit: hoffentlich habe ich das mit dem konvertieren richtig gemacht Smile, Danke GerdW für den Tipp!
Hallo amadeus,

Daniel verwendet laut seinem Profil (und auch in seinen Attachments) LV2012. Du musst ihm das VI also noch konvertieren.

Wenn du das schon machst: ich würde LV2011 bevorzugen…
Hi amadeus,
danke für die Antwort! Wie Gerd geschrieben hat, kann ich die Datei mit meinem LV 2012 leider nicht öffnen Sad
Gibt es einen Grund wieso du die Flanken nur mit 10kHz ausliest? Und sind die Messwerte die du dann bekommst auch wirklich 1/10.000 s auseinander?
Ich kann wie gesagt mit meinem VI durchaus bei 80MHz die Daten verarbeiten, er gibt sie mir nur deutlich langsamer aus, bzw. in einem größeren zeitlichen Abstand als wie er sie verarbeitet.
Liebe Grüße,
Daniel
Ich hätte versucht sie dir für lv11_img herunter zu speichern. Hat das nicht funktioniert?

Ich versuch es noch einmal.

Man hat mir gesagt, dass ich davon ausgehen kann, dass ich, wenn ich eine Samplerate von 10Khz habe auch Werte bekomme, die genau mit 1/Samplerate auseinander liegen.
Ich habe es dann jedoch nicht mehr nachgeprüft. Nachdem ich für meine Messung eine Auflösung von 10 ms benötige und 100 Werte lese, reicht mir eine Samplerate von 10kHz.

Nachdem ich aus den 100 Werten eine Geschwindigkeitsmittelung vornehme (Counterstand sample 100 - Counterstand sample 0)/(100*1/samplerate), und feststellen können will, wenn meine
Geschwindigkeit unter 10mm/s gefallen ist, benötige ich für meinen Drehgeber (2000Ink/Umdrehung = 0,1mm/ink) genau diese Samplerate.

Frage: Hängt die Geschwindigkeit mit der du die Werte ausliest (buffer-labview) nicht mit deiner Schleifenumlaufzeit zusammen?

Ich habe dir im Anhang noch einmal das Beispiel VI gehängt. hoffe diesmal hab ichs geschafft mit der Konvertierung!

freundliche Grüße
amadeus
(27.08.2014 14:24 )amadeus schrieb: [ -> ]Frage: Hängt die Geschwindigkeit mit der du die Werte ausliest (buffer-labview) nicht mit deiner Schleifenumlaufzeit zusammen?

na sicher hängt das zusammen:

Beispiel:
bei einer Samplerate von 10 kHz fallen in 1 Sekunde 10000 Samples an.
Wenn du bei "Buffer Read" (in der Schleife) einstellst, dass immer 1000 Samples als Block ausgelesen werden sollen, dann dauert ein Schleifendurchlauf 100 ms

Wenn du bei "Buffer Read" (in der Schleife) einstellst, dass immer 100 Samples als Block ausgelesen werden sollen, dann dauert ein Schleifendurchlauf 10 ms

Wenn du bei "Buffer Read" (in der Schleife) einstellst, dass immer 5000 Samples als Block ausgelesen werden sollen, dann dauert ein Schleifendurchlauf 0.5 Sekunden

is doch einfach, oder? Smile

viele Grüße
cb
Zur Auflösung der Thematik, falls jemand über die Suchfunktion auch auf diesen Thread stößt, ich habe mittlerweile die klare Aussage vom NI-Support bzgl. der Thematik:
Es ist TECHNISCH NICHT MÖGLICH sich jeden Einzelwert der über die Counter berechneten Position ausgeben lassen!
Referenz-URLs