شما با خواندن این مطلب نرم افزار Hspice را یاد میگیرید:
در حوزه شبیه سازی مدارهای الکتریکی، نرم افزار های بسیاری معرفی و به کارگرفته شده اند از این میان یکی از قوی ترین و پرکاربرد ترین نرم افزارها HSPICE است (این نرم افزار بیشتر توسط دانشجویان کارشناسی ارشد مورد استفاده قرار می گیرد). این برنامه که شامل کلیه قطعات چون مقاومت و خازن و سلف (با تزویج و بدون تزویج) و دیود و ترانزیستورهای JFET,MOSFET,BJT و بسیاری دیگرازقطعات حتی در حوزه فرکانس های بالاست قابلیت های زیادی برای تحلیل های پیچیده و با دقت بالا را دارد. بسیاری از تحلیل های DCوAC تحلیل نویز وtransient همچنین شبیه سازیها و بررسی شکل موج های خروجی حتی ترکیب شکل موج های خروجی یک مدارتوسط این نرم افزار به سادگی قابل انجام است اما توصیه من به شما این است که قبل از کار با این نرم افزار ابتدا تحلیل مدارات خود را در فضای برنامه هایی چون PSPICE و یا PROTEUS انجام دهید زیرا این برنامه ها دارای محیط های شماتیک اند و شما را با فضای واقعی کار با مدارات در محیط آزمایشگاه آشنا می کنند اما در HSPICE با پارامترهای کد شده هر یک از المانها کار می کنید وداشتن زمینه فکری مناسب شما را در تحلیل مدارهایتان در این فضا یاری می کند. بررسی اثر تغييرات اجزاء مدار و محاسبه حساسيت رفتار مدار نسبت به آن (شامل مقاومت ها، سلفها،خازن ها، ديودها و ترانزيستورها و ... )، در نظر گرفتن آثار غير خطی المانها در رفتار مدار بهينه كردن مدار با توجه به موارد فوق بررسی رفتار مدار از نظر نويز و اعوجاج ها و همچنين از نظر تجزيه و تحليل در حوزه فركانس و بدست آوردن طيف فركانسی بر مبناي تجزيه و تحليل فوريه از جمله مواردی است که می توان به کمک نرم افزار Hspice انجام داد بدون اينكه نياز به استفاده از دستگاه هاي گران قیمتی مانند Spectrum Analyzer و يا Noise Figure Meter داشته باشيم.پیش از این برخی مطالب آموزشی را در سابت قرار داده بودم که میتوانید
از اینجا زیر دانلود کنید ولی از آنجایی که لازم است برخی مطالب به طور سریع آموزش داده شود در اینجا به طور سریع مطالب لازم را ببرسی میکنیم و شما با خواندن این مطلب hspice را یاد میگیرید.
تعیین مقادیر و متغیرها در hspice:
در اسپایس میتوان به متغییرها مقادیر متفاوتی از جمله اعداد اعشاری و یا مقادیر منفی را اختصاص داد.
همچنین میتوان برای هر متغییر یک واحد نیز در نظر گرفت که واحدهای زیر در hspice قابل پذیرش است:
معرفی المانهای مدار در hspice:
در hspice برای هر المان یک تک کلمه استفاده میشود.برای مثال وقتی بخواهیم پایه های یک ترانزیستور را به سه گره وصل کنیم میباسیت نام ترانزیستور را با حرف M شروع کنیم. ﺍﺳﻢ ﻫﺮ ﻋﻨﺼﺮ میﺗﻮﺍﻧﺪ ﺩﺍﺭﺍﻱ ۶ ۱ ﻛﺎﺭﺍﻛﺘﺮ ﻣﺨﺘﻠﻒ ﺑﺎﺷﺪ ﻭ ﺍﺯ ﺁﻥ 16 ﻛﺎﺭﺍﻛﺘﺮ ﺣﺮﻑ ﺍﻭﻝ ﺣﺘﻤﺎﹰ ﺑﺎﻳﺪ ﻣﻄﺎﺑﻖ ﺟﺪﻭﻝ زیر ﺍﻧﺘﺨﺎﺏ ﮔﺮﺩﺩ ﺑﻘﻴﻪ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺷﺎﻣﻞ ﺣﺮﻑ ﻭ ﻋﺪﺩ ﺑﺎﺷﻨﺪ ﻛﻪ ﺑﻄﻮﺭ ﺩﻟﺨﻮﺍﻩ ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﮔﺮﺩﻧﺪ . ﺗﻔﺎﻭﺗﻲ ﺑﻴﻦ ﺣﺮﻭﻑ ﻛﻮﭼﻚ ﻭ ﺑﺰﺭﮒ ﺩﺭ ﺍﺳﻢ ﮔﺬﺍﺭﻱ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ.برای مثال اگر چند ترانزیستور داریم میتوان m1 وm2 ... به کار برد.
تعریف مدلهای جدید در hspice:
همواره نیاز است برخی مدلهای جدید ترانزیستور را بر اساس تکنولوژی جدید تعریف نماییم برای این کار hspice به ما اجازه داده است که از دستور .model استفاده کنیم.با این دستور میتوان بر اساس المانهایی که در جدول قبل داریم یک مدل جدید از همان المان را ایجاد کرد:
با توجه به فرت بالا میتوان المانهای مختلفی را تعریف کرد و MNAME در این فرمت میتواند هر نام دلخواه شما باشد.در فرمت بالا TYPE را میتوان از جدول زیر انتخاب کرد:
برای مثال پس از قرار دادن یک دیود در مدار میتوان یک مدل جدید برای دیود خود به شکل زیر تعریف کنید:
با این که برای یک ترانزیستور ماسفت مدل n به شکل زیر یک مدل جدید تعریف کرد همانطور که میبینید برای تعریف ترانزیستور ماسفت خواص بسیار زیادی را باید تعریف نمود:
تعریف منبع ولتاژ:
در همه ی پروژه ها برای شبیه سازی نیاز است یک منبع ولتاژ هم داشته باشیم و در hspice همه ی انواع منابع ولتاژ و جریان را میتوان با چند خط برنامه به مدار خود اضافه نمایید:
که مقدار value میتواند هر مقدار dc یا ac را داشته باشد که در زیر مدلهای مختلف آن ذکر خواهد شد:
مقدار میتواند به شکلهای زیر هم باشد:
EXP - exponential waveform
PULSE - pulse waveform
PWL - piecewise linear waveform
SIN - sinusoidal waveform
که هر کدام به شکل زیر به کار میروند و دارای خروجی های زیر هستند و در بساری از پروژه های به کار می آیند:
ایجاد منبع به روش PWL:
در این روش میتوان یک سیگنال دلخواه با هر شکل پاره خطی را ایجاد کرد در واقع سیگنالهای تولید شده به شکل خطی هستند که محورx همان زمان و محور y هم اندازه ولتاژ یا جریان یه هر متغیر دلخواه است. این مدل سیگنالها در برخی تحلیلها لازم میشود. در شکل زیر قرمت و سیگنال تولید شده به روش pwl نشان داده شده است.
Units |
Default Value |
PWL parameter |
second |
none |
Tn - time at corner |
volt |
none |
Vn - voltage at corner |
تولید شکل موج پالس(PLUSE):
فرمت کلی این دستور به شکل زیر است:
که این مقدار به ترتیب بر اساس جدول زیر معنی های متفاوتی دارند:
PULSE parameter |
Default Value |
Units |
V1 - initial voltage |
none |
volt |
V2 - peak voltage |
none |
volt |
Td - initial delay time |
0 |
second |
Tr - rise time |
Tstep |
second |
Tf - fall time |
Tstep |
second |
Pw - pulse width |
Tstop |
second |
Period - pilse period |
Tstop |
second |
در این فرمت موج یک موج با انداره ی v1 تولید و به مدت نصف pw در همان حالت بافی میمیاند و سپس به v2 در زمان tr میرسد که tr همان تاخیر در بالا رقتن سیگنال و tf هم تاخیر در پایین آمدن سیگنال است.در ابتدای کار هم میتوان یک تاخیر کلی ایجاد کرد به انداره ی td .کل ای موج با تناوب pw تکرار خواهد شد.
تولید شکل موج سینوسی:
شکل کلی این دستور به فرمت زیر است:
که بر اساس جدول زیر میتوان مقادیر را مشخص نمود:
Units |
Default Value |
SIN parameter |
volt |
none |
Vo - offset voltage |
volt |
none |
Va - peak amplitude of voltage |
Hz |
1 / Tstop |
Freq - frequency |
second |
0 |
Td - delay time |
1 / second |
0 |
Df - damping factor |
degree |
0 |
Phase - phase advance |
در واقع ولتاژ سینوسی بر اساس فرمول زیر تولید میگردد:
که تمام پارامترهای این فرمول در جدول بالا توضیح داده شده است.
توجه:
سیگنال سینوسی به شکل بالا فقط برای تحلیل transient به کار میرود و برای تحلیل small-signal باید از دستور دیگری به شکل زیر استفاده کرد که عبارات زمانی در آن نباشد:
شکل موج نمایی (Exponential Waveform):
فرمت این دستور به شکل زیر است:
که مقادیر آن بر اساس جدول زیر تعریف میشوند:
PULSE parameter |
Default Value |
Units |
V1 - initial voltage |
none |
volt |
V2 - peak voltage |
none |
volt |
Td1 - rise time delay |
0 |
second |
T1 - rise time constant |
Tstep |
second |
Td2 - fall time delay |
Td1+Tstep |
second |
T2 -m fall time constant |
Tstop |
second |
در جدول بالا میتوان مقادیر را برای مقدار نهایی و پیک در تابع نهایی مشخص کرد.
شبیه سازی DC در HSPICE :
در شبه سازی dc یا dc_swept همواره یک مقدار dc را رمپ میدهیم تا از یک مقدار اولیه به مقدار دلخواه برسد و این افزاریش یا کاهش را هر بار روی یک تایع تست میکنیم و یک نمودار خواهیم داشت با همین مقادیر تغییر داده شده.
فرمت کلی این دستور به شکل زیر است:
مثال برای dc_swept و بدست آوردن wi یک ترانزیستور ماسفت:
در صورتی که بخواهیم یک تقویت کننده با چند ترانزیستور را طراحی کنیم که بر اساس خواسته ی کارفرما یک توان و جریان خاصی را مصرف کند و در خروجی سوینگ خاصی داشته باشد و گین خاصی را بر آورده کند اولین کاری که باید انجام بدهیم چیست؟در اینجا کلمه ی جریان مصرفی همه چیز را مشخص میکند و نکته اصلی در طراحی مدارات ترانزیستور است چرا که جریان کل مدار توان آنرا تایین میکند و همچنین مقاومت خروجی بر اساس جریان میتواند گین را تامین کند ولی سوینگ را خودمان باید با تغییر طراحی بهینه کنیم و به روش قرار دادن ترانزیستورها وابسته است.البته ولتاژ vdd سوینگ را مشخص میکند ولی این ولتاژ وابسته به تکنولوژی است و در هر تکنولوژِی هر چه ترانزیستورها ریزتر باشند ولتاژ vdd را میتوان کمتر در نظر گرفت و تا جایی که تکنولوژی به ما اجازه میدهد میتوانیم کاهش داشته باشیم.حال که مشخص شد جریان همه چیز را مشخص میکند باید جریانهایی که از هر شاخه قرار است عبور کند را خودمان به صورت ذهنی در نظر بگیریم و از آنجایی که کل جریان عبوری از هر شاخه تا پایان شاخه ثابت است باید بگوییم که کل ترانزیستوریهای یک شاخه جریان ثابتی خواهند داشت و در این حالت ترانزیستورها را جدا میکنیم و فرض میکنیم هر ترانزیستور به صورت تکی و تنها همان جریان را از خود عبور میدهد و wi تزانزیستور را بدست می آوریم که آن جریان را تامین میکند.
میخواهیم ترانزیستورهای شکل زیر را با 100 میکرو آمپر جریان طراحی کنیم(فعلاً سوینگ و توان و گین را بحث نمیکنیم):
برای طراحی ابتدا ترانزستور ها را از هم جدا میکنیم و برای هر کدام vg را رمپ میکنیم و پس از محاسبه ی vg میتوان wi را هم در رمپ دیگری حساب کرد.از آنجایی که برای عملکرد بهینه باید ترانزیستور در مرز اشباع باشد لذا بر اساس فرمول مرز اشباع یک خط رسم میکنیم و هر جا این خط محور x را قطع کند vg را نشان میدهد.برای این کار باید vg را رمپ کنیم تا به مقداری برسیم که عبارت vd=vg-vth برقرا باشد که همان مرز اشباع خواهد بود که در برنامه ی زیر همین کار را انجام داده ایم:
که در اینجا vg به دست آمده برابر با 0.71 است و این vg را در مرحله بعد مورد استفاده قرار میدهیم.
برای بدست آوردن wi هر ترانزیستور نیز کافی است که به صورت تکی آنرا در یک مدار در hspice ببندیم و با مشخص بودن vd و vs و قرار دادن vg از مرحله ی پیش مقدارwi را رمپ نماییم و هر بار مقدار جریان ترانزیستور را نگاه کنیم با توجه به مقدار جریان ترانزیستور هر گاه این جریان به مقدار مورد نظر رسید در واقع همان wi مورد نظر ما خواهد بود.حال در این مرحله مقدار wi مشخص شده است.برای مثال میخواهیم ترانزیستوری را در جریان 200 میکرو طراحی کنیم w این ترانزیستور به شکل زیر بدست می آید:
در برنامه ی بالا ابتدا نام برنامه سپس با دستور .protect از نمایش مطالب اضافی در خروجی برنامه جلو گیری کرده ایم و در خط5 ام برنامه option post را باید معیین کنیم تا خروجی برنامه مشخص گردد که به معانی زیر است:
البته option post یا post با هم تفاوتی ندارند.در خط 6 و 7 ولتاژ گره های مختلف را تعیین میکنیم و در خط 8 ام عبارت .param wi=4.67u در واقع wi را به عنوان یک پارامتر تعیین میکند.و در خط بعد ترانزیستور را معرفی میکینم ولی w آنرا متغییر در نظر گرفته تا آنرا رمپ دهیم.حال در خظ بعد با عبارت .DC wi 1u 100u 0.1u طول ترانزیستور را رمپ میدهیم و پس از آن در عبارت .PROBE dc i1(M1) نمودار جریان m1 را رسم میکنم تا ببینم با تغییر w خروجی چگونه خواهد بود و هر جا این جریان 200 میکرو آمپر بود wi را همان در نظر میگیریم شبیه به نمودار زیر:
که در اینجا w=4.67 خواهد بود.حال که w را حساب کردیم و در مرحله ی پیش هم vg را محاسبه نمودیم و در اینجا طراحی ترانزیستور به صورت تکی به پیایان رسیده است.
تک تک ترانزیستور ها را به صورت تکی به همین نحو طراحی میکنیم و دست آخر آنها را دو تا دوتا و پس از آن سه تا سه تا و... به هم متصل میکنیم.
نکته:در صورتی که پس از اتصال جریان درست نبود باید w ترانزیستورهای P-Channel را تغییر دهیم نه ترانزیستورهای نوع n-Channel را چون ضریب جریان برای نوع p کوچکتر از نوع n است و تاثیر کمتری بر تغییر حریان خواهد داشت.
در فرصت بعدی سعی میکنم طراحی مدارت آپ امپ و تفاضلی و کسکد رو آموزش بدم و در مورد توان و گین و سوینگ و داینامیک رنج صحبت کنیم....