低価格版pic-logger Hardwear Version F7
今回 PIC18F14K50-I/Pと言うUSBインターフェース内蔵のPICを入手したので 低価格版のpic-loggerを試作してみました。
このPICは少々難がありました。この点については後で書きたいと思います。
上の写真では、小型の太陽電池とLM35Dを使った温度センサが繋がっています。
ついでに、表示能力を強化したPC側のソフトウェアを公開します。 グラフ画面をオシロスコープ風にしてロールする様にしました。 で、最大6チャンネル(テストしてませんが)表示します。
仕 様
前回の構想を引き継いでいます。 ロガーの仕様を書いていなかった此処で出して置きます。
No. | 項 目 | 今回の仕様 | 前回の仕様 | 備 考 |
---|---|---|---|---|
1 | 入力チャンネル | 3チャンネル | 4チャンネル | |
2 | 入力電圧範囲 | +5V~-5V | +5V~-5V | |
3 | 入力インピーダンス | 1MΩ以上 | 10MΩ以上 | |
4 | ADC分解能 | 10ビット | 10ビット | |
5 | サンプリング(1CH当たり) | 約8mS間隔 | 約1mS間隔(不定期) | オーバーサンプリングを含む |
6 | 測定分解能(1) | 全電圧範囲:1mV | 全電圧範囲:10mV | ソフトウェアによる補正込み |
7 | 測定精度(1) | ±4.096V:±0.5%+5dgt | ±4.5V:±1% | ソフトウェアによる補正込み |
7 | 温度特性 | 全電圧範囲:±3% | 全電圧範囲:±3% | 温度範囲:0℃~30℃ |
8 | 入力周波数特性 | DC~100Hz | DC~100Hz | 1kHzフィルタあり |
9 | 通信機能 | USB-シリアル | USB-シリアル | 9600bps データ8bit ストップ1bit パリティなし |
10 | 記録間隔 | 1秒2秒5秒 10秒15秒30秒 1分2分5分 10分15分30分60分 | ||
11 | マイコン | PIC18F14K50-I/P | PIC16F683-I/P | |
12 | 価格 | 1,500~2,000円 | 3,000~5,000円 |
注1. 測定分解能と測定精度は、オーバーサンプリングとソフトウェア補正によりADC分解能より高くなっています。 ソフトウェアの電圧調整を正確に行った場合の値となります。
価格には、PICのファームウェアPCのソフトウェアの開発費用は含まれていません。
回路図
Version F3 - ブートローダーに正式対応しました。(2011/06/12)
バッファアンプを削除して、入力抵抗を1MΩとする事によってオペアンプの単電源化を行っています。
また、PIC18F14K50-I/Pには、リファレンス(FVR)が有りますので外部に基準電源が不要となります。
これらにより電圧が4.2V有れば、±5Vの入力範囲が確保でき精度を上げることができます。
また前回の電圧4チャンネルから電圧2チャンネルと温度1チャンネルにしています。 オペアンプ1個で済ませて安くするためです。
オペアンプを増やせば、最大6チャンネルまで対応できます。
アナログ入力部
1MΩにてオペアンプの-入力に入ります。 反転増幅なので1MΩが入力抵抗になります。 1MΩと390kΩなので、約1/2.56倍になります。
今回この二つの抵抗は、KOA の型名:MFS1/4CCと言う1% ±50×10-6/Kの小型で精度も温度特性も良い抵抗を使いました。 マルツパーツ館で購入しました。 単価は21円(2011/05/30時点)と高めですが選別もしないで十分な性能を出します。
基準電圧部
PIC18F14K50-I/Pの14番ビン(CVREF)からFVR(4.096V)の半分の基準電圧を出します。 この電圧をオペアンプで受けて基準電圧を出力します。 ここでオペアンプを使うので、入力が3CHになった訳です。
この基準電圧から、オフセット電圧を作っています。 ここに使う1MΩと390kΩも精度の良いMFS1/4CCを使います。
LPF(ローパスフィルタ)部
前回と同じ1.5kΩと0.1uFで、カットオフ周波数は約1kHzてす。
チャージポンプ部
今回 オペアンプには負電源は必要ないのですが、チャージポンプ回路のテストと温度センサの LM35Dの0℃以下の測定のために作ってみました。
DCDCの一種ですが、インダクタを使った負電源より副次ノイズが少ないのでアナログにはいいかなと思っています。 PICのPWM出力を使い実現しています。
チップ積層セラミックコンデンサは、基板の裏に付いているため写真では見えません。
PIC18F14K50-I/P
新しいPICなので欲しい機能がかなり入っています。 USBにFVRにADCに16bitカウンタ/PWMなどなど。
ADCの基準電圧がFVRの約4.096Vが使えるのが良いですね。 電源電圧が4.2V程度でも問題なく正確なアナログ-デジタル変換ができます。
FVRの基準電圧は、LT1004やLM236に比べて絶対値の精度は悪く7%~8%もずれます。 しかし、温度特性は-114ppm/℃なので補正を掛ければ十分実用になります。
今回はセラミック発振子を使ってみました。 仕様上から見るとUSBの規格を外れそうですが今のところ問題なく動作しています。 内蔵の発振モジュールで、USBが使えるようになると良いですけど。
PIC18F14K50-I/Pの難点 (エラータ)
ファームは、1チャンネルの電圧を測るまでは順調にできました。
多チャンネルにすると、チャンネル間に影響を与えるようになりました。 フルスケールで0.001V~0.002V、次の計測するチャンネルが増えたり減ったりします。
オペアンプ回りの漏れ電流かと調べ回りましたが、そんな兆候は無く手詰まりになりました。
次の日ふとPICのエラータもダウンロードしたことを思い出しました。 見たら大当たり。 2011/05に秋月から買ったPIC18F14K50のバージョンはA6。
対応が判れば修正も簡単。でもその為、サンプルの間隔が遅くなりました。
ブートローダー (2013/01/15)
PIC18F14K50のbootloader
前回はマイクロチップ純正のHID bootloaderを使用することにしました。
しかし、都合で変更しようとするとC18の関係で大変な苦労がでます。 (購入すればいいだけですが。)
思い立ったが吉日と言うことで、作ってしまいました。 詳細は、PIC 2KB版 HID Bootloader に任せるとしてこっちでは、ダウンロードして書き込んでください。
1.1までは、コンフィグビットが書き込めないバグがありました。 1.2で修正しています。
ダウンロード (PIC18F14K50 HID Bootloader 2KB版 Restart Address:0x0800)
PIC18F14K50-I/P 用 ブートローダー 1.2版 bootloader_p18f14k50_2KB12.zip
使い方
上記のブートローダーと下記のファームウェアをダウンロードします。
まずは、ブートローダーのhexファイルをPICプログラマーにて書き込みます。 そして、USBが使えるように組み立てます。
同封したWindows用HIDBootLoader.exeを起動します。(右図) そして、組み立てたpic-logger(PIC18F14K50)をUSBに接続します。
下図の様に認識されされる筈です。
Microchip Solutions内に有るhexファイルを書き込んだ場合は、 ハートウェアのブートローダー用のボタンを押しながらUSBに接続すると認識します。
(この部分を省くため手を加えています。)
つぎは、[Open Hex File]を押してファームウェアのhexファイルを選択します。
あとは、[Program/Verify]を押せばファームウェアのhexファイルが書き込まれます。
正常終了しましたら[Reset Device]を押すと、書き込まれたファームウェア(pic-logger)が起動します。
また、ファームウェアのVersion F3以降は、上記ブートローダーの再起動機能を追加しました。
ブートローダー用ボタンを押すと、ファームウェア(pic-logger)を終了して ブートローダーを起動し書き換えができるようになります。
ファームウェア
Ver F6までは、割り込み部にバグがあります。F7で修正しました。
ADC終了(低)割り込み中のADCチャンネル切り替えがある時に、 Timer2(高)割り込みが発生する多重割り込みがあると暴走するようです。
要するに、ADCが変換中にチャンネル切り換えると言うどうなるか判らない状態になるのです。
通常は、割り込みタイミングが一定なので上記状態は起きないのです。 唯一USBの接続処理中に割り込みを無効化して処理する部分があり、 新しいブートローダーのリセットタイミングだと上手く当たりやすい状態なったようです。
単体書込にも対応してますので、上記2KB版ブートローダーを使わない人はそのまま書き込んでください。
ダウンロード (HID BootLoader2KB版対応 Reset Address:0x0800)
PIC18F14K50-I/P 用 ファームウェア Version F7 pic-loggerF7.zip
PIC18F14K50-I/P 用 ファームウェア Version F7 (ソースファイル) pic-loggerF7source.zip
USB-シリアル変換ですが、Windows用のドライバ(と言うかinfファイル)が必要だったと思います。 開発用のファイル群には入っています。が一応再配布します。(2012/12/31修正)
CDC用 USB driver (マイクロチップ社製) CDC driver.zip
おまけ…
前回のファームウェアを修正して高精度化しています。 今回のpic-logger ソフトウェアにも使えます。
PIC12F683-I/P 用 ファームウェア Version D3 loggerD3.zip
PIC12F683-I/P 用 ファームウェア Version D3 source files loggerD3source.zip
ファームウェアは、Hexファイルです。 ソースファイルはHI-TECH C (Lite Mode)でコンパイルできます。
pic-logger ソフトウェア
プログラムをバージョンアップしました。Ver2.7 (2013/01/23)
今回、かなり面倒だったグラフ表示部のスクロール処理を入れました。 また、[Time]の上下の動きが逆だったので修正しました。
グラフは、0.1秒間隔で10時間分データを保持しています。 (ただし現状相対時間になっています。) USB本来の通信処理なら、もっと早い間隔でデータを取得できますがロガーなのでまぁ良いでしょう。
今までは現在更新している部分のみを表示していましたが、 スクロール処理を入れることで過去の部分を見ることができます。
Ver 2.6
グラフの時間間隔があまり正確でない(1秒で10数mSの誤差の累積)との指摘が有りました。 元々動作確認のためのグラフでしたからそんな感じでした。
今回一応精度を上げてグラフ表示は1秒当たり数mS程度の誤差累積までに変更しています。 ログに関しては、秒当たり10数mSの誤差(作業分の誤差)です。 ただし累積誤差は、パソコンの時計と比較するのでその時計の誤差分しか累積しません。。
あと、アイコンも作ってみました。
ダウンロード
pic-logger.exe -- Windows7(xp) 用 プログラム Version 2.7.0 pic-loggerVer270.zip
pic-logger 説明書
右は調整後の表示です。
調整が済まないと、各チャンネルの表示に不正な文字が表示されます。
グラフ表示は、縦8div/横10divにしてオシロスコープ風な表示にしています。 各チャンネル毎にGND(0V)レベル位置を調整できます。
最大6チャンネルのグラフ表示とログを取ることができます。
電圧表示と温度表示を選択することができます。
各部の説明
1. Channal0 ~ Channal5
グラフ及びログの電圧/温度軸の表示及び調整をします。
各チャンネルの電圧/温度を表示しています。 100mS毎に表示を更新しています。
右上の□ボタンで、チャンネル毎のグラフ表示/非表示を選択します。
左上の○ボタンで、チャンネル毎のグラフ調整を選択します。
そしてグラフの右側スライダーで、GND位置レベルを調整します。
スピンボタンの上下で電圧/温度のdivを調整します。
電圧/温度のdiv表示の上でダブルクリックすると温度と電圧の単位を切り換えます。
2. Time
グラフの時間軸の表示及び調整をします。
1秒/div~60分/divまで調整できて最大10時間のグラフ表示ができます。
3. グラフ表示部
チャンネル毎に色を変えています。 また、1チャンネル当たり10時間分のデータを保持してグラフ表示します。
グラフ上部のスクロールバーで、グラフの表示位置を変更することができます。 ただし、60分/divは表示位置固定です。
グラフ下部の[現在表示]ボタンで、現在更新されているグラフ表示部へ移動します。 また、同時にスクロールバーも移動します。
右のスライダーバーは、GND位置レベルの調整に使います。 下のスライダーバーには、機能は割り当ててません。
4. COM0 ~ COM20
シリアルポートを選択します。 通信設定は、9600bps 8bit 1stop-bit 固定です。
5. 電圧調整...
ボタンを押すと右のダイアログが開きます。
初めてハードウェアを接続したときは、必ずステップ1から順番に調整していきます。
ステップ1では、VREF端子を測定したテスターの値を書き込みます。 この値を基にテスター同じ値がでるようになります。
ステップ2は、各測定端子をGND端子に接続してボタンを押します。 この結果は、ハードウェア上のEEPROMに書き込まれます。 この結果を基に電圧オフセットを調整します。
ステップ3は、各測定端子をVREF端子に接続してボタンを押します。 この結果は、ハードウェア上のEEPROMに書き込まれます。 この結果を基に電圧ステップを調整します。
6. 計測設定...
ボタンを押すと左のダイアログが表示されます。
記録用フォルダは、ログファイルが生成されるフォルダを指定してください。 空白や、無効なフォルダ名の場合は、エラーになります。
サンプルのサンプリング間隔は、最小1秒から最大60分間隔でデータを記録していきます。
サンプルの各処理は、現在の所「オーバーサンプリング処理を行う。」だけです。 精度的には他の二つより良いですが遅くなっています。
7. 記録開始/記録停止
このボタンで、ログファイルを作成します。ファイル名は自動生成します。
ファイル名構成は、plogYYMMDD_hhmmss.csv です。 YYMMDDは、開始年月日 hhmmssは、開始時間になります。
記録開始すると、一端グラフ表示をクリアします。
8. その他...
各チャンネルの電圧/温度の切り換えを選択します。
温度を測るには、ナショナルセミコンダクタ製のLM35DZを使用してください。
「レジストリを削除して終了する。」をチェック入れて、[ OK ]を押すと レジストリ情報を削除してプログラム自身を終了します。
この状態で、アンインストール(プログラムの削除)を行ってください。
ログファイル
ログファイルは、csvファイルで下のようになっています。
pic-logger 記録ファイル 開始日時 2011/06/02 00:40:51 サンプル間隔 : 1秒 "Date","Time","Channel0 (V)","Channel1 (V)","Channel2 (℃)","Channel3 (V)","Channel4 (V)","Channel5 (V)" "2011/06/02","00:40:51",1.424,2.037,31.9,----,----,---- "2011/06/02","00:40:52",1.424,2.037,31.9,----,----,---- "2011/06/02","00:40:53",1.424,2.037,31.9,----,----,----
最初の2行は、開始時間と、サンプル間隔を表示しています。
3行目がヘッダ行です。4行目以降がデータになります。
ヘッダ行,データ行については、文字列は「"」で囲んでいます。数値はそのままカンマで区切っています。
計測の温度 2013/01/23
説明書のグラフ表示ですが、Ver2.7のソフトウェアのアップデート確認用にテストとして取ったデータです。
前日から10時間測定の最後としてファンヒーターの出口の温度を計っています。
あら、室温13℃から一気に130℃越える温度になるんだ。 なんて、ボケーと見ていてふと最大温度は、何度だっけ?って 横に外して、考えて戻したのであの様な波形になっています。
LM35DZやケーブル、保護テープは、150℃品をつかっているので問題ない。 LM35DZの足を固めた樹脂はどうだっけ?耐熱120度か150度だったよな?
前、接着剤系でセンサを止めて温度100付近で溶けてベタベタになり大変になったことがあります。 今回一応耐熱樹脂をしっかり使っていたので全く問題なかったですけど、 高い温度を測るときは前もって調べておいた方が良いです。
免 責
情報は出来るだけ正確に書くつもりです。ただこの記事を見て作ると思ったときは、 個人の責任において作業を行なってください。 データの喪失や機器の損傷が有っても、一切の責任は取れません。