サイトマップ

回路の素101 064 ロー・サイド バイポーラ・トランジスタ使用

回路の素101 064 ロー・サイド バイポーラ・トランジスタ使用

正電源に接続された負荷の駆動、デジタル信号の論理反転、レベル変換、などに使用される

回路図作成

  • 基本的な構成

NPN型トランジスタ
OFFだと、出力は浮き、Vcc(5V)になり、負荷に電流は流れない
ONだと、出力がエミッタを通して接地され、負荷に電流が流れる

ON時の出力端子(コレクタ)の電圧は、トランジスタのコレクタ-エミッタ間の飽和電圧分( V_{CE} )高くなる

応答性確認

シミュレーションを tranモード(デフォルト) で実行し、応答を見る

import matplotlib.pyplot as plt
import numpy as np

from PyLTSpice import RawRead

fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1)

fname = 'PrimaryCircuit7-064.raw'
LTR = RawRead(fname)
x     = LTR.get_trace('time').get_time_axis(0)

tmp1  = LTR.get_trace('V(vin+)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vin+')
tmp1  = LTR.get_trace('V(vout)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vout')

tmp1  = LTR.get_trace('I(Rl)').get_wave(0)
ax2.plot(x * 1000, tmp1 * 1000, label='I$_{RL}$')

ax1.legend(); ax1.grid()
ax1.set_xlabel('[ms]'); ax1.set_ylabel('[V]')

ax2.legend(); ax2.grid()
ax2.set_xlabel('[ms]'); ax2.set_ylabel('[mA]')

fig.tight_layout()

fig.savefig('PrimaryCircuit7-064_Graph1.png')

今回の条件では、コレクタ電流が最大でも5mA(5V/1kΩ)のため、 V_{CE} は0.03V程度になり、実際は、4.97mAほどが負荷に流れる

負荷電流を増やす

負荷の抵抗値を1kΩから100Ωに小さくして、負荷電流(最大値)を5mAから50mAに増やす

from PyLTSpice import SimCommander

fname = 'PrimaryCircuit7-064'
fname_tmp = '_100'
LTC = SimCommander(fname + '.asc')

line_no = LTC._get_line_starting_with('RL')
sim_cmd = LTC.netlist[line_no]
LTC.netlist[line_no] = sim_cmd.replace('1k', '100')
print(LTC.netlist[line_no], end='')  # 確認

# 編集したnetlistの情報でバッチ処理を実行する
run_net_file = fname + fname_tmp + '.net'
LTC.run(run_filename=run_net_file)
LTC.wait_completion()
RL Vcc Vout 100
True
from PyLTSpice import RawRead

fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1)

fname = 'PrimaryCircuit7-064'
fname_tmp = '_100'
LTR = RawRead(fname + fname_tmp + '.raw')
x     = LTR.get_trace('time').get_time_axis(0)

tmp1  = LTR.get_trace('V(vin+)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vin+')
tmp1  = LTR.get_trace('V(vout)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vout')

tmp1  = LTR.get_trace('I(Rl)').get_wave(0)
ax2.plot(x * 1000, tmp1 * 1000, label='I$_{RL}$')

ax1.legend(); ax1.grid()
ax1.set_xlabel('[ms]'); ax1.set_ylabel('[V]')

ax2.legend(); ax2.grid()
ax2.set_xlabel('[ms]'); ax2.set_ylabel('[mA]')

fig.tight_layout()

fig.savefig('PrimaryCircuit7-064_Graph2.png')

入力側の抵抗値が10kΩのため、ベースに入れられる電流は最大でも0.3mA程度
トランジスタの増幅率( h_{FE} )が100倍程度のため、30mA程度しか負荷側では引けず、Voutが接地できない

入力電流も増やす

入力側の抵抗値を1kΩにすれば、ベースの電流値を10倍にでき、負荷に供給できる電流値も10倍になる

from PyLTSpice import SimCommander

fname = 'PrimaryCircuit7-064'
fname_tmp = '_100_1k'
LTC = SimCommander(fname + '.asc')

line_no = LTC._get_line_starting_with('RL')
sim_cmd = LTC.netlist[line_no]
LTC.netlist[line_no] = sim_cmd.replace('1k', '100')
print(LTC.netlist[line_no], end='')  # 確認

line_no = LTC._get_line_starting_with('R1')
sim_cmd = LTC.netlist[line_no]
LTC.netlist[line_no] = sim_cmd.replace('10k', '1k')
print(LTC.netlist[line_no], end='')  # 確認

line_no = LTC._get_line_starting_with('R2')
sim_cmd = LTC.netlist[line_no]
LTC.netlist[line_no] = sim_cmd.replace('10k', '1k')
print(LTC.netlist[line_no], end='')  # 確認

