31.07.2012, 18:44
Beitrag #1
|
Olli
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Jul 2012
2010
-
EN
|
Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Hallo an Alle,
da ich ein absoluter Neuling in Labview und auch Signalverarbeitung bin brauche ich eure Hilfe. Es geht um folgendes:
Es sollen TTL Signale gezählt werden. Diese Signale sind 35ns lang und dann kommt vom Messgerät auch erstmal eine 35ns Totzeit. Das sollte die Ni 6602 schaffen zu zählen.
Ich möchte gerne, dass ein Counter für 500 us zählt danach das Ergebnis in einen Puffer schreibt, der nach einer gewissen Zeit (1s) vom Computer ausgelesen wird. Der Counter soll dann wieder auf 0 gesetzt werden und es soll erneut gemessen werden.
Im Grunde liegt mein Problem darin, dass ich nicht verstehe was die verschiedenen Zählmethoden (AcquisitionMode in MAX) genau machen und wie ich der Karte mit LabView klar mache was ich von ihr möchte.
Also in meinem Testprogramm (siehe Anhang) erzeuge ich mittels eines Counterausgangs (ctr4) ein Testsignal. Dieses wird vom Counter Ctr0 gelesen. Der Timer (ctr7) erzeugt ein Signal das 250us hoch und dann 250us low ist. Dieses Signal kommt an PFI38 an (gate ctr0). In MAX ist beim Counter Ctr0 Continuous Samples eingestellt mit der Sample Rate 100 und der Frequenz von 10K Hz. Der Sample Clock Type ist Extern und die Clock Source PFI 38.
Ich stelle mir vor (und da liegt wahrscheinlich das eigentliche Problem), dass die Karte 500us zählt und dann auf null zurück gesetzt wird und Labview meine Schleife im Testprogramm so gut wie möglich hardwareseitig abbildet. Da auch die Anzahl der gemessenen Ereignisse sehr unterschiedlich ist, denke ich, ich habe etwas völlig falsch verstanden.
Wie gesagt bin ich ein Neuling aber mehr als bereit mich einzulesen. Mein Problem ist jedoch nur, dass ich nicht so richtig weiss nach was ich suchen muss.
Für sachdienliche Hinweise in Form von Tipps, Tutorials und Anleitungen wäre ich sehr dankbar.
Olli
|
|
|
31.07.2012, 20:36
(Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2012 20:37 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.471
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Hallo Olli,
erstmal: Es ist eine ziemlich blöde, aber trotzdem immer wieder anzutreffende Unart, einen DAQmx-Task in einer Schleife ständig zu starten und zu stoppen (analoges gilt auch für VISA, File-Zugriffe, etc.). Tu das nicht...
Dann:
- Es ist schon in Ordnung, den CTR-Task auf Continuous zu stellen. Nur dann frage ihn bitte auch so ab und lass dir mehrere Werte auf einmal geben!
- Außerdem: Wenn du alle 500µs einen Wert haben willst, wäre eine Samplerate von 2kHz doch angebracht!?
- Der CTR wird (bei kontinuierlicher Abfrage) natürlich nicht zurückgesetzt. Das sollte dich aber nicht stören, du kannst doch bequem die Differenzen zwischen zwei CTR-Werten berechnen. Bei einer Samplerate von 2kHz erhälst du so immer die Anzahl der Pulse in einem 500µs-Raster...
- dein "Count vs Time"-Chart ist, zumindest dem Namen nach, Quatsch. Ein Chart hat keine "echte" Zeitachse, auch wenn dies per Default an der X-Achse so dran steht...
Zitat:Ich möchte gerne, dass ein Counter für 500 us zählt danach das Ergebnis in einen Puffer schreibt, der nach einer gewissen Zeit (1s) vom Computer ausgelesen wird.
Der CTR soll also nur für 0,05% einer Sekunde lang etwas tun und den Rest der Zeit warten? Warum willst du solange (relativ gesehen) mit dem Lesen des Wertes warten?
Zitat:Tutorials und Anleitungen
Bei DAQmx werden jede Menge Beispiele mitgeliefert, die über LabVIEW->Examplefinder bequem zu suchen/auszuwählen sind...
|
|
|
01.08.2012, 12:09
(Dieser Beitrag wurde zuletzt bearbeitet: 01.08.2012 12:10 von Olli.)
Beitrag #3
|
Olli
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Jul 2012
2010
-
EN
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Erstmal vielen Dank für die schnelle Antwort
(31.07.2012 20:36 )GerdW schrieb: erstmal: Es ist eine ziemlich blöde, aber trotzdem immer wieder anzutreffende Unart, einen DAQmx-Task in einer Schleife ständig zu starten und zu stoppen (analoges gilt auch für VISA, File-Zugriffe, etc.). Tu das nicht...
Sowas habe ich mir schon gedacht, da es auch in anderen Programmiersprachen mehr als doof ist. Nunja es hat funktioniert und das gemacht, was ich wollte also blieb es erstmal so.
Zitat:- Es ist schon in Ordnung, den CTR-Task auf Continuous zu stellen. Nur dann frage ihn bitte auch so ab und lass dir mehrere Werte auf einmal geben!
Ah ok das werde ich machen
Zitat:- Außerdem: Wenn du alle 500µs einen Wert haben willst, wäre eine Samplerate von 2kHz doch angebracht!?
- Der CTR wird (bei kontinuierlicher Abfrage) natürlich nicht zurückgesetzt. Das sollte dich aber nicht stören, du kannst doch bequem die Differenzen zwischen zwei CTR-Werten berechnen. Bei einer Samplerate von 2kHz erhälst du so immer die Anzahl der Pulse in einem 500µs-Raster...
Das bedeutet die Samplerate gibt nicht an mit welcher Rate der Counter schaut ob sich das Signal verändert hat, sondern die Rate gibt an wie oft ich den Counter auslese?! Das war mir überhaupt nicht klar und das ist ein großer Aha-Effekt für mich. Vielen vielen Dank
Zitat:- dein "Count vs Time"-Chart ist, zumindest dem Namen nach, Quatsch. Ein Chart hat keine "echte" Zeitachse, auch wenn dies per Default an der X-Achse so dran steht...
Naja da ein zeitlicher Verlauf (mit irgendeiner Skalierung) angezeigt wird, bin ich davon ausgegangen, dass es auch eine Zeitachse ist. Aber es werden nur Schleifendurchläufe gezählt, richtig? Und die können unterschiedlich lang sein, je nachdem was dem Rechner sonst noch an Aufgaben einfällt.
Zitat:Zitat:Ich möchte gerne, dass ein Counter für 500 us zählt danach das Ergebnis in einen Puffer schreibt, der nach einer gewissen Zeit (1s) vom Computer ausgelesen wird.
Der CTR soll also nur für 0,05% einer Sekunde lang etwas tun und den Rest der Zeit warten? Warum willst du solange (relativ gesehen) mit dem Lesen des Wertes warten?
Da habe ich mich falsch oder unverständlich ausgedrückt. Es soll n-mal hintereinander 500us Signale gezählt werden. Eigentlich ist es mir egal wann der Rechner die Daten bekommt solange die Messung nicht gestört wird - notfalls kann man zu bestimmten Zeiten unterbrechen. Schöner wäre es jedoch wenn man nicht unterbrechen muss und ständig auslesen kann.
Zitat:Tutorials und Anleitungen:
Bei DAQmx werden jede Menge Beispiele mitgeliefert, die über LabVIEW->Examplefinder bequem zu suchen/auszuwählen sind...
Vielen Dank ich werde da nochmal genauer nachschauen, obwohl ich immer das Problem hatte, dass dort die Antworten nicht sonderlich Hardware-spezifisch sind. Habe ich da evtl. Beispiele für spezielle Hardware nicht installiert?
|
|
|
01.08.2012, 12:48
(Dieser Beitrag wurde zuletzt bearbeitet: 01.08.2012 12:55 von Achim.)
Beitrag #4
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Zu deinem hochgeladenen Bildchen:
Nur weil die VIs "Create Puls" und "Timer Output" links von deiner Schleife platziert sind, heißt das nicht, dass die auch vor der Schleife abgearbeitet werden! Das wird aufgrund LV-interner Priorisierungen wahrscheinlich (immer) der Fall sein, garantiert ist das aber nicht! Um das sicher zu stellen, musst du deren Fehlerausgang an den Schleifenrand verdrahten, um eine Sequenzierung zu erreichen! Das gleiche gilt natürlich auch für die Abarbeitungsreihenfolge der beiden genannten VIs selbst, und auch für die Zeitabfragen!
A.
(31.07.2012 20:36 )GerdW schrieb: - Außerdem: Wenn du alle 500µs einen Wert haben willst, wäre eine Samplerate von 2kHz doch angebracht!?
- Der CTR wird (bei kontinuierlicher Abfrage) natürlich nicht zurückgesetzt. Das sollte dich aber nicht stören, du kannst doch bequem die Differenzen zwischen zwei CTR-Werten berechnen. Bei einer Samplerate von 2kHz erhälst du so immer die Anzahl der Pulse in einem 500µs-Raster...
Hab ich was übersehen, oder wo wird in seinem VI überhaupt eine Abtastrate eingestellt?
Bei nem Counter wählt man normalerweise fürs Timing "implicit", d.h. durch die detektierten Impulse festgelegt. Diesem Timing liegt die "Grundfrequenz" des Karten-internen Counter-Oszillators (20 MHz oder 80 MHz) zugrunde, das ist für's reine Zählen aber irrelevant...allerdings wird diese bei Pulsbreiten- oder Frequenzmessungen benötigt. Dafür gibt's dann auch Beispiele im ExampleFinder!
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
01.08.2012, 13:21
Beitrag #5
|
Olli
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Jul 2012
2010
-
EN
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Ich dachte , dass im MAX schon im Task das Timing festgelegt wird. In den Beispielen (die ich gesehen habe) werden nämlich Channel und keine Tasks verwendet.
|
|
|
01.08.2012, 17:23
Beitrag #6
|
Olli
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Jul 2012
2010
-
EN
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Eigentlich dachte ich, ich hätte verstanden was passiert aber dann taucht doch noch eine Frage auf:
Mein Testprogramm findet ihr im Anhang. Wenn ich die Anzahl der Samples im Channel beim DAQmx Read auf bspw. 100 setze dann bekomme ich meine 100 abgefragten Samples zusammengerechnet geliefert. Eigentlich hatte ich erwartet, dass ich ein Array mit 100 Einträgen mit jeweils dem aktuellen Counterwert erhalte.
Wie komme ich darauf, dass die Werte zusammen gerechnet werden? Also ich erzeuge ein Signal das 1us high und 1us low ist, macht genau 2us. Wenn ich dieses Signal 500us zähle sollte der Zähler hinterher 250 Counts mehr haben als vorher. 100 mal hintereinander gemessen ergibt dann 25000 Counts und die werden mir auch in meinem Chart ausgegeben. Stelle ich die Zahl auf 10 dann bekomme ich 2500 Counts. Auch ein Versuch die Inhalte der Arrays einzeln (indiziert) auszulesen hat zu keinem anderen Ergebnis geführt
|
|
|
02.08.2012, 05:52
Beitrag #7
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
(01.08.2012 17:23 )Olli schrieb: 100 mal hintereinander gemessen ergibt dann 25000 Counts und die werden mir auch in meinem Chart ausgegeben. Stelle ich die Zahl auf 10 dann bekomme ich 2500 Counts.
Wo stellst du diese "Zahl" denn eigentlich ein?
(01.08.2012 17:23 )Olli schrieb: Wenn ich die Anzahl der Samples im Channel beim DAQmx Read auf bspw. 100 setze dann bekomme ich meine 100 abgefragten Samples zusammengerechnet geliefert.
Häh?
Was heißt zusammengerechnet? Kannst du mal dein ausgelesenes Array zeigen? Und am besten auch den offenbar korrekten Chart! (Waveform Chart 2 ???)
Das Schieberegister solltest du aber auf jeden Fall vor jedem VI-Start initialisieren, d.h. außen am SR eine leeres Array anschließen!
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
02.08.2012, 11:25
Beitrag #8
|
Olli
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Jul 2012
2010
-
EN
|
RE: Signale für einen bestimmten Zeitraum zählen mit der Countercard Ni 6602
Ah es hat sich geklärt. Anscheinend habe ich die Rechnung mit Arrays (oder Schieberegistern) noch nicht ganz durchdrungen. Es kommt das richtige an, jedoch berechne ich den Unterschied falsch.
Nochmals vielen vielen Dank an alle Helfer.
|
|
|
| |