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

 ここで利用するテキサス・インスツルメンツの ISO7221BDG4は、2チャネル・アイソレータと呼ばれています。RSコンポーネンツで入手し、DIP化変換基板にはんだ付けしました。一方向の絶縁されたバッファが2組入っています。それぞれの方向は逆です。同じ方向の2組入っているのが ISO7220です。

 型番の数字の後ろはスピードなどを表しています。Aは1.5Mbps、Bは10Mbps、Cは25Mbps、Mは150Mbpsです。Dはパッケージを表しているようですが、現時点のデータシートにはSOIC形状一つしかありません。

ISO7221BDG4のおもな特徴

  • 電源電圧 A側、B側ともに3~5.5V
  • 入力レベル スレッショルド1.5V
  • 動作速度 10MHz

 OPアンプ用の変換ボードは入出力は入り乱れているので、アイソレータとしては絶縁電圧はまったくカタログ通りにはなりません。DC的に分離できていると考えて利用しました。

接続

 「5Vで動作するArduino UNO」と「3.3Vで動作するラズパイ」を双方向でつなぎます。ラズパイ側の電源Vcc2は絶縁DC-DCレギュレータの出力3.3Vをつなぎます。
 3.3V電源はラズパイからもらえばよいのですが、そうすると配線が1本増えて、4本になります。TTLレベルの配線ですが、マイコン・ボード間は約3mのケーブルで接続しました。

 Arduino UNOはSoftwareSerialを利用し、Rxが10番、Txは11番です。
 ラズパイのTxは8番ピン、Rxは10番ピンです。

Arduinoのスケッチ

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
Serial.begin(9600); // ハードウェアシリアルを準備
Serial.println("Ready");
mySerial.begin(9600); // ソフトウェアシリアルの初期化
mySerial.println("Hello, world?");
}

void loop() { // run over and over
delay(1000);
mySerial.write("123"); Serial.print("send 123 ");
if (mySerial.available()) {
Serial.print(" Received");Serial.println(mySerial.read());
}
}

ラズパイのプログラム

 カーネルは4.14.71(2018/10/13現在)です。
 メイン・メニューの設定からRaspberry Piの設定-インターフェイスのタブを選び、Serial Portを有効Serial Consoleを無効にします。
 リブート後に/boot/config.txtをsudo nanoで開くと、最下行にenable_uart=1が追加されています。この下の行に、dtoverlay=pi3-miniuart-btを追加して、CTRL+oで書き込み、CTRL+xで抜け、rebootします。

 ラズパイ3、Raspberry Pi Zero WなどではBluetoothが搭載されていて、デフォルトで有効になっている代わりに、GPIO14/15のTxD/RxDが使えなくなっています。/boot/overlay/READMEに書かれているように、デバイス・ドライバpi3-miniuart-btの記述を追加します。Bluetoothは使えなくなり、/dev/ttyAMA0および/dev/serial0のUARTが有効になります。

import serial
import time

con=serial.Serial('/dev/serial0', 9600, timeout=10)

while 1:
con.write("1234\n")
print(con.read())
time.sleep(0.1)

 Arduino UNOのシリアルモニタです。ラズパイからの1234\nを受信しています。

 ラズパイのターミナルです。Arduino UNOからの123を受信しています。

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

 Arduino UNOのTxはLOWが-0.1V、HIGHが4.6Vです。ラズパイ側のLOWは0.2V、HIGH3.7Vです。問題なく通信できています。

 ここでは3.3V側の電源を別途用意しましたが、ADUM6211のように絶縁電源を内蔵した製品を使うと、コンパクトに実装できます。

前へ

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

次へ

レベル変換 (13) UART その8 Arduino UNOと双方向 ADUM1201CRZ