プログラミング素人のArduino

技術屋の末端。プログラミングは専門外。 電気回路も専門外です。 コードに間違いなど見つけられたら、気軽にコメントください。 VC#、ラズパイ始めました。

オープンコレクタとプルアップ抵抗

オープンコレクタというものを教えてもらったので紹介します。


=======================================================
■目的
とある電子機器からある信号(トリガー)を取り出し、外部機器に入力する。
外部機器はその信号のOn/Offに応じた高圧出力を出す。

■設計内容
対象の電子機器にはオプション接続用の信号回路が出ていて「オープンコレクタ」という仕様になっている(3.3V)。
ここに、別の常時5Vが出力しているラインを引っ張ってきて、リレー回路を作る。
外部機器は「Low On」という仕様で0Vのとき出力On、5Vのとき出力offとなる。
電子機器は高圧が欲しいときにOn信号をだす。
=======================================================

つまり、対応したOn/off信号があるので、これを反転させて、リレーで増幅するということになります。


これは、トランジスタを使えばできそうなことは予想できます。
ただし、入力と出力が反転しているので、私が知っているNPNトランジスタの使い方ではできないような気がしました。
これまでのNPNトランジスタの使い方では、ベース信号がON(たとえば+3.3)のときコレクタが+5Vになります。

f:id:s51517765:20170826164629j:plain


下図が電子機器のなかに組み込まれているオープンコレクタに関する回路図です。
点線の部分は電子機器のなかにオプション用として組み込まれています。
わたしにとってはブラックボックスですが、NPNトランジスタでリレーが組めるようになっています。
コレクタの部分が端子として出ています。
ここのトランジスタへの入力が3.3Vです。

 

f:id:s51517765:20170826164454j:plain



コレクタを「プルアップ抵抗」をつかって5Vに接続します。
コレクタを信号出力に接続します。

このようにすることで、ベースがOnのとき、エミッタとコレクタが繋がるので信号出力はグラウンドに落ちるのでoffになります。
一方、ベースがoffのときエミッタとコレクタは切断されるので、プルアップ抵抗を通じて、信号出力は5Vになります。
このようにして、内部で3.3Vしか持っていない信号を5Vに変換することができます。

ここで、外部機器は5Vの"digitalRead" でOn/offになる仕様です。
0Vのときは明確に、グランドに繋がるので、0Vですが、5Vのときはたして5Vなのでしょうか?

5Vが欲しいとき、5Vと抵抗をはさんで繋がっているので、電流が流れて抵抗による電圧降下が起きると5Vではなくなると考えられます。

しかし、digitalReadが厳密に5Vを必要としなくともHighとなることと、一般に外部機器のインピーダンスが高いことから電流は小さく、10kΩの抵抗での電圧降下はきわめて小さいのでon/offを検出できるようになっているのだそうです。

参考 プルアップ抵抗 Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E6%8A%B5%E6%8A%97

回路図を作ってみることにしました。
回路図のフリーソフトとして、以下のものを試してみました。
水魚堂の回路図エディタ