2018年6月10日日曜日

温度センサTMP05をCCPで使用する

アナログ・デバイセズの温度センサIC、TMP05B を PICマイコンで使ってみた。
アナログ出力タイプ、I2Cのデジタル出力タイプなどあるが、これはパルス幅の比で温度を表すPWMタイプである。(長く延ばせるメリットがある)

ワンショット・モード
PICマイコンプログラムは、温度だけを測定する目的だけでは無いため、ワンショット・モードを使用することにした。
パルス幅の計測時間が120ms位必要とされるが、操作ボタンに軽快に反応してほしいので温度計測に専念せず、PIC の CCP機能を使用して、立ち下がりエッジ、立ち上がりエッジまでの時間をタイマ1 を使用して計測することにした。好きなタイミングで計測結果を読みに行ける(実際はトリガ前に前回計測値を読込む)
当初 H のパルス幅、L のパルス幅を二度に分けて測ろうと考えていたが、一度で済ませる事にした。
  • CCP1を立ち下がりエッジに指定し、Hパルス幅として使う
  • CCP2を立ち上がりエッジに指定し、立ち下がりエッジとの差をLパルス幅に
  • トリガHに戻してから、カウントイネーブル迄の時間がHパルスの誤差になる
  • Hの区間が公称値40msとなっているが、計測を省略できるほど正確ではない
  • 温度(℃)=421-(751×(Hパルス幅/Lパルス幅) の式の通りでOK
  • ポケットタイプの温度計より0.7℃高めの表示値が出たが、追求はしなかった
  • PIC のクロックが16MHzと高いため、立ち上がりエッジまでの計測可能な最大時間が131msになってしまい、温度上限が90℃位になる(室温で使うのでこのまま)
つまずいた点
データシートにある、「OUTピンをローレベルにしてから解除する」を読み飛ばして、入力ピンにトリガをかけて勝手に悩んでしまった。

  • OUTピンを強制 L に出来るよう出来ている
  • センサのOUTピン接続先をPICの入力として設定するが、
  • トリガを出力する際だけ、出力ピンモードにして使用する
  • (オープンコレクタ出力を使用してトリガする方法もある)