オープンドレインとプッシュプル出力の違い:構成・立ち上がり・ワイヤードAND・用途を比較

どちらもデジタルの信号を出す出力段ですが、Hの出し方が違います。プッシュプル出力は、電源側のpMOSとグランド側のnMOSを組み合わせ、HもLもトランジスタで積極的に出すので、速く、止まっている間は電流もほとんど流れません。オープンドレイン出力はグランド側のnMOSだけを持ち、Lは引き下げますが、Hは出力を切り離してプルアップ抵抗で引き上げます。立ち上がりは遅くなりますが、複数の出力を1本の線につなげ(ワイヤードAND)、プルアップ先の電圧も選べるので、I2Cや割り込みの線に使われます。

項目プッシュプル出力オープンドレイン出力
出力段の構成電源側のpMOSとグランド側のnMOSの2つ(CMOSのインバータと同じ形)グランド側のnMOSだけ。ドレインが端子に出ていて、電源側には何もない
Hを出すしくみpMOSがオンになり、端子を電源につなぐnMOSをオフにして端子を切り離し(ハイインピーダンス)、外のプルアップ抵抗で引き上げる
Lを出すしくみnMOSがオンになり、端子をグランドにつなぐnMOSがオンになり、端子をグランドにつなぐ(同じ)
立ち上がりの速さ速い。pMOSで充電する遅い。プルアップ抵抗Rと線の容量Cの時定数RCで決まる(例:4.7 kΩと100 pFで約0.47 µs)
立ち下がりの速さ速い。nMOSで放電する速い。nMOSで放電する
複数の出力を1本の線につなぐできない。HとLがぶつかると、電源からグランドへ大きな電流が流れるできる。どれか1つでもLを出すと線がLになる(ワイヤードAND)
電圧の違う回路との接続Hの電圧は自分の電源の電圧で決まる。違う電圧の回路にはレベルシフタが必要Hの電圧はプルアップ先で決まるので、端子の耐圧の範囲で相手の電圧に合わせられる
消費電流止まっている間はほぼ流れない(リーク電流だけ)。切り替えのときに充放電の電流が流れるLを出している間、プルアップ抵抗に電流が流れ続ける(3.3 Vと4.7 kΩで約0.7 mA)
速度の目安数十 MHz以上も出せるプルアップ抵抗と容量で制限される。I2Cでは100 kHz、400 kHz、1 MHzなど
主な用途SPIやUARTの信号、クロック、一般のGPIO、メモリのバスなどの速い信号I2CやSMBus、複数の部品で共有する割り込みやリセットの線、電圧の違う回路への接続、LEDの駆動

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

プッシュプル出力
1つの出力で入力を駆動し、速さや消費電流の小ささが大切なとき。GPIOやSPI、UARTなど、ふつうのデジタルの信号はこちらです。
オープンドレイン出力
複数の部品が同じ線を駆動するとき(I2C、共有の割り込みやリセットの線)、プルアップ先を変えて電圧の違う回路に信号を渡したいとき。
切り替え
多くのマイコンのGPIOは、設定でプッシュプルとオープンドレインを切り替えられます。I2Cに使う端子はオープンドレインに設定し、外にプルアップ抵抗を付けます。

よくある質問

プルアップ抵抗の値は、どう決めますか?

小さくするほど立ち上がりは速くなりますが、Lを出している間に流れる電流が増え、Lの電圧(VOL)も上がります。上限は線の容量と必要な立ち上がり時間から、下限は出力が引き込める電流とVOLの規定から決めます。I2Cでは、数 kΩ(例えば2.2〜10 kΩ程度)がよく使われます。

プッシュプル出力どうしを直接つなぐと、何が起きますか?

片方がH、もう片方がLを出すと、Hの側のpMOSとLの側のnMOSを通って、電源からグランドへ大きな電流が流れます(バスの衝突)。線の電圧も中途半端になり、発熱や素子の破壊の原因になるので、共有する線にはオープンドレインか、出力を切り離せるスリーステートの出力を使います。

I2Cがオープンドレインを使うのはなぜですか?

複数の機器が同じSDAとSCLの線を駆動するからです。受け取った側がSDAをLに引き下げてACKを返す、スレーブがSCLをLに保って待たせる(クロックストレッチ)、複数のマスタが同時に送り始めたときに調停する、といった動作は、どれか1つがLを出せば線がLになるワイヤードANDの性質を利用しています。

