
投稿日 2014/07/01
CQ出版社のトライアルシリーズ「パソコン計測USBマイコン基板」に付属の24ビットADコンバータ&PICマイコン搭載基板にLCDを接続し、単体で使える高精度電圧計に仕立ててみました。

「パソコン計測USBマイコン基板」と
付属のAD7793 ADコンバータ搭載基板
基板には24ビットΔΣ型ADコンバータ AD7793と、その制御にPIC 18F14K50 USBマイコンが搭載されており、高精度な計測ができるようになっています。
本来USBでPCと接続し、PC側でコンソールソフト(USB-ADC General Console)を動かして設定から計測までを行うのですが、これを単なる電圧計のような用途で使うには少々不便です。(データロガーのような用途ならよいのですが)
そこで搭載のPIC 18F14K50にLCD(20 x 4)と操作ボタンを接続し、単体で(PCをつながなくても)動く電圧計に仕立てました。

写真1: AD7793の内部温度を計測中 26.71℃
サンプリングは16.7Hz固定
チャネル、バイアス、バッファの有無、PGAのゲイン、
ユニポーラ/バイポーラ、電流源等がボタン操作で設定できる
「パソコン計測USBマイコン基板」付属のCD-ROMにはPICファームウェアのソースコードが入っていますので参考になりますが、部分的に使わせていただいたものの、ほとんど新たにコーディングした形になりました。また、本ではAD7793を詳しく説明している訳ではないので、AD7793のデータシートを一通り読んでおく必要がありました。
高精度電圧計の仕様
入力チャネルの指定: Ch1,2,3から選ぶ
入力: ユニポーラ、バイポーラ入力の指定
PGA: プログラマブル・ゲイン・アンプのゲイン
キャリブレーション: 内部キャリブレーションのみ 電源投入時と設定変更時
サンプリング周期:16.7Hz固定
表示周期: 1s固定
表示:設定変更中は計測をホールドし、オフセットレジスタとフルスケールレジスタの値を表示
ID:オープニングメッセージで表示(使用したAD7793のIDは16進で4Bでした。
入力チャネルはAIN1(基板の端に端子が出ている)のみでもよいのですが、一応AIN2, AIN3も選べるようにしました。
サンプリング周波数は16.7Hz固定です。16.7Hzが/60Hzノイズの除去能力の高いフィルタが選ばれるので有利です。固定にした理由はメモリ容量不足のためです。
表示周期は1秒間隔固定です。*が秒間隔で点滅して表示データの更新を示します。
2つのボタン(RED, ORANGE)で動作パラメータを変更できます。
LCDとボタンを増設する
「パソコン計測USBマイコン基板」はAD7793をSPIでインターフェースしています。PIC 18F14K50はSPIとI2CがMMSPとうくくりで一体になっており信号ピンが共通です。このためI2CのLCDは使えません。
そこで一般の4(8)ビットパラレル式のLCD(SC2004CSWB 20 x 4 3.3V)をつなぐことにしました。
このLCDはRS, E, D4, D5, D6, D7の計6本(WはGND固定)のGPIOが必要です。
この6本には、RB5, RB7, RC1, RC2, RC3, RC4を割り付けました。これらはすべて出力ピンです。
あと使えるGPIOはRC5とRA3ですが、RA3はMCLRと共通なのでMCLRによるリセットはあきらめRA3に割り当てます。MCLRを使わない代わりに電源ON時に確実にリセットがかかるようにCONFIGを設定しておきます。
RA3にREDボタン、RC5にORANGEボタンを割り付けました。これらは当然入力ピンに設定します。10KΩでプルアップしました。
ボタンによる動作パラメータの設定
ボタンはREDとORANGEの2つしかありません。(余っているGPIOが無い)
このためREDボタンで設定項目を選び、ORENGEでその項目の値を選択する形としました。ちょっと面倒ですが仕方ありません。
ほとんどの設定項目はLCD上に表示されているので、REDボタンを押すと変更できる項目にカーソルが移動してブリンクするようにしました。
最初REDボタンを押すと計測をホールドし、オフセットレジスタ(OS)とフルスケールレジスタ(FS)を表示します。部リンク箇所が最初の項目に移ります。さらに押すたびにブリンク箇所が移動し、最後に設定を書き込んでキャリブレーションし、ホールドを解除して通常の計測に戻ります。
ORAENGEボタンで、現在ブリンクしてる項目の設定値を順番に切り替えて表示します。
設定項目は以下の通りです。(サンプリング周期は16.7Hz固定としました)
電流源: 出力するチャネルと電流値
ゲインアンプのゲイン
入力(AIN1, AIN2、AIN3、内部温度センサ、電源電圧)
バイアス ON/OFF
バッファ ON/OFF(GAIN 1,2以外は常にOFF)
ユニポーラ/バイポーラ
使ってみる
定電流源を使用した電圧の計測
AD7793には定電流源が内蔵されており、10uA、210uA、1mAのいずれかを出力できます。
電流出力を1mAにして、10Ω(1%)の抵抗に流せば 0.001 x 10 = 0.01 つまり10mVが抵抗の両端に発生します。
計測値(24bit)から電圧値への変化は、以下の式で行います。
電圧値 = ( 計測値 / 2**24 x 1.17 ) x GAIN
1.17は内部リファレンス電圧です。
以下は、10Ω(1%)のソリッド抵抗をAIN1+ と AIN1-間に接続し、AIN1+とIOUT1を接続して定電流(1mA, 10uA, 210uA)を流しています。AIN1-はGNDとつないでいます。ユニポーラ接続です。

写真2: 電流源 1mA 抵抗10Ω(1%) 0.010287v
Ch:AIN1 Fs.16.7Hz GAIN x1 Unipolar

写真3: 電流源 10uA 抵抗10Ω(1%) 0.000104v
Ch:AIN1 Fs.16.7Hz GAIN x1 Unipolar

写真4: 電流源 210uA 抵抗10Ω(1%) 0.002175v
Ch:AIN1 Fs.16.7Hz GAIN x2 Unipolar
IC内部温度の計測
AD7793には温度センサーが内蔵されているので計測してみました。

写真5: Ch:温度センサ 0.242884v 26.71℃
Fs.16.7Hz GAIN x1 Unipolar
チャネルに温度センサを選ぶと内部はGAIN x1, No Bufferが自動的に選ばれます。LCDの表示はそれに合わせてあります。計測された電圧の温度への変換は以下の式によります。
温度 = ( 電圧値 / 0.00081 ) - 273.15
これはAD7793の内部温度センサの出力が0.81mV/℃で絶対零度からの値によるものです。
デジタル時計の温度計より0.5度以上低いようです。
電源電圧の計測
AD7793は電源電圧が計測できるようになっています。

写真6: Ch:Vcc 3.296632v
Fs.16.7Hz GAIN x1/6 Unipolar
チャネルに電源電圧を選ぶと、ゲインが自動的に1/6に、Buffer OFFに設定されます。LCDの表示はそれに合わせてあります。
ゲインが1/6されているので、先の電圧を求める式でGAINが1/6になります。
電圧値 = ( 計測値 / 2**24 x 1.17 ) x 0.16666667
ソースコード
途中でプログラム・メモリが不足し、リテラルがメモリ上に置けなくなったので、サンプリング周波数の切り替えはあきらめ16.7Hz固定の連続変換としました。(このような用途ではシングル変換でもよいと思います。)
ボタンはチャタリングが多いですが簡易なコーディングになっています。
ソースはインクルード方式です。専用サイトにアーカイブしてあります。
ソースコード: JF1VRR Archives
mian.c メインプログラム
main.h メインヘッダ さまざまなシンボルや変数定義
ad7793reg.h AD7793のレジスタ定義
lcd.h LCD制御ライブラリルーチン
AD7793のノイズ特性や精度については、「パソコン計測USBマイコン基板」が参考になります。
もう少し遊んで何か新しいことが分かったらレポートします。
(JF1VRR)