回路の素101 066 ハイ・サイド バイポーラ・トランジスタ使用
GNDに接続された負荷の駆動、デジタル信号の論理反転、などに使用される
回路図作成
- 基本的な構成
PNP型トランジスタを
OFFだと、出力は浮き、GNDになり、負荷に電流は流れない
ONだと、出力がコレクタ-エミッタとつながり、5Vが印加され、負荷に電流が流れる
ON時の出力端子(コレクタ)の電圧は、トランジスタのコレクタ-エミッタ間の飽和電圧分()低くなる
応答性確認
シミュレーションを 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-066.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-066_Graph1.png')
今回の条件では、コレクタ電流が最大でも5mA(5V/1kΩ)のため、は0.05V程度になり、実際は、4.95mAほどが負荷に流れる
負荷電流を増やす
負荷の抵抗値を1kΩから50Ωに小さくして、負荷電流(最大値)を5mAから20mAに増やす
from PyLTSpice import SimCommander fname = 'PrimaryCircuit7-066' fname_tmp = '_50' 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', '50') 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 Vout 0 50
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-066' fname_tmp = '_50' 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-066_Graph2.png')
入力側の抵抗値が10kΩのため、ベースに入れられる電流は最大でも0.5mA程度
トランジスタの増幅率()が100倍程度のため、50mA程度しか負荷側では引けず、Voutが5Vまで上がりきらない
入力電流も増やす
入力側の抵抗値を1kΩにすれば、ベースの電流値を10倍にでき、負荷に供給できる電流値も10倍になる
from PyLTSpice import SimCommander fname = 'PrimaryCircuit7-066' fname_tmp = '_50_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', '50') 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 Vout 0 50 R1 Vin+ N001 1k R2 Vcc N001 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-066' fname_tmp = '_50_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-066_Graph3.png')
100mA近くを供給でき、5Vが供給できている
改良された回路1
2つのトランジスタをダーリントン接続することで、大電流を出力することができる
出力の電圧は、ここまでは が供給されていたが、
ダーリントン接続の場合は、分だけ下がることになる
今回の場合は、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-066-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-066_Graph4.png')
90mAほどの電流を供給することができている
供給電圧は 4.3V ほどになっている
改良された回路2
負荷側が、コイル性負荷の場合、OFF時に逆起電力が発生して、機器が故障する場合がある
ダイオードを追加することで、逆起電力で供給電圧以上になることを抑制できる
模擬としては、負荷を100Ωにして、50mHのコイルを直列で入れる
ダイオードの有無の効果を見る
from PyLTSpice import SimCommander fname = 'PrimaryCircuit7-066-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 0 N999 1SS133
True
import matplotlib.pyplot as plt import numpy as np from PyLTSpice import RawRead fnames = [ ['w/oDiode', 'PrimaryCircuit7-066-3_no_diode.raw'], ['wDiode', 'PrimaryCircuit7-066-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(-2, 6) ax1.set_xlim(20, 33) fig.tight_layout() fig.savefig('PrimaryCircuit7-066_Graph5.png')
ダイオードがない場合は、瞬間的に大電圧(負側)が発生しているが、
ダイオードを追加することで、ダイオードの順電圧(0.6Vほど)程度までしか上がらなくなっている
参考文献
この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください