サイトマップ

回路の素101 094 定電流 吸い込み型 JFETと非反転アンプ使用

回路の素101 094 定電流 吸い込み型 JFETと非反転アンプ使用

正電源に接続した負荷に一定の電流を流す
出力電流の設定精度が高い

回路図作成

  • 基本的な構成

出力電流  I_{out} は下記で決まる

  I_{out} = (1 + \frac{R_F}{R_S}) \frac{V_R}{R}

応答性確認

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 = 'PrimaryCircuit9-094.raw'
LTR = RawRead(fname)
x     = LTR.get_trace('time').get_time_axis(0)

tmp1  = LTR.get_trace('I(Rl)').get_wave(0)
ax1.plot(x * 1e3, tmp1 * 1e3, label='$I_{R_L}$')

ax1.legend(); ax1.grid()
ax1.set_xlabel('[ms]'); ax1.set_ylabel('[mA]')
ax1.set_ylim(0.97, 1.03)

fig.tight_layout()

fig.savefig('PrimaryCircuit9-094_Graph1.png')

ほぼ 1mA が出力されている

負荷の抵抗値を変更する

from PyLTSpice import SimCommander

fname = 'PrimaryCircuit9-094'
fname_tmps = ['10', '500', '1k']

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('200', 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 VDD N003 10
RL VDD N003 500
RL VDD N003 1k
from PyLTSpice import RawRead

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

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('I(Rl)').get_wave(0)
    ax1.plot(x * 1e3, tmp1 * 1e3, label=fname_tmp)

ax1.legend(); ax1.grid(); ax1.set_ylabel('$I_{RL}$[mA]')
ax1.set_xlabel('[ms]')
ax1.set_ylim(0.97, 1.03)

fig.tight_layout()

fig.savefig('PrimaryCircuit9-094_Graph2.png')

負荷を変更しても、ほぼ 1mA が供給できている

参考文献

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