PIC18Fを使ったUSBデータロガーの製作

 連続変化するアナログデータを定期的にサンプリングして、PCに取り込むためのデータロガーとして、秋月電子で購入して組み立てたPICNICを使用しています。LAN接続で遠隔地のデータが収集できるので大変便利です。特に無線LANと組み合わせると電源さえあれば、無線LANの届く範囲内のどこにあってもデータが得られます。

PICNIC
PICNIC

 ただ、PICNICは、PCとのインターフェースにイーサネットによるLANを使用しているので、場所(環境)が変わるとIPアドレス関連の設定が必要となります。このため、万人が使いこなせるというわけにはいきません。そこで、もう少し手軽に利用できるデータロガーを作成します。
 PCとのインターフェースでは、現状ではUSBが一番手軽です。以前、「AVRとFT232RLを使ったUSB-シリアル通信の実験」でUSBを試していますが、今回はUSBインターフェース内蔵のPIC18F2550を使用して製作します。

 USBデータロガーをいつものようにブレッドボードで開発します。気温(室温)の変化をロギングすることを目的とするので、とりあえず2系統の温度を読み取れるようにします。PIC18Fのポートをやりくりすれば、あと3系統ほど追加できると思います。今回は温度センサーを使いますが、PICへ取り込める電圧レベルに変換すれば、色々な用途があると思います。

 回路図です。USBは、バスパワーで使用します。手持ちの3台のPCのUSB電圧を調べてみると、5.07、4.96、4.81Vと結構バラツキがありました。PIC18FのAD変換リファレンス電圧としてUSB電源をそのまま使用すると、当然ながら正常なAD変換精度が得られません。よって、シャントレギュレータTL431を使用してリファレンス電圧を生成することにします。なお、PIC18の仕様では、正確な10ビットのAD変換を得るためには、3V以上のリファレンス電圧が必要となります。10ビット(1024)で計算処理がやりやすいように3.072Vを抵抗(可変抵抗)で分圧生成します。これにより、AD変換の最小単位は、3.072/1024=3mVとなります。
 温度センサーは、専用ICのLM35DZを使用します。LM35DZは、10mv/1℃の出力となるので、そのままPIC18Fに入力すると約0.33℃の分解能しか得られません。そこで、LM35DZの出力をオペアンプのLM358で3倍に増幅し、30mV/1℃とすることで、0.1℃単位の分解能を得ます。

PIC18F USBデータロガー回路図
PIC18F USBデータロガー回路図

 PCBEで作成した基板への実装図です。リファレンス電圧を生成する可変抵抗とオペアンプに使用する可変抵抗は、細かな調整が可能な多回転タイプを使用しました。

PIC18F USBデータロガー基板パターン
PIC18F USBデータロガー基板パターン

※オペアンプ用のバイパスコンデンサは半田面に実装。これをつけないとノイズで1~2ビット程度の変動が発生。

 完成した基板を、秋月電子のポリカーボネートケース中サイズに組み込みました。リファレンス電圧の3.072Vをマルチメータを使って正確に調整します。オペアンプの出力は、LM35DZの出力がキッチリと3倍になるように調整します。
 LM35DZのケーブルは、ある程度長さがあるため、シールドケーブルを使用します。ノイズ等の影響でAD変換値(気温)が安定しない場合は、LM35DZの出力にローパスフィルタを追加するなどの対策が必要になります。今回は、1m程度のシールドケーブルを使用しましたが、特に問題なく動作しています。時々、1ビット(0.1℃)の変動が出ますが、PC側のソフトウェアで移動平均処理してノイズを取り除けばよいでしょう。

PIC18F USBデータロガー基板

PIC18F USBデータロガー基板
PIC18F USBデータロガー
PIC18F USBデータロガー

 PIC18FでUSBを実装するには、Microchip社の「USB Framework for PIC18, PIC24 and PIC32」という専用のフレームワークを使います。電子工作の実験室さんにもPIC18FとUSBフレームワークを使用したサンプル事例がありますが、フレームワークのバージョンが古いもののようです。古くても問題ありませんが、どうせなら・・ということで、Microchip社のWebサイトから最新版の「MCHPFSUSB Framework v2.4」をダウンロードして使用することにします。
 最新のフレームワークを使用したプログラム開発を進めながら、ついでに簡単な解説コンテンツを作成しておこうと資料を準備していると、YS電子工作ラボさんで既に詳しく解説されていました。英語の訳も付いてわかりやすいのでお薦めです。

 USBフレームワークは、CDC-Basicというタイプを使用して、PC側ではUSBを経由したシリアル通信として認識させます。PC側では、ハイパーターミナル(Windows標準装備)やTeraTerm等のシリアル通信ソフトでデータを取り出すことができます。ただ、特定のタイミングでデータを取得したりファイルに保存したりするのが難しいので、専用アプリを作って使用しています。LinuxなどのUNIX系OSでは、シェルスクリプトとawkやperlなどの処理言語で処理するのが簡単でしょう。

USBデータロガーPCアプリケーション

 作成したプログラムです。MPLAB V8.30とMPLAB C18 Student Editionで作成しました。USBフレームワークは、多くのファイルがスケルトンとして準備されていますが、変更が必要なファイルは2~3ファイルと少数です。先に紹介したサイトに詳しく解説されているので、説明は省略しますが、今回は、main.cの一部の関数のみを目的にあわせて変更し、その他のファイルは一切変更無しにしました。また、プリプロセッサ命令から不要と思われる処理を取り除いて単純化し、コメント類もすべて削除しています。

アイコン

pic_usb_mplab_c18.c 7.44 KB 93 downloads

...