วิธีการพล็อตปัจจุบันใน ngspice?


11

ฉันต้องการพล็อตกระแสและกำลังเป็น ngspice ในกรณีของแรงดันไฟฟ้าตัวอย่างเช่นถ้าฉันต้องการพล็อตแรงดันไฟฟ้าที่โหนด 1 ฉันจะใช้:

plot v(1)

ปัญหาคือเมื่อฉันลอง i (1) เวกเตอร์ไม่รู้จัก มีคนให้ตัวอย่างเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีการทำเช่นนี้?


คำตอบ:


8

Oli ให้คำตอบที่ถูกต้อง แต่ I (element_name) เป็นส่วนขยายที่เพิ่มเข้ากับรุ่น SPICE เชิงพาณิชย์เท่านั้น

ใน ngspice (ซึ่งยึดตาม Berkeley Spice 3) คุณสามารถวางแผนกระแสไฟฟ้าผ่านแหล่งจ่ายแรงดัน (อิสระ) เท่านั้น เหล่านี้เป็นกระแสเท่านั้นที่ปรากฏในสมการวงจร SPICE ทำงานจาก

ในเซสชั่นเครื่องเทศแบบโต้ตอบหรือจากบล็อกพิเศษในสคริปต์ (เห็นคำถามนี้ ) คุณสามารถใช้การแสดงออกเช่น(v(1)-v(2))/1kเมื่อปัจจุบันคือผ่านตัวต้านทาน1kΩระหว่างโหนด 1 และ 2 สำหรับองค์ประกอบปฏิกิริยา (เช่นตัวเก็บประจุ1μF) สิ่งที่ชอบ(v(1) - v(2))/(2*pi*frequency*1u)ที่ควร ยังทำงานได้


โซลูชันที่สองของฉัน (ที่มีนิพจน์) ไม่ควรใช้ยากมาก คุณอาจเห็นในคู่มือถ้า ngspice มีวิธีการรับค่าและบางทีชื่อโหนดขององค์ประกอบ ฉันรู้แน่นอนว่ามีเวกเตอร์จำลองด้วยพารามิเตอร์โมเดล
jpc

6

ฉันไม่ได้ใช้ ngspice (ฉันใช้ LTSpice แต่จากสิ่งที่ฉันเข้าใจ SPICE ทั้งหมดค่อนข้างจะอิงตามไวยากรณ์ Berkeley ดั้งเดิมและทำงานคล้าย ๆ กัน) แต่โดยปกติคุณจะเขียนแผนปัจจุบันผ่านส่วนประกอบหรือเข้าสู่ฐานของทรานซิสเตอร์แทน กว่าที่โหนดตามกฎข้อแรกของ Kirchoff (ผลรวมของการประชุมกระแส ณ จุดหนึ่งเป็นศูนย์)

แก้ไข - ตามที่ jpc ชี้ให้เห็นสำหรับสิ่ง ngspice (และอาจเป็นตัวแปรที่ไม่ใช่เชิงพาณิชย์ / ต้นอื่น ๆ ) ส่วนใหญ่จะแตกต่างกันเล็กน้อยเนื่องจากคุณสามารถวางแผนกระแสผ่านแรงดันไฟฟ้าได้เท่านั้น ดังนั้นเราจะต้องเพิ่มแหล่ง 0V ลงในขาของวงจรที่น่าสนใจและพลอตกระแสในนี้ ฉันได้เพิ่มตัวอย่างด้านล่าง

ดังนั้นหากคุณมีวงจรที่เรียบง่ายซึ่งประกอบด้วยตัวต้านทาน (R1) ที่มีแหล่งกำเนิดแรงดันไฟฟ้า (V1) ข้ามมัน (ฉันไม่ใช่ผู้เชี่ยวชาญในเน็ตลิสต์ดังนั้นจึงเป็นตัวอย่างคร่าวๆ):

V1 1 0 5

R1 1 0 1,000

(1, 0 คือโหนด, 5 (V) และ 1000 (Ohms) เป็นค่าที่เกี่ยวข้อง)

คุณสามารถพลอตกระแสด้วย I (R1) หรือ I (V1) ไม่ใช่ I (1) อย่างไรก็ตามคุณสามารถลงจุด V (1) สำหรับแรงดันไฟฟ้าได้

รุ่น NGSPICE (ผ่านการทดสอบและยืนยันแล้ว)

V1 1 0 5
R1 1 2 1,000 Vdummy 2 0 0

โปรดทราบว่า Vdummy อยู่ในอนุกรมที่มีตัวต้านทานดังนั้นกระแสเดียวกันจะต้องไหลผ่านมัน ดังนั้นพล็อตปัจจุบันสำหรับ R1 เราเขียน I (Vdummy) สำหรับวงจรที่ซับซ้อนมากขึ้นเราต้องแน่ใจว่าใช้เงื่อนไขเดียวกัน

นี่คือตัวอย่าง "ของจริง" จาก LTspice:

netlist

V1 V + 0 24 Rser = 0
V2 SIG 0 SINE (-1.4563 1m 1000 0 0 0 0) AC 2 Rser = 0
V3 V- 0 -24
Q1 N001 N002 N003 0 2N2222
R1 V + N001 1f
R2 N003 V- 2K7
C2 N004 N003 100µF
R3 N004 0 3K9
R4 N002 0 22K
C1 N002 SIG 100µF

รูปภาพของวงจร

ตัวอย่างวงจร

แปลงตัวเลือก

(โปรดทราบว่าไม่มี I (n001), I (n002), ฯลฯ )

พล็อตตัวเลือก


1
ในฐานะที่เป็น jpc เพิ่งแสดงความคิดเห็นก็จะปรากฏขึ้นพร้อมกับ ngspice คุณสามารถพล็อตกระแสผ่านแหล่งแรงดันไฟฟ้า ฉันเพิ่งดาวน์โหลด ngspice และยืนยันสิ่งนี้มันเป็นไปได้ที่จะใส่ i (Vx) แต่ไม่ใช่ i (Rx) เป็นต้นดังนั้นฉันคิดว่าคุณต้องเพิ่มแหล่ง 0V ในขาของวงจรที่คุณต้องการพล็อตกระแสผ่าน (พูดว่าเรียกว่า Vx) และใส่ plot i (Vx)
Oli Glaser

@OliGlaser: จริง ๆ แล้วส้อม SPICE เชิงพาณิชย์ส่วนใหญ่จะขึ้นอยู่กับ codebase SPICE2 (ใน Fortran) ในขณะที่ ngspice (และรุ่นโอเพนซอร์ซ / ฟรีแวร์อื่น ๆ ) จะขึ้นอยู่กับการเขียนภาษา C ใหม่! ฉันเชื่อว่าคณะลูกขุนยังคงอยู่ในที่ที่ดีกว่า :)
jpc

4

คุณสามารถพล็อตกระแส แต่คุณต้องรู้ว่าคุณต้องการทราบกระแสใดก่อนที่จะทำการจำลอง

เช่นถ้าคุณมีไดโอด D1 และคุณต้องการพล็อตกระแสไฟฟ้าผ่านมันคุณสามารถ:

.save @d1[id]
.tran <slice> <end>
.plot tran @d1[id]

ข้อมูลเพิ่มเติมอยู่ในหน้า 519 (บทที่ 31) ของคู่มือ ngspice ที่http://ngspice.sourceforge.net/docs/ngspice-manual.pdf


3

ในกรณีที่มีการจ่ายแรงดัน DC ในส่วนประกอบเดียวคุณสามารถพล็อตกระแสไฟฟ้าของสาขาได้ โดยโหลด netlist ต่อไปนี้

.MODEL DI1N4004 D (IS=76.9n RS=42.0m  BV=4 IBV=5.00u CJO=39.8p
+M=0.333 N=1.45 TT=4.32u)

D1 1 0 DI1N4004
Vin 1 0 dc 12 ac 0

เพื่อ ngspice และผู้บังคับบัญชา

dc vin -10 5 0.001
plot -vin#branch

คุณควรจะได้รับแผนภาพพล็อตของกระแสข้ามไดโอด d1


2

สำหรับการพล็อตปัจจุบันเพิ่มแหล่งจ่ายแรงดันเป็นศูนย์ในสาขานั้นและพิมพ์ vlabel # branch ในเทอร์มินัล


3
สิ่งนี้ไม่ได้เพิ่มคำตอบอื่น ๆ ที่ไม่ได้พูดไปแล้วและสั้นเกินไปที่จะเป็นประโยชน์ในตัวของมันเอง
Dave Tweed

2

ตั้งแต่ NGSpice 27 R2017 การวางโค้ดในบรรทัดนี้:

.options savecurrents

ประหยัดกระแสซึ่งสามารถเรียกผ่าน@R1[i], @D1[id]ฯลฯ

plot @R1[i] vs v(1)

หาตัวเลือกนี้ในคู่มือ NGSpice

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.