最も簡単な方法は、Arduino スクリプトを作成し、自分でタイミング ベンチマークを実行することです。
もう 1 つの方法 (仕様に従ってこれを行う) では、関係するレベルごとにさらに入力が必要になります。
最下位レベルは ATmega328 チップです。ADC部分のドキュメントには次のように書かれています:
デフォルトでは、逐次比較回路で最大の分解能を得るには、50 kHz ~ 200 kHz の入力クロック周波数が必要です。10 ビットより低い分解能が必要な場合は、ADC への入力クロック周波数を 200 kHz より高くして、より高いサンプル レートを得ることができます。
ATMega のクロックが 16 MHz であると仮定すると、ADC クロックに使用できる唯一のプリスケーラ値は 128 であり、10 ビット分解能の場合は 125 kHz です。8 ビットの解像度で解決できる場合は、プリスケーラ値 64 (250kHz) を使用できます。
次:ドキュメントは言う:
通常の変換には 13 ADC クロック サイクルかかります。ADC がオンになった (ADCSRA の ADEN がセットされた) 後の最初の変換では、アナログ回路を初期化するために 25 ADC クロック サイクルかかります。
したがって、125kHz の ADC クロックを使用すると、これは「単一変換」モードで ~9600Hz のサンプル レートを意味します。これはサンプルあたり 104µs です。これらはArduinoのデフォルトです。
160µs の要件と比較すると、これは良いようです。
BUT : これまでのところ、変換のみが考慮されています。データをどこかに転送する必要があります。また、Arduino distanalogRead()
のファイルでわかるように、Arduino関数にはオーバーヘッドがありますwiring_analog.c
。
このオーバーヘッドは大きすぎる可能性があります。自分でテストする必要があります。
一方、Arduino のanalogRead
機能を強制的に使用する人はいません。いくつかの利用可能な選択肢:
analogRead
and/orのオーバーヘッドを捨てることができます
- 必要に応じて ADC を再構成できます (8 ビットのみ、より高い ADC クロック) および/または
- 連続サンプリングなどの「高度な」モードを使用できます (ADC の「フリーランニング モード」9 または
- 割り込みを使用して変換をトリガーすることもできます。
もちろん、これらの選択はすべて、知識と時間の予算に大きく依存します。:-)