製作編2
データロガーのソフトの作成を行います。
ハードウェア確認
ハードウェア確認用のソフトはdemo0として作成します。まずは1チャンネルのみ熱電対アンプモジュールをシールド基板に装着しました。
熱電対も接続しています。demo0はべた書きで作成し、波形確認と動作確認を行います。ソースの構成の概略は以下のとおりです。
ソースを書き上げたらまずはコンパイルを行い、発生するエラーを1つ1つ潰していきました。エラーをつぶし終えたら、プログラムをarduino UNOに転送して動作確認を行います。demo0では1秒ごとに測定温度をシリアル出力する仕様です。しかし、表示される温度は全て0でした。まずは動作中の波形を確認してみます。
黄色がSS1で青がSCLKです。SS1の波形が異常です。SCLKが出力される前にLOWとなるはずがだらだらと電圧が下がっています。不思議に思いソースを見直したところ、pinModeの設定を忘れていました。出力ポート設定をせずに出力をするとこんな波形になるんですね。早々に修正してコンパイルしたソフトをarduino UNOに再転送しました。修正後の波形はこんな感じです。
SCLK出力前にSS1がLOWになっている事が確認できました。4byte転送させていますが、画面中には3byte分しか見えません。デバッグ用にSPI.hライブラリSPI.transfer()関数の戻り値をシリアル出力させた為、処理に時間がかかり最後の1byte転送分が画面外となっていました。シリアル出力をコメントアウトしたところ、以下の波形となりました。
demo2
demo0で動作確認を行い、demo1でシリアル出力のフォーム変更を行いました。demo2では、2ch化を想定して熱電対アンプモジュールアクセスを関数化します。作成した関数の仕様は以下のとおりです。
demo1までべた書きされていた処理を作成した関数に置き換えて動作確認を行いました。引数は対象スレーブモジュールのss信号出力用のポート番号です。戻り値はありません。熱電対アンプモジュールのアクセス処理を本関数に置き替えた結果、問題なく動作する事が確認できました。
demo3
demo3は最終版です。修正内容は以下のとおりです。
・2ch化
・温度データをfloat処理化
・温度取得間隔を1分に変更
・結果出力番号を追加
上記を反映してdemo3の構造は以下となりました。
arduinoで初めてfloatを使用しました。理由は、温度を小数点以下2桁表示させる為です。動作確認用にモジュールを2個装着しました。
demo3を動作させ、テラタームで受信したデータは以下のとおりです。
温度データはfloat変数を使った事により小数点以下2桁が表示されています。縦の列のフォームは崩れていますが、exelでカンマ区切りで読み込むと列が揃います。先頭はサンプル番号、以降ch1の測定温度、ch1のインターナル温度、ch2の測定温度、ch2のインターナル温度です。インターナル温度が室温約20℃に対してそこそこの値となっています。LSI自体の発熱起因と考えられます。これで2ch熱電対データロガーは完成です。次回は、このデータロガーを使って先日製作を終えたA級BTLステレオDCパワーアンプのファンモーターのdutyを変えて冷却効果の比較を行いたいとおもいます。
つづく(運用編)