2018年12月18日火曜日

TSYS01がごくたまにエラーになる


 ごくたまに、TSYS01がNACKになったり、-510℃という温度センサのレンジ外どころか、絶対零度をも下回るような結果を出す時がある。
 ライブラリの構成上、基本的にNACKエラーを検出すると+nanを返している(係数の読み出しに失敗したときも+nanになるが、その場合はすべてのサンプルがnanになるので、NACKと区別できる)。

 FFT結果がおかしいなーと思って調べて気がついた。

 トータルで8万サンプルほど取ったが、このうちNACKが13回、異常値読み出しが6回あった。異常値読み出しは必ずNACKの直後のサンプルになっている。

 まず-510℃という異常値だが、これはraw値0をこの温度センサの校正値で補正したときの温度に一致する。つまり、ADC結果を読み出したときにゼロを読むと、-510℃という値になる。

 ではなぜゼロが読み出されるか。
 不明。謎。

 次にNACKエラー。これに関しては 1) バスが接続されていない 2) センサの電源が切れている 3) その他 の3種類が考えられる。1と2を合わせてハードウェアエラーとも考えられる。
 マイコン側のバスが異常な状態になった場合、おそらく復帰はできず、それ以降はつねにNACKになるはずだが、実際はそうなっていないし、別のI2Cセンサも読めているから、マイコンのI2Cコントローラーが死んでいる、ということではないはず。
 また、マイコンに近い側の接触不良であれば、他のI2Cセンサも同様に読み出し不良となるはずだが、そうはなっていない。ということは、TSYS本体に近い部分での接触不良等が考えられる。

 1回だけ、NACKが連続して検出されているところがある。4回のNACKエラーで、1Hzで計測しているから、4秒から6秒弱の間センサが応答できなかった。


 いままで、ワイヤハーネスでの接触不良というのは(ピンアサインのミスとかを除けば)経験したことがない。よほど下手に作らない限りは、作って数日で接触不良になる、なんてことはないはず。振動するような環境でもないし。


 腑に落ちる原因がわからないのが嫌だなー。

 とりあえず、このセンサは通常の動作でゼロが読み出されることはないはずだから、NACKとraw値ゼロはエラーとする、みたいな処理にしてやれば、異常値は取り除ける気がする。


 そう考えると、計測値にCRCとADCbit数がついてくるDS18B20は便利なんだよなぁ。ビットエラーはCRCで取り除けるし、ADCbit数の異常もチェックできるし。
 ADT7420はリセット時が13bitだから、何らかの原因でセンサがリセットされると、ほしい分解能が得られなくなってしまう。
 TSYS01は何も設定するところがないので、分解能の変化はありえないけど、I2C転送中のビットエラーは検出できない。


 そういえば、TSYS01の動作確認をしているときに、時々不思議な挙動をすることがあったな。あちこち触ってる間に普通に読めるようになってたので放置してたけど、そのあたりしっかり確認しておいたほうがいいかも。

0 件のコメント:

コメントを投稿