オープンコレクタとは、何が違うのですか?

考え方は同じで、出力のトランジスタがバイポーラトランジスタのときにオープンコレクタ、MOSFETのときにオープンドレインと呼びます。どちらもLだけを引き下げ、Hはプルアップ抵抗で作ります。

理解度チェック

オープンドレイン出力の回路を複数、プルアップ抵抗のある1本の信号線につないだときの動作として正しいものはどれか。

  1. A出力どうしが衝突して必ず壊れる
  2. Bどれか1つでも0を出すと線が0になり、ワイヤードANDとして働く
  3. Cどれか1つでも1を出すと線が1になる
答えと解説を見る

正解:B. どれか1つでも0を出すと線が0になり、ワイヤードANDとして働く

オープンドレイン出力は、トランジスタで線をグラウンドに引き下げるか切り離すかの2状態で、1はプルアップ抵抗が作ります。どれか1つでも0を出すと線は0になり、全員が切り離したときだけ1になるワイヤードANDとして働き、出力どうしが衝突しても壊れません。I²Cのバスや割り込み線、異なる電源電圧の回路間のレベル変換に使われます。立ち上がりはプルアップ抵抗と配線容量で決まるため遅くなります。

オープンドレイン出力のプルアップ抵抗の値を小さくしたときの変化として正しいものはどれか。

  1. A立ち上がりは遅くなるが、Lを出力しているときに流れる電流が減り、消費電力が下がる
  2. B立ち上がりは速くなるが、Lを出力しているときに流れる電流が増え、VOLも上がりやすくなる
  3. CHレベルの電圧が、プルアップ先の電源電圧よりも高くなり、受信側の入力の定格を超えやすくなる
答えと解説を見る

正解:B. 立ち上がりは速くなるが、Lを出力しているときに流れる電流が増え、VOLも上がりやすくなる

オープンドレイン出力のHレベルは、出力トランジスタがオフのときにプルアップ抵抗が信号線を引き上げてつくります。立ち上がりの速さは抵抗と配線容量の時定数で決まり、例えば10 kΩと100 pFなら1 µsです。抵抗を小さくすると速くなりますが、L出力時には電源から抵抗を通って電流が流れ、3.3 Vと1 kΩなら3.3 mAになります。この電流がデータシートのIOLの条件を超えるとVOLが規定値に収まらないので、両方を満たす値を選びます。

I2C通信の特徴として正しいものはどれか。

  1. A機器ごとに専用のチップセレクトの線が必要である
  2. B送信と受信の線が別々で、両方向に同時に送れる
  3. Cクロック(SCL)とデータ(SDA)の2本の線に複数の機器をつなぎ、アドレスで通信の相手を選ぶ
答えと解説を見る

正解:C. クロック(SCL)とデータ(SDA)の2本の線に複数の機器をつなぎ、アドレスで通信の相手を選ぶ

I2Cは、SCLとSDAの2本だけで複数の機器をつなぐ同期式のシリアル通信です。マスタは最初に相手の7ビットのアドレスを送り、そのアドレスの機器だけが応答します。線はオープンドレインで、プルアップ抵抗で1に引き上げ、どの機器も0に引き下げられるようにしています。温度センサや加速度センサ、EEPROMなど、速さより配線の少なさが大切な部品に向いています。

  1. I2Cで、データを1バイト受け取った側が、受け取ったことを知らせる方法として正しいものはどれか。
  2. 異なる電源電圧で動く2つのブロックの間で信号を受け渡すときに入れるレベルシフタの役割として正しいものはどれか。

論理回路の練習問題へ

関連する用語の解説

オープンドレイン
出力トランジスタのドレインだけを端子に出し、Lレベルだけを能動的に出力する方式。Hレベルは外付けのプルアップ抵抗でつくるため、複数の出力を1本の線につないだり、電源電圧の異なる回路とつないだりできる。I2Cのバスなどで使われる。
プルアップ抵抗
信号の線を抵抗で電源につなぎ、何も駆動していないときに1の電位に保つための抵抗。入力の端子が浮くのを防ぎ、I2Cの線などにも使う。
I2C
クロック(SCL)とデータ(SDA)の2本の線に複数の機器をつなぎ、アドレスで相手を選ぶ同期式のシリアル通信。線はオープンドレインでプルアップする。

関連する比較