ちょっとTea Time!? AD変換器受難・・・・ 2019.7.23

AD変換器との出会い

大学での研究室で使ったのが最初です。いまから30年以上も前のこと。
実験室ではそれほど早い現象を追いかけるわけでもなく、基本は紙と鉛筆でデータを記録して、
グラフ用紙に書くということ多かった(当時はエクセルはなかったかな。マルチプランなるものはあったような)。
ただ試験にはいると昼夜を問わず、記録が必要なことがあったりして、そういうときは
AD変換器は重宝した。なんせプログラムすればPCが自動でデータを取ってくれますから・・・
 ただ、当時はPC98全盛でAD変換器はその挿入用ボードとして存在していたわけだが、
10万円近くしたわけで、貧乏な研究室では各PCに1枚つづ実装できるわけもなく、
1枚の虎の子のボードをみんなで奪い合うように使っていた記憶があります。

ちょうど、こんなようなAD変換器をつかっていました。

下っ端の私にはADボードが回ってくることもなく、結局耐え切れずに小遣いをはたいてAD変換素子を
買ってボードを自作した覚えがあります。ちょうどそのときに買ったICが下の写真のADC80というやつです。
これは当時のAD変換器のスタンダード的な存在でした。ただ、1個2万円以上したことを覚えています。
高かったけど、自分専用のAD変換ボードができたことで、実験が随分やりやすくなりました。
 AD変換器をつかうと、PCで自動でデータを取れるというメリットが大きいですが、
