回路の素101 057 半波整流 ダイオード使用
入力信号の正の信号のみ通す
出力は、ダイオードの電圧降下分小さくなる
低周波から高周波まで使用できる
回路図作成
- 基本的な構成
ダイオードの電圧降下を超える分だけ通過させる
応答性確認
シミュレーションを tranモード(デフォルト) で実行し、応答を見る
import matplotlib.pyplot as plt import numpy as np from PyLTSpice import RawRead fig = plt.figure(figsize=(6, 3)) ax1 = fig.add_subplot(1, 1, 1) fname = 'PrimaryCircuit6-057.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') ax1.legend(); ax1.grid() ax1.set_xlabel('[ms]'); ax1.set_ylabel('[V]') fig.tight_layout() fig.savefig('PrimaryCircuit6-057_Graph1.png')
入力信号の正側だけが出力されている
電圧降下の0.7Vほど出力は低下する
高周波の場合
入力信号の周波数を1kHzから1MHzに変更する
from PyLTSpice import SimCommander fname = 'PrimaryCircuit6-057' fname_tmp = '_1MHz' LTC = SimCommander(fname + '.asc') line_no = LTC._get_line_starting_with('V1') sim_cmd = LTC.netlist[line_no] LTC.netlist[line_no] = sim_cmd.replace('1k', '1Meg') print(LTC.netlist[line_no], end='') # 確認 line_no = LTC._get_line_starting_with('.tran') sim_cmd = LTC.netlist[line_no] sim_cmd = sim_cmd.replace('2m', '2u') LTC.netlist[line_no] = sim_cmd.replace('0.1u', '0.1n') print(LTC.netlist[line_no], end='') # 確認 # 編集したnetlistの情報でバッチ処理を実行する run_net_file = fname + fname_tmp + '.net' LTC.run(run_filename=run_net_file) LTC.wait_completion()
V1 Vin+ 0 SINE(0 2 1Meg 0 0 0) .tran 0 2u 0 0.1n
True
from PyLTSpice import RawRead fig = plt.figure(figsize=(6, 3)) ax1 = fig.add_subplot(1, 1, 1) fname = 'PrimaryCircuit6-057' fname_tmp = '_1MHz' 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 * 1e6, tmp1, label='Vin+') tmp1 = LTR.get_trace('V(vout)').get_wave(0) ax1.plot(x * 1e6, tmp1, label='Vout') ax1.legend(); ax1.grid() ax1.set_xlabel('[us]'); ax1.set_ylabel('[V]') fig.tight_layout() fig.savefig('PrimaryCircuit6-057_Graph2.png')
高周波に対しても同じ特性になる
改良された回路
ダイオードを逆方向に接続することで、負側の信号のみを出力できる
import matplotlib.pyplot as plt import numpy as np from PyLTSpice import RawRead fig = plt.figure(figsize=(6, 3)) ax1 = fig.add_subplot(1, 1, 1) fname = 'PrimaryCircuit6-057-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') ax1.legend(); ax1.grid() ax1.set_xlabel('[ms]'); ax1.set_ylabel('[V]') fig.tight_layout() fig.savefig('PrimaryCircuit6-057_Graph3.png')
入力信号の負側だけが出力されている
高周波の場合
この回路でも、入力信号の周波数を1kHzから1MHzに変更する
from PyLTSpice import SimCommander fname = 'PrimaryCircuit6-057-2' fname_tmp = '_1MHz' LTC = SimCommander(fname + '.asc') line_no = LTC._get_line_starting_with('V1') sim_cmd = LTC.netlist[line_no] LTC.netlist[line_no] = sim_cmd.replace('1k', '1Meg') print(LTC.netlist[line_no], end='') # 確認 line_no = LTC._get_line_starting_with('.tran') sim_cmd = LTC.netlist[line_no] sim_cmd = sim_cmd.replace('2m', '2u') LTC.netlist[line_no] = sim_cmd.replace('0.1u', '0.1n') print(LTC.netlist[line_no], end='') # 確認 # 編集したnetlistの情報でバッチ処理を実行する run_net_file = fname + fname_tmp + '.net' LTC.run(run_filename=run_net_file) LTC.wait_completion()
V1 Vin+ 0 SINE(0 2 1Meg 0 0 0) .tran 0 2u 0 0.1n
True
from PyLTSpice import RawRead fig = plt.figure(figsize=(6, 3)) ax1 = fig.add_subplot(1, 1, 1) fname = 'PrimaryCircuit6-057-2' fname_tmp = '_1MHz' 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 * 1e6, tmp1, label='Vin+') tmp1 = LTR.get_trace('V(vout)').get_wave(0) ax1.plot(x * 1e6, tmp1, label='Vout') ax1.legend(); ax1.grid() ax1.set_xlabel('[us]'); ax1.set_ylabel('[V]') fig.tight_layout() fig.savefig('PrimaryCircuit6-057_Graph4.png')
高周波に対しても同じ特性になる
参考文献
この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください