AN-1025: アナログ・デバイセズのデジタル加速度センサーに内蔵された先入れ、先出し(FIFO)バッファの利用
はじめに
最新型の製品の多くでユーザーインターフェース、動作認識や低消費電力に対する要求が高まっている中で、幅広いアプリケーションに慣性センサーの採用が急速に進んでいます。例えば、加速度センサーを使い製品の動きをセンシングして特定の機能をオフにすることで、製品に動きがない間の消費電力を節減することができます。また、タップの振動を検出して入力軸とその方向を識別することにより、ユーザーに、新しいユーザーインターフェースを提供することが可能になります。
アナログ・デバイセズでは、単軸、2 軸、3 軸タイプのアナログおよびデジタルを含めた広範囲の各種加速度センサーを提供しています。超低消費電力、3 軸デジタル加速度センサーのADXL345 は、柔軟性に優れたFIFO バッファを内蔵しています。このFIFO を利用することで、アプリケーションの精度を向上させることができ、さらなる低消費電力化によってシステム性能が高まると同時に、加速度センサーからの割込みを減らすことでホスト・プロセッサの負担を軽減させることができます。
このアプリケーション・ノートでは、アナログ・デバイセズのデジタル加速度センサーについて解説し、ADXL345 を中心にFIFOとその動作モードを説明します。各モードの構成例を紹介するとともに、FIFO を利用した信号処理と低消費電力化の方法の例についてもいくつか説明します。
FIFOの説明
FIFO は、最大で32 のデータ・サンプル・セットを保持することが可能です。各データ・サンプル・セットは、x 軸サンプル、y軸サンプル、z 軸サンプルで構成されます。x 軸サンプルは、通常DATAX0 とDATAX1 の各レジスタに保持されるデータであり、y 軸サンプルとz 軸サンプルはそれぞれ該当するレジスタに保持されるデータです。これに加えて、加速度センサーの出力フィルタにも同様にもう1 つのデータ・サンプル・セットが保持され、FIFO と合わせて合計33 のデータ・サンプル・セットを保持することが可能です。FIFO の構成を図1 に示します。
加速度データのセンシングとデジタル化が完了した後で、サンプルが出力フィルタから出力されます。このデータはFIFO 内部の、データ・レジスタに最も近接したレベルに格納されます。データ・レジスタからの読出し動作時には、FIFO[0]のデータが取得され、FIFO から取り出されるので、残りのデータ・サンプル・セットはデータ・レジスタに1 レベル近い場所にシフトされます。つまり、FIFO[0]の読出し終了後にFIFO[1]のサンプルがFIFO[0]にシフトし、FIFO[2]のサンプルがFIFO[1]にシフトするという動作です。読出し動作の後でFIFO[0]にシフト可能な新しいデータ・サンプル・セットが存在しない場合には、出力フィルタで新しいデータが有効になるまで古いデータが保持され、新しいデータが出力フィルタから出力された時点でFIFO[0]のサンプルを置き換えます。FIFO が満杯(つまり32 レベルすべてにデータ・サンプル・セットが格納されている場合)時の出力フィルタの動作は、FIFO の動作モードに応じて異なります。
データ・レジスタからのデータの読出し
データ・レジスタからの読出し動作はすべて、複数バイト読出しとして実行することを推奨します。複数バイト読出しとは、複数バイトの最終バイトが取得されるまで通信が終了しない読出しです。複数バイト読出しを行うことで、レジスタから読み出したデータの時間的な同時性を確保することができます。単一バイト読出しを実行すると、1 つの読出し動作が終了した後で次の読出し動作が開始されるまでの間に新しいデータが出力フィルタから出力される可能性があるため、サンプル間の時間的同期が確保できない可能性があります。
SPI 3 線または4 線通信の場合に複数バイト読出しを行うには、マルチバイト・ビットを設定し、次にバイトごとに8 個のクロック・パルス・セットを送信し続けます。図2 に示すように、複数バイト・ビットが設定された状態で、8 個のクロック・パルス・セットがそれぞれ送信された後でレジスタ・ポインタは次の値にシフトします。複数バイト・ビットの場所の説明は、ADXL345データシートを参照してください。
I2C 通信の場合、複数バイト読出しは読出しの実行に必要なI2Cプロトコルに則り、SPI の場合の複数バイト読出しと同じ方法で実行されます。読出しを開始した後で、9 個のクロック・パルス・セット(I2C 通信ではアクノレッジ・ビットとして9 番目のクロック・パルスが必要)の送信を続けると、レジスタ・ポインタが次の値にシフトします。I2C 通信での読出し動作の実行に関する詳細については、ADXL345 データシートまたはNXP Semiconductors社から入手可能なUM10204 I2Cバス仕様書およびユーザ・マニュアル、Rev. 03—19(2007 年6 月発行)を参照してください。
FIFOからのデータの読出し
FIFOの使用中にデータ・レジスタから読出しを行うと、FIFO[0]に格納されたデータ・サンプル・セットを読み出せます。古いFIFO[0]値を取り出して、データ・サンプル・セットをシフトダウンする (これはFIFOのポッピングとも呼ばれます)には、DATAZ1 レジスタの最後のクロック・パルスを受信するか、または通信を終了する必要があります。SPI通信の実行中に通信を終了させるには、CSピンのアサートを解除します。I2C通信の場合はマスター・デバイスからの停止コマンドの発行によって通信を終了します。次のサンプルを読み出すには、図3 に示すように複数バイト読出しを再度実行してください。
データ・レジスタからのデータの読出しと同様に、2 バイト以上のデータをFIFO から読み出す場合には、複数バイト読出しを行う必要があります。FIFO の使用時に単一バイト読出しを実行すると、読出し動作の終了によってFIFO がポッピングするため、1 つの読出し動作が終了した後で次の読出し動作を開始するまでの間にデータ・サンプル・セットがシフトし、異なるデータ・サンプル・セットからの読出し値が混在してしまいます。たとえば、x 軸のLSB の読出しに単一バイト読出しを使用し、さらにx軸のMSB の読出しにも単一バイト読出しを使用すると、この読出し動作が終了した後で次の読出し動作を開始するまでの間にFIFO がポッピングし、同じデータ・サンプル・セットからではなく隣接するデータ・サンプル・セットからバイトを返す結果が生じます(図4 を参照)。
通信速度、データレート、終了時間
データをFIFO から読み出すことが可能な速度は通信速度に依存するため、データの読出し速度を上回る速度でFIFO を満杯にしないように、適切なデータレートを選択するよう注意してください。I2C プロトコルでは、複数バイト読出しを開始するだけのために、Start Condition 送信、スレーブ・アドレスおよびレジスタアドレス指定、Start Condition 再送信、その後に続くスレーブ・アドレスおよび読出しの動作が要求されます。I2C 通信でのホスト・コントローラの効率もデータの読み飛ばしなく使用できる出力データレートに影響を及ぼすので、出力データレートを決める際にはこの点も考慮に入れてください。一般にI2C 通信を使用する場合は加速度センサーの出力データレートを800Hz 以下に設定することを推奨します。
SPI では読出しの開始に関する条件がI2C とは異なるため、I2C よりも低いクロックレートでも同じ出力データレートでの読出しが可能です。システム設計者は、バス速度に対応する適切なデータレートが選択されていることを検証する必要があります。
連続的な各サンプル読出し動作の間に必要な時間(図3 に示す終了および再開通信時間)は約5 μsです。これは、各読出しの間でFIFOがポッピングする必要があるためです。SPI通信の場合は、DATAZ1 の読出しまたはCSピンのアサート解除が終了した後で次のサンプル・セットの読出しが開始されるまでの間を約5 μs以上空ける必要があります。I2C通信の場合、読出しの開始に必要な高速モードでの最小時間(70 μs)は、この5 μsの条件を十分に満足する時間です。
5 MHzのSPI通信の場合、読出しの開始に必要な時間はわずかに約1.6 μsであるため、各読出し動作の間でCSピンのアサートを解除している時間を3.4us以上にすることが要求されます。1.6 MHzのSPI通信の場合は、読出しの開始に少なくとも5 μsかかるので、SPI速度が1.6 MHzよりも低い場合には、CSピンのアサートの解除に要する時間はSPI通信の仕様として規定されるtCS,DISのみになります。
FIFOステータスのモニタリング
FIFO のステータスのモニタ用として、FIFO_STATUS レジスタを使用できます。FIFO_TRIG ビットの説明は「トリガ・モード」に記載しています。Entries ビットは、現在FIFO に保持されているサンプルの数に対応します。Entries ビットは6 ビット長ですが、最大許容値は0x20 または32(10 進数)です。FIFO からのデータ読出し終了直後にFIFO_STATUS レジスタの読出しを行うと、エントリの値はデータ・サンプル・セットのシフト終了後まで更新されないために不正確となります。データ・レジスタから読出しを開始し、FIFO_STATUS レジスタの読出し後に動作を終了する複数バイト読出しを実行する場合には、DATAZ1 の読出しが終了した後でFIFO_STATUS の読出しが開始されるまでの間に、FIFOのポッピングを可能にするために5 μs の最小時間が要求されます。この動作は、5 μs の最小時間を満足するまでクロックを引き延ばすか、または停止させた後で通信を再開することで実現できます。
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
FIFO_TRIG | X1 | Entries | |||||
1 X = don’t care. |
FIFOの設定
FIFO の設定は、FIFO_CTL レジスタを通して行います。FIFO_CTLレジスタのFIFO_MODE ビットを使用して、FIFO の動作モードを決定および設定します。また、Samples ビットを用いてをウォーターマーク割込みやトリガ割込みの設定を行います。Samples ビットの動作は選択したFIFOの動作モードによって異なります。
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
FIFO_MODE | Trigger | Samples |
誤った割込みの発生、または偶発的なFIFO へのデータ投入を防止するために、対応する割込みをイネーブルにする前、およびデバイスを測定モードに設定する前に、FIFO およびトリガ・モードでのトリガ割込み、あるいはウォーターマークの設定を行ってください。原則として、デジタル加速度センサーを以下の順に設定します。
- データレート、計測範囲、データ・フォーマット、オフセット調整などのデータ・パラメータの設定
- 割込みの設定(イネーブルにしません):スレッショルドとタイミング値を設定し、使用する割込みをピンを選択します。
- FIFO の設定(使用する場合):モード、トリガ・モードを使用している場合はトリガ割込み、Samples ビットを設定します。
- 割込みのイネーブル:INT_ENABLE レジスタ
- デバイスの測定モードへの設定:POWER_CTL レジスタ
この順番に従うと、FIFO が空のとき、およびSamples ビットが0のデフォルト値に設定されるときの誤ったウォーターマーク割込みに加えて、割込みがデフォルト値でイネーブルになっていることに起因する誤った割込みの発生も防止されます。
FIFOモード
FIFO には、バイパス・モード、FIFO モード、ストリーム・モード、トリガ・モードの4 つの動作モードがあります。この各モードは、FIFO_CTL レジスタのFIFO_MODE ビットを使用して設定します。どの値がどのモードに対応するかは、ADXL345 データシートを参照してください。
バイパス・モード
バイパス・モードのときには、FIFO は実質的にディスエーブルになります。出力フィルタから新しいデータが出力されるたびに、データ・レジスタまたはストアされた値が即時に新しいデータ・サンプル・セットに置き換えられます。新しいデータが出力フィルタから出力される前にデータ・レジスタの読出しを再度行うと、古いデータをもう一度読み出せます。新しいデータが有効になるまで古いデータが保持され、新しいデータが出力フィルタから出力された時点でデータ・レジスタ内の古いデータが新しいデータに置き換えられます。新しいデータが有効になる瞬間に読出しの通信を行っている場合には、ダブルバッファ出力により、読出しを最初に終えた後で新しいデータを出力フィルタに送り込み、読出しによるデータ損失を防止します。
このモードでは、新しいデータの読出し準備が完了していることをマスター・デバイスに通知するために、通常はDATA_READY割込みが使用されます。DATA_READY 割込みの設定は、選択した割込みピンに対してINT_MAPレジスタでDATA_READY割込みの出力ピンを設定し、次にINT_ENABLE レジスタでDATA_READY ビットをイネーブルにします。DATA_READY をマッピングした割込みは、新しいデータが有効になるときに発生し、データ・レジスタからのデータ読出しによってクリアされます。DATA_READY 割込みの極性はアクティブ・ハイレベルにデフォルト設定されています。DATA_FORMAT レジスタでINT_INVERT ビットを設定することにより、DATA_READY と他のすべての割込みをアクティブ・ローレベルに設定できます。
D7 DATA_READY |
D6 SINGLE_TAP |
D5 DOUBLE_TAP |
D4 Activity |
D3 Inactivity |
D2 FREE_FALL |
D1 Watermark |
D0 Overrun |
FIFOモード
FIFO モードのときに、FIFO は満杯になるまで新しいデータを収集した後で、FIFO に余裕スペースが利用できる状態になるまで新しいデータの収集を停止します。データの読出しによって余裕スペースが利用できる状態になると、出力フィルタから出力された最新のデータが再びFIFO に格納され始めます。FIFO が完全に満杯の状態になり、データが十分迅速に読み出されない場合には、満杯時にFIFO にストアされたデータと、余裕スペースが利用可能な状態になった後にFIFO に格納された新しいデータとの間で、データの時間的な断続が発生します。これを図5 に示します。FIFO モードの通常の動作方法は、DATA_READY をディスエーブルにし、代わりにWater Mark 割込みを用いる手法です。FIFOモードでは、FIFO_STATUS レジスタのEntries の値に相当するFIFO に格納されたデータの数が、FIFO_CTL レジスタのSamplesに書き込まれた値と等しくなると、Water Mark 割込みが発生します。DATA_READY 割込みではなく、Water Mark 割込みを使用すると、所望のレベルまでFIFO にデータを格納し、その後の連続的な複数バイト読出しでFIFO を空の状態にすることが可能であるため、加速度センサーからの割込み発生頻度を低減することができます。Water Mark 割込みを設定するには、ゼロ以外の値をSamples に書き込みます。使用する値は任意に選択可能ですが、割込みの発生時にシステムが割込みをどの程度迅速に処理できるかに応じて異なります。処理時間が十分短く、新しいデータがFIFOに格納される前にFIFO の読出しを終了できる場合には、32 に近い値を選択できます。割込みが発生した後でこれを処理するまでに遅延がある場合には、FIFO がデータを放棄する動作を防止するために、Samples を低い値に選択してください。Samples を設定した後で、INT_MAP レジスタでWater Mark 割込みをINT1 またはINT2 のいずれかにマッピングし、その後にINT_ENABLE レジスタでWatermark ビットを設定して、ウォーターマーク割込みをイネーブルにします。
DATA_READY割込みと同様に、Water Mark 割込みはこれを発生させる条件が取り除かれるまでその設定状態が維持されます。つまり、Entires の値がSamples の値よりも大きいか、またはこれと等しい限り、Water Mark 割込みは発生した状態に保たれます。Water Mark 割込みをクリアするには、FIFO 内のデータ数がSamples で設定した値よりも小さくなるまで(データ・レジスタを介して)FIFO からデータを読み出します。ただし、Water Mark 割込みが非常に頻繁にトリガされることによって、FIFO を使用する利点が失われる問題の発生を防止するために、Samples で設定した値と同等のデータ・サンプル・セットを読み出すことを推奨します。
FIFO モードでFIFOがどのように動作するかを示す例を図6 に記載しています。この例では、Samples ビットが6 の値に設定されているので、サンプルがFIFO[5]に押し込まれたときにWaterMark 割込みが発生します。さらに2~3 個のサンプルの後で割込みが処理され、6 個のサンプルがFIFO から読み出され、FIFO 内のエントリが6 よりも少なくなり、Water Mark 割込みがクリアされます。
任意のFIFO 動作モードからFIFO をバイパス・モードに設定すると、FIFO が空になる点に注意してください。したがって、FIFOをバイパス・モードに設定する前にFIFO 内のデータを読み出してください。デバイスを測定モードからスタンバイ・モードに設定すると、FIFOの内容は保持されますが、新しいサンプルがFIFOに投入されなくなります。そのために、FIFO をクリアせずにスタンバイ・モードから測定モードに設定するとデータの時間的な断続が発生する可能性があります。
ストリーム・モード
ストリーム・モードでFIFO を動作させるときには、新しいデータ・サンプル・セットが連続的に収集されます。FIFO が満杯になると、FIFO[0]内の最も古いデータが放棄され、残りのデータがシフトダウンして、新しいデータがFIFO[31]に格納されます。FIFO が読み出され、新しいデータの余裕スペースが利用可能になるまで、最も古いデータの放棄が続けられます。この動作を図7 に示します。
ストリーム・モードは、加速度データの読出しタイミングをホスト側で決定するアプリケーションを対象としています。これはボタンを押す動作、または特定時に加速度センサーからの情報を要求するアプリケーション等が該当することがあります。この理由により、ストリーム・モードでは割込みを使用しない動作が可能です。しかし、ストリーム・モードでのWater Mark 割込みは、FIFO モードの場合と同じ方法で動作し、FIFO 内のデータの数がSamples で設定されている値と等しくなったときに割込みが発生します。
ストリーム・モードに関連する機能の一つとして、INT_SOURCEレジスタのOverrun ビットがあります。FIFO が満杯になった後で、新しいデータが有効になりデータを放棄しなければならない場合には、Overrun ビットが設定されFIFO が満杯になった事を示します。これはすべてのFIFO 動作モードで同じように動作しますが、FIFO モードとトリガ・モードでは通常、データの損失を防止するためにFIFO が満杯になる前にデータが読み出されます。図7 を例にとると、Overrun ビットはDATA[32]が出力フィルタで有効になり、DATA[0]が放棄された時点で設定されます。このビットはFIFO が読み出された時点でクリアされます。これにより、FIFO が再び満杯の状態になるまで、Overrun ビットは設定されません。
D7 DATA_READY |
D6 SINGLE_TAP |
D5 DOUBLE_TAP |
D4 Activity |
D3 Inactivity |
D2 FREE_FALL |
D1 Watermark |
D0 Overrun |
トリガ・モード
トリガ・モードのときに、FIFO はストリーム・モードと同様の動作を開始し、満杯になるまでサンプルを収集した後で、新しいサンプルを保持するための余裕スペースを設けるために最も古いサンプルを放棄します。トリガ・イベントの発生後に、Samplesビットに設定された値に相当する数の最新のサンプルが、放棄されずに残った古いサンプルとともに保持されます。次に、FIFOはFIFO モードと同様の動作を開始し、満杯になるまで新しいサンプルのみを収集した後で、FIFO 内で余裕スペースが利用可能になるまで新しいサンプルを放棄します。サンプル値を15 とする場合のこの動作を図8 に示します。
トリガ・モードに対応するトリガ・イベントは、加速度センサーが持つ任意の割込みです。複数の割込みを選択した場合には、最初に発生した割込みがトリガ・イベントとして認識されます。設定は以下の手順で行います。まずトリガとして使用したい割込みをINT_SORUCE レジスタとINT_MAP レジスタで設定します(ADXL345 データシートを参照)。次にFIFO_CTL レジスタのTrigger ビットでトリガを掛ける割込みピンを選択します。0 の値でADXL345 のINT1が選択され、1 の値でINT2が選択されます。Trigger ビットで選択された割込みピンに設定されている割込みが発生すると、FIFO はSamples の値によって決定されたデータ数を保持した後で、FIFO が満杯になるまでデータの収集を続け、FIFO が満杯になった時点でFIFO モードの動作に遷移します。DATA_READY、Water Mark、Overrun の各割込みをトリガ・モードのトリガ・イベントとして使用しないことを推奨します。
トリガ割込みの発生後は、FIFO が空になるまで読出しを実行してください。FIFO がFIFO モードの動作を継続する場合には、ホスト・プロセッサが加速度センサーからデータを読み出す回数を最小限に抑えるためにSamples ビットの値を調整し、ウォーターマーク割込みを「FIFO モード」で説明するように設定する必要があります。これとは別の方法として、ウォーターマーク割込みをトリガ・イベントに使用していない割込みピンにマッピングして、トリガ・イベントが発生した後で初めてFIFO からデータを読み出すように設定することも可能です。その後で、FIFOをFIFOモードで使用する場合にはSamples ビットの値を調整し、ウォーターマーク割込みに応答するようにホスト・プロセッサを設定できます。
トリガ・イベントの後にFIFO 内のデータを移動する必要があるため、トリガ・イベントが発生した後でFIFO の読出しを開始するまでに少なくとも5 μs の時間が必要です。5 μs が経過した後でFIFO は最も古いサンプルを放棄し、保持されたサンプルをシフトします。
トリガ・イベント発生後に再度トリガ・イベントを認識できるようにするには、まずFIFO 内のデータセットを完全に読み出します。トリガ・イベントで発生したデータが必要なければ、FIFO内のデータを読み出す必要はありません。次に、FIFO_CTL レジスタでデバイスをバイパス・モードに設定し、FIFO 内に残っているすべてのデータを放棄します。FIFO をバイパス・モードに設定した後で再度FIFO_CTL レジスタの該当ビットを設定して、デバイスを再びトリガ・モードに戻します。この時点でデバイスは次のトリガ・イベントに応答するように設定されます。
FIFOのアプリケーション例
省電力化
FIFO は、ホスト・プロセッサが加速度センサーと通信する回数を低減できるので、特定のイベントが発生するまでデバイスを待機状態にする場合や、データロギングを行う場合にシステムの消費電力を抑えることができます。例としては、輸送する荷物に加わる衝撃のモニタリングや、万歩計(出力の更新がリアルタイムではなくて良い場合)などがあります。
アナログ・デバイセズのデジタル加速度センサーがすでに達成している超低消費電力を考慮すると、ホスト・プロセッサと他の周辺デバイスを適切にスリープ・モードに設定することが、最大の消費電力の節約になります。FIFO を利用することにより、加速度データを連続的に収集し、さらにウォーターマーク割込みを用いて、予め設定した値に基づいてFIFO が満杯の状態に近づいたときに限りホスト・プロセッサがウェークアップするようなシステムを構築できます。FIFO がデータを収集しており、プロセッサが必要とされない時間は、プロセッサをスリープ・モードに設定できるので、システムの消費電力が大幅に低減されます。さらに、他の周辺デバイスを使用している場合には、システムがこれらの動作を要求するまでオフにすることも可能です。
デジタル加速度センサーのFIFO の省電力機能の実例として、図9 にデータ収集と電流消費の関係を示します。ADXL345は、100 Hzの出力データレートに設定してあり、プロセッサーとしてアナログ・デバイセズのマイクロコントローラと接続しています。FIFOは30サンプルがFIFO内に格納された時点でウォーターマーク割込みが発生するように設定してあり、データの読出しはSPI で行っています。SPI のクロックは5MHz に設定してありますので、FIFO 内の30 サンプルの読出しには約500μs の時間がかかります。
図9 の例では、ホスト・プロセッサのウェークアップ、30 のデータ・サンプルの読出し、その後にスリープ・モードに戻る動作に約3.5 ms の時間がかかります。FIFO の利用による平均消費電流は、ホスト・プロセッサを全時間にわたりアクティブの状態にした場合に必要な11 mA と比較して、わずか460 μA に低減されます。これは、96%に近い省電力に相当します。
信号処理およびフィルタリング
ADXL345 は約3.9mg/LSB のスケール・ファクタを持っています。これは約0.25°の傾斜分解能に相当し、大部分のアプリケーションで十分な数値です。しかしながら、傾斜センシングといった一部のアプリケーションでは、さらに高い分解能とノイズの低減が要求される場合があります。こういった場合には、外部での信号処理が有効です。
低いノイズ、またはさらに高い分解能が望ましい場合には、フィルタリングまたはオーバーサンプリング技術を利用できます。この両方のケースでは、複数のデータを処理する必要があります。これらのアプリケーションでは、必要なデータが溜まるまでFIFO にデータを収集しておくことが可能であるため、処理に必要な量のデータが蓄えられるまでの間ホスト・プロセッサがデータを連続的に読み出して保存する必要がありません。必要なデータがすべてFIFO 内に収集された後で、サンプルのすべてをFIFOから読み込むことが可能であるため、ホスト・プロセッサの負担が軽減されます。
単純な平均化フィルタの場合には、平均化されたデータ数の平方根にほぼ等しいノイズの低減が期待されます。たとえば、100 個のデータを読み込んだ結果のノイズの実効値が1 LSB(rms)であった場合に、簡単な構成の4 サンプル平均化フィルタを使用すると、そのノイズが約0.5 LSB rms に低減されます。例えば、100Hz の出力データレートでADXL345 を使用して100 個のデータ・ポイントを取り込んだデータと、FIFO を使用して4 つごとにデータを読み込み平均化したデータを比較します。図10 に示すようにホスト・プロセッサは4 サンプルごとに一度だけデバイスからデータを読み出すだけで済みプロセッサのデータ読出しの周期は25 Hz に低減されます。またノイズの低減が確認できます。