Subsections


5.5 Rのプログラム

5.5.0.0.1 ブートストラップ負荷の伝達特性 trans.bs

    1 trans.bs <-
    2 function (p, ei, Ep0, Eg0, Rp, Rg2, func, Eg20)
    3 {
    4     # ブートストラップ負荷の電圧増幅の伝達特性を求める
    5     # @param p 真空管のパラメータ
    6     # @param ei 入力電圧
    7     # @param Ep0 静止時プレート電圧
    8     # @param Eg0 グリッド電圧(DC)
    9     # @param Rp プレート負荷抵抗
   10     # @param Rg2 次段の負荷抵抗
   11     # @param func 次段の入力からブートストラップ電圧を求める関数
   12     # @param Eg20 スクリーングリッド電圧
   13     # @return
   14     #   $ip プレート電流
   15     #   $ep プレート電圧
   16     #   $ei2 次段の入力電圧
   17     #   $eb ブートストラップ電圧
   18 
   19     Rk <- 0
   20     if (missing(Eg20)) {
   21         triode <- TRUE
   22         op <- op.vol(p, Ep0, Eg0, Rp, Rk)   # 動作点
   23         f <- function(ep) {
   24             # プレート電圧
   25             ei2 <- ep - op$ep       # 次段の入力電圧
   26             eb <- func(ei2)         # ブートストラップの結果を得る
   27             ip2 <- (Ep0 + eb - ep) / Rp + (op$ep - ep) / Rg2    # 負荷を流れる電流
   28             ip1 <- Ip(p, ep, egi)   # プレート電圧に対するプレート電流
   29             ip1 - ip2
   30         }
   31     } else {
   32         triode <- FALSE
   33         op <- op.vol(p, Ep0, Eg0, Rp, Rk, Eg20) # 動作点
   34         f <- function(ep) {
   35             # プレート電圧
   36             ei2 <- ep - op$ep       # 次段の入力電圧
   37             eb <- func(ei2)         # ブートストラップの結果を得る
   38             ip2 <- (Ep0 + eb - ep) / Rp + (op$ep - ep) / Rg2    # 負荷を流れる電流
   39             ip1 <- Ipp(p, ep, egi, Eg20)    # プレート電圧に対するプレート電流
   40             ip1 - ip2
   41         }
   42     }
   43 
   44     Eg <- ei + Eg0          # 実際のグリッド電圧(対グラウンド)
   45     ep <- rep(0, length(Eg))
   46     for (i in seq(along=Eg)) {
   47         egi <- Eg[i]
   48         ep[i] <- uniroot(f, c(0, Ep0*2))$root
   49     }
   50     ei2 <- ep - op$ep
   51     eb <- func(ei2)         # ブートストラップの結果を得る
   52     ip <- (Ep0 + eb - ep) / Rp + (op$ep - ep) / Rg2     # 負荷を流れる電流
   53     list(ip=ip, ep=ep, ei2=ei2, eb=eb)
   54 }
p には,真空管のパラメータを指定します. ei には,入力電圧(信号成分)を与えます. Ep0 には,静止時のプレート電圧を指定します. Eg0 には,静止時のグリッド電圧を指定します. Rp には,負荷となるインピーダンスを指定します. Rg2 には,次段のグリッド抵抗を指定します. func には,次段の入力からブートストラップ電圧を計算する関数を指定します. この関数には,プレートに生じた信号成分が第1引数として渡されます. 五極管の場合には,Eg20 でスクリーングリッド電圧を指定します.

CSPPの場合は,func として trans.setrans.pp を利用して, Rp の電源側に生じる電圧,すなわち $ek (trans.se の場合)や, $ek1 (trans.pp の場合)を返します.

ここでは例として,5.3.2節の 12AU7-6L6のドライブ段のロードラインを描いてみます.

Eb <- 0:350
Ec <- seq(0, -24, by=-2)
ip <- touter(Ip, t12AU7, Eb, Ec)
g.plate(ip, 350, 450/35e-3, 15e-3)

# 動作点を求める
Eg2 <- -9.94163
Ep2 <- 210.836 + Eg2
RL2 <- 13e3     # プレート負荷抵抗
Ip20 <- Ip(t12AU7, Ep2, Eg2)
points(Ep2, Ip20)

# 出力段のパラメータ
Ep1 <- 250
Eg1 <- -20
Rg1 <- 100e3    # 出力段のグリッド抵抗
RL1 <- 5e3      # 出力段の(P-K間)負荷抵抗

# 信号を作成して出力波形を求める
ei <- seq(-8.16, 8.16, len=21)
z <- trans.bs(t12AU7, ei, Ep1 + Eg2, Eg2, RL2, Rg1, function(ei)
        trans.se(t6L6T, ei, Ep1, Eg1, RL1, rUL=-1, rKF=1, Rbs=RL2)$ek)
lines(z$ep, z$ip, col="cyan")
trans.se に与える rUL, rKF の値に注意してください. rUL および rKF は,P-B間を1とした比で与えます. rKF はGND-K間の値ですので1になります. rUL はSG-Bの値ですから,CSPPの場合はカソード巻線と同じ側(通常のSGタップとは反対側にあるので,-1 を指定します.
図 5.60: ブートストラップ付きドライブ段のロードライン
\includegraphics{figs/pow_para_bs_ll_ex.ps}

ayumi
2016-03-07