それ以上に大量のデータが取れるので、実験のデータの見栄えがよくなります!(笑。


30年以上前ですがこれが当時のスタンダードなAD変換素子でした。
REF http://www.huiliu.jp/q297631130.html

当時のAD変換器は、それ自体が1つの機器として存在していましたが、いまとなってはAD変換器は単なるパーツの
一つであり、買ったとしても数100円で手に入ります(もっとも精度の高いものはいい値段がしますが)。
とくに近年では良く使うPICにはAD変換器も内蔵されているので、ちょっとしたアナログ値の計測には重宝します。
AD変換器が入ったICが200円程度で買えるわけですから、便利なものです。

分解能は12ビットは欲しいな〜

PIC16FやPIC18FなどのPICのAD変換器の分解能の多くは10ビットです。10ビットあれば、まあ不自由しないレベルではあります。
たとえばオーディオのボリュームに使う程度であれば十分過ぎるスペックです。
でも、ちょっと計測用途につかおうとしたらすこし役不足です。たとえば電圧計測だと10ビットだと、電圧分解能は5mvしかでません。
12ビットあれば1mV程度まで分解能を上げることができます。

高い分解能が必要な場合は外付けのAD変換器(たとえばMCP3208など)を使えば良いわけですが、
配線も面倒です。そういったニーズもあってかPIC18Fのシリーズの中には12ビット分解能をもつPICもあるようです。

PIC18F25K80をつかってみる!

秋月で12ビット分解能をもつPICがあるのを見つけて思わず購入してみました。
これがあれば、以前に検討したゲインフェーズアナライザももうすこし性能がでたでしょう。

で、夜の夜長にこれを動かしてみようとしたのが、受難の始まりでした。


12ビット分解能のAD変換器をもつPICがあります。

デバイスファイルが無い!

まずはPICをブレッドボードに差し込んで、必要な配線をおこなって動かしましょう。
まずは簡単に数行のAD変換のプログラムを書いて、コンパイル。

12ビットADをもつPIC18F25K80と12ビットDAをもつMCP4922をブレッドボードに組み込み。

そして、いつものPICKIT2で書き込もうとすると、該当するデバイスがない!
あちゃ〜。どうしよう・・・・。
 PICKIT2にはデバイスファイルなるものがあって、そこに使えるPICの型番が必要な情報とともに
登録してあります。比較的新しいものに更新しているはずだったのだけど、PIC18F25K80がありません。
いや、PIC18F25K80だけがないような感じです・・・・

PIC18F25K80がありません・・・

ということで、ネットの中でPIC18F25K80がつかえるデバイスファイルの捜索です。
デバイスファイルはそれ自体を作るソフトもあるので、個人で結構改編されている方がおられます。
探すこと約1時間。やはり世の中にはPIC18F25K80がPICKIT2で書き込めなくて困っておられるひとが
いるようで、BBSのQ&Qで対応しているデバイスファイルを紹介されている人がいました。
私もちゃっかり、そこからファイルを調達しました。

これです。 PIC18F25K80のあるデバイスファイル。

これで書き込める!

ダウンロードした新しいデバイスファイルに入れ替えて、PICKIT2を起動するとPIC18F25K80をみつけることができました。
これで、ブレッドボードの配線やプログラムの書いた苦労(というほどでもないですが)が報われそうです。


やっとPIC18F25K80がみつかりました!

あれ?おかしいな〜

プログラムではADで読み込んだ値をそのままDAに送り出しています。
そのため、入力のアナログ波形がそのまま、DAから出力されればいいわけですが、
とてもおかしな現象です。


入力と出力が相似になってないのはなぜ?

なにが悪いのか、ハードをチェックをしたりプログラムをチェックしたり2時間ほど・・・
ほんとうは、べつのことをやりたかったのだけど、入り口に受難が待ち受けていました。

わかったこと!

結局わかったこととしての結論は、プログラムの書き方の問題でした。
AD変換器をセットアップするときに、その変換クロックを指定しますがPICの動作クロックから
明示的に示す必要があります。そのため、今回は32MHzで動かしていたので、
マニュアルからクロック32MHzでの最大値として32分割を指定していました。

setup_oscillator(OSC_8MHZ | OSC_PLL_ON); ← 8MHzの4倍の32MHzで動作
setup_adc(ADC_CLOCK_DIV_32); ← この書き方が問題。

この記述がだめだったわけです。色々といじりましたが、
結論として下記の記述とすることで期待する結果になりました。

setup_oscillator(OSC_8MHZ | OSC_PLL_ON); ← 8MHzの4倍の32MHzで動作
setup_adc(ADC_CLOCK_INTERNAL); ← この書き方に変更

要は、AD変換はPICの内部クロックにまかせよう!というわけです。これならば間違いは
ないということですね。

期待する結果になりました。


ふう!ここまで本当は最初から30分程度でくるつもりが、数時間かかってしまいました。
眠たいよ〜。

最後の力を絞って!
やりったかったことは12Bitの分解能が得られていることの確認です。
現在のセッティングは0-5Vを12Bit分解(4096分割)しているので、
波形の振幅を小さくして、どのように観測されるかを確認しておきます。

発振器の振幅出力が絞れないので、70mV程度の両振幅での評価になっています。
70mVだと12bit分解能では約4096÷5000×70=57.3ですから57分割程度になります。
このくらいあれば、結構滑らかに見えますね。

12ビット分解能での出力です(PIC18F25K80+MCP4922)

これを10ビットのADとDAにすると57/4=14分解に低下します。
実際に10ビット分解能のPIC18F26K22とMCP4912に入れかえてみました。


10ビット分解能での出力です(PIC18F26K22+MCP4912)

こうやって比較すると12ビットと10ビット分解では細かい信号での
再現性があきらかに違いますね。

ふう〜。いったい今何時なんだろう??????寝よ!!!
ちょっとTea Timeのつもりが、居酒屋に入って呑みつぶれた気分(爆。

Teatime御代わり〜 2019.7.24

できるだけ分解能の高いAD変換も欲しかったので、こんなパーツも入手していたのに
気づきました。2夜連続でのTeaTimeです(笑。


MCP3424。18Bitの分解能をもつAD変換器です。

ただ、こいつは逐次変換ではなくΔΣ方式になっています。18ビットの分解能を得るには
変換速度は毎秒3.75回となるので、まあテスター並みの遅さです。
それだけ遅いのでインターフェイスもI2Cになっています。他の高速なAD変換器は大概がSPIになっている
のと比べると対称的です。
 ただ速度が遅くても分解能が欲しいときはあるので、これも一度使ってみましょう。

まずは変換基板に搭載。後ろ半分は切断しておけばよかった。

ブレッドボードに組み込み、プログラミング!あれ?

変換速度が遅いのと、分解能が高いこともありオシロでみてもよくわからないので、
LCDをとりつけて数値で見ることにしました。
で、必要な部品をひょいひょいと取り付けでfす。

で、まずは液晶表示のプロgラムを組んでコンパイルをかけますが、なぜかエラーがでてしまいます。
エラーの内容はPIN_A4が見つからない・・・・。PICのI/Oの中の1本がない!と言ってくれています。
なんで、A4だけがないんだよ〜〜 やっぱり受難は続いていたんだ!!!


こんな感じで動作のためにパーツを組みあわせ!

PIN_A4が本当にない?

 最初は、プログラムのミスとか変に半角文字が紛れ込んでコンパイラがエラーを出しているのかと思いましたが、
何度修正しても、相変わらずPIN_A4がない!といってきます。
 で、念のためPIC18F25K80のデータシートを確認したら、本当にPIN_A4fがありません!(驚


PIC18F25K80にはPIN_A4がありません!こりゃ注意しないといけないです。

他の28PinのPIN_A4のあるところにはVDDCORE/VCAPとあり、どうやらパスコンを接続しなさいとなっているようです。
こりゃわからなかったな〜。やっぱりデータシートは最初に確認しなくっちゃ!反省です。


パスコンを取り付ける端子になっていました。

動いた!
 原因がわかれば、配線を入れ替えて再度コンパイル。今回はあっさりと通過しました。
早速動かしてみましょう!
 実験用お電源を2V丁度に設定して、MCP3424とテスターに入力して両者の比較です。
MCP3424は内部に2.048Vの基準電圧源をもっているので、得られた値から直接的に入力電圧に
換算することができます。

 テスターとの比較では完全に一致しました。内部の基準電圧源の精度も高いようです。

MCP3424の出力は2.000Vです。


テスターの表示も2.000Vです。


入力を短絡した場合の表示です。0.000031Vとなっています。

MCP3424は18ビットの分解能で正負2.048Vの範囲で測定できます。
分解能とすれば約15.6uVです。これを使えばかなり分解能高く測定ができることがわかりました。遅いけど・・・・

う〜、眠たい!もう寝よ。

(おしまい)