19.11.2007, 16:41
Hallo,
ich habe eine entscheidende Hürde zu meistern. Ich muss analoge und digitale Messungen synchronisieren. Hintergrund: Es sind mehrere Tests zu automatisieren, die ähnlich zum Folgenden aussehen. Die Spannung eines Potentiometers (das von einem konstanten Strom durchflossen ist), was an einem Motor befestigt ist, soll über einer kompletten Motorumdrehung geloggt werden. Die Motorposition bekomme ich von einem Encoder, der mittels eines Counters und Position -> Angular Encoder oder wahlweise auch Edge Counting ausgelesen wird.
Nun muss ich also die analoge Messung nicht mit einer Zeit synchronisieren, sondern mit einem Ort. Einer konstanten Umdrehungsgeschwindigkeit (die eine Zeit/Ort-Zuordnung ermöglichen würde) kann ich nicht ausreichend genau trauen. Deswegen muss das irgendwie ander vonstatten gehen.
Meine Idee wäre zunächt mal, die analogen Messungen mit den Encoder-Pulsen zu triggern. Nachteil: Ich habe keine Ahnung, wie ich das Anstellen soll. Die einzige Triggermöglichkeit, die ich bisher kenne ist, mit Hilfe des DAQmx Trigger.vi eine Messung zu starten. Danach kann man stoppen und mit Start auf den nächsten Trigger warten (oder alternativ einfach das Read.vi nochmal aufrufen). Dieses Software Stop/Start ist aber mit Sicherheit viiieeel zu langsam. Die Encoderauflösung liegt immerhin bei 12bit nach 4-Flanken-Auswertung. Eine entsprechend langsame Verfahrgeschwindigkeit ist auch keine Option. Gibt es die Möglichkeit, mit jedem Triggerpuls automatisch ein Sample zu messen, ohne zwischendurch per Software einzugreifen?
Zweite Möglichkeit, bei der ich aber ebenfalls nicht weiterkomme. AI wird mit fester Rate gemacht, das Auslesen des Counterwertes erfolgt im gleichen Takt, so dass ich ebenfalls synchrone Daten habe. Bedingung hier auch wieder: Kein Eingreifen der Software (wie z.B. indem die Read-Funktionen parallel in einer software-getimten Schleife liegen), weil zu langsam und ungenau.
Kann mir hier einer weiterhelfen? Kann man Sample Clock auf Counter-Read anwenden oder Implicit auf Analog-Read...??? Oder gibt es eine ganz andere Möglichkeit?
Danke für Ideen!
ich habe eine entscheidende Hürde zu meistern. Ich muss analoge und digitale Messungen synchronisieren. Hintergrund: Es sind mehrere Tests zu automatisieren, die ähnlich zum Folgenden aussehen. Die Spannung eines Potentiometers (das von einem konstanten Strom durchflossen ist), was an einem Motor befestigt ist, soll über einer kompletten Motorumdrehung geloggt werden. Die Motorposition bekomme ich von einem Encoder, der mittels eines Counters und Position -> Angular Encoder oder wahlweise auch Edge Counting ausgelesen wird.
Nun muss ich also die analoge Messung nicht mit einer Zeit synchronisieren, sondern mit einem Ort. Einer konstanten Umdrehungsgeschwindigkeit (die eine Zeit/Ort-Zuordnung ermöglichen würde) kann ich nicht ausreichend genau trauen. Deswegen muss das irgendwie ander vonstatten gehen.
Meine Idee wäre zunächt mal, die analogen Messungen mit den Encoder-Pulsen zu triggern. Nachteil: Ich habe keine Ahnung, wie ich das Anstellen soll. Die einzige Triggermöglichkeit, die ich bisher kenne ist, mit Hilfe des DAQmx Trigger.vi eine Messung zu starten. Danach kann man stoppen und mit Start auf den nächsten Trigger warten (oder alternativ einfach das Read.vi nochmal aufrufen). Dieses Software Stop/Start ist aber mit Sicherheit viiieeel zu langsam. Die Encoderauflösung liegt immerhin bei 12bit nach 4-Flanken-Auswertung. Eine entsprechend langsame Verfahrgeschwindigkeit ist auch keine Option. Gibt es die Möglichkeit, mit jedem Triggerpuls automatisch ein Sample zu messen, ohne zwischendurch per Software einzugreifen?
Zweite Möglichkeit, bei der ich aber ebenfalls nicht weiterkomme. AI wird mit fester Rate gemacht, das Auslesen des Counterwertes erfolgt im gleichen Takt, so dass ich ebenfalls synchrone Daten habe. Bedingung hier auch wieder: Kein Eingreifen der Software (wie z.B. indem die Read-Funktionen parallel in einer software-getimten Schleife liegen), weil zu langsam und ungenau.
Kann mir hier einer weiterhelfen? Kann man Sample Clock auf Counter-Read anwenden oder Implicit auf Analog-Read...??? Oder gibt es eine ganz andere Möglichkeit?
Danke für Ideen!