09-20-2022 02:10 AM
現在、USB6218(BNC)とmatlabのsimulinkを使用して、電圧値を取得しています。
7チャンネルを使用して毎秒100個のデータを計測しています。(10ms刻みに電圧を取得)
その際、取得したタイミングがわかるよう、USB6218でタイムスタンプを付加して接続しているPC(simulink)へデータを送っています。
取得したデータのタイムスタンプを見ると、計測開始してから100秒ほどまでは、0.01秒ごとにデータを取得しているのですが、それ以降から定期的に0.5秒のズレが生じています。
データを精査したところ、0.5秒の間のデータは取得できておらず、0.5秒後から再度データを取得し始めていました。
以下は例です。
0.00s data1
0.01s data2
...
1.49s data149
1.50s data150
2.00s data151(1.50sから2.00sになるまでデータを取得していない)
2.01s data152
...
データ取得時のサンプリングレートも高くないので十分10ms毎の値は取得できるように思えますが、いかがでしょうか。
データの取得が止まったり開始されたりする原因などありますでしょうか。
または、似た事例などありますでしょうか。
よろしくお願いいたします。
09-20-2022 02:49 AM
10msの刻みはどのように制御していますか?
USB6218でサンプリングクロックを用いてバッファ付き連続サンプリングしていますか?
それともソフトウェアループで10ms毎に1ポイントのデータを取得していますか?
09-20-2022 04:13 AM
ご返信ありがとうございます。
USB6218にてサンプリングクロックとデータのブロックサイズを設定し、unbufferを用いて制御しています。
USB6218では、1秒間に2個のデータ(1個に50個のデータ)を出力し、合計で100個のデータを毎秒出力します。
それをunbufferを用いて50個のデータを1個ずつに分けて出力し、1秒間に100個のデータを出力します。
以下に、イメージ図を添付いたします。
09-21-2022 05:40 AM
1秒間に2ブロックで、1ブロック50個、それを1個ずつに分けて出力・・・
simulinkのデータアクイジションの作法がわからないので的外れかもしれませんが、1秒間に100回の転送を行うのでしょうか?
ちなみにLabVIEWなどでは100S/sのデータを1個ずつ転送することはせず、数10個ずつブロック転送します。1回の個数によって1秒間に何回転送を行うかが決まります。
1秒間に100回(1回1個)の転送を行うこともできますが、安定度や他のタスクを妨げる懸念からまずやりません。(RTやFPGAは別)
Data Acquisition Toolboxなどは使っていますか?