ADボードUSB-AI16-16EをRaspberry Piで使う

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が点灯していればよい(下図)。

点灯確認

色々すごいところに置いているが気にしない。

サンプルスクリプトの実行

使用できることを確認するために、サンプルスクリプトを実行する。まずはその準備として共有ライブラリの追加。

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc

実行後、端末を再起動する。

サンプルスクリプトはAIOUSB/AIOUSB/samples/USB-AI16-16/bulk_acquire_sample.cを使う。

cd
cd AIOUSB/AIOUSB/samples/USB-AI16-16
gcc bulk_acquire_sample.c -std=c99 -I /usr/include/libusb-1.0/ -I /usr/local/include/aiousb/ -laiousb -lusb-1.0 -o bulk_acquire_sample

これでbulk_acquire_sampleが生成されたので、実行すると、以下のようになる。

デバイス情報を表示した後、まず16チャネルのシングルショットを行い、次に3.2MB分の連続取得を行っている。250kHzのサンプリング周波数で16チャネルあるので、1チャネルあたり15.625kHz。データはショート型で格納されるため、1秒あたり約500KBのデータ量になる計算。1秒毎にメモリの状態を表示しており、約500KBずつ消費されているのがわかる。で、7秒目にメモリを使い切って終了。

以上、Raspberry PiでADボードUSB-AI16-16Eの認識からサンプルスクリプトの実行まで完了。

関連コンテンツ

関連記事

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。