【加速度センサー入門】シリーズでは、アナログ・デバイセズ社の加速度センサーを中心に、基本的な使い方や応用方法を解説します。前回の記事「加速度センサーのデータ取得をしてみよう」では加速度センサー「ADXL345」 と「Arduino」を使い、加速度データの取得方法をご紹介しました。本記事では、ADXL345の「割り込み機能」を使ったデータ取得方法を紹介します。
【加速度センサー入門】シリーズ一覧はこちらから
ADXL345の割り込み機能
ADXL345は、3軸のデジタル出力加速度センサーです。IC内部で取得した加速度データのデジタル演算・イベントの判定を行い、割り込みを発生させる機能が搭載されています。この機能によりホスト側(マイコンなど)の処理負荷を下げることができるため、効率の良いシステム設計が可能です。
ADXL345の割り込み発生要因は下記の8つです。
・DATA_READY:新しい加速度データが更新された場合に割り込みが発生
・SINGLE_TAP:タップ動作を検出した場合に割り込みが発生(マウスのクリック動作のイメージ)
・DOUBLE_TAP:ダブルタップ動作を検出した場合に割り込みが発生(マウスのダブルクリック動作のイメージ)
・Activity:加速度が設定閾値範囲を超えている場合に割り込みが発生
・Inactivity :加速度が設定閾値範囲を下回った場合に割り込みが発生
・FREE_FALL :自由落下を検出した場合に割り込みが発生
・Watermark:FIFO内のサンプル数が指定した値以上になった場合に割り込みが発生
・Overrun:加速度データが未読のまま新しいデータに更新された場合(FIFOモードの場合はFIFOが一杯になった場合に割り込みが発生)
また、ADXL345では、割り込みを知らせる専用のピン(8番pin:INT1, 9番pin:INT2)が用意されています。
そのため割り込みイベントを選択する際には柔軟な設計が可能です。
割込み機能を使ってみよう
加速度センサーADXL345 とハードウェアのオープンプラットフォームであるArduinoを使い「Data_Ready」割り込みを使った例をご紹介します。
Data_Ready割り込みの動作概要は下記となります。
・加速度データが取得されるタイミングは更新レートレジスタにより設定されます
・設定更新レートのタイミングで新しいデータがデータレジスタに格納されます
・DATA_READY割り込みを有効にしている場合、更新タイミングで割り込み端子(INT1 or INT2)及び、割り込みステータスレジスタであるINT_SOURCEレジスタに結果が反映されます
「Data_Ready」割り込みを使うことで、更新タイミングの割込み通知が来ない間はホスト側のMCUは他の処理にリソースを割り当てることができます。またバッテリー駆動の場合は、MCUをスリープさせ、低消費電力化を図ることができます。
準備するもの
今回、加速度センサーを評価するうえで準備したものはこちらです。
・Arduino IDE がインストール済みの PC (Arduino IDE のダウンロードはこちらから)
・USB ケーブル (Arduino と PC 接続用)
・ブレッドボードとワイヤー
上記の部品を組み合わせて、下図のように回路を組んでいきます。Arduino Nano への電源は、PC からの USB バスパワーで供給します。ADXL345は、SPI インターフェースとI2C インターフェースに対応していますが、今回はI2C インターフェースを使用します。
プログラムの内容
今回作成したプログラムでは、ADXL345を測定モードにする前に下記の設定を行いました。
・BW_RATEレジスタ(アドレス0x2C)を100Hzに設定し、10msecに設定(デフォルトで100Hzのため省略しても問題ありません)
・DataReady割り込みを使うためにINT_ENABLEレジスタ(アドレス0x2E)のBIT[7]=1を設定
(レジスタの詳細はデータシートをご確認ください)
測定モードへ変更後は、ADXL345は10msecおきに新しい加速度データに更新されるとINT1ピンがLow→Highに変化します。
Arduino側ではINT1からの信号を検出した際に、割り込み要因の確認を行うためにINT_SOURCEレジスタ(アドレス0x30)の読み込みを実施します。
DataReadyのBIT[7]=1となっている場合は、新しいデータが更新されたことになるため、加速度データの取得を行います。
(INT_SOURCEレジスタの読み込みに関しては、複数割り込み要因が設定されていない今回のケースでは省略しても問題ありません)
尚、DataReadyの割り込みを使う際には一点注意事項があります。割り込み状態をクリアするためにはデータ・レジスタ(アドレス 0x32)を読み込む必要があります。Arduinoマイコンをリセットした場合、INTの割込み状態が保持されてしまうことがあるため、ADXL345の初期設定時にデータレジスタを一度ダミーリードすることをお勧めします。
Arduino IDE で作成したプロジェクトファイルは「今回検証したサンプルコードのダウンロード」よりダウンロードできますので、ご興味のある方はダウンロードください。また、Data_Readyを使っていないデータ取得の方法は、前回の記事「加速度センサーのデータ取得をしてみよう」をご参照ください。
動作確認
AnalogDisoveryのロジックアナライザー機能を使い、INT1ピンの波形を確認してみました。下図の通り、おおよそ設定した周期100Hz(10msec)でLow→Highと信号レベルが変化していることが確認できました。また、割り込み信号を受け付けた後、加速度データの取得を行った際にINTピンはHigh→Lowへと変化しているため、割り込み通知がクリアされたことも確認できました。
Arduinoのプログラムでは、割り込み信号検出後に、割り込み要因の確認、X,Y,Zの加速度データ取得を行いました。この作業に要した時間ですが、図のI2C通信の波形を見ると0.5msec程度でした。つまり「DataReady」割り込みを活用することで、10msecのうち約9.5msecの期間は他の処理をすることができます。今後の記事ではFree-Fall割り込みなど他の割込み機能もご紹介したいと思います。
今回検証したサンプルコードのダウンロード
今回実施したArduino のプロジェクトファイルを提供しています。こちらからお申し込みの上、ぜひお試しください!
加速度センサー ADXL345 について
今回使用したADXL345 は、3軸のデジタル出力加速度センサーです。主な特長は以下の通りです。
・ADC、演算機能ブロック、FIFO 内蔵で、非常に使いやすいスタンダードな加速度センサー
・加速度データは、デジタルシリアル方式で一般的なI2C/SPIを採用
・3軸タイプのセンサーは直交座標 (X, Y, Z) で、それぞれの軸に働く加速度を取得可能
・最大検出加速度を2g~16gの範囲で設定ができ、サンプリングも~3.2kHzと幅が広いので、衝撃、傾き、モーション検知など様々な用途に応用可能
・消費電流を減らすためのフレキシブルなモードを採用
ADXL345 の詳細は、データシートをご参照ください。
また、この加速度センサーは非常に使いやすいので、これから加速度センサーを評価してみたいという方はぜひ評価ボードでお試しください。
最後に
本記事の内容に関してのご質問、または加速度センサーの選定や使い方にお困りのことがありましたら、以下からお問い合わせください。
おすすめ記事/資料はこちら
ADcmXL3021 標準的な機械ネジで設置できる高性能3軸MEMS センサー
【加速度センサー入門】~ 加速度データを取得してみよう~
アナログ・デバイセズ メーカー情報Topへ
アナログ・デバイセズ メーカー情報Topに戻りたい方は以下をクリックしてください。