09-24-2010 03:15 AM
いつもお世話になっております。
USB-6009のデジタルIO端子を使用し、2つ以上のLEDを交互に発光させ、その光を1つの受光素子とアナログ入力端子にて取得しております。
そして、LEDを光らせるVIと受光素子で受信するVIは別のものを使用しており、別々に動作させて使っております。
現在、取得したデータについて、LED-AとLED-Bのどちらを制御するデジタルIO端子がオンであるかを調べ、それによって信号を分けるということを行っております。
それによって取得したデータは、タイミングによっては、LED-Aのデータばかり続いたりLED-Bのデータばかり続いたりと安定しません。
LED-AとLED-Bの発光周期に合わせてデータを集録し、1つずつ交互にデータを取得したいと考えております。
デジタルトリガを使えば良いのでしょうが、USB-6009にはトリガが1つしかついておらず、LEDの数が2つ3つと増えるとプログラミングが難しくなります。
発光と受信のタイミングを合わせる何か、良い方法はありませんでしょうか。ご教授ください。
09-24-2010 05:58 AM
シーケンスストラクチャはいかかでしょうか?
大まかなイメージをアップしておきます。
09-27-2010 06:21 PM
されたい処理としては、複数のLEDを切り替えながら光らせ、その発光を1つの受光素子でモニタリングしたい、ということになるのでしょうか。
もしそうなら、LEDの発光制御(デジタル出力)と受光素子からのアナログ入力を1つのVIで同期させた方が良いと思われます。
複数のVIに分けている理由はありますか?教えてください。
09-28-2010 09:51 PM
xyzz様
返信、ありがとうございます。
シーケンスストラクチャを使って、流れを作って処理するというのは、考えたことがありませんでした。
これを使い、早速試してみようと思います。
高須様
返信、ありがとうございます。
私が今作ろうとしているのは、高須様のおっしゃるとおりの処理です。
今まで2つのVIに分けていたのは、発光のタイミングを正確なものとするためです。
集録VIにて、集録した値を元に計算を行っておりまして、その処理時間のせいでAとBの発光時間やタイミングがずれるという結果になっておりました。
なので、発光以外の処理が存在しない別VIを使っておりました。
09-29-2010 07:54 AM
これ以上のレスは不要かも知れませんが気になるのでコメントします。
「発光のタイミングを正確に」とは、何に対して正確なのでしょうか。また、どのぐらいの正確さ(msオーダー?μsオーダー?)が必要なのでしょうか。
6009ではDIOにソフトウェアタイミングしか使用できないので、どうしてもOSの割り込み処理に起因するジッタが発生し不正確なタイミングになります。数十msオーダーの揺らぎは許容するという仕様になるかと思います。
「一定の時間LEDを光らせて、その間のセンサからの電圧値を集録する」という目的なら添付VIで満たすはずです。データ処理で時間がかかるのであれば、測定データをキューで別ループに飛ばせば問題ないと思われます。(ファイルメニュー→新規→テンプレート→デザインパターン→生産者・消費者デザインパターン(データ)参照)
取り急ぎ蛇足まで。
09-29-2010 11:09 PM
高須様
返信、ありがとうございます。丁寧に教えていただいて恐縮です。
正確にというのは、点滅の周期を指定した値にms程度で、という意味です。
発光は大体、100Hzから1KHz程度で使用していました。別VIにした方が、発光の波形がきれいに出たので、そちらでやっていました。
現在、シーケンスストラクチャで、発光と受光のタイミングを合わせる方法を試行中です。こちらだと、値はどちらのLEDのものなのか明確にわかるので、多少ずれても問題はないようです。
>測定データをキューで別ループに飛ばす
という方法については、今まで知りませんでした。ありがとうございます。
ExplessVIに頼りきりで、DAQmx等のVIの使い方がまだ理解できていないところもありますが、サンプルを良く見てプログラムしていきたいと思います。