INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Ai mit Encoder Synchronisieren



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

14.07.2014, 15:04
Beitrag #1

Magneto Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jul 2014

13.0.1
2013
EN



Ai mit Encoder Synchronisieren
Hallo miteinander

Ich bin mir nicht ganz sicher, ob die Aufgabe überhaupt möglich ist mit meiner Hardware.

Ich würde gerne 16 Analogsignale bei jedem Puls von einem Encoder (1000 Pulse/360°) aufnehmen. Als Hardware habe ich eine NI USB-6341 Karte.

Wie man die Position des Encoders einlesen kann, habe ich schon gefunden. Example finder -> Counter - Read Encoder.
Allerdings möchte ich ja, dass sobald eine Flanke am A/B Signals des Encoders auftritt, die Analogen Eingänge eingelesen werden.

Wie kann ich die Position als Triggersignal für meine Analog Input Eingänge verwenden ?

Mir ist aufgefallen, dass die Aktualisierungsrate relativ langsam ist. Theoretisch sollte ich nach einer 360° Drehung ja 4000 Messwerte haben.

Wenn ich bei jeder änderung der Position, die Aktuelle Position in ein Array schreibe, muss ich den Encoder mehrfach hin und her bewegen bis ich auf eine Arraygrösse von 4000 komme. (Ganz ohne die A/D Wandlung)

Ist das mit meiner Hardware realisierbar? Kennt Ihr Beispiele?

Vielen Dank für eure Hilfe


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2014, 15:23 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2014 15:26 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Ai mit Encoder Synchronisieren
Hallo Magneto,

solche Aufgaben löst man, indem man den Encoder als externe Triggerquelle einsetzt: bei den DAQmx-Beispiel-VIs findest du passende Beispiele!

Zu deiner Hardware:
- Die Karte unterstützt Hardwaretiming der DIs und CTR, also beste Voraussetzungen für dein Ansinnen.
- Die Karte unterstützt max. 500kS/s Summenabtastrate bei den AI-Kanälen, hier bist du also an zwei Stellen limitiert: aufgrund des MUX werden
a) die Kanäle nie gleichzeitig gemessen und
b) bei 16 Kanälen kannst du mit max. 500kS/s * 1/16 Kanäle * 1/1000 = 31 Umdrehungen/s Daten aufnehmen.

Zitat:Mir ist aufgefallen, dass die Aktualisierungsrate relativ langsam ist. Theoretisch sollte ich nach einer 360° Drehung ja 4000 Messwerte haben.
Du fragst den Encoder Einzelwert-weise ab, das ist nie schnell…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2014, 07:04
Beitrag #3

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
RE: Ai mit Encoder Synchronisieren
Es gibt noch eine zweite Methode, dafür brauchst du 3 Tasks:

1. Messtakt
2. Analog input
3. Encoder-Task

Den Messtakt routest du als Takt sowohl für die analoge Erfassung als auch den Encoder-Task und startest damit eine blockweise kontinuierliche Erfassung. Jeden Datenblock der reinkommt wertest du aus, ob sich der Encoder-Wert geändert hat. Wenn ja bleibt der Encoder-Wert und die AI-Werte im Array, wenn nicht werden die Werte übersprungen. Dabei kommt dann am Ende ein Array raus, das nur die Werte enthält, bei denen ein "Encoder-Tic" aufgetreten ist.

Die Methode hat den Vorteil, dass man über das Zählen der Samples zum einen noch eine Zeit-Information extrahieren kann, und zum anderen, dass man sich nicht mit Timeouts und der gleichen Rumschlagen muss, wenn sich der Encoder mal langsam oder gar nicht dreht ...

viele Grüße
cb


Angehängte Datei(en) Thumbnail(s)
   

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2014, 10:29
Beitrag #4

Magneto Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jul 2014

13.0.1
2013
EN



RE: Ai mit Encoder Synchronisieren
(15.07.2014 07:04 )cb schrieb:  Jeden Datenblock der reinkommt wertest du aus, ob sich der Encoder-Wert geändert hat. Wenn ja bleibt der Encoder-Wert und die AI-Werte im Array, wenn nicht werden die Werte übersprungen. Dabei kommt dann am Ende ein Array raus, das nur die Werte enthält, bei denen ein "Encoder-Tic" aufgetreten ist.

Fragt man dabei den Encoder nicht wieder Einzelwertweise ab, was wieder sehr langsam sein würde?


Unter den Beispielen habe ich leider nicht gefunden, wie man einen Eingang/Counter als Trigger verwenden kann.
Bin ich im Richtigen Ordner oder völlig falsch?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2014, 10:46
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Ai mit Encoder Synchronisieren
Hallo Magneto,

