レベル変換 (9) I2C その4 PCA9515

 ここで利用するPCA9515は、電源電圧3.3Vで動作するI2Cバス・リピータです。秋月電子通商で入手しました。双方向バッファが2組入っています。リピータは、波形が崩れたりしているところで信号を強化する目的で用いられます。したがって、レベル変換を目的としていませんが、I/Oポートが5Vトレラントなので、結果として3.3Vと5Vのレベル変換に利用できます。

PCA9515のおもな特徴

  • 電源電圧 3.0~3.6V、信号端子は5Vトレラント
  • 動作速度 最大400kHz
  • イネーブル端子付き

 DIP化変換基板にはんだ付けして利用します。

●I2C信号の電圧

 I2CのHIGH/LOWの電圧です。

  規定 電源5V 電源3.3V
LOW Vil 0.3*Vdd以下 1.5V 0.99V
HIGH Vih 0.7*Vdd以上 3.5V 2.31V

 I2Cの信号は電源電圧へプルアップして利用します。5Vのマイコンでは5Vへ、3.3Vのセンサでは3.3Vです。したがって、2本の信号がつながるデバイスの電源電圧が異なる場合は、途中にレベル変換回路が必須です。

信号の方向

 Arduino UNOを利用するときは、マスタの役割をします。センサなどはスレーブです。クロックSCLはマスタがスレーブに対して送ります(一方向)。双方であっても不都合はありません。

 データのSDAはマスタとスレーブで双方の伝送が行われます。したがって、5Vと3.3Vのレベル変換では、双方向対応の回路を選びます。

接続

 3.3Vで動作するBME280は温度、湿度、気圧が測れるセンサで、秋月電子通商からボードを入手しました。

 BME280ボードのジャンパJ1、J2はプルアップ抵抗(4.7kΩ)を有効にするにはショートします。前の実験でショートしていたのでそのまま使いました。
 J3はショートするとVddとつながり、I2Cインターフェースが有効になります。SDOはI2Cのスレーブ・アドレスの設定端子で、デフォルトの0x76にするためにGNDへつなぎます。Vddへつなぐと0x77になります。
 SDIはI2CのSDA信号を、SCKはI2CのクロックSCLをつなぎます。

 PCA9515 DIP化ボードはプルアップ抵抗はありません。センサ側には4.7kΩのプルアップ抵抗が入っているので外付けはしません。Arduino UNO側には1kΩのプルアップ抵抗を追加配線します。

 EN信号は、TIのマニュアルによると内部でプルアップされていて有効状態なので、配線しません。

スケッチ

 ライブラリの導入は「レベル変換 (6) I2C その1 MOSFET 」を参照してください。スケッチも同様に、bme280_exampleを読み込んで動かしました。

 実行結果です。

 Analog Discovery2を使って、これらの実験中の波形を示します。画面の上側ブロックがアナログ信号です。オレンジ色がArduino UNOのクロックSCL波形で、青色がレベル変換したデータSDAの波形です。
 下側のブロックはI2Cのデータをデコードして表示する画面です。オシロスコープのチャネル1(オレンジ色)にDIO2ピンを、オシロスコープのチャネル2(青色)にDIO1ピンをつないでいます。

 Arduino UNOのSCLはLOWが0.1V、HIGHが4.0Vです。BME280側のLOWは0.1もしくは0.5V、HIGH3.3Vです。

 LOWが少しガタガタになっていますが、拡大ししてみると、0.1VがスレーブのBME280のLOWで、0.5VがPCA9306のLOWだと思われます。0.5VでもI2CのVilは十分満たしているので問題はありません。

 

前へ

レベル変換 (8) I2C その3 PCA9306

次へ

レベル変換 (10) I2C その5 ISO1541D