AVRtiny13Aでつくるシリーズ2 LMT01を使った温度計
- 2016/03/30 10:50
- カテゴリー:make:
秋月の少し前の新製品に,TIのLMT01という温度センサICが登場しました。面白そうだったのでそんなに安くはなかったのですが,買ってみました。
デジタル式の温度センサなのに,わずか2端子で電源の供給から測定値の送信までやってしまうという,なんだかよく分からないセンサなのですが,使いやすさ向上のためにピン数を減らして行く過程で,いつのまにやらピン数を減らすことが目的にすり替わり,使い勝手はむしろ悪くなっている事に気が付かないという,賢い人がよく陥る罠を地で行っているICだと思います。
まあ,本来の目的そっちのけで,意地になって違う道を追い続けるという姿勢は,私は嫌いではありません。
このIC,測定値をパルスの数にして,消費電流の変化で出力します。考えましたね,消費電流の変化とは。
元々の消費電流が極めて小さいので,抵抗を挟んで電源を供給しても動いてくれます。その抵抗の両端に発生する電圧をつかまえれば,パルスの数を数えることができますね。でも,数を数えるといっても,どこからどこまでの数を数えればいいのやら。
もしここで,勢いでLMT01を買ってしまい,途方にくれている人がいらっしゃったら,データシートを横目で見つつ,読み進めて下さい。
LMT01は気温を測る温度センサICです。出力はデジタルで,2ピンの小さなICの中に温度センサとA-Dコンバータ,そしてシリアルインターフェースが入っています。どんな風にやってるかは知りませんが,リニアリティの補正も行われているので,出てくるデジタルデータをそのまま使う事ができます。
その上,測定温度範囲が広く-50度から150度(おいおいシリコンの破壊限界じゃないか),しかも精度が他に比べて良好で,-20度から90度までなら誤差はわずか±0.5度です。電圧出力のセンサICではないので,A-Dコンバータが必要ありませんし,A-D変換時の誤差を考えなくて済みます。
デジタル出力のセンサですので,データは電圧でも電流でも抵抗でもなく,数字で出てきます。電源とデータ出力を兼ねるという変態っぷりを実現したのは,その特徴的なシリアル通信によってですが,これ,クロックが別にないだけではなく,スタートもエンドもわからないなんて,なんちゅう無茶をやるんだか。
私は最初,温度に応じた頻度でパルスが出る程度の物だろうから,ローパスフィルタで平均化して電圧値に変換すればいいか,位に考えていました。けど,それだったら,デジタル値で出力されるというこのセンサのメリットを生かせません。別にサーミスタでもいいという話です。
考え方としては,測定1回分のデータは,決まった時間の中で出てくるという事が基本になります。かつ,パルスの周期は温度に無関係で一定です。
このICは25度くらいで1200くらいのパルスを送って来ますが,温度の変化でこれが500になっても2000になっても,1回分の時間はほぼ同じです。パルスの周期も同じですから,あいた時間はパルスが出てこない期間となります。
なら,こうしましょう。とにかくパルスの数を数えます。パルス何周期分かの時間を待って,前後のパルスの数を比べてみましょう。もし変わっていればパルスが出続けている,つまりデータの転送中ということになりますから,まだ数え続けます。
もし,前後で値が変わっていなければ,もうパルスは出ていないという事ですから,転送は終了ということになります。すなわちその値が,測定値です。
僅かな電流の変化を,ほんの僅かな電圧変化に変換してマイコンに突っ込むわけですが,ここにはトランジスタによるIV変換を使う事が,データシートでは紹介されています。しかし,コンパレータを内蔵するマイコンなら,直結が可能です。幸い,tiny13Aにはコンパレータがあります。
コンパレータで電圧変化を掴んで,変化があれば割り込みで変数をカウントし数を数えます。しばらく待ってから数を比較してやればいけそうです。
そして,その値を摂氏に変換しないといけません。データシートでは,(パルスの数/16-50)になるということです。すごいですね,ちゃんとリニアリティの補正もすんでいます。
ですから,パルス数が1234だったら,27.125度ということになるわけです。お,小数点が出てきましたね。面倒くさそうです。
LCDは前回と同じデジットの8桁14セグのLCDを使います。