パソコン計測USBマイコン基板を高精度電圧計に仕立てる

投稿日 2014/07/01

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

USBマイコン_高精度電圧計1.jpg

「パソコン計測USBマイコン基板」と

付属のAD7793 ADコンバータ搭載基板

 

 

基板には24ビットΔΣ型ADコンバータ AD7793と、その制御にPIC 18F14K50 USBマイコンが搭載されており、高精度な計測ができるようになっています。

 

本来USBでPCと接続し、PC側でコンソールソフト(USB-ADC General Console)を動かして設定から計測までを行うのですが、これを単なる電圧計のような用途で使うには少々不便です。(データロガーのような用途ならよいのですが)

 

そこで搭載のPIC 18F14K50にLCD(20 x 4)と操作ボタンを接続し、単体で(PCをつながなくても)動く電圧計に仕立てました。

USBマイコン_高精度電圧計2.jpg

写真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とつないでいます。ユニポーラ接続です。

USBマイコン_高精度電圧計3.jpg

写真2: 電流源 1mA 抵抗10Ω(1%) 0.010287v

Ch:AIN1 Fs.16.7Hz GAIN x1 Unipolar

USBマイコン_高精度電圧計4.jpg

写真3: 電流源 10uA 抵抗10Ω(1%) 0.000104v

Ch:AIN1 Fs.16.7Hz GAIN x1 Unipolar

USBマイコン_高精度電圧計5.jpg

写真4: 電流源 210uA 抵抗10Ω(1%) 0.002175v

Ch:AIN1 Fs.16.7Hz GAIN x2 Unipolar

 

 

IC内部温度の計測

 

AD7793には温度センサーが内蔵されているので計測してみました。

USBマイコン_高精度電圧計6.jpg

写真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は電源電圧が計測できるようになっています。

USBマイコン_高精度電圧計7.jpg

写真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)