07-22-2014 07:09 PM
現在アナログ出力を5つ同期出力する制御を検討しています。
保有しているデバイスはPCIe-6323、usb-6343、PCI-6733です。
出力する信号は外部からの100KHz程度のトリガをクロックとして用いて、
5つの信号を同時に開始し、再度トリガを開始トリガとして繰り返し出力するというものです。
4つまでならPCIe-6323、usb-6343で作成できたのですが5つ目を出力しようとすると異なるデバイス間で
同期をとる必要があるのですがうまくいきません。
PCI同志であればRSTIで接続するという情報を見かけるのですがPCIeとusbではどうしたらよいのでしょうか?
もしくはPCI6733で上記を実現できればそちらでもよいのですがご教授お願いします。
環境はwin7、labview 2010です
解決済! 解決策の投稿を見る。
07-23-2014 10:19 PM
とも0830さん
こんにちは。
いつもお世話になっております。
日本ナショナルインスツルメンツ技術部の小野と申します。
平素より、弊社製品をご使用いただき、誠にありがとうございます。
デバイス間で同期を取るにあたり、重要な項目が3つほどあります。
下記に示しますね。
1.必要な同期の精度
仮に5チャンネルから同じ周波数、同じ位相のサイン波を出力するとして、
それぞれの出力波形の位相差はどこまで許容できるか(nsec, μsec, msec)というところを最初に決める必要があります。
必要な同期の精度によっては、デバイスやプログラミングを変更しなければならない場合があります。
2.クロックの共有
同じデバイスであれば、元の基準のクロックは共有していますが、異なるデバイス間では
クロックは共有されていません。
まずは、このクロックを共有する必要があります。
3.開始合図の共有
同じクロックを共有していたとしても
開始の合図がずれていると、例えばデバイスAではデバイスBよりも、数サンプル先に集録しはじめてしまいます。
さて、本題に戻りたいと思います。
今回の場合、次の方法にてできると思います。
X1.元々PCIe-6323に入っていた外部クロックをUSBデバイスのPFI端子にも分岐して、渡して同期する方法
X2. PCIe-6323で使用しているAOのサンプルクロックをPFI端子にルーティングさせて、そのクロックをUSBデバイスで使用する方法
これらの注意点を挙げます。
*1.PCI6733を使用した波形よりもチャンネル間の同期誤差は大きいことが予想されます
*2.アナログ出力のタスクを開始させてから、クロックを入力するようにしてください
(上記X1では、PCIeとUSBのタスクを開始させてから外部クロックを入力する)
(上記X2では、スレーブとなる、USBのタスクを開始させてから、PCIeのタスクを開始する)
サンプルプログラムでは
下記ページの
NI-DAQmx: Synchronize Analog Output Across Multiple Devices Using LabVIEW - National Instruments :
http://www.ni.com/example/30197/en/
こちらがご参考いただけると思います。
http://ftp.ni.com/pub/devzone/epd/multi-dev_synch-ao_cont-gen.zip
それから自習用に、データ集録でおすすめの書籍があるので紹介いたしますね。
また、どうしてもご自身で解決できない場合は、
保守の契約が必要にはなってしまうのですが
電話やメールにて、解決まで導く
弊社の技術サポートがございますので、弊社までご相談ください。
それでは、無事ご所望の動作が実現できるよう、応援しています。
日本NI
技術部
小野 永輔
07-29-2014 02:06 AM
小野様
ご丁寧に回答いただきありがとうございます。
トリガ信号の分岐はX1.の方法実施していたのですが
”アナログ出力のタスクを開始させてから、クロックを入力するようにしてください”を行っていませんでした。
こちらを先に行ったところ所望の動作が得られました。
ちなみにこのタスク起動順によりタイミングが異なるのはなぜでしょうか?
お手数ですがご教授お願いします
07-29-2014 02:17 AM
とも0830様
お世話になっております。
NIの小野です。
ご所望の動作が得られたとのことで嬉しく思います。
なぜかと申しますと、
仮にPCIeのデバイスが最初にタスクを駆動していた場合、
トリガのクロック信号が来た時点で出力を始めてしまいます。
この時点でUSBデバイスはタスクが始まっていないので、遅れを取ってしまうことになります。
これを防ぐには、USB,PCIeのタスクを先に開始させておいてから、
トリガのクロック信号を入力させてあげることで、同期が取れるようになります。
(タスクが開始してもトリガとなるクロック信号が来なければ、アナログ出力はデータを出力いたしません。)
こちらでご質問の回答になっていますでしょうか。
日本ナショナルインスツルメンツ
技術部
小野
07-29-2014 02:23 AM
小野様
ありがとうございます
PCIeとUSBではlabview上で同時に開始しても実際の動作開始タイミングが異なる為
両デバイスをクロック待ちにしておく必要があるという理解でよろしいでしょうか?
07-29-2014 02:31 AM
とも0830さん
仰るとおりです。
仮にlabview上で同時に開始しても、あくまでソフトウェアタイミングになりますので
誤差が発生します。
これを失くすためにはクロック待ちの状態にしておくということが必要になります。
日本ナショナルインスツルメンツ
技術部
小野 永輔
07-29-2014 02:32 AM
小野様
ご丁寧に対応いただきありがとうございました