最初に話を聞いたのはGW前、具体的な内容は伏せるとして要望された内容は
数秒間隔でOn/Offを繰り返すスイッチがあるので、その間隔をパソコンを使ってmsec単位で測定したい。
とあるスポーツに関連するのですが、1/1000秒で時間を計るなんてF1等レーシングカーくらいしか聞いたことないなぁ。使用するスイッチもチャタリングの入りそうなものになりそう。依頼主もその辺の事情は理解してくれていてあまり正確にmsecにこだわらなくて良いとは言ってくれてますが、一応形的にはmsecにしたいところ。またパソコンは持ち運びが容易でないと何かと不便なのでノートPCも考慮に入れる必要があり、拡張ボードもかなり制限される。ちなみにWindowsが提供するmsec単位の時間関数を使うという答えは残念ながら×。時間関数の精度はともかくとして、Windowsの仕組み上スイッチがOn/Offされた瞬間(もしくはそこから毎回安定した遅延で)時間関数を呼び出すことはかなり難しいから。HDDアクセスが入ったり、CPUの負荷状態が変わってスレッド切り替えに変化が生じると、msec平気でばらつきそうです。
以下検討の過程- カメレオンUSB+ロジアナキット
- 依頼主が考えていたのはカメレオンUSB +ロジアナキットでサンプリングレートをkHzオーダーにして計るというもの。USBでデータ転送するのでノートPCでもOK。 私も最初この方法で調べてたのですが、ひとつ疑問が。「ロジアナキットって、何分も連続してデータ取れるの?」なんか構造を見る限り、ロジアナキットのボード上にあるメモリに書き込んでいって、たまったらUSBで転送。転送中はデータ取得できないんじゃないかと。機能にしては安いとはいえ1万円以上するこの回路、買ってやっぱりだめでしたではお金がもったいない。
- サウンドカード
- 連続データ取得が期待できる。WindowsはそれこそHDDの許す限り録音をやり続けるし、サンプリングレートも44.1kHzあれば十分、ノートPCにだって標準で付いている。世の中にはサウンドカードを利用したオシロスコープ もある。スイッチのOn/Offを録音信号レベルに置き換えて入力すれば、Windows側はDirectSoundでデータを取り込んでいけばいい。が、これもサウンドカードは低周波をまともな波形で取れない という欠点が発覚。チャタリングの素性次第では何とかなるかもしれませんが。
- 再びカメレオンUSB
- 今度はカメレオンUSB単体。高速で連続データ取得 する実例もあるので、できないわけじゃない。ただその場合カメレオンUSBで使われているアルテラ用のプログラムを書く必要があり、そんなの使ったことないorz どうせ勉強しなければいけないなら、PICでもAVRでも変わりないなと。
- 開発環境がCで無料で入手可能
- CDC(USBをCOMポートに見せかける機能)のサンプルコード が入手可能。COMポートなら.NET FrameworkとのつなぎにUnmanaged C++を使わなくても良さそう。
- このボード単体でUSBからプログラムの書き込み可能。ブートローダ機能で何度でも書き込み可能状態に戻せる。
[2010/6/25 追記] 続き
Comments