コンデンサとデジタルArduinoピンを使用した単純なADCの代替品

Arduino UNOを使って、1ダースのポテンショメータを測定したいのですが。残念ながら、UNOにはアナログピンが6本しかありませんが、デジタルピンは約12本あります。

この方法でデジタルピンでアナログ値を効果的に測定できますか?

  1. ポテンショメータをコンデンサと並列に配線します。
  2. 1つの接点をArduinoのデジタルピンに接続します。
  3. コンデンサが完全に充電されるまでこのピンをHIGHに書き込みます。
  4. ピンをLOWに設定してからpulseIn()を使用して、コンデンサがポテンショメータを越えて放電し、ピンの電圧が5Vから0になるまでの時間を測定します。この時間は抵抗に比例する必要があります鍋の。例えば抵抗が小さいとキャップの放電が早くなり、抵抗が大きいとキャップの放電が遅くなります。
4
はい、古いPCのジョイスティックはこのテクニックを使用していました。
追加された 著者 jns,
前述のように外部ADCを使用するか、複数のアナログ入力を単一のA/D入力に接続するためのアナログマルチプレクサを使用します。
追加された 著者 David Towers,
前述のように外部ADCを使用するか、複数のアナログ入力を単一のA/D入力に接続するためのアナログマルチプレクサを使用します。
追加された 著者 David Towers,

6 答え

私はそれに頼らないでしょう。うまくいくかもしれませんが、浮遊容量や時間と電圧値の読み取りに影響を与えるその他の要因もあります。理論的には温度、時間、その他さまざまな理由で変化し、設定を無効にすることがあります。それはまた放電の正確な時間を知ることに頼る。このような時間を保つことは、どのマイクロコントローラーでも正確に行うのが非常に難しいことです。

たとえば、入力が1.7Vになったときに low と表示されるように、これを機能させて調整します。しかし、1日後(または数分後)に戻ってくると、その1.7Vのしきい値は1.6Vになります。あなたがしたキャリブレーションは無効であり、あなたは偽の結果を得ているでしょう。

代わりに私がすることは、SPIまたは他のデジタルラインを介して外部ADCを読み取るためにデジタルピンを使用することです。これには、より信頼性が高く、(ほとんどの場合)より正確になるという利点があります。

だからあなたの質問に答えるために、それは理論的に可能です。それは設計するのが難しい回路になるでしょう、あなたがコンデンサを充電している間あなたはモニターされているラインを切断する必要があるでしょう、しかしそれはされることができました。しかし、それはほとんど信頼できないでしょう。

3
追加された

私はそれに頼らないでしょう。うまくいくかもしれませんが、浮遊容量や時間と電圧値の読み取りに影響を与えるその他の要因もあります。理論的には温度、時間、その他さまざまな理由で変化し、設定を無効にすることがあります。それはまた放電の正確な時間を知ることに頼る。このような時間を保つことは、どのマイクロコントローラーでも正確に行うのが非常に難しいことです。

たとえば、入力が1.7Vになったときに low と表示されるように、これを機能させて調整します。しかし、1日後(または数分後)に戻ってくると、その1.7Vのしきい値は1.6Vになります。あなたがしたキャリブレーションは無効であり、あなたは偽の結果を得ているでしょう。

代わりに私がすることは、SPIまたは他のデジタルラインを介して外部ADCを読み取るためにデジタルピンを使用することです。これには、より信頼性が高く、(ほとんどの場合)より正確になるという利点があります。

だからあなたの質問に答えるために、それは理論的に可能です。それは設計するのが難しい回路になるでしょう、あなたがコンデンサを充電している間あなたはモニターされているラインを切断する必要があるでしょう、しかしそれはされることができました。しかし、それはほとんど信頼できないでしょう。

3
追加された

最適なデザインは、ポットの読み取り頻度、時間の経過に伴う値の安定度によって異なります(たとえば、今日ポットを特定の位置に設定した場合、明日やや上または下に読み取る場合は注意してください)そして、ワイパー抵抗が全体的なポット抵抗と比較してどれだけ確実に小さいかがわかります。

