|
It's not so difficult.
First, write a function for calculating Ip and Ig2 following to fig. 27.
Ip.KF.sub <-
function (p, Ep, Ei, Eg2, Ep0, Eg0, Bk)
{
# Calculate Ip and Ig2 for Cathode Feedback connection.
# @param p Tube parameter.
# @param Ep Plate voltage (relative to the ground).
# @param Ei Input signal voltage.
# @param Eg2 Screen grid voltage (relative to the ground).
# @param Ep0 Quiescent plate voltage.
# @param Eg0 Grid bias.
# @param Bk Turn ratio of KF windings (relative to P-K windings)
# @return
# $ip Plate current.
# $ig2 Screen grid current.
Ek <- -Bk * (Ep - Ep0) # cathode potential (relative to the ground)
Ep.net <- Ep - Ek # net plate voltage (between plate-cathode)
Eg.net <- Eg0 + Ei - Ek # net grid voltage (between grid-cathode)
Eg2.net <- Eg2 - Ek # net screen grid voltage (between g2-cathode)
Ipp.sub(p, Ep.net, Eg.net, Eg2.net) # calc Ip, Ig2
}
This function is similar to Ip.sub (for triode) or Ipp.sub (for pentode)
and has additional arguments---Ep0, Eg0, Bk.
KF plate characteristics are unique for specified operating point.
To determine the operating point, we must specify Ep0 and Eg0.
In the function above, Ek is the voltage of cathode feedback windings.
When Ep rises up, then the potential of the cathode gets down,
so net plate voltage rises more.
Next, with this function, we calculate Ip and Ig2 for 6L6 and plot them.
p <- t6L6T # tube parameter
Ep0 <- 250 # quiescent plate voltage
Eg0 <- -20 # grid bias
Eg2 <- 250 # screen grid voltage
Bk <- 0.05656854 # KF windings turn ratio
Ep <- 0:500 # plate voltage for plot
Ei <- seq(25, -25, by=-5) # signal voltage for plot
ip <- touter(function(p, Ep, Ei, ...) {
Ip.KF.sub(p, Ep, Ei, ...)$ip
}, p, Ep, Ei, Eg2=Eg2, Ep0=Ep0, Eg0=Eg0, Bk=Bk)
ig2 <- touter(function(p, Ep, Ei, ...) {
Ip.KF.sub(p, Ep, Ei, ...)$ig2
}, p, Ep, Ei, Eg2=Eg2, Ep0=Ep0, Eg0=Eg0, Bk=Bk)
g.plate(ip, 800, 100, 0.15, zname="Ei") # plate current
matlines(Ep, ip+Bk*ig2, col="blue", lty=1) # equivalent signal current
The function touter can receive free (unspecified) arguments
and passes them to the function func (1st argument).
In this sample program above,
free arguments are passed to the function without name,
then the function without name passes them to the function Ip.KF.sub.
|
|