回答 受付中

温度センサー ADT7310 SPI通信について

  • 困ってます
  • 質問No.9556180
  • 閲覧数125
  • ありがとう数6
  • 気になる数0
  • 回答数4

お礼率 63% (12/19)

ADT7310(アナデバ温度センサー)の温度データをSPI通信で取得するのですが、
基板上の実装ではなく、ケーブルで接続して離れた位置の温度を取得したいのですが、20cm程度であれば問題ないのですが、1Mになると、温度データが取得できません。こちらからのコマンドを受けつけていないようです。
何か延長する良い方法ありましたら、ご教授をお願い致します。

回答 (全4件)

  • 回答No.4

ベストアンサー率 35% (57/161)

回答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倍遅いレートに設定できますよ。
お礼コメント
reset_sw

お礼率 63% (12/19)

ご教授ありがとございます。参考にさせていただきます。
投稿日時 - 2018-11-11 08:58:58
感謝経済
  • 回答No.3

ベストアンサー率 51% (35/68)

ツイストであれば動作するということであれば、寄生容量ではなく、ノイズ重畳を疑います。
(ツイストすると2線間の平均距離が小さくなり、寄生容量が増えるため)

ノイズによりクロックを誤認識し、通信に失敗している可能性を疑います。
(過去、リレーを用いた同期通信でクロック信号チャタリングでの通信失敗に悩まされた経験あり)

回路全体をシールドしてみて動くか確認してみてください。
(アースに接続したアルミ箔で回路全体をくるむ、アースした金属製の箱に入れるなど)
シールドで安定するならケーブルをシールド線に変えるのがお手軽です。

RS422のドライバーとレシーバーの組み合わせやRS485トランシーバーを用いて差動伝送にするという方法もあるにはあります。
以下が参考になりそうです。
http://iizukakuromaguro.sakura.ne.jp/226_ltc1485/226_ltc1485.html
補足コメント
reset_sw

お礼率 63% (12/19)

ご教授ありがとうございます。その後調査していて、SPI通信でデータを読むとき、こちらからのクロックの立下りで、ADT7310がデータをセットしてくれます。そして、クロック立ち上がりで、こちら側はデータ判断しますが、どうも、クロックの立下り時にリンギングがあり(1V程度)、これが次の立下りと認識して、次のデータをセット(今のデータをクリア)しているようなのです。
現状、このアンダーシュートのリンギングを取る方向で再度確認しています。
投稿日時 - 2018-11-11 08:55:12
  • 回答No.2

ベストアンサー率 51% (35/68)

恐らく、ケーブルの寄生容量などでクロック信号のエッジが鈍り、伝送が不安定となっているものと推測します。
また、シングルエンド伝送ですのでノイズ重畳も疑う必要がありそうです。

対策として単純確実なのは、マイコンなどでRS485などの長距離用通信規格に変換してしまうことでしょう。

SPIとしての延長が必要で有れば、適切な終端(インピーダンスマッチング)をした配線を用いた上で、シュミットトリガー回路によりシャープなクロックエッジを再生する方法が考えられます。
また、シングルエンドでなく、差動伝送にすれば、ノイズ耐性を向上できます。

ただ、絶縁型SPIコントローラーICを使う方がコンパクトで簡単かも知れません。
補足コメント
reset_sw

お礼率 63% (12/19)

ご教授ありがとうございます。マイコンはArduinoを使用しています。
ケーブル1Mの状態で、計測できている状態とできない状態となり、安定しません。CLOCKラインのケーブルを動かすと、やはり取れたり取れなかったり、変化してしまいます。
CLOCK信号をGNDでツイストしてもっていき、ICのGND端子で共通にすると、動作してくれます。
ただ、ICの所ではプローブでコンタクトするという事情で、ツイストしたGNDラインをICの所で共通にできません。
終端抵抗として、CLOCKラインとツイストしたGNDケーブル間に100Ω程度付けてみたのですが、安定しません。
できれば、SPIとして延長したいのですが、難しいようであれば、他の方法で検討しようと考えますが、その場合、送信先に何かしらの回路が必要ということになりますか?
また、何かご教授いただけると助かります。
投稿日時 - 2018-11-09 19:36:53
  • 回答No.1

ベストアンサー率 35% (57/161)

基本的には2つの手段があります。
(1)SPIの伝送レートを下げる。
 SPI通信を行うICのSPIレート設定を下げてみてください。
(2)SPI信号をバッファリングする。
 http://akizukidenshi.com/catalog/g/gI-02819/ とかのバッファICを
 センサ側とホスト側にそれぞれ入れてください。(パスコンも忘れずに)
 例では2段直列にして3本の信号を非反転バッファリンスするようにしてください。
補足コメント
reset_sw

お礼率 63% (12/19)

ご教授ありがとうございます。
SPI通信レートですが、マイコンはArduinoを使用していて、一番遅い設定にしています。
まずは、LS14でバッファしてみます。
投稿日時 - 2018-11-09 19:52:38
お礼コメント
reset_sw

お礼率 63% (12/19)

ご教授ありがとうございます。LS14をマスタ側とセンサ側に配置して行ってみましたが、安定しません。オシロでみた波形は綺麗になっていると思われますが。センサーのICのGNDに直接オシロをあたっていると、安定しています。GND-アースでの状況かと思ったのですが、オシロからケーブルを外しても、データが取れます?まったくわかりません。ただ、GNDの状態でデータを受けたり受けなかったりしているようです。
現状対策案がありません。何かありましたら、教えてください。
宜しくお願いします。
投稿日時 - 2018-11-10 11:57:46
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