記事

I2Cインターフェースのセンサを接続する(3)温度センサTMP102- I2Cバスの負荷抵抗

I2Cバスの負荷抵抗

 旧タイプのTMP102、新タイプのTMP102、I2C電圧レベル変換モジュールの各モジュールに、1kΩのプルアップ抵抗が接続されています。
 I2Cのバス・ラインの制御は、ハイ("H")の出力のときは、各モジュールすべてが出力をHIGHにしてバス・ラインを電源電圧のHIGHの状態にします。ロー("L")のときは、LOWを出力するモジュールが電流を吸い込み、バスに接続した負荷抵抗に電流を流し、負荷抵抗の電圧降下によりバスをLOWレベルの電圧レベルに下げます。

I2CバスのHIGH、LOWレベルの電圧
 I2Cの入力電圧レベルは、

  • 0.7×Vdd以上をHIGHとし
  • 0.3×Vdd以下をLOW

とみなします。そのため出力レベルは、

  • HIGHの出力では0.7×3.3V=2.31V以上
  • LOWの出力では0.3×3.3V=0.99V以下

にする必要があります。HIGHレベルは電源にバスが抵抗でプルアップされていますから、あまり苦労しなくともこの条件を満たせます。

I2CバスをLOWにするための条件
 I2Cバスは抵抗でプルアップされているので、この抵抗の電圧降下で電圧レベルが0.99V以下になるだけの電流を流す能力が必要になります。

 3.3Vから0.99Vの規格上LOWのレベルまで電圧を下げるためには、1kΩのプルアップ抵抗1本で、

 I = E / R =(3.3-0.99)/ 1000 = 2.31mA

       
と2.31mAの電流を吸い込む能力が必要です。3本分だと6.93mA以上の電流を吸い込む必要があります。今回のテストではI2C電流変換モジュール、二つのTMP102モジュールに、それぞれ1kΩのプルアップ抵抗が接続されています。つまり3本の1kΩがプルアップ抵抗として接続されています。

TMP102のバス・ドライブ能力
 TMP102は電源電圧が2V以上のとき、出力電圧が0.4Vで3mAの電流をプルアップ抵抗から吸い込むことができます。
 それ以上の電流が流れた場合については、データが見つかりませんでした。実際の回路の測定結果を示します。

I2Cバスの様子
 TMP102をスレーブ・アドレス0x48に設定し、TMP102から測定温度を読み取ります。その時のI2Cバスの様子を次に示します。
 黄色がSDA信号で青色がSCLの信号の測定結果です。青のSCLの出力電圧はHIGHで約3.2V、LOWで0.6Vの電圧レベルです。このSCLは、基本的にはマスタのArduino側からの信号です。その信号をI2C電圧レベル変換モジュールで変換した出力で、同じ電圧レベルでそろっています。
 SDAの黄色のラインは、

  • HIGHの電圧レベルは約3.2V
  • LOWの電圧レベルは0.2~0.7Vくらい

の値になっています。

 旧タイプのTMP102のモジュールを外して、プルアップ抵抗を2本にしたときの状態を次に示します。
 SDA、SCLのHIGH、LOWの電圧レベルは、プルアップ抵抗3本のときとほとんど変わっていません。TMP102のバスのドライブ能力は思ったよりしっかりしていて、秋月電子通商で購入した、I2Cバス用双方向電圧レベル変換モジュールの搭載されているPCA9306と同等以上のドライブ能力がありそうです。

 今回、I2Cバスの信号レベルについてはI2Cの規格内に入ることを確認しました。次回この信号のフォーマット・タイミングについて確認し、Arduino、TMP102の間でどのようなやり取りを行っているかも確認します。

(2016/9/27 V1.0)

<神崎康宏>

連載メニュー ArduinoにI2Cインターフェースのセンサを接続する

(1) I2Cインターフェースの温度センサTMP102を接続

(2) I2Cインターフェースの温度センサTMP102を接続(2)

(3) I2Cインターフェースの温度センサTMP102を接続(3)I2Cバスの負荷抵抗

(4) I2Cインターフェースの温度センサTMP102を接続(4)I2Cの送受信データ