回路の素101 068 ハイ・サイド MOSFET使用
GNDに接続された負荷の駆動、デジタル信号の論理反転、などに使用される
トランジスタよりもスイッチング速い
回路図作成
- 基本的な構成
FETの場合、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-068.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-068_Graph1.png')
入力のON/OFFに合わせて、スイッチが切り替わり、負荷側に電流を流すことができる
出力電圧は、オン抵抗が20mΩ程度で、約5mA流れるので、0.1mVほどから下がることになる
負荷電流を増やす
負荷の抵抗値を1kΩから小さくして電流値を大きくした場合の、オン抵抗の影響を確認する
from PyLTSpice import SimCommander fname = 'PrimaryCircuit7-068' fname_tmps = ['1k', '100', '10', '1'] for fname_tmp in fname_tmps: 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', fname_tmp) 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 1k RL Vout 0 100 RL Vout 0 10 RL Vout 0 1
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) for fname_tmp in fname_tmps: LTR = RawRead(fname + '_' + fname_tmp + '.raw') x = LTR.get_trace('time').get_time_axis(0) tmp1 = LTR.get_trace('V(vout)').get_wave(0) ax1.plot(x * 1000, tmp1, label=fname_tmp) tmp1 = LTR.get_trace('I(Rl)').get_wave(0) ax2.plot(x * 1000, tmp1 * 1000, label=fname_tmp) ax1.legend(); ax1.grid() ax1.set_xlabel('[ms]'); ax1.set_ylabel('Vout[V]') ax2.legend(); ax2.grid() ax2.set_xlabel('[ms]'); ax2.set_ylabel('I$_{RL}$[mA]') fig.tight_layout() fig.savefig('PrimaryCircuit7-068_Graph2.png')
抵抗が小さくなるにつれて、電流値が大きくなり、電圧がだんだん5Vから下がってきている
拡大してみると
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) for fname_tmp in fname_tmps: LTR = RawRead(fname + '_' + fname_tmp + '.raw') x = LTR.get_trace('time').get_time_axis(0) tmp1 = LTR.get_trace('V(vout)').get_wave(0) ax1.plot(x * 1000, tmp1, label=fname_tmp) tmp1 = LTR.get_trace('I(Rl)').get_wave(0) ax2.plot(x * 1000, tmp1 * 1000, label=fname_tmp) ax1.legend(); ax1.grid() ax1.set_xlabel('[ms]'); ax1.set_ylabel('Vout[V]') ax2.legend(); ax2.grid() ax2.set_xlabel('[ms]'); ax2.set_ylabel('I$_{RL}$[mA]') ax1.set_xlim(0.3, 0.6) ax1.set_ylim(4.8, 5.005) ax1.set_yscale('log') ax2.set_ylim(1, 10000) ax2.set_yscale('log') fig.tight_layout() fig.savefig('PrimaryCircuit7-068_Graph3.png')
抵抗値が10倍変わると、電流値も10倍、電圧も10倍ずつ変化していそう
5A電流を流しても、120mV下がる程度
0.3-0.4msの区間の電圧値と電流値の平均値から、オン抵抗の値をそれぞれ求めると
from PyLTSpice import RawRead for fname_tmp in fname_tmps: LTR = RawRead(fname + '_' + fname_tmp + '.raw') x = LTR.get_trace('time').get_time_axis(0) tmp1 = LTR.get_trace('V(vout)').get_wave(0) volt = tmp1[(x * 1000 > 0.3)&(x * 1000 < 0.4)].mean() #[V] tmp1 = LTR.get_trace('I(Rl)').get_wave(0) curr = tmp1[(x * 1000 > 0.3)&(x * 1000 < 0.4)].mean() #[A] print('%-6s %7.2f[mV] % 7.0f[mA] %7.1f[mΩ]' % (fname_tmp, (5.0 - volt)*1e3, curr*1e3, (5.0 - volt)/curr*1e3))
1k 0.16[mV] 5[mA] 31.7[mΩ] 100 1.58[mV] 50[mA] 31.7[mΩ] 10 15.81[mV] 498[mA] 31.7[mΩ] 1 155.33[mV] 4845[mA] 32.1[mΩ]
ほぼほぼ32mΩであることが分かる
参考文献
この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください