From 314acbabda2bd871ea88125aac5690d95df64566 Mon Sep 17 00:00:00 2001 From: Stefan Frederik Date: Fri, 23 Sep 2022 02:18:51 +0200 Subject: [PATCH] allow tabs and newlines in graph expressions in addition to spaces; updated example schematics --- src/callback.c | 2 +- src/draw.c | 4 +- xschem_library/devices/isource_arith.sym | 11 +- xschem_library/examples/classD_amp.sch | 22 +-- xschem_library/ngspice/comp_ngspice.sch | 8 +- xschem_library/ngspice/comp_ngspice.sym | 38 +++- xschem_library/ngspice/pv_ngspice.sch | 204 +++++++++++++++++---- xschem_library/ngspice/pv_ngspice.sym | 13 +- xschem_library/ngspice/solar_panel.sch | 216 ++++++++++++++++------- 9 files changed, 388 insertions(+), 130 deletions(-) diff --git a/src/callback.c b/src/callback.c index 9460014e..8e389e6b 100644 --- a/src/callback.c +++ b/src/callback.c @@ -879,7 +879,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int } else { my_strdup2(1506, &express, ntok); } - if(strstr(express, " ")) { + if(strpbrk(express, " \n\t")) { /* just probe a single point to get the index. custom data column already calculated */ j = calc_custom_data_yrange(sweep_idx, express, gr); } else { diff --git a/src/draw.c b/src/draw.c index 7594a2f8..3abd1322 100644 --- a/src/draw.c +++ b/src/draw.c @@ -2555,7 +2555,7 @@ int find_closest_wave(int i, Graph_ctx *gr) } else { my_strdup2(1192, &express, ntok); } - if(strstr(express, " ")) { + if(strpbrk(express, " \n\t")) { expression = 1; } } @@ -2719,7 +2719,7 @@ void draw_graph(int i, const int flags, Graph_ctx *gr) } else { my_strdup2(473, &express, ntok); } - if(strstr(express, " ")) { + if(strpbrk(express, " \n\t")) { expression = 1; } } diff --git a/xschem_library/devices/isource_arith.sym b/xschem_library/devices/isource_arith.sym index 21b7cea1..7ae42532 100644 --- a/xschem_library/devices/isource_arith.sym +++ b/xschem_library/devices/isource_arith.sym @@ -1,8 +1,9 @@ -v {xschem version=2.9.8 file_version=1.2} +v {xschem version=3.1.0 file_version=1.2 +} G {} K {type=isource -format="@name @pinlist CUR=' @CUR ' MIN=' @MIN ' MAX=' @MAX ' " -template="name=G1 CUR=cos(V(IN)) MIN=-2 MAX=2"} +format="@name @pinlist CUR=' @CUR '" +template="name=G1 CUR=cos(V(IN))"} V {} S {} E {} @@ -17,8 +18,6 @@ B 5 -2.5 -32.5 2.5 -27.5 {name=p dir=inout} B 5 -2.5 27.5 2.5 32.5 {name=m dir=inout} A 4 0 0 15 270 360 {} T {@name} 20 -17.5 0 0 0.2 0.2 {} -T {@CUR -MIN=@MIN -MAX=@MAX} 20 0 0 0 0.2 0.2 {} +T {@CUR} 20 0 0 0 0.2 0.2 {} T {@#0:net_name} 5 -42.5 0 0 0.15 0.15 {layer=15} T {@#1:net_name} 5 32.5 0 0 0.15 0.15 {layer=15} diff --git a/xschem_library/examples/classD_amp.sch b/xschem_library/examples/classD_amp.sch index 504b0682..29f0ba96 100644 --- a/xschem_library/examples/classD_amp.sch +++ b/xschem_library/examples/classD_amp.sch @@ -92,8 +92,8 @@ ypos2=36.4765 divy=5 subdivy=1 unity=1 -x1=0.000509817 -x2=0.000687424 +x1=1e-09 +x2=0.002 divx=5 subdivx=1 node="out @@ -111,8 +111,8 @@ ypos2=7.14491 divy=5 subdivy=1 unity=1 -x1=0.000509817 -x2=0.000687424 +x1=1e-09 +x2=0.002 divx=5 subdivx=1 @@ -127,15 +127,15 @@ drived ref" } B 2 1060 -990 2040 -680 {flags=graph -y1=-0.11 +y1=-0.1 y2=11 ypos1=-3.90706 ypos2=14.7089 divy=5 subdivy=1 unity=1 -x1=0.000509817 -x2=0.000687424 +x1=1e-09 +x2=0.002 divx=5 subdivx=1 @@ -152,15 +152,15 @@ B 2 600 -780 996 -635 {flags=image,unscaled alpha=0.6 image_data=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} B 2 1060 -1310 2040 -1000 {flags=graph -y1=-13.9952 -y2=248.859 +y1=1.84926 +y2=186.399 ypos1=2.19058 ypos2=36.4765 divy=5 subdivy=1 unity=1 -x1=0.000509817 -x2=0.000687424 +x1=1e-09 +x2=0.002 divx=5 subdivx=1 diff --git a/xschem_library/ngspice/comp_ngspice.sch b/xschem_library/ngspice/comp_ngspice.sch index 2dea98e0..dbb9a06f 100644 --- a/xschem_library/ngspice/comp_ngspice.sch +++ b/xschem_library/ngspice/comp_ngspice.sch @@ -15,14 +15,12 @@ C {lab_pin.sym} 180 -260 0 1 {name=l6 sig_type=std_logic lab=IPLUS} C {lab_pin.sym} 180 -210 0 1 {name=l1 sig_type=std_logic lab=IMINUS} C {lab_pin.sym} 450 -240 0 0 {name=l2 sig_type=std_logic lab=IOUT} C {lab_pin.sym} 450 -120 0 0 {name=p35 lab=0} -C {bsource.sym} 450 -150 0 1 {name=B1 VAR=V FUNC="\{OFFSET + AMPLITUDE/2*(tanh(V(IPLUS,IMINUS)*300))\}" +C {bsource.sym} 450 -150 0 1 {name=B1 VAR=V FUNC="\{OFFSET + AMPLITUDE/2*(tanh(V(IPLUS,IMINUS)*GAIN*2/AMPLITUDE))\}" } C {title.sym} 160 -30 0 0 {name=l3 author="Stefan Schippers"} C {res.sym} 570 -240 1 0 {name=R1 -value=1k -footprint=1206 -device=resistor +value=ROUT m=1} -C {parax_cap.sym} 630 -230 0 0 {name=C3 gnd=0 value=8f m=1} +C {parax_cap.sym} 630 -230 0 0 {name=C3 gnd=0 value=COUT m=1} C {vsource.sym} 150 -260 1 0 {name=V1 value=0} C {vsource.sym} 150 -210 1 0 {name=V2 value=0} diff --git a/xschem_library/ngspice/comp_ngspice.sym b/xschem_library/ngspice/comp_ngspice.sym index 501c8d41..3c02cf2f 100644 --- a/xschem_library/ngspice/comp_ngspice.sym +++ b/xschem_library/ngspice/comp_ngspice.sym @@ -1,8 +1,9 @@ -v {xschem version=3.0.0 file_version=1.2 } +v {xschem version=3.1.0 file_version=1.2 +} G {} K {type=subcircuit -format="@name @pinlist @symname OFFSET=@OFFSET AMPLITUDE=@AMPLITUDE" -template="name=x1 OFFSET=0 AMPLITUDE=5" +format="@name @pinlist @symname OFFSET=@OFFSET AMPLITUDE=@AMPLITUDE GAIN=@GAIN ROUT=@ROUT COUT=@COUT" +template="name=x1 OFFSET=0 AMPLITUDE=5 GAIN=100 ROUT=1000 COUT=1p" } V {} S {} @@ -13,11 +14,40 @@ L 4 40 0 60 0 {} L 4 -60 30 -40 30 {} L 4 -40 -50 40 0 {} L 4 -40 50 40 0 {} +L 4 17.5 45 37.5 45 {} +L 4 37.5 15 37.5 45 {} +L 4 37.5 15 57.5 15 {} +L 4 17.5 30 57.5 30 {dash=3} +L 4 37.5 45 55 45 {dash=3} +L 6 53.75 17.5 53.75 42.5 {} +L 6 52.5 17.5 53.75 17.5 {} +L 6 52.5 17.5 53.75 15 {} +L 6 53.75 15 55 17.5 {} +L 6 53.75 17.5 55 17.5 {} +L 6 53.75 42.5 55 42.5 {} +L 6 53.75 45 55 42.5 {} +L 6 52.5 42.5 53.75 45 {} +L 6 52.5 42.5 53.75 42.5 {} +L 7 10 40 60 40 {} +L 8 43.75 32.5 43.75 37.5 {} +L 8 42.5 32.5 43.75 32.5 {} +L 8 42.5 32.5 43.75 30 {} +L 8 43.75 30 45 32.5 {} +L 8 43.75 32.5 45 32.5 {} +L 8 43.75 37.5 45 37.5 {} +L 8 43.75 40 45 37.5 {} +L 8 42.5 37.5 43.75 40 {} +L 8 42.5 37.5 43.75 37.5 {} B 5 -62.5 -32.5 -57.5 -27.5 {name=PLUS dir=in } B 5 57.5 -2.5 62.5 2.5 {name=OUT dir=out } B 5 -62.5 27.5 -57.5 32.5 {name=MINUS dir=in } T {@symname} -32 44 0 0 0.3 0.3 {} -T {@name} -10 -48.25 0 0 0.2 0.2 {} +T {@name} -20 -48.25 0 0 0.2 0.2 {} T {PLUS} -38.75 -30.25 0 0 0.2 0.2 {} T {OUT} 28.75 -5.25 0 1 0.2 0.2 {} T {MINUS} -38.75 18.5 0 0 0.2 0.2 {} +T {GAIN=@GAIN +ROUT=@ROUT +COUT=@COUT} 28 -46 0 0 0.2 0.2 {} +T {@OFFSET} 57.5 30 0 0 0.15 0.15 {layer=8} +T {@AMPLITUDE} 55 18.75 0 0 0.15 0.15 {layer=6} diff --git a/xschem_library/ngspice/pv_ngspice.sch b/xschem_library/ngspice/pv_ngspice.sch index de3898d3..c1b3a2a1 100644 --- a/xschem_library/ngspice/pv_ngspice.sch +++ b/xschem_library/ngspice/pv_ngspice.sch @@ -5,50 +5,184 @@ K {} V {} S {} E {} -T {Voc = 21 +B 2 760 -620 1166 -170 {flags=image,unscaled +alpha=0.8 +image=/home/schippes/x/1.png +image_data=" +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 +PP74pblzTz37rOsyI3r2PDxjhtkkwD3JAUALLVXYin/967uzZ5XpzP79Gxoby5TLffHhTH39ew7Hf37xhdv83SdPNjQ2Zsp182QAX6AKU7Sc +2uqYNu09h2PpN98Q0UMDBmy+9k2fOcnJjw0ZMnzxYuXH5B497FOm9Piv/6q7enVfTs76w4eTe/aMsFiuNjXN2rhx7+nTRPTC8OEzhw37RXh4 +bUPDRxUVr127XOG+nJxV3313z2233dq585WmppwNG8p//JGIuoaFFdpsmf37dwwN3VZd/ezmzTU3XSt2/eHDRPTo4ME3B7C5qmpcXNzqQ4dY +rxkAruHUVmrtC0bDunffX1urTC/bvz+xe/d45SJeRNMSElZ+913d1avKj2P795+watXwxYs/2LNn3aRJHUNDieh4Xd2YFSu6vvvuQ0VFs5KS +JrucT/zb2NgJq1YN+eijZfv3LxwzpuVPjB17a5cuSYsW3f6Xv5yur1+SmdmuGCpPn/7lrbe2M3AA4aEKU3hIYbd07HjhyhVl+vTly+sOH542 +dCgRWUJCJg8e/IlySR0iIvpw795zDQ1EtPzbb5uczlF9+hDRin/96/uffnISVdTULKqsfMDlS0MLKyqU5VcfPDise/cQk6mf1ZoZGztr06Yz +9fUNjY3527Y90LdvdKdOvgdw4erVKOVyPwDBBFUYEdntdg/fkTzX0NDV5YKHi/buXZCeXmC3Z8bGXvr5520//KA+deriRXX65MWLvSIiiGhs +//4vjhjR12ologiL5QuXa32duXaEWN/YGGo2d+rQoa/V2ux0lmVlqctcuHq1V3h4rc9XOOxqsZxtaPBxYQBp4GI7Cg8p7J81NfHqJZ+J1h85 +Emo2P9Cv37SEhCX79jUrFwAjIqLYW25RJpR66nhdXY8uXYrGj89YsWJrdbWT6LVf/zrJ61Fe9YULTqLEjz/+6Vrd115DY2LKb/x+P0AwQP6i +1nphqw8eHKXePoiosbl56Tff5A0fnnHHHYv37XNd8unExKExMaFm87yRI5uczq3V1REWCxFVnj7tJOrRpUubJ3YdOX+++MiRDzMyeoaHE1G3 +Tp0mDhx482IhJlPH0NAOZjMRdQwNDXO5LvX9ffr838GD7QgaQArohSk8VGFrDh16Z9SoET177j55UpmzqLKyMjt717Fjh86dc13yr+XlH2Vk +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 +83xyctWsWefnzDn57LP/cc89RPTI4MEV127w8f799zfm50eGhRHRvw0atDc7m4i6hoUtGD366DPPnM7NXfHQQ907d1YWbm3+vpyct9LStk6e +/NW0aV88/vidMTHqX99cVTUOx5IgO1RhCjMRLdu/P7F79/hu3ZRZ0xISVn73Xd3Vq0Q0rHv3/dduj+ZlMVdxUVGv//rX9y9fHvnee4P+53/W +Hj5MRJ9XVQ3t1i2mc2ciGtWnz/fnz6f17q1Mf15dTUTLxo69tUuXpEWLbv/LX07X1y/JzGz5o63MJ6Kx/ftPWLVq+OLFH+zZs27SpI7Xvltb +efr0L2+9VYuVBcAPVGFEZLfbzUR0+vLldYcPTxs6lIgsISGTBw/+5NqtN27p2PHClSvKtJfFXDU2N4eYzb+89dYIi+WnK1f2nDpFRGfq6ytP +n76vT58eXbrEdO78wZ49o/r2JaJRfft+XlXVz2rNjI2dtWnTmfr6hsbG/G3bHujbN7pTp9bmK3/ow717zzU0ENHyb79tcjpH9emjzL9w9WpU +x44arjYADqAKU7RULov27l2Qnl5gt2fGxl76+edtP/ygzD/X0NA1LExd2uNiTyQkLHrwQWUBU2HhkfPnp65d++wvf7nowQe//vHHV3buVBbb +UlV1f58+HczmrdXVm6uqZiUl9enatU/XrjuOHbvr1lubnc6yrCz1D124erVXeHh0p04e59fW1xPRqYsX1fknL17sFRGhTHe1WM42NGiwrgA4 +giqMiGw2W0sKW3/kSKjZ/EC/ftMSEpbs29d87UKU/6ypiXe5w6PHxT6prHQrx4oOHCg6cKBTaOjzycn/ePjhW/70p2an8/Pq6j+PHh1qNm+p +rv62tjbCYpmWkPDVyZMXrlypvnDBSZT48cc/Xav4FHdERnqcr4i95RZlIsRk6me1Hq+rU34cGhNT/uOPbNYQAK8cDgeyGKmfSDY2Ny/95pu8 +4cMz7rhj8b596tOrDx5UD9C8LOZqUHT0fX36hIWE1Dc2nrp0qdHpVK7Mu+Po0dsiIh6Oi/u8qoqItv7wQ97w4Uoj7Mj588VHjnyYkdEzPJyI +unXqNHHgQC/zFU8nJg6NiQk1m+eNHNnkdG69duWg+/v0+T8+LmYEoB3kL1J7YYpFlZX39+1bduLEoXPn1JlrDh3qYrGM6NnT+2KuOoWGvmmz +1Tz33Nnnn5+VlPTwypVKRXfp55+/PHHiTH399z/9RERbqqq6hoWpeWfKmjXH6upKHn+87oUXyrKybL17e59PRH8tL/8oI+Ps88//Njb2t59+ +Wt/YSETDe/bsYrGsOXSIzRoC4BV6YYq2TwGdMHDgU3femfHppzqMxnf7cnL+c9euzw4ccJu/buLEjysri26aD2AUtxsd3XXXXenp6SEhIf37 +95/mcpaSxWJZsGBBUVHR+vXr3ZYZPHhwVlZWXV3d7t27t2zZYlwo3BH4PpL7cnJcDyoBODd//nzXH9PS0iZOnOg6JycnZ8qUKQ9e+2TMdZmZ +M2fGx8ebTCbXi02jCiN8zRvAKGPGjNmwYYP6Y1JSUk1NzY83fgylLlNUVDR27Njc3NwuXbqoz6IXRkR2u13UW+YM/egjo4cA4KcePXrU1dVd +unRJnTN8+PCIiIjbb789JCRk+/btly9fdl3m9OnThYWFHTt2jI+PV38Fn0gCgB6sVmtBQcHq1aunT5+uzJkxY8bQoUOV6TvvvPPRRx9VpkeN +GqUeSLou07t373nz5r311luJiYn6jp13AvfCAABaUpjNZlOTGaYxjWlMizINACC2/wfEANOB9vZLbgAAAABJRU5ErkJggg==" +} +T {Voc = 22 Wp = 100W -Vmp = 18.2} 610 -370 0 0 0.4 0.4 {} -N 510 -340 510 -320 { -lab=minus} -N 510 -140 510 -120 { +Vmp = 17.5} 610 -370 0 0 0.4 0.4 {} +N 510 -340 510 -120 { lab=minus} N 510 -430 510 -400 { lab=mn} -N 510 -320 510 -260 { -lab=minus} -N 510 -580 510 -490 { +N 280 -360 300 -360 { +lab=fade} +N 510 -560 510 -490 { lab=pn} -N 510 -490 600 -490 { -lab=pn} -N 510 -430 600 -430 { -lab=mn} -N 510 -260 510 -140 { -lab=minus} -N 510 -680 510 -640 { +N 510 -680 510 -620 { lab=plus} C {iopin.sym} 510 -680 2 1 {name=p1 lab=plus} C {iopin.sym} 510 -120 2 1 {name=p2 lab=minus} C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true} C {ammeter.sym} 510 -370 2 1 {name=Vm} -C {bsource.sym} 510 -460 2 0 {name=B1 VAR=I FUNC="pwl(V(pn,mn), -+ 0, 6.3, -+ 18, 5.7, -+ 18.3, 5.6, -+ 18.6, 5.4, -+ 18.9, 5.1, -+ 19.5, 4.0, -+ 21, 0, -+ 22, 0)" -} C {lab_pin.sym} 510 -510 2 0 {name=l2 sig_type=std_logic lab=pn} C {lab_pin.sym} 510 -410 2 0 {name=l3 sig_type=std_logic lab=mn} -C {res.sym} 600 -460 0 0 {name=R1 -value=500000 -footprint=1206 -device=resistor -m=1} -C {res.sym} 510 -610 0 0 {name=R2 -value=0.1 -footprint=1206 -device=resistor -m=1} +C {isource_arith.sym} 510 -460 2 0 {name=G1 +CUR="v(f) * 6.35 * (1 - exp( (v(pn,mn) ++ -19 - v(f)*3 ) * .5) - ++ 0.002 * (v(pn,mn) - 19 - v(f)*3))"} +C {ipin.sym} 280 -360 2 1 {name=p2 lab=fade} +C {ammeter.sym} 330 -360 3 0 {name=Vf} +C {lab_pin.sym} 360 -360 2 0 {name=l3 sig_type=std_logic lab=f} +C {ammeter.sym} 510 -590 2 1 {name=Vp} diff --git a/xschem_library/ngspice/pv_ngspice.sym b/xschem_library/ngspice/pv_ngspice.sym index f6ebf63b..82cbd21d 100644 --- a/xschem_library/ngspice/pv_ngspice.sym +++ b/xschem_library/ngspice/pv_ngspice.sym @@ -2,12 +2,11 @@ v {xschem version=3.1.0 file_version=1.2 } G {} K {type=subcircuit -format="@name @pinlist @symname R1=@R1 R2=@R2 Vmp=@Vmp Voc=@Voc m=@m" -function1="U H 0 m" -function0="L U 1 m" +format="@name @pinlist @symname m=@m" -template="name=X1 m=1 R1=0.1 R2=10 Vmp=17 Voc=21"} + +template="name=X1 m=1"} V {} S {} E {} @@ -19,9 +18,11 @@ L 4 -15 -20 -5 -20 {} L 4 -10 -25 -10 -15 {} B 5 -2.5 -32.5 2.5 -27.5 {name=plus dir=inout} B 5 -2.5 27.5 2.5 32.5 {name=minus dir=inout} +B 5 -42.5 -2.5 -37.5 2.5 {name=fade dir=in} P 4 7 -35 -30 -25 -20 -20 -25 -15 -10 -30 -15 -25 -20 -35 -30 {} P 4 7 -35 -5 -25 5 -20 0 -15 15 -30 10 -25 5 -35 -5 {} T {@name} 15 -28.75 0 0 0.2 0.2 {} -T {Voc = 21 +T {Voc = 22 Wp = 100W -Vmp = 18.2} 30 -10 0 0 0.2 0.2 {} +Vmp = 17.5} 30 -10 0 0 0.2 0.2 {} +T {m=@m} -5 16.25 0 1 0.2 0.2 {} diff --git a/xschem_library/ngspice/solar_panel.sch b/xschem_library/ngspice/solar_panel.sch index 357103fd..37fd9317 100644 --- a/xschem_library/ngspice/solar_panel.sch +++ b/xschem_library/ngspice/solar_panel.sch @@ -33,51 +33,107 @@ L 4 75 -735 85 -735 {} L 4 75 -775 85 -775 {} L 4 75 -815 85 -815 {} L 4 75 -855 85 -855 {} +L 4 610 -1140 630 -1180 {} +L 4 630 -1180 650 -1140 {} +L 4 650 -1140 670 -1180 {} +L 4 670 -1180 690 -1140 {} +L 4 690 -1140 710 -1180 {} +L 4 710 -1180 730 -1140 {} +L 4 1050 -1080 1060 -1080 {} +L 4 1060 -1120 1060 -1080 {} +L 4 1060 -1120 1070 -1120 {} +L 4 1070 -1120 1070 -1080 {} +L 4 1070 -1080 1080 -1080 {} +L 4 1080 -1120 1080 -1080 {} +L 4 1080 -1120 1090 -1120 {} +L 4 1090 -1120 1090 -1080 {} +L 4 1090 -1080 1100 -1080 {} +L 4 1100 -1120 1100 -1080 {} +L 4 1100 -1120 1110 -1120 {} +L 4 1110 -1120 1110 -1080 {} +L 4 1110 -1080 1120 -1080 {} +L 4 1120 -1120 1120 -1080 {} +L 4 1120 -1120 1130 -1120 {} B 2 1270 -740 1690 -570 {flags=graph -y1 = -0.00013 -y2 = 21 +y1 = -0.00011 +y2 = 22 divy = 6 subdivy=1 -x1=1e-11 -x2=0.0006 +x1=5e-10 +x2=0.001 divx=8 node="panel led" unitx=m color="7 4"} B 2 1270 -570 1690 -400 {flags=graph -y1 = 0.0012 -y2 = 6.3 +y1 = -0.003 +y2 = 6.7 divy = 4 subdivy=1 -x1=1e-11 -x2=0.0006 +x1=5e-10 +x2=0.001 divx=8 unitx=m -color="7 4" +color="7 4 6" node="i(vpanel) -i(vled)"} +i(vled) +\\"R.Avg. I(vpanel); i(vpanel) 20u ravg()\\""} B 2 1270 -930 1690 -740 {flags=graph -y1 = -4.1e-08 -y2 = 100 +y1 = -0.064 +y2 = 110 divy = 5 subdivy=1 -x1=1e-11 -x2=0.0006 +x1=5e-10 +x2=0.001 divx=9 unitx=m subdivx=4 -color="7 4 6" +color="7 4 6 10" node="\\"Panel power; i(vpanel) v(panel) *\\" \\"Led power; i(vled) v(led) *\\" -\\"R.Avg.Pan. Pwr; i(vpanel) v(panel) * 20u ravg()\\"" +\\"R.Avg.Pan. Pwr; i(vpanel) v(panel) * 20u ravg()\\" +\\"SUN %; sun 100 *\\"" hilight_wave=-1} +B 2 1270 -1120 1690 -930 {flags=graph +y1 = 0 +y2 = 1 +divy = 5 +subdivy=1 +x1=5e-10 +x2=0.001 +divx=9 + + unitx=u subdivx=4 +color="14 7" +node="triang +level" +hilight_wave=-1 +digital=0 +ypos1=0.00261891 +ypos2=0.51596} +B 2 1270 -1320 1690 -1130 {flags=graph +y1 = 0 +y2 = 1 +divy = 5 +subdivy=1 +x1=5e-10 +x2=0.001 +divx=9 + + unitx=u subdivx=4 + + +hilight_wave=-1 +digital=0 +ypos1=0.00261891 +ypos2=0.51596 +color=8 +node="\\"CTRL1 Duty cycle; ctrl1 20u ravg()\\""} B 18 85 -840 340 -655 {} A 5 340 -840 5.590169943749475 243.434948822922 360 {fill=true} P 7 6 415 -655 360 -811.25 355 -825 342.5 -840 330 -845 85 -855 {} T {2x10 1W white LED} 1230 -340 0 0 0.4 0.4 {layer=8} T {2xseries 1W white LEDs} 1250 -230 0 0 0.4 0.4 {} -T {Select one or more graphs (and no other objects) -and use arrow keys to zoom / pan waveforms} 1190 -1010 0 0 0.3 0.3 {} T {2.5} 115 -635 0 0 0.2 0.2 {} T {5.0} 155 -635 0 0 0.2 0.2 {} T {7.5} 195 -635 0 0 0.2 0.2 {} @@ -96,6 +152,10 @@ T {V} 430 -645 0 0 0.4 0.4 {} T {I} 60 -900 0 0 0.4 0.4 {} T {SOLAR PANEL} 165 -935 0 0 0.4 0.4 {} T {Maximum Power} 327.5 -860 0 0 0.2 0.2 {layer=8} +T {set between 0 and 1 +to simulate +sun radiation +level} 30 -440 0 0 0.2 0.2 {} N 1050 -250 1140 -250 {lab=0} N 1140 -290 1140 -250 {lab=0} N 680 -650 770 -650 {lab=#net1} @@ -104,7 +164,6 @@ N 1050 -480 1050 -350 {lab=VO} N 1050 -290 1050 -250 {lab=0} N 570 -650 620 -650 {lab=PANEL} N 1050 -650 1050 -480 {lab=VO} -N 610 -870 610 -810 {lab=CTRL1} N 860 -650 900 -650 {lab=SW} N 860 -650 860 -530 {lab=SW} N 830 -650 860 -650 {lab=SW} @@ -116,31 +175,55 @@ N 1140 -480 1140 -350 {lab=LED} N 860 -370 860 -250 {lab=0} N 860 -470 860 -430 { lab=#net2} N 960 -650 980 -650 { lab=#net3} -N 280 -530 280 -480 { +N 380 -530 380 -480 { lab=#net4} -N 280 -420 280 -370 {lab=0} -N 280 -530 320 -530 { +N 380 -420 380 -370 {lab=0} +N 380 -530 420 -530 { lab=#net4} -N 610 -870 800 -870 { +N 800 -760 800 -690 { lab=CTRL1} -N 800 -870 800 -690 { -lab=CTRL1} -N 380 -530 450 -530 { +N 480 -530 550 -530 { lab=#net5} -N 510 -530 570 -530 { +N 610 -530 670 -530 { lab=PANEL} -N 420 -390 420 -370 { +N 520 -390 520 -370 { lab=0} -N 420 -470 420 -450 { +N 520 -470 520 -450 { lab=#net6} -N 170 -450 230 -450 { -lab=#net7} -N 170 -390 170 -370 { +N 180 -450 340 -450 { +lab=SUN} +N 180 -360 180 -340 { lab=0} +N 610 -1050 610 -1030 { +lab=0} +N 610 -1120 610 -1110 { +lab=TRIANG} +N 610 -1120 770 -1120 { +lab=TRIANG} +N 720 -910 830 -910 { +lab=LEVEL} +N 550 -880 550 -840 { +lab=REF} +N 550 -880 600 -880 { +lab=REF} +N 550 -940 600 -940 { +lab=LED} +N 1010 -1040 1060 -1040 { +lab=CTRL1} +N 180 -450 180 -420 { +lab=SUN} +N 830 -1010 830 -910 { +lab=LEVEL} +N 830 -1010 890 -1010 { +lab=LEVEL} +N 770 -1120 770 -1070 { +lab=TRIANG} +N 770 -1070 890 -1070 { +lab=TRIANG} C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true} C {code_shown.sym} 190 -240 0 0 {name=CONTROL value=".control save all -tran 1u 600u uic +tran .05u 1m uic write solar_panel.raw .endc @@ -148,28 +231,23 @@ write solar_panel.raw C {code.sym} 20 -230 0 0 {name=MODELS value=".MODEL DIODE D(IS=1.139e-08 RS=0.99 CJO=9.3e-12 VJ=1.6 M=0.411 BV=30 EG=0.7 ) .MODEL swmod SW(VT=0.5 VH=0.01 RON=0.01 ROFF=10000000) " net_name=true} -C {lab_pin.sym} 570 -530 0 1 {name=l4 sig_type=std_logic lab=PANEL net_name=true} -C {lab_pin.sym} 670 -250 0 0 {name=l6 sig_type=std_logic lab=0 net_name=true} +C {lab_pin.sym} 670 -530 0 1 {name=l4 lab=PANEL } +C {lab_pin.sym} 670 -250 0 0 {name=l6 lab=0 } C {ammeter.sym} 1110 -480 3 0 {name=Vled net_name=true} C {ind.sym} 930 -650 3 1 {name=L1 m=1 value=40u footprint=1206 device=inductor net_name=true} -C {lab_pin.sym} 1180 -480 0 1 {name=l7 sig_type=std_logic lab=LED net_name=true} -C {lab_pin.sym} 610 -870 0 0 {name=l8 sig_type=std_logic lab=CTRL1 net_name=true} -C {lab_pin.sym} 860 -590 0 1 {name=l9 sig_type=std_logic lab=SW net_name=true} +C {lab_pin.sym} 1180 -480 0 1 {name=l7 lab=LED } +C {lab_pin.sym} 860 -590 0 1 {name=l9 lab=SW } C {capa.sym} 1050 -320 0 0 {name=C1 m=1 -value=10u +value=1u footprint=1206 device="ceramic capacitor" net_name=true} -C {lab_pin.sym} 1050 -440 0 1 {name=l10 sig_type=std_logic lab=VO net_name=true} -C {vsource.sym} 610 -780 0 0 {name=Vset1 -value="dc 0 pulse 0 1 0 1n 1n 1.7u 5u" -net_name=true} -C {lab_pin.sym} 610 -750 0 0 {name=l13 sig_type=std_logic lab=0 net_name=true} -C {lab_pin.sym} 570 -650 0 0 {name=l2 sig_type=std_logic lab=PANEL net_name=true} +C {lab_pin.sym} 1050 -440 0 1 {name=l10 lab=VO } +C {lab_pin.sym} 570 -650 0 0 {name=l2 lab=PANEL } C {ammeter.sym} 1010 -650 3 0 {name=Vind net_name=true} C {launcher.sym} 660 -110 0 0 {name=h2 descr="Simulate" @@ -196,28 +274,46 @@ C {launcher.sym} 660 -170 0 0 {name=h1 descr="Simulate + gaw reload" tclcommand="set sim(spice,default) 1; set sim(spice,1,fg) 1; set sim(spice,1,st) 0;xschem netlist; xschem simulate; gaw_cmd reload_all" net_name=true} C {spice_probe.sym} 1160 -480 0 0 {name=p1 analysis=tran} -C {spice_probe.sym} 570 -530 0 0 {name=p2 analysis=tran} +C {spice_probe.sym} 670 -530 0 0 {name=p2 analysis=tran} C {spice_probe.sym} 860 -550 0 1 {name=p3 analysis=tran} -C {launcher.sym} 1200 -1050 0 0 {name=h3 -descr="Select arrow and -Ctrl-Left-Click to load/unload waveforms" +C {launcher.sym} 1080 -1180 0 0 {name=h3 +descr="Reload Waves" tclcommand=" xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw tran " } -C {pv_ngspice.sym} 280 -450 0 0 {name=X1 m=1 roff=1e9} -C {lab_pin.sym} 280 -370 0 0 {name=l12 sig_type=std_logic lab=0 net_name=true} -C {capa.sym} 420 -500 0 0 {name=C11 +C {pv_ngspice.sym} 380 -450 0 0 {name=X1 m=1} +C {lab_pin.sym} 380 -370 0 0 {name=l12 lab=0 } +C {capa.sym} 520 -500 0 0 {name=C11 m=1 -value=10u +value=1u footprint=1206 device="ceramic capacitor" net_name=true} -C {lab_pin.sym} 420 -370 0 0 {name=l90 sig_type=std_logic lab=0 net_name=true} -C {ammeter.sym} 350 -530 3 1 {name=Vpanel net_name=true} +C {lab_pin.sym} 520 -370 0 0 {name=l90 lab=0 } +C {ammeter.sym} 450 -530 3 1 {name=Vpanel net_name=true} C {diode_ngspice.sym} 860 -500 2 0 {name=X2 m=1 Roff=1e9 Ron=0.1} C {switch_ngspice.sym} 800 -650 1 0 {name=S1 model=swmod} -C {lab_pin.sym} 780 -690 0 0 {name=l3 sig_type=std_logic lab=0 net_name=true} -C {ammeter.sym} 480 -530 3 1 {name=Vpanel1 net_name=true} -C {ammeter.sym} 420 -420 0 0 {name=Vcap net_name=true} -C {vsource.sym} 170 -420 0 0 {name=Vfade value=1} -C {lab_pin.sym} 170 -370 0 0 {name=l12 sig_type=std_logic lab=0 net_name=true} +C {lab_pin.sym} 780 -690 0 0 {name=l3 lab=0 } +C {ammeter.sym} 580 -530 3 1 {name=Vpanel1 net_name=true} +C {ammeter.sym} 520 -420 0 0 {name=Vcap net_name=true} +C {vsource.sym} 180 -390 0 0 {name=Vfade value="pwl 0 1 1m 0"} +C {lab_pin.sym} 180 -340 0 0 {name=l5 lab=0 } +C {ngspice_get_expr.sym} 1160 -360 0 0 {name=r29 +node="[format %.4g [expr \{[ngspice::get_voltage led] * [ngspice::get_current vled]\}]] W" +descr = power +} +C {vsource.sym} 610 -1080 0 0 {name=Vtriang value="pulse 0 1 0 2u 2u 1f 4u"} +C {lab_pin.sym} 610 -1030 0 0 {name=l11 lab=0 } +C {lab_pin.sym} 770 -1120 0 1 {name=l14 +lab=TRIANG } +C {vsource.sym} 550 -810 0 0 {name=Vref value=7} +C {lab_pin.sym} 550 -780 0 0 {name=l17 lab=0 } +C {lab_pin.sym} 800 -760 0 0 {name=l8 lab=CTRL1 } +C {comp_ngspice.sym} 660 -910 0 0 {name=x3 OFFSET=0.5 AMPLITUDE=1 ROUT=10k COUT=1n} +C {lab_pin.sym} 550 -880 0 0 {name=l16 +lab=REF} +C {lab_pin.sym} 550 -940 0 0 {name=l7 lab=LED } +C {lab_pin.sym} 830 -910 0 1 {name=l18 lab=LEVEL} +C {comp_ngspice.sym} 950 -1040 0 0 {name=x4 OFFSET=0.5 AMPLITUDE=1 ROUT=1 COUT=1p} +C {lab_pin.sym} 1060 -1040 0 1 {name=l8 lab=CTRL1 } +C {lab_pin.sym} 180 -450 0 0 {name=l4 lab=SUN }