ラズパイでのオープンドレイン出力

科学
MOSFET

この記事では、ラズパイのオープンドレイン出力を実現する方法について書いています。

オープンドレイン出力とは

簡単に言うと、出力を1に設定するとピン-GND間がHi-Zに、出力を0に設定するとピン-GND間がショートするような出力方式のことです。勉強し始めた頃、私は、

電圧が出ないのになんで出力なの?

と、かなり惑わされました。この方式は、別な表現をすると、スイッチの開閉情報を出力する方式と言えます。

説明

私がわざわざ説明するより、数多の良いサイトがありますので紹介します。

英語が苦手でなければ、こちらの動画がおすすめです。

GPIO Output Mode: Working of Open Drain Configuration

オープンドレイン出力が必要な理由

アケコンのレバーもボタンも、単純なON/OFFスイッチです。このスイッチの先にUSB変換基盤があり、その基盤がパソコンなりプレステなりにつながっています。今回は、既設の回路に新たなスイッチを並列接続して、元々のボタンと新たなスイッチの両方が効くような回路にしたいと考えました。したがって、ラズパイからアケコンに情報を出力する際には、電圧を出力する普通のCMOS出力ではなく、オープンドレイン出力が必要です。駆動電圧の異なるマイコンの出力同士を直接論理和でつなぐときによく用いられ、これはwired ORと呼ばれます。

ラズパイでのオープンドレイン出力

技術資料

マイコンへの入出力を接続する時には、まず回路図や電気的特性を確認することが必要ですが、ラズパイにはメインチップのポート内部回路や電気的特性を表す公式マニュアルなどがなく、使い込もうとすると、少々心許ないです。それでも参考になるものは多少あります。

ただどちらも網羅性が低く、全てのスペックがわかるようなものになっていません。また、オープンドレイン出力をサポートしているかは明記されていません。

なので、あとはもうやってみるしかありません。

普通の出力ポートとしての使い方

まずは普通のCMOS出力の方法を確認しておきましょう。

  1. ポート方向レジスタを”出力”に設定する。
  2. 出力データレジスタを”0″または”1″に設定し、HiまたはLoを出力する。

というオーソドックスな手順で0Vまたは3.3Vを出力できます。

ではオープンドレインは?

オープンドレインとして使うために、いろいろ調べていましたが、最終的にはラズパイのフォーラムにお世話になりました。

ラズパイでのオープンドレインの模擬方法
  1. 安全のため、方向レジスタを[入力]、出力データレジスタを[0]にしておく
  2. 出力する
    • 出力HiZにしたいとき:方向レジスタを[入力]にする
    • 出力GNDにしたいとき:方向レジスタを[出力]にする
  • 出力データレジスタ[1]のときは方向レジスタ[出力]時にポートに3.3Vが現れ、外部に接続したデバイスの電圧と異なる場合は問題がある。そこでその前に、出力データレジスタを[0]にしておけば、方向レジスタ[出力]時にはGNDに接続されることになるので安全である。
  • また、CMOS入力はHiZなので、方向レジスタ[入力]時にはHiZとなる

以上の方法で、非公式にですが、オープンドレイン出力を実現できます。

ここで面白いと思ったのが、出力データレジスタではなく、方向レジスタを操作することによって、入出力を制御している点です。書き間違いじゃないですよ。

おわりに

いよいよ、実際にラズパイとアケコンを接続して、オープンドレイン出力制御ができるかやってみます。成功すれば、ラズパイから昇竜拳が出せるはずです。ただ、その前に結線が必要なので、次はその結線を行っていきます。

コメント

Bitnami