in LV2011 nannte sich das Beispiel-VI noch "Acq&Graph Voltage-Ext Clk.vi".
Wo genau sich dieses Beispiel-VI jetzt bei LV2013 versteckt, kann ich leider nicht sagen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2014, 13:22
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
RE: Ai mit Encoder Synchronisieren
(15.07.2014 10:29 )Magneto schrieb:  
(15.07.2014 07:04 )cb schrieb:  Jeden Datenblock der reinkommt wertest du aus, ob sich der Encoder-Wert geändert hat. Wenn ja bleibt der Encoder-Wert und die AI-Werte im Array, wenn nicht werden die Werte übersprungen. Dabei kommt dann am Ende ein Array raus, das nur die Werte enthält, bei denen ein "Encoder-Tic" aufgetreten ist.

Fragt man dabei den Encoder nicht wieder Einzelwertweise ab, was wieder sehr langsam sein würde?

ich hab's jetzt nicht mit deiner Messkarte getestet, aber normalerweise macht man das unter DAQmx so:

man erstellt einen continuierlichen AI-Task und einen continuierlichen Encoder-Task, bzw. in deinem Fall würde ich nur die (z.B.) steigenden Flanken zählen. Als gemeinsamen Mess-Takt verwendet man den AI-Takt, der wiederum von der internal Clock abgeleitet wird. Der AI Task schickt einen Trigger raus (intern) wenn er gestartet wird und den verwendet man wiederum als Start-Trigger für den Counter-Task.

In den Beispielen musst du also nach folgendem suchen:
1. AI-Task erstellen - das hast du ja schon hin bekommen
2. AI-Timebase exportieren
3. einen getriggerten continuierlichen Flanken-zähl-Task erstellen mit einem Counter erstellen und der als Sample-Clock die AI-Timebase verwendet
4. den AI-Start-Trigger verwenden - muss ggf. geroutet werden mit den Routing VIs - sollte aber auch "so" gehen, weil alles auf einem Board läuft ...

Das wurschdelst du alles zusammen (ja, ist tricky ...) und du bekommst continuierliche DAQmx-Erfassungs-Tasks, der eine liefert dir die Spannungen vom analogen Eingang und der andere liefert dir SYNCHRON DAZU den Zähler-Stand des Flanken-Zähl-Tasks.

Anschaulich formuliert: bei einer Sample-Rate von 1 kHz für den Analogen Task bekommst du vom AI-Task ein n*1000 (n=Anzahl der Kanäle) Samples Array pro Sekunde zurück und vom Flanken-Zähler-Task bekommst du ein 1D-Array mit 1000 Werten, mit den Zähler-Ständen zum Sample-Zeitpunkt zurück. Damit kannst du im Rahmen deiner Auflösung im Post-Processing jeweils ein analoges Sample einem Zähler-Stand zuordnen, bzw. - wie oben bereits angedeutet - eine quasi-winkelsynchrone Abtastung (mit variabler Sample-Rate) ausrechnen. ==> also nix mit software-Timing oder Einzelwert-Abtastung ...

Man kann mit DAQmx ganz wilde Sachen machen wenn man will Big Grin Big Grin - wobei man jetzt auch sagen muss, dann man meiner Meinung nach am besten mit einem cRIO fährt wenn man eine winkelsynchrone Abtastung programmieren will.

Wenn dir die Methode von Gerd lieber ist, dann müsstest du mal im Example-Finder nach "AI" und "external Clock" suchen, oder so ähnlich.

viele Grüße
cb

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.07.2014, 13:38
Beitrag #7

Magneto Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jul 2014

13.0.1
2013
EN



RE: Ai mit Encoder Synchronisieren
(15.07.2014 10:46 )GerdW schrieb:  Hallo Magneto,

in LV2011 nannte sich das Beispiel-VI noch "Acq&Graph Voltage-Ext Clk.vi".
Wo genau sich dieses Beispiel-VI jetzt bei LV2013 versteckt, kann ich leider nicht sagen…

Ich habe das Beispiel gefunden :Ni Example

Allerdings müsste man noch irgendwie abfangen, dass er nur misst, wenn der Encoder in die eine Richtung dreht

Und wie ich damit mehrere Ai s nacheinander/gleichzeitig einlesen kann, ist mir auch noch ein Rätzel.

Ich habe mir das ganze etwas einfacher vorgestellt.
Mit einem Mikrocontrollerboard nimmt man die A/B Flanken des Encoders als Interrupt und misst jedes Mal mit dem A/D Wandler die Werte.
Um die Daten ins LabVIEW zu kriegen, einfach die Messwerte per RS232 an den PC senden.

