ฉันต้องการพล็อตกระแสและกำลังเป็น ngspice ในกรณีของแรงดันไฟฟ้าตัวอย่างเช่นถ้าฉันต้องการพล็อตแรงดันไฟฟ้าที่โหนด 1 ฉันจะใช้:
plot v(1)
ปัญหาคือเมื่อฉันลอง i (1) เวกเตอร์ไม่รู้จัก มีคนให้ตัวอย่างเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีการทำเช่นนี้?
ฉันต้องการพล็อตกระแสและกำลังเป็น ngspice ในกรณีของแรงดันไฟฟ้าตัวอย่างเช่นถ้าฉันต้องการพล็อตแรงดันไฟฟ้าที่โหนด 1 ฉันจะใช้:
plot v(1)
ปัญหาคือเมื่อฉันลอง i (1) เวกเตอร์ไม่รู้จัก มีคนให้ตัวอย่างเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีการทำเช่นนี้?
คำตอบ:
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 (ฉันใช้ 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), ฯลฯ )
คุณสามารถพล็อตกระแส แต่คุณต้องรู้ว่าคุณต้องการทราบกระแสใดก่อนที่จะทำการจำลอง
เช่นถ้าคุณมีไดโอด D1 และคุณต้องการพล็อตกระแสไฟฟ้าผ่านมันคุณสามารถ:
.save @d1[id]
.tran <slice> <end>
.plot tran @d1[id]
ข้อมูลเพิ่มเติมอยู่ในหน้า 519 (บทที่ 31) ของคู่มือ ngspice ที่http://ngspice.sourceforge.net/docs/ngspice-manual.pdf
ในกรณีที่มีการจ่ายแรงดัน 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
สำหรับการพล็อตปัจจุบันเพิ่มแหล่งจ่ายแรงดันเป็นศูนย์ในสาขานั้นและพิมพ์ vlabel # branch ในเทอร์มินัล
ตั้งแต่ NGSpice 27 R2017 การวางโค้ดในบรรทัดนี้:
.options savecurrents
ประหยัดกระแสซึ่งสามารถเรียกผ่าน@R1[i]
, @D1[id]
ฯลฯ
plot @R1[i] vs v(1)
หาตัวเลือกนี้ในคู่มือ NGSpice
i(1)
อยู่เสมอ 0.