- 締切済み
ADT7310温度センサーのSPI通信での温度データ取得について
- ADT7310(アナデバ温度センサー)の温度データをSPI通信で取得する方法について解説します。
- 基板上の実装ではなく、ケーブルで接続して離れた位置の温度を取得することを考えていますが、1Mになると温度データが取得できない問題が発生します。
- 温度センサーとSPI通信を延長する方法についてご教授をお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- TIGANS
- ベストアンサー率35% (245/681)
回答No.1 です。 ホストはArduinoということでしたが、ライブラリにはADT7310用のスケッチは無いようなので まずはこちらのページを参考にしてみてください。 http://www.wsnak.com/wsnakblog/?p=249 http://www.wsnak.com/wsnakblog/?p=270 http://www.wsnak.com/wsnakblog/?p=679 http://www.wsnak.com/wsnakblog/?p=826 http://www.wsnak.com/wsnakblog/?p=1045 http://independence-sys.net/main/?p=3804 あとSPIのレートは こちらを参考に https://garretlab.web.fc2.com/arduino_reference/libraries/standard_libraries/SPI/setClockDivider.html 最大で通常の32倍遅いレートに設定できますよ。
- nowane4649
- ベストアンサー率54% (230/420)
ツイストであれば動作するということであれば、寄生容量ではなく、ノイズ重畳を疑います。 (ツイストすると2線間の平均距離が小さくなり、寄生容量が増えるため) ノイズによりクロックを誤認識し、通信に失敗している可能性を疑います。 (過去、リレーを用いた同期通信でクロック信号チャタリングでの通信失敗に悩まされた経験あり) 回路全体をシールドしてみて動くか確認してみてください。 (アースに接続したアルミ箔で回路全体をくるむ、アースした金属製の箱に入れるなど) シールドで安定するならケーブルをシールド線に変えるのがお手軽です。 RS422のドライバーとレシーバーの組み合わせやRS485トランシーバーを用いて差動伝送にするという方法もあるにはあります。 以下が参考になりそうです。 http://iizukakuromaguro.sakura.ne.jp/226_ltc1485/226_ltc1485.html
補足
ご教授ありがとうございます。その後調査していて、SPI通信でデータを読むとき、こちらからのクロックの立下りで、ADT7310がデータをセットしてくれます。そして、クロック立ち上がりで、こちら側はデータ判断しますが、どうも、クロックの立下り時にリンギングがあり(1V程度)、これが次の立下りと認識して、次のデータをセット(今のデータをクリア)しているようなのです。 現状、このアンダーシュートのリンギングを取る方向で再度確認しています。
- nowane4649
- ベストアンサー率54% (230/420)
恐らく、ケーブルの寄生容量などでクロック信号のエッジが鈍り、伝送が不安定となっているものと推測します。 また、シングルエンド伝送ですのでノイズ重畳も疑う必要がありそうです。 対策として単純確実なのは、マイコンなどでRS485などの長距離用通信規格に変換してしまうことでしょう。 SPIとしての延長が必要で有れば、適切な終端(インピーダンスマッチング)をした配線を用いた上で、シュミットトリガー回路によりシャープなクロックエッジを再生する方法が考えられます。 また、シングルエンドでなく、差動伝送にすれば、ノイズ耐性を向上できます。 ただ、絶縁型SPIコントローラーICを使う方がコンパクトで簡単かも知れません。
補足
ご教授ありがとうございます。マイコンはArduinoを使用しています。 ケーブル1Mの状態で、計測できている状態とできない状態となり、安定しません。CLOCKラインのケーブルを動かすと、やはり取れたり取れなかったり、変化してしまいます。 CLOCK信号をGNDでツイストしてもっていき、ICのGND端子で共通にすると、動作してくれます。 ただ、ICの所ではプローブでコンタクトするという事情で、ツイストしたGNDラインをICの所で共通にできません。 終端抵抗として、CLOCKラインとツイストしたGNDケーブル間に100Ω程度付けてみたのですが、安定しません。 できれば、SPIとして延長したいのですが、難しいようであれば、他の方法で検討しようと考えますが、その場合、送信先に何かしらの回路が必要ということになりますか? また、何かご教授いただけると助かります。
- TIGANS
- ベストアンサー率35% (245/681)
基本的には2つの手段があります。 (1)SPIの伝送レートを下げる。 SPI通信を行うICのSPIレート設定を下げてみてください。 (2)SPI信号をバッファリングする。 http://akizukidenshi.com/catalog/g/gI-02819/ とかのバッファICを センサ側とホスト側にそれぞれ入れてください。(パスコンも忘れずに) 例では2段直列にして3本の信号を非反転バッファリンスするようにしてください。
お礼
ご教授ありがとうございます。LS14をマスタ側とセンサ側に配置して行ってみましたが、安定しません。オシロでみた波形は綺麗になっていると思われますが。センサーのICのGNDに直接オシロをあたっていると、安定しています。GND-アースでの状況かと思ったのですが、オシロからケーブルを外しても、データが取れます?まったくわかりません。ただ、GNDの状態でデータを受けたり受けなかったりしているようです。 現状対策案がありません。何かありましたら、教えてください。 宜しくお願いします。
補足
ご教授ありがとうございます。 SPI通信レートですが、マイコンはArduinoを使用していて、一番遅い設定にしています。 まずは、LS14でバッファしてみます。
お礼
ご教授ありがとございます。参考にさせていただきます。