Use InpEvaluate() instead of strtod to enable ngspice numbers
with scale factors Meg k m u n p f etc.
This commit is contained in:
parent
3be5926f2c
commit
4e03efacb7
|
|
@ -5,12 +5,12 @@ R2 in 0 47.5k
|
|||
R1 Net-_Q1-Pad2_ in 1k
|
||||
R5 +32 Net-_P1-Pad1_ 1k
|
||||
R3 Net-_P3-Pad1_ 0 10
|
||||
R4 0 Net-_P3-Pad1_ 10
|
||||
R4 0 Net-_P3-Pad3_ 10
|
||||
R6 Net-_P2-Pad1_ -32 1k
|
||||
R7 out Net-_P3-Pad1_ 220
|
||||
R8 out Net-_P3-Pad1_ 220
|
||||
R9 out Net-_P3-Pad1_ 220
|
||||
R10 out Net-_P3-Pad1_ 220
|
||||
R9 out Net-_P3-Pad3_ 220
|
||||
R10 out Net-_P3-Pad3_ 220
|
||||
R11 Net-_R11-Pad1_ Net-_P1-Pad1_ 2.2k
|
||||
R13 Net-_Q3-Pad2_ Net-_P1-Pad1_ 47.5
|
||||
R15 Net-_Q5-Pad2_ Net-_P2-Pad1_ 47.5
|
||||
|
|
@ -25,7 +25,7 @@ R19 +32 Net-_D4a1-Pad1_ 1
|
|||
R23 Net-_D2a1-Pad2_ -32 1
|
||||
R20 +32 Net-_D4a1-Pad1_ 1
|
||||
R24 Net-_D2a1-Pad2_ -32 1
|
||||
Rl1 out 0 4
|
||||
Ra2 Net-_Ra1-Pad2_ 0 4
|
||||
D3a1 +32 Net-_D3a1-Pad1_ DMOD
|
||||
D1a1 Net-_D1a1-Pad2_ -32 DMOD
|
||||
D3b1 +32 Net-_D3a1-Pad1_ DMOD
|
||||
|
|
@ -34,12 +34,12 @@ D4a1 +32 Net-_D4a1-Pad1_ DMOD
|
|||
D2a1 Net-_D2a1-Pad2_ -32 DMOD
|
||||
D4b1 +32 Net-_D4a1-Pad1_ DMOD
|
||||
D2b1 Net-_D2a1-Pad2_ -32 DMOD
|
||||
XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad1_ RPOT value=200 ratio=0.85
|
||||
XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio=0.18
|
||||
XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio=0.18
|
||||
V3 in 0 dc 0 ac 1 sin(0 2 1k)
|
||||
XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad3_ RPOT value=200 ratio={rp3}
|
||||
XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio={rp1}
|
||||
XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio={rp2}
|
||||
V3 in 0 dc 0 ac 1 sin(0 2 1k 5m)
|
||||
JQ1 Net-_P1-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SK170
|
||||
JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SJ74
|
||||
JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad3_ 2SJ74
|
||||
MQ5 out Net-_Q5-Pad2_ Net-_D1a1-Pad2_ Q5tj Q5tc IRFP240 thermal
|
||||
MQ4 out Net-_Q4-Pad2_ Net-_D4a1-Pad1_ Q4tj Q4tc IRFP9240 thermal
|
||||
MQ6 out Net-_Q6-Pad2_ Net-_D2a1-Pad2_ Q6tj Q6tc IRFP240 thermal
|
||||
|
|
@ -47,23 +47,33 @@ Rj1 Q3tj 0 1G
|
|||
Rj2 Q4tj 0 1G
|
||||
Rj3 Q5tj 0 1G
|
||||
Rj4 Q6tj 0 1G
|
||||
Rc2 Q3hs Net-_Rc2-Pad2_ 0.7
|
||||
Rc4 Q4hs Net-_Rc2-Pad2_ 0.7
|
||||
Rc6 Q5hs Net-_Rc2-Pad2_ 0.7
|
||||
Rc8 Q6hs Net-_Rc2-Pad2_ 0.7
|
||||
Rc1 Q3tc Q3hs 0.1
|
||||
Rc3 Q4tc Q4hs 0.1
|
||||
Rc5 Q5tc Q5hs 0.1
|
||||
Rc7 Q6tc Q6hs 0.1
|
||||
Vt1 Net-_Rc2-Pad2_ 0 40
|
||||
Cc1 Q3hs 0 1
|
||||
Cc2 Q4hs 0 1
|
||||
Cc3 Q5hs 0 1
|
||||
Cc4 Q6hs 0 1
|
||||
V1 +32 0 32 ; pulse(0 32 1m 1m 1m 100 200)
|
||||
V2 -32 0 -32 ; pulse(0 -32 1m 1m 1m 100 200)
|
||||
Rc2 Q3hs Net-_Rc2-Pad2_ {hs}
|
||||
Rc4 Q4hs Net-_Rc2-Pad2_ {hs}
|
||||
Rc6 Q5hs Net-_Rc2-Pad2_ {hs}
|
||||
Rc8 Q6hs Net-_Rc2-Pad2_ {hs}
|
||||
Rc1 Q3tc Q3hs {chs}
|
||||
Rc3 Q4tc Q4hs {chs}
|
||||
Rc5 Q5tc Q5hs {chs}
|
||||
Rc7 Q6tc Q6hs {chs}
|
||||
Vt1 Net-_Rc2-Pad2_ 0 {envtemp}
|
||||
Cc1 Q3hs 0 {hscc}
|
||||
Cc3 Q5hs 0 {hscc}
|
||||
Cc4 Q6hs 0 {hscc}
|
||||
V1 +32 0 dc 32 ; pulse(0 32 0.4m 2m 2m 100 200)
|
||||
V2 -32 0 dc -32 ; pulse(0 -32 0.4m 2m 2m 100 200)
|
||||
XTH2 Net-_D1a1-Pad2_ Q5hs Net-_R12-Pad1_ th R25=4.7k
|
||||
XTH1 Net-_D3a1-Pad1_ Q3hs Net-_R11-Pad1_ th R25=4.7k
|
||||
MQ3 out Net-_Q3-Pad2_ Net-_D3a1-Pad1_ Q3tj Q3tc IRFP9240 thermal
|
||||
*.tran 20u 5
|
||||
Vs1 Net-_S1-Pad3_ 0 dc 0 pulse(0 5 6 1m 1m 20 20)
|
||||
XS1 Net-_Ra1-Pad2_ 0 Net-_S1-Pad3_ 0 genrelay
|
||||
Cc2 Q4hs 0 {hscc}
|
||||
Ra1 out Net-_Ra1-Pad2_ 4
|
||||
.tran 20u 5
|
||||
.param envtemp=40
|
||||
.param chs=1
|
||||
.param hs=1.2
|
||||
.param hscc=1
|
||||
.param rp2=0.21
|
||||
.param rp1=0.36
|
||||
.param rp3=0.505
|
||||
.end
|
||||
|
|
|
|||
|
|
@ -12,27 +12,28 @@ else
|
|||
* Start optran without first iteration,
|
||||
* without gmin stepping and without src stepping
|
||||
* optran step size 10 ms, duration 40s,
|
||||
optran 1 0 0 1e-2 4 0
|
||||
optran 1 0 0 10m 40 0
|
||||
* check the first 10 ms, input is switched on after 5 ms
|
||||
tran 1u 10m
|
||||
echo
|
||||
* output power
|
||||
let po = @rl1[i] * v(out)
|
||||
let po = @ra1[i] * v(out)
|
||||
meas tran power_rms rms po from=5m to=10m
|
||||
echo
|
||||
rusage
|
||||
* temperature transistor Q6
|
||||
set xbrushwidth=4
|
||||
settype temperature q6tj q6tc q6hs
|
||||
plot q6tj q6tc q6hs ylimit 0 150
|
||||
set xbrushwidth=1
|
||||
plot q6tj q6tc q6hs q3tj q3tc q3hs ylimit 40 140
|
||||
set xbrushwidth=2
|
||||
* input and output voltages
|
||||
plot in out
|
||||
* power supply currents
|
||||
*plot V1#branch V2#branch ylimit -50 50
|
||||
plot V1#branch V2#branch ylimit -15 15
|
||||
plot V1#branch V2#branch ylimit -10 10
|
||||
* output current
|
||||
plot @rl1[i]
|
||||
*plot @rl1[i] xlimit 0 5m ylimit -0.3 0.3
|
||||
plot @ra1[i]
|
||||
*plot @ra1[i] xlimit 0 5m ylimit -0.3 0.3
|
||||
* resistance of thermistor2 TH1, TH2
|
||||
let rth1 = (v("net-_d3a1-pad1_") - v("net-_r11-pad1_")) / (@b.xth1.brtherm[i] + 1n)
|
||||
let rth2 = (v("net-_d1a1-pad2_") - v("net-_r12-pad1_")) / (@b.xth2.brtherm[i] + 1n)
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ static double opramptime = 0.;
|
|||
void com_optran(wordlist* wl) {
|
||||
wordlist* wltmp = wl;
|
||||
char* stpstr;
|
||||
int err;
|
||||
/* current circuit */
|
||||
if (!ft_curckt) {
|
||||
fprintf(cp_err, "Error: no circuit loaded\n");
|
||||
|
|
@ -80,16 +81,19 @@ void com_optran(wordlist* wl) {
|
|||
if ((errno == ERANGE) || (*stpstr != '\0'))
|
||||
goto bugquit;
|
||||
wltmp = wltmp->wl_next;
|
||||
opstepsize = strtod(wltmp->wl_word, &stpstr);
|
||||
if ((errno == ERANGE) || (*stpstr != '\0'))
|
||||
stpstr = wltmp->wl_word;
|
||||
opstepsize = INPevaluate(&stpstr, &err, 1);
|
||||
if (err || (*stpstr != '\0'))
|
||||
goto bugquit;
|
||||
wltmp = wltmp->wl_next;
|
||||
opfinaltime = strtod(wltmp->wl_word, &stpstr);
|
||||
if ((errno == ERANGE) || (*stpstr != '\0'))
|
||||
stpstr = wltmp->wl_word;
|
||||
opfinaltime = INPevaluate(&stpstr, &err, 1);
|
||||
if (err || (*stpstr != '\0'))
|
||||
goto bugquit;
|
||||
wltmp = wltmp->wl_next;
|
||||
opramptime = strtod(wltmp->wl_word, &stpstr);
|
||||
if ((errno == ERANGE) || (*stpstr != '\0'))
|
||||
stpstr = wltmp->wl_word;
|
||||
opramptime = INPevaluate(&stpstr, &err, 1);
|
||||
if (err || (*stpstr != '\0'))
|
||||
goto bugquit;
|
||||
if (opstepsize > opfinaltime) {
|
||||
fprintf(stderr, "Error: Step size larger than final time.\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue