構想編
温度計測用のデータロガーの製作検討を行います。
きっかけ
スイッチング電源を採用したステレオパワーアンプ製作の中で温度測定用に2ch熱電対温度計を購入しました。
使い勝手は悪くなく、精度も私の用途には十分でした。唯一、データログ保存機能がない事が不満です。購入時にデータログ機能つきの物を探しましたが、機能の有無で、価格が数倍高くなる事からあきらめた経緯があります。
電源のフレーム温度測定では、温度計の数値を1分毎に1時間以上メモを続ける必要があり、罰ゲームのような作業でした。楽をしたいと考えて製作を決意しました。本当はアンプ製作中に準備したかったですが、アンプ製作の進行に影響がでるので我慢していました。
構成検討
コントローラには、使い慣れたarduino UNOを使います。そのシールド基板に熱電対アンプモジュールを搭載する予定です。データのログ保存は、arduino UNOからシリアル出力し、それをPC上のテラタームで受信します。カンマ付きテキストで温度データを送信すれば、exelでグラフ化も容易です。
アンプモジュール
アマゾン、スイッチサイエンスの販売サイトを検索しました。大別すると2種類のアンプモジュールが見つかりました。1つはAD8495を採用したもので、出力がアナログとなります。
価格は手頃ですが、アナログ出力の仕様が気になりました。これを使う場合は、arduino UNOのアナログ入力ポートを使用する事になりますが、データ転送時にも誤差発生要因となってしまいます。もう1種類はMAX31855を採用したものです。
インターフェースはSPIです。arduinoにはSPIインターフェースライブラリがあり、容易に通信できるとおもいますが、過去に使った事がなく年のせいか二の足を踏んでしまいます。使い慣れたI2Cインターフェース採用のモジュールがないか探してみましたがありませんでした。後で理由と思われる仕様差に思い当たる事になりますが・・・。それで結論としては、アンプ製作が終わった事なのでSPIインターフェースを使用してみる事にしました。
SPIインターフェース
arduino UNOとの基本接続は以下のとおりです。
図はarduinoのSPI.hライブラリを使って2つのスレーブを接続した状態です。基本動作は、マイコンが生成するSCLKに併せてMISOとMOSIデータ転送します。MISOがスレーブ出力でMOSIスレーブ入力端子となります。SSはスレーブセレクト端子ですが、図はライブラリのSS信号を使用せずに別ポートでスレーブセレクトしています。回路図中のarduinoのD10~D13はSPI.hライブラリを使ったときの指定ポートです。次はSPI.hライブラリの関数を調べます。
SPI.setBitOrder(order)関数ですが、シリアルデータの転送順を指定する関数です。指定しないとデフォルトでMSBFIRSTの動作となるようです。SPI.setClockDivider(diveder)は、SCLKのクロック周波数を指定します。arduino UNOの場合システムクロックが16MHzを指定の分周値とした周波数となり、デフォルトの分周値は4なので、4MHzとなります。SPI.setDataMode(mode)の転送モードは以下のとおりです。
柔軟性のある仕様ですが、「このくらい決めておけよ」とも思ってしまいます。SPI.transfer(value)は、スレーブ出力がある場合、1byteのデータが戻り値となります。valueはスレーブへ出力するデータをセットします。仕様はこれでだいたい理解できました。先ほどのI2Cインターフェースが採用されない理由ですが、温度測定モジュールは複数チャンネルで利用される事が多く、I2Cインターフェースを採用するとスレーブにアドレス設定の機能が必要になります。アドレスを何種類用意する必要があるとか、アドレス設定用に追加部品が必要になるとか、いいことはありません。その点、アナログ出力およびSPIインターフェースは柔軟性があります。次回は回路設計を行います。
つづく(設計編1)