ACESS社のAD変換ボード、USB-AI16-16E(または16Aでも同じ)をRaspberry Piで使う手順。USB-AI1サンプルプログラムを動かすまで。
現状、これ以外にRaspberry Piで使えるADボードってあるんだろうか。さんざん探し回って、これしか見つけられていない。
USB-AIシリーズについて
USB-AIシリーズはACESS社のAD変換ボードである。
ACCES - 12 or 16-Bit, 16-Channel, Multifunction Analog Input/Output USB Modules Page
USBで使えて、Linuxに対応しているというとても珍しいAD変換ボード。ならば、Raspberry Piでも使える…?と期待。
量子化ビット数、サンプリング周波数、チャネル数、自動キャリブレーションの有無でバリエーションが存在する。
ACCES I/O - USB Data Acquisition (DAQ) Boards
だいたい量子化ビット数12-16、サンプリング周波数は最大250-500kHz、チャネル数12-16といったところ。もちろん良いものほど高いが、本体は1,000ドルもいかない。初めて使う時は、別途端子台と専用ケーブルも購入しないといけないが、それ含めても1,000ドルいかないはず。この手のAD変換ボードとしてはお値頃ではなかろうか(個人用途にはちょっと厳しいが)。
今回、USB-AI16-16Eを使う。16ビット、250kHz、16チャネルである。上位版のUSB-AI16-16Aも同様のやり方で使えるようになる。
スペックはまぁまぁだが、さてこれをRaspberry Piで使えることは可能なのだろうか。README.mdを見ると、Raspberry Piの記述があったので、考慮していないことはないらしい(Beagle Boardの記述まであった)。Mac用の記述もあったが、いざMacで動かそうとしてみたらうまくいかなかった……。
が、Raspberry Piでは今のところそこそこ使えている感触。本格運用まで至っていないので、安定して使えるかまでは未知数だが……。
ソフトウェアのインストール
以下の手順で、必要なソフトウェアのインストールをする。ソースコードからコンパイルする必要あり。ソースコードは公式サイトにもあるが、githubで最新のものが公開されており、そちらのほうが新しいので、ここではそれを使う。ディレクトリの作成場所はどこでもよいが、今回はユーザーのホームディレクトリ直下にAIOUSBディレクトリを作成するものとする。
sudo apt-get install libusb-1.0 libusb-1.0-0-dev cmake swig git tig
git clone https://github.com/accesio/AIOUSB
cd AIOUSB/AIOUSB
mkdir build
cd build
cmake ..
make
sudo make install
fxloadのインストール
次に、Raspberry PiからUSB-AI16-16Eを動作させるためACCES社によってカスタマイズされたfxloadを以下の手順でコンパイルし、インストールする。ここでは、コンパイルしたソースコードは/usr/local/binに置くものとする。
fxloadはやはりgithub上に公開されているので、gitで落とす。落とす場所はどこでもよいが、ここでは前節で作成したAIOUSB直下とする。
cd
cd AIOUSB
git clone https://github.com/accesio/fxload
cd fxload
mkdir build
cd build
cmake ..
make
sudo cp fxload /usr/local/bin/
デバイスを認識させる
Raspberry PiでUSB-AI16-16Eを認識させるために、まずudev(Linuxにおける自動認識の仕組み)のルールを追加する。
cd
cd AIOUSB/AIOUSB
sudo mkdir /usr/share/usb
sudo cp Firmware/*.hex /usr/share/usb/
sudo cp Firmware/10-acces* /etc/udev/rules.d/
次に、ルールのfxloadのパスを書き換える。デフォルトでは/sbin/fxloadになっているため、前節でインストールしたパス(/usr/local/bin/fxload)に変更する。
sudo sed -i 's#/sbin/fxload#/usr/local/bin/fxload#g' /etc/udev/rules.d/10-acces_usb.rules
実行すれば変換されるが、当該ファイル(/etc/udev/rules.d/10-acces_usb.rules)の中身は一度見ておくと良い。
以上を実行後、Raspberry PiとUSB-AI16-16Eを接続すると認識される。認識されたことを確認するには、デバイスのLEDが点灯していればよい(下図)。
色々すごいところに置いているが気にしない。
これでbulk_acquire_sampleが生成されたので、実行すると、以下のようになる。
デバイス情報を表示した後、まず16チャネルのシングルショットを行い、次に3.2MB分の連続取得を行っている。250kHzのサンプリング周波数で16チャネルあるので、1チャネルあたり15.625kHz。データはショート型で格納されるため、1秒あたり約500KBのデータ量になる計算。1秒毎にメモリの状態を表示しており、約500KBずつ消費されているのがわかる。で、7秒目にメモリを使い切って終了。
以上、Raspberry PiでADボードUSB-AI16-16Eの認識からサンプルスクリプトの実行まで完了。
コメント