28-05-2013, 23:47
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
סימולציית מעגל RC ב-Spice
באשכול זה נלמד איך לעשות סימולציה למעגל פשוט של מסנן RC, בעזרת Spice ותוכנות שבחבילת gEDA.
ההסבר הזה רלוונטי למי שעובד על לינוקס, אבל חלק מההסברים מתאימים גם למוצרי ווינדוס.
ביצוע סימולציה למעגל דורש שלוש שלבים:
1. יצירת הסכמה ב-gschem
קובץ זה מתאר מבחינה שירטוטית את החיבורים של הרכיבים, וכולל פירוט של התכונות של כל רכיב
2. יצירת קובץ netlist בעזרת gnetlist
קובץ זה מתאר מבחינה לוגית את החיבורים של הרכיבים בין צמתים (nodes), וכולל פירוט של התכונות של כל רכיב
3. יצירת הסימולציה עם ngspice
לפני שנתחיל, ניצור "תיקיית פרויקטים" שבה יהיה כל השירטוטים שלנו. תיקיה זו תכלול גם מודלים של רכיבים (טרנז', מעגלים משולבים\IC וכד').
לשם הדוגמא, אצור תיקייה זו בנתיב הבא:
/home/dor/Electronics_Projects
אח"כ ניצור תיקייה בשביל הפרויקט הנוכחי, שזה מסנן RC:
/home/dor/Electronics_Projects/RC_filter
נפתח את המסוף (terminal) בתיקיית הפרויקט שלנו, וניכנס ל-gschem כדי לשרטט את המעגל:
קוד:
$ cd /home/dor/Electronics_Projects/RC_filter
$ gschem
תיפתח תוכנת gschem.
התחילו לצייר את המעגל ע"י הוספת הרכיבים ויצירת קצר ביניהם, כפי שמשורטט בתמונה הבאה:
אחרי יצירת השרטוט, יש לערוך את התכונות (Attributes) של הרכיבים, כדי שנדע איך להתייחס\לפנות אליהם, מה הערך שלהם וכד'. בחלונות הבאים תוכלו לראות את התכונות\מאפיינים של כל אחד מהרכיבים:
ספק הכוח:
נגד R1:
קבל C1:
שימו לב שחלק מהשדות של התכונות לא יהיו קיימים ותצטרכו להוסיף אותן.
עכשיו שמרו את הסכמה לתוך תיקיית הפרויקט שלנו לתוך קובץ בשם "RC_filter.sch".
אמורים לערוך את התכונות של הרכיבים בעזרת gattrib אבל gschem גם מאפשר זאת.
במידה ותרצו לערוך עם gattrib, כל מה שצריך לעשות זה להריץ אותו במסוף כשקובץ הקלט זה הסכמה שלנו:
קוד:
$ gattrib ./RC_filter.sch
ואז הערכים הסופיים של כל רכיב בתוכנה gattrib אמורים להיראות כך:
עד עכשיו עשינו את השרטוט של המעגל, הגדרנו את השמות של כל אחד מהרכיבים, והגדרנו להם את הערכים הרצויים.
עכשיו צריך ליצור קובץ netlist שיתאר את החיבורים הלוגיים בין כל רכיב:
קוד:
$ gnetlist -g spice-sdb ./RC_filter.sch
הדגל g מקבל את הערך "spice-sdb", שזה בעצם אומר ל-gnetlist את הפורמט הרצוי של קובץ ה-netlist שלנו.
בעקבות פעולה זו, נוצר בתיקייה הנוכחית קובץ ה-netlist ששמו "output.net".
אם נפתח אותו עם עורך טקסט, נראה את התוכן הבא:
קוד:
* gnetlist -g spice-sdb ./RC_filter.sch
************************************************** *******
* Spice file generated by gnetlist *
* spice-sdb version 4.28.2007 by SDB -- *
* provides advanced spice netlisting capability. *
* Documentation at http://www.brorson.com/gEDA/SPICE/ *
************************************************** *******
*============== Begin SPICE netlist of main design ============
R1 2 1 1MEG
V1 2 0 DC 5V
C1 1 0 1uF
.end
אפשר לראות את שלושת הרכיבים שלנו.
מייד אחרי השם של הרכיב, מגיעים שני מספרים, וכל מספר זה צומת (node) שאליה הרכיב מתחבר. לרכיב עם יותר רגליים - יהיו יותר צמתים כמובן.
לדוגמא, נגד R1 מתחבר לצמתים 2 ו-1. וקבל C1 מתחבר לצמתים 1 ו-0. זה הגיוני כי בשרטוט שלנו עשינו קצר בין הנגד לקבל, לכן לשניהם חייבת להיות אותה הצומת.
אחרי הצמתים מופיע שדה הערך של הרכיב.
השדה יכול להיות ארוך\מורכב יותר ברכיבים מורכבים יותר (כמו טרנזיסטור או מגבר שרת), כי צריך להגדיר את כל התכונות של הרכיב.
במעגלים מורכבים יותר, ייתכן מצב ובו קובץ ה-netlist שייווצר יהיה תקול ונצטרך לתקן. אבל במעגל הפשוט הזה - זה לא אמור לקרות.
לפני שנתחיל לעשות את הסימולציה, נצטרך להגדיר את המצב הראשוני של המעגל, ובמקרה שלנו נגדיר שהמתח על הקבל C1 הוא אפס, ע"י הוספת השורות הבאות לפני פקודת ".end":
קוד:
* Set Initial conditions: Voltage on Capacitor C1 is being set to zero
.IC V(1)=0
עכשיו נייבא את קובץ ה-netlist אל ngspice כדי לעשות סימולציית של המתח על הקבל C1 כפונקציית הזמן:
קוד:
$ ngspice ./output.net
ngspice זו תוכנה אינטראקטיבית ונוכל להקליד אליה פקודות לביצוע הסימולציה שלנו.
כיוון שאנחנו רוצים לעשות פונקציית מתח בהתאם לזמן, נשתמש בפקודה tran (מלשון transient):
בפקודה הנ"ל ngspice יבצע אנליזת זמן כל 10 מילי-שניות למשך סה"כ 5 שניות.
עכשיו נבקש לקבל גרף של המתח על הקבל C1, כלומר בצומת מספר 1:
מייד אחרי הפקודה הבאה יופיע גרף של טעינת הקבל C1, כפי שבתמונה:
כל הכבוד! הצלחתם לעשות את הסימולציה הראשונה שלכם...
אפשר לראות שהגרף שקיבלנו מתאים למציאות, כי קבוע הזמן של ה-RC הוא 1 שנייה, ותוך 5*RC המתח על הקבל אמור להיטען לפי הערך של מקור המתח, שזה 5V, וזה באמת מה שקורה לפי הגרף.
בסופו של דבר אפשר לאחד את כל הפקודות לתוך קובץ ה-netlist שלנו, ואז כשנריץ אותו עם ngspice אז מייד יופיע לנו הגרף שרצינו, כך שנוכל לחסוך הקלדות:
קוד:
* gnetlist -g spice-sdb ./RC_filter.sch
************************************************** *******
* Spice file generated by gnetlist *
* spice-sdb version 4.28.2007 by SDB -- *
* provides advanced spice netlisting capability. *
* Documentation at http://www.brorson.com/gEDA/SPICE/ *
************************************************** *******
*============== Begin SPICE netlist of main design ============
R1 2 1 1MEG
V1 2 0 DC 5V
C1 1 0 1uF
* Set Initial conditions: Voltage on Capacitor C1 is being set to zero
.IC V(1)=0
.control
tran 10m 5
plot V(1)
.endc
.end
כמה מקורות מידע:
http://www-mdp.eng.cam.ac.uk/web/CD...b/appendix.html
http://www.seas.upenn.edu/~jan/spic...ew.html#MOSFETS
http://www-mdp.eng.cam.ac.uk/web/CD...db/netlist.html
http://wiki.geda-project.org/geda:csygas
http://www.ecircuitcenter.com/SPICEsummary.htm
http://bwrcs.eecs.berkeley.edu/Clas...nalyses_fr.html
|