So habe ich das bis jetzt gelöst.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2014, 13:51
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Ai mit Encoder Synchronisieren
Hallo Magneto,

Zitat:Mit einem Mikrocontrollerboard nimmt man die A/B Flanken des Encoders als Interrupt und misst jedes Mal mit dem A/D Wandler die Werte.
Mit DAQmx funktioniert das nahezu identisch: die Flanken des Encodersignals erzeugen einen Trigger (=Interrupt), der auf der DAQ-Karte intern verarbeitet wird, um damit die AI-Wandler zu starten…

Zitat:Und wie ich damit mehrere Ai s nacheinander/gleichzeitig einlesen kann, ist mir auch noch ein Rätzel.
Ganz einfach: den AI-Task mit mehreren Kanäle anlegen…

Zitat:Allerdings müsste man noch irgendwie abfangen, dass er nur misst, wenn der Encoder in die eine Richtung dreht
Wenn du einen Encoder mit A/B-Signalen hast, musst du einen entsprechenden CTR-Task anlegen. Die Auswertung anhand der Drehrichtung habe ich noch nicht gemacht, da musst du selbst mal nach einer Lösung suchen (wenn alle anderen Dinge erledigt sind…)!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.07.2014, 16:25 (Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2014 16:26 von Magneto.)
Beitrag #9

Magneto Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jul 2014

13.0.1
2013
EN



RE: Ai mit Encoder Synchronisieren
(15.07.2014 13:22 )cb schrieb:  
(15.07.2014 10:29 )Magneto schrieb:  
(15.07.2014 07:04 )cb schrieb:  Jeden Datenblock der reinkommt wertest du aus, ob sich der Encoder-Wert geändert hat. Wenn ja bleibt der Encoder-Wert und die AI-Werte im Array, wenn nicht werden die Werte übersprungen. Dabei kommt dann am Ende ein Array raus, das nur die Werte enthält, bei denen ein "Encoder-Tic" aufgetreten ist.

Fragt man dabei den Encoder nicht wieder Einzelwertweise ab, was wieder sehr langsam sein würde?

man erstellt einen continuierlichen AI-Task und einen continuierlichen Encoder-Task, bzw. in deinem Fall würde ich nur die (z.B.) steigenden Flanken zählen. Als gemeinsamen Mess-Takt verwendet man den AI-Takt, der wiederum von der internal Clock abgeleitet wird. Der AI Task schickt einen Trigger raus (intern) wenn er gestartet wird und den verwendet man wiederum als Start-Trigger für den Counter-Task.

In den Beispielen musst du also nach folgendem suchen:
1. AI-Task erstellen - das hast du ja schon hin bekommen
2. AI-Timebase exportieren
3. einen getriggerten continuierlichen Flanken-zähl-Task erstellen mit einem Counter erstellen und der als Sample-Clock die AI-Timebase verwendet
4. den AI-Start-Trigger verwenden - muss ggf. geroutet werden mit den Routing VIs - sollte aber auch "so" gehen, weil alles auf einem Board läuft ...

Sorry es hat etwas länger gedauert, bis ich mich nochmals diesem Projekt gewidmet habe.

Kannst du mir noch erklären wie ich die AI Timebase exportieren kann ?
Wenn ich das richtig verstanden habe, kann ich dann diese Timebase für mein Encoder Task verwenden.

Kann ich den AI und Encoder Task mehr oder weniger so belassen ?


Vielen Dank für eure Hilfe


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2014, 09:21
Beitrag #10

Magneto Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Jul 2014

13.0.1
2013
EN



RE: Ai mit Encoder Synchronisieren
Ich hab versucht die AI Timebase zu exportieren, aber bis jetzt bekamm ich nur Error Meldungen.

Kannst du mir einen Tipp geben damit ich etwas weiterkomme ?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Synchronisierung von Analogen Signalen mit digitalem Encoder Benj1man 8 4.901 12.05.2020 10:38
Letzter Beitrag: Benj1man
  Encoder - Sinus / Cosinus auswerten nxitimi 17 12.674 25.01.2018 19:26
Letzter Beitrag: Lucki
  Encoder-Signal einlesen creo_123 6 5.294 11.01.2018 15:03
Letzter Beitrag: creo_123
  Counter-Eingänge synchronisieren für Positionsmessung Knödelmann 1 5.163 18.04.2016 15:56
Letzter Beitrag: Knödelmann
  Quadratur Encoder: Counter Werte einzeln auslesen? Daniel_S 6 7.191 23.03.2015 10:26
Letzter Beitrag: Daniel_S
  getriggerte Messung "scharfschalten" Sincos Encoder Nullstrom 2 3.714 27.10.2014 11:13
Letzter Beitrag: Nullstrom

Gehe zu: