スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


-------- --:-- スポンサー広告
AVR ATtiny2313 で AD変換 (その4)
⑦ 改良と精度測定
内蔵ハードウェアタイマー利用方式のプログラムも作り実際に動作比較してみたが、取得タイマカウント値の変動がやや大きく(内蔵オシレータ使用時)、精度的にはいまひとつ。調整次第で改善できる可能性はあるが、検出時間を短くしたい場合や電圧比較コンデンサを小さくしたい場合以外に敢えてこの方式を選択する理由も無いように思う。

ということで、これまで実験を重ねてきた 「ちょびちょび充電方式」 をベースに改良をはかってみた。

【回路】
基本的には 前記事掲載回路と同じ。サンプリング数を上げるため C2(電圧比較コンデンサ)を 積セラ 0.1μF ポリエステルフィルム 0.1μF に変更。

【プログラム】
 ・近似式次数を3次から2次に強引に変更
 ・割り込みの使用を中止
 ・変数その他のリストラ
・・・などによりFlash書込ファイルサイズを約20%縮小した。改良版プログラムは こちら 。ただし、当方のマイコン給電圧と使用コンデンサで調整したものなので、異なる環境においては数値定数の補正が必須となる

【精度測定】
実測結果は下表の通り。雰囲気温度20℃、マイコンはブレッドボード上に配置配線、給電 DC5.05V (USBバスパワー利用)。

ADコンバータ 性能測定表

表示比較用テスターはデジタルテスターを使用。決して高級品でないのでそれ自体にも相当の誤差があるだろうが、それを見込んでもまずまずの値ではないかと思う。ただ現状回路では変動幅が小さくそこそこの安定性を示している一方で、雰囲気温度やマイコン電源電圧変化による表示誤差がやや大きい。実用的には温度係数の小さいコンデンサや外部発振子を用いるべきだろう。

⑧応用測定器の製作 → (その5)へ続く。

変更履歴:
08/12/19 C2コンデンサ変更に伴い、記事・性能測定表・プログラム更新
08/12/26 記事更新
09/1/23 方式名称決定(笑)

スポンサーサイト

タグ : マイコン ADC コンバータ BASCOM AVR 計測 電子工作

2008-12-17 17:29 マイコン応用
AVR ATtiny2313 で AD変換 (その3)
⑤ プログラムの作成
BASCOM-AVR を使用してプログラムを作成/コンパイルする。電圧の算出は先に取得した近似式に回数を代入するだけで容易にできるだろうと高をくくっていたが、何と BASCOM-AVR の計算式は2つの定数または変数の演算のみしかできない事がわかり、愕然。仕方ないので細々分割して計算式を作成するも、1行で済む予定が15行になるとは全く予想外だった。さらに面倒なのは変数の値がこの分割した数式をくぐるごとに非常に大きくなったり小さくなったりするため変数型式の選択がシビアで、これを不適切にすると最終表示が全く当ての外れた値になってしまう。かといって変数型式をリッチにすると急にメモリーを食い始めるので凄く厄介。なので使い終わった変数は何度もリサイクル利用(涙)。

他にもPC用プログラム作成では味わった事のない数々の不自由さと格闘しながら、それでも何とか目的の表示を行うものができた。プログラムはこちら。表示電圧値は近似式算出値に若干の補正値を掛け調整した(プログラム49~51行目)。

⑥ 動作状況と今後
下の写真は単3乾電池(ややへたれ気味)を測定電圧にしたときのLCD表示状況。TはON/OFF繰り返し充電回数、Vは算出電圧値、その後ろは 0.4~2.0V を測定範囲とした場合のパーセント。

ADコンバータ LCD表示状況

現状ではサンプリング数が少なく分解能が粗いためT値が1つ増すごとのV値上昇は大きめであるが、T値自体の変動は意外と小さく、アナログコンパレータの精度の良さがうかがい知れる。 可変電源出力を測定した場合もまずまず良好な表示だった。充電カーブ特性により電圧の高い領域ではかなり表示精度が上がってくる。

ともあれひとまずは完成をみて、この方式によるAD変換表示器も実現可能であることが実証できた。今後検証すべき点としては次のことが挙げられる。

【高精度化】
表示サイクルから見ておそらく、電圧比較コンデンサの容量は今回の10倍の0.1μFでも許容できるだろう。サンプリング数を10倍にできればかなりの高精度が期待できる。さらに外部発振子利用によるクロックアップも有効な手段となりうるだろう。

【5Vの直接測定】
結局リニアではなく「多項式近似」用いて電圧算出するのであれば、2Vと言わず5Vまで直接測定することはできないか。

【内蔵ハードウェアタイマー方式との比較】
それぞれどんなメリット・デメリットがあるか。

【BASCOMでコンパイルすることのメリット・デメリット】
Cコンパイラで作成する場合との比較。特に数式記載について。

⑦ 改良と精度測定 → (その4)へ続く。

変更履歴:
08/12/06 プログラム更新
08/12/14 プログラム更新

タグ : マイコン ADC コンバータ BASCOM AVR 計測 電子工作

2008-12-05 04:09 マイコン応用
AVR ATtiny2313 で AD変換 (その2)
コンデンサーの充電実験を行ってふいに気がついたのは、Application Note のように内蔵ハードウェアタイマーを用いなくても、ON/OFF繰り返し充電の回数をカウントしていけば同じことができるのではないか と言うこと。先に検証したとおり、良くも悪くもその電圧変化カーブは類似していてそれについて言えば差違はない。ただ時間的に後者は20倍かかるので高速な処理には向かないだろうが、LCD表示などを目的にした場合は十分なのではないか。アルゴリズムの簡易性で言えばむしろ後者の方に分があるようにも思うがどうか。折角思いついたので諸々の検証を含めこの方法で実験を進めることにした。ダメならまた少し戻るだけのこと。とりあえず行き着くところまで行ってみる。

③ 近似式の取得
オシロのサンプリングデータを取込、EXCELで開いて不要データをトリミングし、時間値からON/OFF繰り返し充電の回数を算出する。その値を元に充電圧との関係を散布図で表示させ、グラフの近似曲線作成機能を利用して近似式を導き出す。完全なリニアではないので誤差の大きくなる「線形近似」は早々に諦め、曲線と見なして「多項式近似」を試す。次数2は・・・いまひとつ。次数3は・・・下図のとおりいい感じ。このセラコンで2V充電するには130回程度ON/OFFを繰り返せばいいということも解る。
graph01

④ 表示回路の作成
安価なLCDモジュール SC1602BS*B を使ってON/OFF繰り返し充電回数と算出電圧を表示させる回路を作成した。回路図は下の通り。なおこの図にはマイコンへのプログラム書込用配線は記載していない。
ADコンバータ 回路図
・今回の実験ではC2=0.01μF(セラコン)。充放電についてはいろいろ試行錯誤した結果、PD6から行うことにした。
・クロックはとりあえず内蔵オシレータ(RC発振)を利用するが、将来精度向上のため外部発振子を付ける可能性があるのでPA0及びPA1は空けてある。
・被測定電圧入力を DC0.4~2.0V としているのは、あわよくば将来1~5V電圧入力あるいは4~20mA電流入力に対応させるための布石。
・R1は100KΩぐらいが適当。意外と重要。
・C3は安定用。とりあえず10μFで効果有り。
・VRは液晶照度調整用。手持ちがなければダイオードを1本突っ込んでおくと何とかなる。
・LCDへの電源供給がマイコン起動前にされる回路にしておく。マイコン起動後だと何も表示されない。

プログラムは BASCOM-AVR で作成。しかし案の定すんなりとはいかず・・・

→ (その3)へ続く。

変更履歴:
08/12/04 回路更新
08/12/06 追記
08/12/17 回路更新・記事更新

タグ : マイコン ADC コンバータ BASCOM AVR 計測 電子工作

2008-12-03 15:58 マイコン応用
AVR ATtiny2313 で AD変換 (その1)
プラントなどの分野では現場のセンサーユニットから伝送される 4~20mA や 1~5V といった範囲出力を指示調節計で受信し、AD変換して換算値表示と制御出力するやり方が従来より広く行われている。

ワンチップマイコンでも AD変換機能があるものを使えば同様のことは難なくできるであろうが、残念ながら手持ちの安価なAVRマイコン ATtiny2313 にはその機能がない。ただWEBで調べてみるとアナログコンパレータ(比較器)機能を利用すると実現可能との資料があり、実験を兼ね実際に試作してみることにした。

① 技術的根拠と方法
試作のきっかけとなった技術資料は以下の3点。

 「 シンプルなA-Dコンバータ 」 by ChaNさん
 「 Low Cost A/D Converter 」 Atmel Application Note 
 「 8-bit Precision A/D Converter 」 Atmel Application Note

記載の要点をまとめると、次のようになる。

・コンデンサー充電圧が対象電圧以上になるまでの時間を、アナログコンパレータと内部ハードウェアタイマを利用して測定することで対象電圧値を算出することができる。
・コンデンサーはマイコンの内部プルアップ抵抗を介して充電させると、0~2V辺りの充電圧は充電時間に対してそこそこリニアな値を示す。

これらを踏まえ実験へ。

② コンデンサーの充電実験
ATtiny2313 のポートB・0ビットを入力に設定、内部プルアップ抵抗を有効にし、GNDとの間に接続したコンデンサーの両端電圧をオシロスコープでモニターした。コンデンサーは種類と容量をいろいろ変えて実験した。下はセラミックコンデンサ0.01μFを充電した際のオシログラフ。

セラコン充電曲線
X軸:時間(50μsec/grid)  Y軸:電圧(500mV/grid)

ううむ、比較的リニアとはいってもそれなりのカーブだ。このまま直線近似して利用すると誤差は大きい。それなら連続ではなく ON/OFF 繰り返しで充電させたら多少改善するだろうか、やってみた。下はその時のオシログラフ。

セラコン充電曲線(ON/OFF制御)
X軸:時間(1msec/grid)  Y軸:電圧(500mV/grid)

充電時間に20倍かかるようになっただけでそれほどリニアにはなっていない。やはりそう都合良くはいかない(笑)。その後他の簡易で効果的な方法も思いつかず、仕方ないのでこのカーブをいかに近似化して利用するかを考えることにした。

しかし、この実験であることに気がつく。 → (その2)へ続く。

タグ : マイコン ADC コンバータ BASCOM AVR 計測 電子工作

2008-12-02 18:06 マイコン応用
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。