2018年7月3日火曜日

ADT7420とDS18B20


 ざっくりと熱結合させて計測してみた。
 最初に急激に温度が上がってるのは手で触れてたから。その後は似たような傾きで温度が下がっている。傾きがほぼ同じなので、ある程度熱結合できている、と言えるはず。

 ADT7420はI2C、DS18B20は1wireだけど、ADTは手で触れてたときにsignビットが反転してる。1wireは後半時々変な値になる。
 I2Cも1wireもバスに異常があればそもそも通信が不可能なので、接続は問題ないはず。1wireはCRCチェックがあるので、偶然なシングルビットエラーが起きてもCRCチェックでエラーとなり弾かれるはず。

 DS18B20が異常値となったときの数値は85℃だった。これはDS18B20の温度レジスタのリセット値の値なので、どうやら温度変換が正常に行えていないっぽい。
 DS18B20はステータスレジスタが無いっぽいので、85℃が本当にその温度なのか、変換が行えていなくてその温度になっているのかの切り分けができない(変換終了ビットが無い)。


 温度の差を見てみると、DSのほうが0.25℃ほど高く出てる。データシートによるとDS18B20の標準エラーカーブは25℃付近でmean errorが-0.2℃、σ3が+0.05℃ -0.45℃、といったあたり。
 ADT7420は25℃付近(3V時)で±0.05℃程度、最大精度範囲が±0.25℃、という感じ。
 おそらくADTのほうが信頼度が高いはず。またADTのほうが分解能が高い(3bit分)。
 ただADT7420はパッケージが扱いづらく、ストリナの基板はピラピラして面倒。
 変換時間は双方1Hzなので同じ。ADTは高速変換(4Hz?)モードもあるけど、精度が怪しいらしい(未確認)。

 ADT7420はI2CなのでMCUに2ピン必要。
 DS18B20は基本的に1ピンでいいけど、UARTを使った1wireドライバを作ろうとすると2ピンが必要になる。
 STM32の場合、I2Cは比較的低コストで使えるはず。1wireの場合はQueueやRTOSで1bitずつ制御するので若干多くリソースが必要。

 基本的に温度の計測にはDS18B20を使って、精度が必要な部分だけADT7420を使う、というふうにするべきなんだろうな。

追記:2018/07/12
 DS18B20をパラサイトパワーで使用し、ストロングプルアップが足りない場合、温度が高く出る傾向がある。気がする。極端に足りない時は実際の温度より20℃とか100℃とか、極端に離れた値になる。上のグラフではそこまで極端ではないが、もしかしたらストロングプルアップが不足しているために温度が高めに出ている、という可能性がある。

0 件のコメント:

コメントを投稿