ATmarquinoでMhysicalna(身近な)コンピューティング 差動入力なら、、、すっごい良くなった [ATmarquino Arduino]
※やけに続くよこのシリーズ。すでにArduinoの話ではなくなって来ている気もするけれど。
またまたのりたんさんのアドバイスに従って従来のシングルエンド入力ではなく、ディファレンシャル(差動)入力としてLM35DZの出力を受ける事とします。
イメージとしては2枚目の回路図の様になります。アナログ入力の0番は従来通りLM35DZのVOUTに接続されますが、アナログ入力の1番はLM35DZのGND端子と接続します。
また、従来LM35DZのGND端子とAVRのGND端子は共通でしたが、間にダイオード(ショットキバリアダイオード)を挟む事でGNDレベルから若干浮かしている状態です。どれ位浮いているかはLM35DZに流れる電流に依存しますが、実測では138mV程度でした。
ここにダイオードを挟むことでAD入力のダイナミックレンジが小さくなってしまいますが、例えば仮に400mV位浮いたとしても計測範囲が400mV~1100mV、つまり0℃~70℃までの範囲となる訳です。今までは0℃~100℃の計測範囲でしたが、まあ室温が70℃も上がってしまったらそこにいる人はみんな死んでしまいますので、70℃でも十分でしょう。
差動入力のメリットは、今回の様にマイコン内部の共通インピーダンスで発生したオフセットエラーをキャンセルして計測できる点です。アナログ入力0も、アナログ入力1も同じだけGNDレベルから浮いているので、引き算すればそれはキャンセルされ、純粋に入力信号そのものを計測できます。
デメリットは回路が高級?になってしまう点ですね。貴重なAD入力を2つ使って実現している訳ですから。
実際に計測してみた所、例えばアナログ入力の0番と1番間の電圧が181.7mVであれば、変な補正も入れずにシリアルの出力も181と表示しています。※小数点以下は切り捨てとなってしまう為。
いやー良いですね。絶大な効果があります。ちなみにこれだけ計測精度を出している訳ですが、LM35DZの精度自体は25℃で±0.6℃なのですでにオーバースペックとなっています(笑)。
今回のスケッチの一部を紹介しておきます。
要するに前回のADを読む関数で、アナログ入力0番からアナログ入力1番を引き算して、その値を返しているだけです。一々LEDを消灯する事も行っていません。
是非のりたんさんが愛用しているフリースケールのマイコンも電子工作のパートナーとして思い出してあげて下さい。
イメージとしては2枚目の回路図の様になります。アナログ入力の0番は従来通りLM35DZのVOUTに接続されますが、アナログ入力の1番はLM35DZのGND端子と接続します。
また、従来LM35DZのGND端子とAVRのGND端子は共通でしたが、間にダイオード(ショットキバリアダイオード)を挟む事でGNDレベルから若干浮かしている状態です。どれ位浮いているかはLM35DZに流れる電流に依存しますが、実測では138mV程度でした。
ここにダイオードを挟むことでAD入力のダイナミックレンジが小さくなってしまいますが、例えば仮に400mV位浮いたとしても計測範囲が400mV~1100mV、つまり0℃~70℃までの範囲となる訳です。今までは0℃~100℃の計測範囲でしたが、まあ室温が70℃も上がってしまったらそこにいる人はみんな死んでしまいますので、70℃でも十分でしょう。
差動入力のメリットは、今回の様にマイコン内部の共通インピーダンスで発生したオフセットエラーをキャンセルして計測できる点です。アナログ入力0も、アナログ入力1も同じだけGNDレベルから浮いているので、引き算すればそれはキャンセルされ、純粋に入力信号そのものを計測できます。
デメリットは回路が高級?になってしまう点ですね。貴重なAD入力を2つ使って実現している訳ですから。
実際に計測してみた所、例えばアナログ入力の0番と1番間の電圧が181.7mVであれば、変な補正も入れずにシリアルの出力も181と表示しています。※小数点以下は切り捨てとなってしまう為。
いやー良いですね。絶大な効果があります。ちなみにこれだけ計測精度を出している訳ですが、LM35DZの精度自体は25℃で±0.6℃なのですでにオーバースペックとなっています(笑)。
今回のスケッチの一部を紹介しておきます。
static unsigned short ADRead( void ) { unsigned short ad; ad = analogRead( 0 ) - analogRead( 1 ); //A/Dコンバーターの変換値を取得する return ad; }
要するに前回のADを読む関数で、アナログ入力0番からアナログ入力1番を引き算して、その値を返しているだけです。一々LEDを消灯する事も行っていません。
是非のりたんさんが愛用しているフリースケールのマイコンも電子工作のパートナーとして思い出してあげて下さい。
HCS08 Unleashed: Designer's Guide to the HCS08 Microcontrollers
- 作者: Fabio Pereira
- 出版社/メーカー: Booksurge Llc
- 発売日: 2007/11/13
- メディア: ペーパーバック
試しながら学ぶHC08マイコン入門―ミニマイコン扇風機を題材にした電子工作とマイコン・プログラミング (SkiLL up mycomputerシリーズ)
- 作者: 川野 亮輔
- 出版社/メーカー: CQ出版
- 発売日: 2008/04
- メディア: 単行本
2009-03-31 22:44
nice!(0)
コメント(3)
トラックバック(0)
おおっ、これはすごい。まるでドラマのような感動のエンディングですね。
色々なマイコンで汎用的に使えるテクニックなところもすごいです。それにしても、ちゃんと追求して解決しちゃうところがすごいです。とても楽しませていただきました。ありがとうございます。
by Sim (2009-04-01 00:33)
いやもう、なにもかも、あれもそれも、あのお方のお蔭ですから。
北の方に足を向けて寝れません。
by hamayan (2009-04-01 01:06)
出来ましたですね。
A/D入力の上限が1Vになっているのに気が付きませんでした。整流用シリコンダイオードなんか使ったら、ダイナミックレンジがなくなっちゃうところでした。危ない危ない。
私の方は、電流を流すタイミングとA/D変換するタイミングを同期させるほどCPUに余裕が無いので、悩ましいところです。さて、どうするかな。
by noritan (2009-04-01 02:59)