ダイオード AND を設計してみた [電子工作]
ダイオードは、ふたつの端子に印加される電圧によって電流を流したり流さなかったりできる、いわゆるスイッチング素子です。 この性質を利用して AND 回路を構成するというのが、今回のテーマです。
ダイオードを使った AND の原理
ダイオードを使って2入力 AND 回路を構成するには、図のようにダイオード2本と抵抗一本を使います。 入力電圧のどちらか一方が 0V に落ちると、出力電圧も 0V に落ちるという仕組みです。
しかし、現実には出力電圧は 0V まで落ちません。 それは、ダイオードに順方向電圧降下 (VF) が存在しているからです。 そのため、出力電圧は、入力電圧よりも VF だけ高い電圧になってしまいます。
VOUT = min(VIN1 + VF, VIN2 + VF)
さらに、入力電圧にも注意が必要です。 論理 "0" の信号は、決して 0V を意味するものではありません。 ある素子が論理 "0" を出力した時の電圧は、一般に VOL というパラメータであらわされます。 VOL の値は、部品のばらつき、電源電圧、使用温度、出力に流れ込む電流などにより影響を受けます。 そのため、半導体では「特定の出力電流 (IOL) を流した時の出力電圧値」として、最小値と最大値を定めるのが一般的です。
同様に論理 "1" の信号について IOH 条件下の VOH が定められています。
CMOS の場合
まず、 CMOS ロジックを使用した回路を考えます。 電源電圧は、 VCC=4.5V と仮定します。 ここでは、普通のシリコンダイオードを使ったとして VF=0.7V とします。
代表的な CMOS ロジック SN74HC04 の出力特性は、以下の表のとおりです。
PARAMETER | CONDITION | MIN | MAX | UNIT |
---|---|---|---|---|
VOH | IOH=-20uA | 4.4 | ---- | V |
VOH | IOH=-4mA | 3.84 | ---- | V |
VOL | IOL=20uA | ---- | 0.1 | V |
VOL | IOL=4mA | ---- | 0.33 | V |
この AND 回路の場合、論理 "0" を出力するためにはプルアップ抵抗に電流を流す必要があります。 IOL=4mA と仮定すると、 VOL(MAX)=0.33 ですので、一方の入力が論理 "0" になった時の最大出力電圧は、以下の式であらわされます。
VLOW(MAX) = VOL(MAX) + VF = 1.03V
これを CMOS ロジックで受けます。 論理回路の入力には、「確実に論理 "0" が保証できる電圧 (VIL) の最大値と最小値」が定義されています。 同様に「確実に論理 "0" が保証できる電圧 (VIH) の最大値と最小値」も定義されています。 先の VLOW(MAX) が VIL の範囲内に入っていれば、もっと具体的には VIL(MAX) よりも低ければ、このダイオード AND 回路は動作する事になります。
SN74HC04 の入力特性は、以下の表のとおりです。
PARAMETER | MIN | MAX | UNIT |
---|---|---|---|
VIH | 3.15 | ---- | V |
VIL | ---- | 1.35 | V |
これを見ると、 VLOW(MAX) < VIL(MAX) ですので、この回路は AND 論理として動作する事がわかりました。
逆に論理 "1" となる場合には、入力電圧が VOH(MIN)=4.4V となるため、ダイオードは OFF し、プルアップ抵抗により VCC=4.5V の電圧が出力に現れます。 もちろん、この電圧は論理 "1" と解釈されます。
LS-TTL の場合
次に Low-power Schottky (LS) TTL を使った回路を考えます。 代表的な LS-TTL である SN74LS04 の出力特性は、以下の表のとおりです。
PARAMETER | CONDITION | MIN | MAX | UNIT |
---|---|---|---|---|
VOH | IOH=-0.4mA | 2.7 | ---- | V |
VOL | IOL=4mA | ---- | 0.4 | V |
VOL | IOL=8mA | ---- | 0.5 | V |
論理 "0" を出力する時には、やはりプルアップ抵抗に電流を流す必要があります。 ひとまず、 IOL=4mA と仮定して、あとで検証しましょう。 VOL(MAX)=0.4V; VF=0.7V とすると、 VLOW(MAX)=1.1V です。
一方、 SN74LS04 の入力特性は、以下の表のとおりです。
PARAMETER | MIN | MAX | UNIT |
---|---|---|---|
VIH | 2.0 | ---- | V |
VIL | ---- | 0.8 | V |
つまり、 VLOW(MAX) > VIL(MAX) となってしまい、この回路は AND 回路として働かないという事が判明してしまいました。
ショットキーダイオードを使ったら
問題は、 VLOW(MAX) が高くなってしまうことなので、 VOL(MAX) か VF を低くするしかありません。
そこで、 VF の低いショットキーダイオードを使ってみます。 VF=0.3V と仮定すると、 VLOW(MAX)=0.7V となりますので、ぎりぎり VIL(MAX)=0.8V よりも低くすることが出来ます。
ダイオードでレベルシフトしてみる
VLOW(MAX) が高くなってしまうのは、 VF を持ったダイオードを接続したためです。 であれば、上がってしまった電圧を別の VF を使って低くしてやる事も出来るはずです。 そこで、作成したのがこの回路です。
出力部分にダイオードを追加して、 VF だけ電圧を落とします。 また、レベルシフタが働くように、抵抗を追加して以下のバイアス電流を少し流しています。
IBIAS = (VCC - VF) / (RPU + RPD)
この回路では、ふたつの入力が論理 "1" になった時に出力の論理も "1" になる必要があります。 この時の出力電圧は、以下のように計算されます。
VHIGH = RPD * IBIAS
この電圧が VIH(MIN) よりも高い電圧になることが論理 "1" を出力するための条件なので、
RPD * (VCC - VF) / (RPU + RPD) > VIH(MIN)
ここで、 R
r > 0.98
r = 1.5 と仮定し、 IBIAS < 100uA の条件を与えると、
IBIAS = (4.75 - 0.7) / ((1 + 1.5) * RPU) < 100u [A]
これを満たすには、例えば、RPU=22k; RPD=33k のような組み合わせが考えられます。
論理 "0" を出力する場合の電圧電流は、このようになります。
ふたつの入力が同時に変化すると
これら二つの入力が、同時に変化する同期カウンタの出力に接続されると、どうなるかを考えてみました。 まず、ふたつの入力電圧を二次元グラフの X-Y にとり、その時の出力電圧をプロットします。 まずは、 LS-TTL で一般的なダイオードを使った場合です。
出力電圧が VIH(MIN) より高くなる領域を「赤」で、 VIL(MAX) より低くなる領域を「青」で表現しています。 その間の灰色の領域は、この出力を受信する素子の特性により、論理 "1" にも "0" にもなりうることを意味しています。 ふたつの入力信号の電圧が、 VOL(MAX) と VOH(MIN) の間を同時に変化すると、図の直線の軌道を通ります。 始点と終点が、灰色の領域にあるので、そもそも、論理が定まっていない事がわかります。 さらに、軌道の途中で「赤」の領域を通過しているため、この回路では「必ず論理 "1" のグリッチが発生する」という事がわかります。
次にショットキーダイオードを使った場合です。 「赤」の領域を通ることはありませんが、「赤」に近い不定領域を通過しているため、論理 "1" のグリッチが出る可能性が高くなっています。
最後は、ダイオードでレベルシフトした場合です。 さらに「赤」の領域から遠い場所を通過していますが、不定領域を通っている事に代わりはありません。 もし、論理 "1" のグリッチを確実に抑制したいのであれば、 AC 的に出力信号の立ち上がり時間を長くした方が良いようです。
コメント 0