# 編集したnetlistの情報でバッチ処理を実行する
run_net_file = fname + fname_tmp + '.net'
LTC.run(run_filename=run_net_file)
LTC.wait_completion()
RL Vcc Vout 100
R1 Vin+ N001 1k
R2 N001 0 1k
True
from PyLTSpice import RawRead

fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1)

fname = 'PrimaryCircuit7-064'
fname_tmp = '_100_1k'
LTR = RawRead(fname + fname_tmp + '.raw')
x     = LTR.get_trace('time').get_time_axis(0)

tmp1  = LTR.get_trace('V(vin+)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vin+')
tmp1  = LTR.get_trace('V(vout)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vout')

tmp1  = LTR.get_trace('I(Rl)').get_wave(0)
ax2.plot(x * 1000, tmp1 * 1000, label='I$_{RL}$')

ax1.legend(); ax1.grid()
ax1.set_xlabel('[ms]'); ax1.set_ylabel('[V]')

ax2.legend(); ax2.grid()
ax2.set_xlabel('[ms]'); ax2.set_ylabel('[mA]')

fig.tight_layout()

fig.savefig('PrimaryCircuit7-064_Graph3.png')

50mA近くを供給できている

改良された回路1

2つのトランジスタダーリントン接続することで、大電流を出力することができる

出力の電圧は、ここまでは  V_{CE} 分だけGNDから上がっていたが、
ダーリントン接続の場合は、 V_{BE} 分だけGNDから上がることになる
今回の場合は、0.7V程

import matplotlib.pyplot as plt
import numpy as np

from PyLTSpice import RawRead

fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1)

fname = 'PrimaryCircuit7-064-2.raw'
LTR = RawRead(fname)
x     = LTR.get_trace('time').get_time_axis(0)

tmp1  = LTR.get_trace('V(vin+)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vin+')
tmp1  = LTR.get_trace('V(vout)').get_wave(0)
ax1.plot(x * 1000, tmp1, label='Vout')

tmp1  = LTR.get_trace('I(Rl)').get_wave(0)
ax2.plot(x * 1000, tmp1 * 1000, label='I$_{RL}$')

ax1.legend(); ax1.grid()
ax1.set_xlabel('[ms]'); ax1.set_ylabel('[V]')

ax2.legend(); ax2.grid()
ax2.set_xlabel('[ms]'); ax2.set_ylabel('[mA]')

fig.tight_layout()

fig.savefig('PrimaryCircuit7-064_Graph4.png')

90mAほどの電流を供給することができている

改良された回路2

負荷側が、コイル性負荷の場合、OFF時に逆起電力が発生して、機器が故障する場合がある
ダイオードを追加することで、逆起電力で供給電圧以上になることを抑制できる

模擬としては、負荷を100Ωにして、50mHのコイルを直列で入れる
ダイオードの有無の効果を見る

from PyLTSpice import SimCommander

fname = 'PrimaryCircuit7-064-3'
fname_tmp = '_no_diode'
LTC = SimCommander(fname + '.asc')

line_no = LTC._get_line_starting_with('D1')
sim_cmd = LTC.netlist[line_no]
LTC.netlist[line_no] = sim_cmd.replace('Vout', 'N999')
print(LTC.netlist[line_no], end='')  # 確認

# 編集したnetlistの情報でバッチ処理を実行する
run_net_file = fname + fname_tmp + '.net'
LTC.run(run_filename=run_net_file)
LTC.wait_completion()
D1 N999 Vcc 1SS133
True
import matplotlib.pyplot as plt
import numpy as np

from PyLTSpice import RawRead

fnames = [
    ['w/oDiode', 'PrimaryCircuit7-064-3_no_diode.raw'],
    ['wDiode',   'PrimaryCircuit7-064-3.raw'],
]

fig = plt.figure(figsize=(6, 3))
ax1 = fig.add_subplot(1, 1, 1)

for name, fname in fnames:
    LTR = RawRead(fname)
    x     = LTR.get_trace('time').get_time_axis(0)

    tmp1  = LTR.get_trace('V(vout)').get_wave(0)
    ax1.plot(x * 1000, tmp1, label=name)

ax1.legend(); ax1.grid()
ax1.set_xlabel('[ms]'); ax1.set_ylabel('Vout[V]')

ax1.set_ylim(-1, 7)
ax1.set_xlim(19, 32)

fig.tight_layout()

fig.savefig('PrimaryCircuit7-064_Graph5.png')

ダイオードがない場合は、瞬間的に大電圧が発生しているが、
ダイオードを追加することで、ダイオードの順電圧(0.6Vほど)程度までしか上がらなくなっている

参考文献

この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください