レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

AVRに温度センサーが内蔵されていた

2020年12月08日 | 電子工作

最近になってAVRのデータシートに目を通すようになり新たに知ることが色々あったのですが、一番ビックリしたのが温度センサーが内蔵されていたことです。A/D変換のときのアナログ入力端子の選択をするためにADMUXレジスタを設定するのですが、データシートに記載されている設定値に温度感知器という選択項目がありました。
最初は外部の温度センサー専用の設定かと思ったのですが、よく読んでみると温度感知器(温度センサー)が内蔵されていることが分かりました。
全てのAVRではありませんが、手持ちのATtiny85とATMega328Pには入っていました。(ATtiny13Aには無かった)
データシートによると測定精度は±10°Cとのことだったので実用性は今一つのようですが、どんなものか実際に温度測定してみたくなりました。

使い方はA/D変換のときのアナログピンを選択する替わりに、センサーを選択するだけです。ただし、基準電圧は内蔵の1.1Vを使う必要があるようです。アナログ入力は前に温度センサーを使った方法だと精度が低すぎたので、今回は前回行ったスリープを使った雑音低減機能による測定を行ってみます。

AVRにはATtiny85を使います。ATtiny85は前回のATtiny13Aと違ってフラッシュメモリの容量が大きく、浮動小数点数演算も行えるので取得したデータから温度を計算するのは簡単です。スケッチもすぐに作成できました。

ATtiny85ThermometerInternal.ino


コンパイルにはATTinyCoreを使います。設定は以下の通り。

動作周波数は1MHzで、念の為ArduinoIDEで"ブートローダーを書き込む"を実行してヒューズビットの書き換えを行います。

内蔵の温度センサーを使うので外部につなぐものは何もありませんが、温度表示のため前回と同様に自作のLCDデバイスを使いました。



取得したアナログ値から温度を求める計算式は、データシートによると

T(温度) = k × アナログ値 - TOS

となっていました。k は1.0に大変近いと書いてあったので今回は無視することにします。TOSはオフセット値とありましたが、この値は測定環境によって調整するものと解釈したので、手持ちの電気を使わない温度計を基準にして289という数値を入れてみました。この計算式でエアコンを使ったりしてしばらく部屋の温度を測定してみたところ、誤差は+1〜+3℃くらいでした。±10℃の精度にしてはわりといい結果ですね。ただし、比較に使用した温度計がどの程度正確なのか分かりませんが。



こうなると、前に使った温度センサーMCP9700と比較したくなります。



センサーはADC3(PB3)につなぎ、測定方法は内蔵センサーと同じです。精度を上げるためMCP9700の電源には0.1μFの電解コンデンサも入れました。



スケッチはこちら。ボードの設定も上記と一緒です。

ATtiny85Thermometer.ino

温度を計測してみると、温度計と比較してほぼ+1℃程度の誤差でした。前の測定のときは最大で5〜6℃も誤差があったので内蔵基準電圧+雑音低減方式だとかなりの精度で計測できることがわかります。
内蔵の温度センサーと比べても精度は高いですね。これなら温度計として使えそうです。

せっかくなのでATtiny13Aでも試してみました。

スケッチはこちらです。

ATtiny13Thermometer.ino

スケッチのコンパイルにはMicroCoreを使います。ボード設定は以下の通り。

ヒューズビットを書き換える為に、最初にブートローダー書き込みを行っておきます。

ATtiny13Aは浮動小数点数演算が使えないので、前回と同様の方法で計算を行っています。配線については上記のATtiny85と全く同じです。

温度を測定すると、温度計と比較してほぼ-1℃程度の誤差でした。たまに温度計と一致することもあったりして、ちょっと驚きました。誤差±4°Cのセンサーでここまで正確に測定できると、比較に使っている温度計の方の精度を疑ってしまいます。それとも、たまたま良いセンサーにあたった?
でも、これなら立派に温度計として使えそうです。そのうち作るかもしれません。

いずれにしろAVRの内蔵温度センサーの方は温度計としての実用性は低そうです。ただ補正値しだいで温度変化の目安くらいには使えそうですね。ある程度の温度をしきい値にして動作させるなんていう使い方も面白そうです。

しかし、ATtiny13Aのアナログ入力は優秀ですね。センサー類を使うときはATtiny13Aにつなぐのが良さそうです。



最新の画像もっと見る

コメントを投稿