ある程度の抵抗を持つレオスタットとしてのポットの配線(片端切断)は直列で、キャップを放電してから、ポット+抵抗コンボを通してキャップがVDDまで充電するのにかかる時間を計ることは非常に古い技術です。オリジナルのPongマシンとそれ以降の多くのゲームマシン。ポンよりも前のオデッセイが同じテクニックを使ったかどうかはわかりません。この技術の最大の問題点は、長期安定性が悪く、ポットが古くなったり汚れたりすると、ワイパー抵抗の変動が厄介なコントロール応答を引き起こす可能性があることです。

もう1つの方法は、ワイパー電圧をレールからある程度の距離に保つために、おそらくいくつかの抵抗を使ってVDDとVSSの間にポットの両端を配線し、次にコンパレータを使ってポット電圧が上限電圧より高いか低いかを検出するVSSからVDDまでランプする基準電圧。理想的には、定電流源を使ってコンデンサを充電するべきですが、VDDやVSSに近づきすぎない場合は、抵抗でさえも「十分に線形」である可能性があります。

Atari 2600の所有者が証明できるように、ワイパー抵抗の変化の結果としてレオスタットスタイルのコントローラーはしばらくすると「不安定」になるので、私は最初のアプローチよりも2番目のアプローチが好きです。 2番目の方法では、6ポットを読み取るのに2つのクワッドコンパレータチップが必要ですが、前者では必要ありません。

2
追加された

最適なデザインは、ポットの読み取り頻度、時間の経過に伴う値の安定度によって異なります(たとえば、今日ポットを特定の位置に設定した場合、明日やや上または下に読み取る場合は注意してください)そして、ワイパー抵抗が全体的なポット抵抗と比較してどれだけ確実に小さいかがわかります。

ある程度の抵抗を持つレオスタットとしてのポットの配線(片端切断)は直列で、キャップを放電してから、ポット+抵抗コンボを通してキャップがVDDまで充電するのにかかる時間を計ることは非常に古い技術です。オリジナルのPongマシンとそれ以降の多くのゲームマシン。ポンよりも前のオデッセイが同じテクニックを使ったかどうかはわかりません。この技術の最大の問題点は、長期安定性が悪く、ポットが古くなったり汚れたりすると、ワイパー抵抗の変動が厄介なコントロール応答を引き起こす可能性があることです。

もう1つの方法は、ワイパー電圧をレールからある程度の距離に保つために、おそらくいくつかの抵抗を使ってVDDとVSSの間にポットの両端を配線し、次にコンパレータを使ってポット電圧が上限電圧より高いか低いかを検出するVSSからVDDまでランプする基準電圧。理想的には、定電流源を使ってコンデンサを充電するべきですが、VDDやVSSに近づきすぎない場合は、抵抗でさえも「十分に線形」である可能性があります。

Atari 2600の所有者が証明できるように、ワイパー抵抗の変化の結果としてレオスタットスタイルのコントローラーはしばらくすると「不安定」になるので、私は最初のアプローチよりも2番目のアプローチが好きです。 2番目の方法では、6ポットを読み取るのに2つのクワッドコンパレータチップが必要ですが、前者では必要ありません。

2
追加された

定電流でキャップを放電し、実際のコンパレータを使用することができれば、これはスロープベースのA/Dによく似ています。サーミスタを扱う一般的な方法です。キャップの大きさ、およびタイマーの速度によっては、この方法ではオンボードA/Dよりも優れた分解能が得られます。私は本物のコンパレータをお勧めします。

2
追加された

定電流でキャップを放電し、実際のコンパレータを使用することができれば、これはスロープベースのA/Dによく似ています。サーミスタを扱う一般的な方法です。キャップの大きさ、およびタイマーの速度によっては、この方法ではオンボードA/Dよりも優れた分解能が得られます。私は本物のコンパレータをお勧めします。

2
追加された