1

ATmega 328ベースの製品に波形をキャプチャする機能を追加しようとしていますが、A/D変換を行うときのATmega328の応答性の詳細を見つけることができませんでした。コードはArduinoでプロトタイプ化されていますが、完了するとカスタムボードに移行されます。

私の計画では、合計期間(通常、ローカルACライン周波数に基づいて16〜20ミリ秒)を設定し、その間隔中に1つのピンを50〜100回のオーダーでサンプリングします。ATmega 328は、その数の変換を連続して確実に実行できますか?変換あたりの最小間隔は16ms/100=160usです。

誰かがコードを見る必要がある場合は、コード例を追加できますが、今のところ、複数の連続するA/D変換間の最小期間についてもっと心配しています。

4

1 に答える 1

4

最も簡単な方法は、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機能を強制的に使用する人はいません。いくつかの利用可能な選択肢:

  • analogReadand/orのオーバーヘッドを捨てることができます
  • 必要に応じて ADC を再構成できます (8 ビットのみ、より高い ADC クロック) および/または
  • 連続サンプリングなどの「高度な」モードを使用できます (ADC の「フリーランニング モード」9 または
  • 割り込みを使用して変換をトリガーすることもできます。

もちろん、これらの選択はすべて、知識と時間の予算に大きく依存します。:-)

于 2012-05-01T07:23:43.540 に答える