北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

まつLab分光器(シリアルRead/Writeそれぞれのキューで)

分光器のリニアイメージセンサとのインターフェースはPIC(事情により非開示)なのですが、”+”、”-”を送ると受光時間を増減することができます。非公式情報では電源投入時の受光時間は1000msecで10msec単位で増減するようです。分光器としては受光時間の数値が不確かでもあまり気に留めていないようです。

受信用のキューとは別に送信用のキューを追加しました。

 

mp04P.pngmp04D.png

 

少し込み入ってきましたが、詳しく検討する場合は「リニアイメージセンサを使った分光器(まつLab) 」も参照してください。

「SpectrometerMP04.vi」を添付しました。

 

<<<<<<<<<<<<<<<<<< 余談 >>>>>>>>>>>>>>>>.

これ以降は余談ですので、興味のある方だけお読みください。

シリアルで受け取っていると、正しく受信できているかぎりにおいてどんなタイミングでデータが送られてきているのかあまり気にしませんが、今回はブラックボックスなので、データの送られ方を見てみました。

 

test_mp04D1.pngtest_mp04D2.png

受信用のキューは文字列でしたが、文字列と数値のクラスターに変更して、受信した時点の高精度相対秒も同時に記録しました。

 

test_mp04P.png

 

横軸がデータカウントで、縦軸は秒です。予想に反して間欠的に送られて来ていました。受光時間を200msec相当変更すると縦軸の最大値が100msec変化したので、10msec単位の増減ではなく5msec単位かもしれません。デフォルトの受光時間も1.7秒ぐらいなのかもしれません。

 

バイナリのシリアルで受け取れるギリギリぐらいのデータ間隔でリニアイメージセンサのデータが送られてくれば、実験装置のメカの位置決めなどに用途がありそうですがいかがでしょうか?

 

 

 

メッセージ1/10
3,279件の閲覧回数

面白い!約800個毎に250ms程度の息継ぎをしてるのが特徴的というか、解せないところです。

位置決め用途なら1秒間に数回は更新されてほしいです。

1ライン単位でデータを送ってくれれば受信側は楽ですが、受光時間がどこまで短くできるか・・・

0 件の賞賛
メッセージ2/10
3,245件の閲覧回数

コメントありがとうございます。

ブラックボックスなので事情はわからないのですが、8μmピッチで位置データが取れるので、1秒間に数回更新できれば値段と使われる状況次第で使い道は出てくるかもしれませんね。

もっと早くなってしまうと今回みたいなシリアルで受けて気軽には使えなくなるでしょうから、私としてはちょうど良い加減を期待したいところです。

 

分光器としては今の周期でも使いどころがあるのではないかなと思います。

0 件の賞賛
メッセージ3/10
3,237件の閲覧回数

ラインセンサは12ビットで3648ピクセルなので、U16配列で扱えば7296バイト。

115200bpsだと約11520バイト/秒だから、1ライン630msくらいで送信できる。

まつLabさんの資料によると測定時間は150±50msなので、トータル800msくらいかな。

4秒間に5回更新・・・調整用に使えなくはないですね。

0 件の賞賛
メッセージ4/10
3,225件の閲覧回数

数値文字列で送ってきている「約800個毎に250ms程度の息継ぎをしてる」グラフを見ていたので、息継ぎせずにバイナリで送ればもっと速く送れそうな気がしていましたけど、「1ライン630ms」程度ですね。

 

0 件の賞賛
メッセージ5/10
3,221件の閲覧回数

USB経由の仮想COMポートだからもっとボーレート上げられる気がします。

FTDIのダイレクトドライバ使えばUSBのレートで受信できるので、測定に150ms前後かけても1秒間に5回くらい送れるポテンシャルはありそうです。

 

0 件の賞賛
メッセージ6/10
3,213件の閲覧回数

データの送られ方を見たかったのですが、見ていたのは「データの受け取り方」でした。申し訳ありません。

受信側はまだ余裕という情報ですね。

 

「Bytes at Serial Port」も表示してみました。

バッファーサイズを小さくすれば変化があるかな、と変えてみたのですが変化はありませんでした。

Note  Not all serial drivers support user-defined buffer sizes so some implementations of VISA might not be able to perform this operation. If an application requires a specific buffer size for performance reasons and the VISA implementation cannot guarantee that size, use some form of handshaking to prevent overflow conditions.

 

 

 

test3_mp04P.pngtest3_mp04D1.png

 

 

 

0 件の賞賛
メッセージ7/10
3,199件の閲覧回数

Bytes at Serial Portが読み込み終わると4000に上がるのが不思議ですね。

仮想COMポートはドライバの作りによってピュアなRS-232Cとは多少違いがあり、バッファサイスは効かないのかもしれません。

 

VISAのLF終端を無効にして、1回でBytes at Serial Port分を全部読み込んで、LabVIEW側で1ラインを切り出すようにしてみると何かわかるかもしれません。

 

0 件の賞賛
メッセージ8/10
3,195件の閲覧回数

目先を変えてArduino UNOから5桁の固定長の ダミーデータを送ってみました。

Arduinoのスケッチ

boolean led_state= true;
char dataFix[6];

void setup() {
  //Serial.begin(115200);
  Serial.begin(230400);
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, led_state);
  for(int i=0;i<3648;i++){
    sprintf(dataFix,"%05d",i+1000);
    Serial.println(dataFix);
    //delayMicroseconds(5);
  }
  Serial.println(0);
  led_state = (!led_state);
}

 

115200bpsでの受信状態

115200.png

Byte at Serial Portの縦軸が間違っていますが、バイト値です。30バイトぐらいで上下しています。時間は2.1秒かかっています。

 

Arduino UNOから230400bpsで送信したときの受信状態

230400.png

こちらはByte at Serial Portの値が時々60バイトぐらいになります。受信時間は1.1秒ぐらいでした。

 

分光器のソフトの場合はまとめてバッファに送るような処理なのでしょうか。Arduino IDEではバッファがドンと増えるような送り方にはなりませんでした。

 

0 件の賞賛
メッセージ9/10
3,176件の閲覧回数

分光器のPICのプログラムが息継ぎするようなシーケンスになっているのかもしれませんね。

0 件の賞賛
メッセージ10/10
3,169件の閲覧回数