昨日の続きで、サーミスタで温度を測ります。といっても、回路の方はできているので、後は「計算」するだけ。ちょろい、今日は書くことないかも、などと思っていたら、
それなりにトラブりました
なんでも高をくくっているのはよろしくないようで。
※「IoT何をいまさら」投稿順Indexはこちら
昨日のCypressのアプリケーションノートを読んでいて、結構、感動したのは、Thermistor用に計算用のコンポーネントが既に準備されている、ということでした。ハードウエアではなく、APIを提供するだけの純粋ソフトウエア部品なのですが、回路図上にこの部品を配置すれば「面倒な計算」はお任せできるのでした。
ただ、この部品、結構下の方の目立たぬところに隠れています。Thermal Management というカテゴリの中です。コンフィグしなければ使えないですが、コンフィグのためには、
-
- サーミスタのB定数
- 基準温度(25℃など)でのサーミスタの抵抗値、
- 参照抵抗の抵抗値
が必要です。今回、参照抵抗は適当なものを使ってしまっているので、とりあえずテスタで測った抵抗値を入れておきました。B定数と基準温度での抵抗値はサーミスタのデータシート見れば書いてある筈。今回使用したのは、村田製作所の
NXFT15XH103FA
というもの。データシートを見れば必要な項目は書いてあります。ただし、以下のコンフィギュレーション画面のように、温度に対してサーミスタの抵抗値を入力するような設定画面なので、基準温度以外に2点の抵抗値を求めておかねばなりません。今回は、慌ててEXCELでB定数から計算いたしました。設定値を入力したところ。
しかし、この設定値画面の設定に一発でたどり着いたわけじゃないんであります。最初は、Max 80℃の値を求めて、それを入力してみました。なぜといって、村田製作所のデータシートには、B定数の参考値として25-80℃の値が載っていたからです。(今、気付いたですが、そのB定数で0-50℃の上のポイントを計算してしまっているので、上の数字は要修正!)ところが、以下のようなエラーがでます。
0-80℃だと、駄目だと怒られました。そこで、計算を左のLUT(ルック・アップ・テーブル)からEquationに変更してみました。今度は、コンフィグ画面でエラーは出ず、計算のために大分オブジェクトサイズがでかくなるのかもしれないが、まあいいや、と「高をくくって」ビルドしたところ、今度は、
浮動小数点の関数、logとpowが無いと怒られました。mathライブラリは自動的に使えるようにしてくれないのでしょうかね。ソフトウエア部品をポロリンとやるのだろうか?それとも普通にヘッダをインクルードすれば使える?ちょっと調べたのですが、あまりよく分からなかったので、
今回は見送り
と「素早く」決断、温度範囲を狭めればLUTでダイジョブでしょ、という「高のくくり方」で50℃での抵抗値を計算し、設定してみました。今度はビルドOKです。
動かしてみるとこんな感じ。昨日同様、Ch0はサーミスタ両端の電圧、Ch1は基準抵抗の両端、Ch2はまだ使っていない、オフセット電圧やノイズの補正用の測定値。
今日の追加分は、その下のところからで、Rthは上のサーミスタ計算機が提供するAPIでサーミスタの抵抗値を計算したもの。最後のTemperatureは温度、ただし、0.01℃が1なので、左の2770は、27.7℃の意味。
そんなもんでしょう。
しかし、しばらくすると若干温度上がっています。これは、ずっと電流流しているので自己発熱で温度上昇してしまったんじゃなかろか。よく分かりません。ま、計測するのに必要な期間だけ電流を流すというのは基本ですから、改良点として、電流のON/OFF制御を「また後で」追加することにいたします。一応、温度がちゃんと取れている確認で、また指でサーミスタをつまんでみました。34.6℃、指先だし、妥当な線かいな。
- ADCのオフセットの除去、ノイズ除去
- センサの電流制御
またそのうち。