リモート計測ロガーユニット

PIC16C73を使ったパソコンに接続する計測ロガーです。
4チャンネルのアナログデータを一定間隔で測定し
32Kバイトのメモリに格納します。




【概要】

PIC16C73JWを使った計測ロガーで、4チャンネルのアナログデータを
指定した一定間隔で測定し、そのデータを32Kバイトのスタティック
RAMに格納記録します。
パソコンとシリアル通信で接続し、記録した測定データの読み込み、
計測間隔設定などを行うことが出来ます。

【ロガーユニットの仕様】

今回製作した計測ロガーユニットの機能仕様は下記となっています。

・電源  :DC6〜12V
      消費電流 パソコン接続状態で常時 約35mA
・計測  :4チャンネル 8ビットA/D変換
      最大入力は可変可能 約0.5V〜3V
・間隔  :計測周期間隔は、10msec単位で 10msec〜1sec

・記憶容量:32Kバイト スタティックメモリ

・パソコン接続:USARTによるシリアル通信接続
        無手順


【構成、回路】

全体の回路構成は下図のようになっています。アナログ信号を増幅
するアンプ部、全体を制御するPIC、データを格納するメモリ、アドレス
信号を供給するカウンタ、パソコンとの接続をするRS232Cインター
フェース部ト電源から成っています。

PICは出来る限り高速でのアナログ信号の収集ができるように、クロック
は20MHzを使いました。これでフルスピードにすれば、1msec以下での
高速でのデータ収集も可能です。
逆に、ずっと長い周期で計測するようにすれば、消費電力も少ないので
現場で何日もデータ収集を行うことも出来ます。



これを実現する回路図は下記となっています。アナログアンプの部分は
4チャンネル分なので、同じアンプが4回路分あります。このアンプには、
5V単電源でほぼ0Vから5Vまで出力が可能なナショセミの
LMC662
使いました。
メモリには完全スタティックな32Kバイト容量のある、NECの
μPD43256A
を使いましたが、これにはコンパチ製品が何社かありますのでどれでも
OKです。

PICには
PIC16C73を使いましたが、本当なら、最新機種のPIC16F873
使いたいところです。これならフラッシュメモリで開発もやりやすいし、
何といっても
A/D変換が10ビットあるので、アナログ計測ロガーとして
実用的な精度とすることが出来ます。

 
★ 計測ロガー回路図(クリックすれば直接見ることが出来ます)

 
★ 計測ロガーパターン図(ダウンロードしてWinBoardでご覧下さい)

    
(WinBoardについてはこちらに説明があります)

【SRAMとの接続】

今回のロガーはデータ記憶用として32KバイトのSRAMを使いました。
このICメモリとの接続は、下図のようにしています。すなわち、アドレス
指定は外付けのカウンタIC(74HC393)で行います。このアドレス用
カウンタの制御はポートC(RC4,5)で行いますが、クリアとカウントアップ
だけで制御しています。
 データバスは直接ポートBに接続してリード/ライトの制御はポートC
(RC2,3)で行います。動作の詳細は下記とします。
このときポートBは常時入力モードとしておく必要があります。そうしないと
出力同士がつながることになり大きな電流がPICから流れてしまいます。
アドレスのカウントアップの信号(RC5)の出力をRC0へも入力して、タイマ1
のカウントアップ信号としても使います。 このタイマ1でメモリに書き込ん
だデータ個数の管理をします。




CS

OE

WE

メモリ動作モード

H

×

×

非選択

L

H

H

出力ディスエーブル

L

×

L

ライト

L

L

H

リード

(1)リード動作
   ・アドレスカウンタをクリアする  ----> RC4を1にしてすぐ0に戻す
   ・ポートBを入力モードにする
   ・SRAMのOE端子をLowにする ----> RC2に0を出力
--→・ポートBから入力         ----> Wregに取り込む
|   ・SRAMのOEを元に戻す     ----> RC2を1に戻す
----・アドレスをカウントアップする  ----> RC5を1にしてすぐ0に戻す

(2)ライト動作
   ・アドレスカウンタをクリアする  ----> RC4を1にしてすぐ0に戻す
   ・ポートBを出力モードする
--→・書き込みデータをポートBにセット
|   ・SRAMのWEを瞬時Lowにする ----> RC3を0にしてすぐ1に戻す
----・アドレスをカウントアップする  ----> RC5を1にしてすぐ0に戻す    


【組み立て、外観】

出来上がった計測ロガーユニットの外観は、下記写真のように1枚
のプリント基板上に全ての部品が実装されています。
基板サイズは 75×100 のSunhayatoのポジ感光基板10Kその
ままです。


中心にPIC16C73が配置されています。
上部がUSARTのパソコンインターフェース
左側がSRAMとアドレス用のカウンタIC
右側がアナログ入力用のアンプ回路です。

アンプ回路にはそれぞれゲイン調整用の
ボリュームが付いており、それぞれ独立
に最大入力電圧を設定できます。

シリアルインタフェース用には、MAX232C
を使いましたので周りを電解コンデンサが
囲むような感じになりました。

プリント基板の裏側です。
メモリの周りのパターンが多く、ピン間や
ICの間にかなりの細いパターンを
通しています。
EDAツールを使うとこれらが楽に出来ます。


全体の基板上のレイアウトは下図のようになっています。



【プログラムの概要】

プログラム全体としてはパソコンのシリアルコネクタに接続して、パソコン
からリモートコントロールして使う「リモート計測ロガー」という機能で作って
あります。
 パソコンからのコマンドと機能は下表のようにしましたが、これは自由に
プログラムで追加変更できますのでチャレンジしてみて下さい。
パラメータなどのデータチェックは省略していますので注意のこと。
この辺りは使う方が自由に考えて変更して頂けば良いかと思います。

コマンド

パラメータ

機    能

1(31)

無し イニシャライズ
各種内部パラメータを初期化する

2(32)

××
(10進数2桁)
計測周期の設定
10msec単位×(パラメータ値01〜99)

3(33)

無し ログ開始
設定した周期で計測し、保存する

4(34)

無し データアップロード
3で格納したログデータを16進数2桁の4組をまとめてCSV形式でパソコンに送る

5(35)
( )内ASCII

無し 連続計測
指定した周期で、計測し同時にパソコンに
計測データを送る。4チャンネル1組で
各16進数2桁4組、CSV形式


 プログラムの基本的な流れは下図のフローチャートのようになっています。
メインルーチンでは、常時USARTの受信をチェックし受信データがあれば
それを取り込んで、PICのBank2レジスタエリアに格納します。そして同時に
改行コードの確認をしています。受信したデータが改行コードであれば、
それまでに受信したデータの中身の解読に移り、各コマンドに従った処理に
進みます。この通信には割り込みは使っていません。

 実際の計測はインターバルタイマの割り込みのタイミングで実行します。
つまり、10msec周期のインターバルタイマ割り込みの回数をカウントし
指定した計測間隔になったら、実際の計測を実行してメモリにデータを
格納します。4チャンネル分連続して計測実行をしています。
このメモリリード・ライトの時に、ポートBの入出力モードを変更するため、
Bankを切り替える必要がありますが、ここで重要な注意があります。
Bankが切り替わってBank1の最中に、インターバルタイマの割り込みが
入ると、割り込み処理が正常に行われず、異常な処理をしてしまいます。
そこで、このBank切替中の間は、割り込み禁止にして実行する必要が
あります。
(私もしばらくこれで悩みました。)

計測の回数のカウントはタイマ2を使っています。つまり、メモリアドレス
のカウントアップ指令となる信号で同時にタイマ2のカウントアップも実行
し、メモリに格納したデータ個数をカウントしています。
パソコンからのデータ転送コマンドの時には、このタイマ2の個数だけ
データを送信します。

パソコンとの送受信のために、いくつかのメッセージを出力するように
しました。このメッセージのデータはテーブルを使ってRETLW命令で
順次取り出すようにしました。(TEXTとTABLEサブルーチンで実行)


上記プログラムフローにしたがったプログラムのソースファイルは下記です。
ダウンロードしてMPLABでお使い下さい。


  ★ 計測ロガー プログラムファイル











  目次ページに戻る