レベル変換 (11) I2C その6 ADuM2251ARWZ

 ここで利用するアナログ・デバイセズのADuM2251ARWZは、I2Cアイソレータと呼ばれています。RSコンポーネンツで入手し、変換基板にはんだ付けしました。双方向の絶縁されたバッファが一組、1方向の絶縁されたバッファが一組入っています。双方向の絶縁されたバッファが2組入っているのがADuM2250です。
 1側と2側では別々の電源を利用できるので、レベル変換に利用できます。

ADuM2251ARWZのおもな特徴

  • 電源電圧 1側、2側;3.0~5.5V
  • 入力スレッショルド 1側SDA/SCLは0.7V(max)、2側SDA/SCLは0.3*Vdd2(max)
  • 動作速度 最大1MHz

 信号の入力は5Vトレラントではありません。NCはNo Connectの省略形で、通常何もつなぎません。
 変換ボードは裏側にも不要なパターンがあるので、アイソレータとしては絶縁電圧はまったくカタログ通りにはなりません。DC的に分離できていると考えて利用しました。

●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本の信号がつながるデバイスの電源電圧が異なる場合は、途中にレベル変換回路が必須です。

信号の方向

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

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

 英語のRev.Dのマニュアルでは正しいですが、日本語のマニュアルの「表10. ADuM2251のピン機能」の説明は間違っています。ADuM2250の表9をコピペしています。6番ピンは「クロック出力、サイド1」、11番ピンは「クロック入力、サイド2」です。また、表9、表10とも電源の14番ピンの電圧が間違っていて、3.0~5.5Vが正しいです。

接続

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

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


 1側をArduino UNOへ、2側をBME280へ接続しました。Arduino UNO側には10kΩのプルアップ抵抗を入れました。BME280はボード上で4.7kΩが入っています。

 アイソレーションはしないのでGNDは共通です。アイソレーションを行うためには、2次側の電源を別途用意します。アイソレーション電源が内蔵されたデバイスも販売されています。

スケッチ

 BME280は、ライブラリを利用します。ライブラリの導入は「レベル変換 (6) I2C その1 MOSFET 」を参照してください。スケッチも同様に、bme280_exampleを読み込んで動かしました。このライブラリは、スレーブ・アドレス0x76で通信します。

 実行結果です。

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

 Arduino UNOのSCLはLOWが0V、HIGHが3.8Vです。BME280側のLOWは0.2V、HIGH3.5Vです。問題なく通信できています。

入出力を入れ替える?

 ADuM2250であれば、2次側をArduino UNOに、1次側をBME280に入れ替えて同じ実験ができます。ADuM2251ではSCLが逆方向になるので、信号がやり取りできません。

アイソレーションをする

 3.3V側の電源を、絶縁型のDC-DCコンバータIK0503SAを利用して用意しました。

 接続です。

 波形です。
 Analog Discovery2のプローブ1とプローブ2のグラウンドは、1側と2側のGNDへそれぞれ分離して接続しています(差動入力タイプ)。測定時はGNDを共通にしています。ディジタル・ピンのGNDはプローブ1のGNDにつないでいます。問題なく通信できています。

 DC-DCコンバータの絶縁耐圧は1000Vです。ADuM2251ARWZの絶縁耐圧は5000Vです。たとえば、DC-DCコンバータ内蔵のLTM2883などを利用すれば、全体の耐圧が上がり、コンパクトに実装できます。
 ノイズが多い環境などでは、アイソレーションは欠かせませんが、電子工作ではほとんど使われないと思います。

前へ

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

次へ

レベル変換 (12) UART その7 Arduino UNOと双方向 ISO7221BDG4