در این قسمت از آموزش سیمولینك ابتدا بنا به درخواست برخی از دوستان، یك معادله‌ی دیفرانسیل رو شبیه‌سازی می‌كنیم. این معادله‌ی دیفرانسیل ممكن است معادله‌ی هر نوع سیستمی باشد. حال فرض كنید معادله‌ی سیستم ما به‌شرح زیر باشد:

 

 

 

 

همان‌طور كه می‌بینید این معادله از نوع درجه دو، و ورودی آن نیز پله است. شرایط اولیه برای متغییر خروجی، غیر صفر می‌باشد. حال برای  شبیه‌سازی این معادله‌ی دیفرانسیل به صورت بلوكی، و بدست آوردن خروجی، به‌صورت زیر عمل كنید:

 

 

طبق معمول ابتدا یك مدل جدید باز كرده و بلوك‌های مورد نیاز را از مسیرهای زیر وارد آن می‌كنید:

Simulink >> Sources >> Step

Simulink >> Sources >> Constant

Simulink >> Math Operations >> Sum

Simulink >> Math Operations >> Gain

Simulink >> Continuous >> Integrator

Simulink >> Signal Routing >> Bus Creator

Simulink >> Sinks >> Scope

 

حال بلوک‌ها را مانند شکل زیر مرتب کرده و بعد از اعمال تنظیمات لازم، بلوك‌ها را سیم کشی کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

تنظیمات بلوک‌ها:

  • روی بلوك Step دوبار كلیك نموده و مقدار Step time را 0 قرار دهید.
  • روی بلوك Constant دوبار كلیك نموده و مقدارآن را 0.5 قرار دهید.
  • روی بلوك Gain دوبار كلیك نموده و مقدارآن را 0.5 قرار دهید.
  • روی بلوك Gain2 دوبار كلیك نموده و مقدارآن را 3 قرار دهید.
  • روی بلوك Sum دوبار كلیك نموده و در قسمت List of signs علامت های --+| را وارد كنید.
  • روی بلوك Integrator دوبار كلیك نموده و در قسمت Initial condition source حالت external را برگزینید.

تنظیمات مدل:

  • مقدار Stop time را 20 ثانیه قرار دهید.

حال مدلتان را Run کنید تا ورودی و خروجی را مشاهده كنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

در مثال بعدی مدار بلوكی جالبی رو بهتون معرفی می‌كنم كه بوسیله‌ی آن قادر خواهید بود، میزان تغییرات گام زمانی حل‌گر سیمولینك را مشاهده كنید. همان‌طور كه احتمالا می‌دانید، سیمولینك دو نوع حل‌گر گام‌ثابت و گام‌متغییر دارد كه پیش‌فرض آن بر روی گام‌متغییر قرار داده شده است. هر كدام از این حل‌گرها درجای خودشان كاربرد دارند، اما برای اكثر مدل‌ها پیشنهاد می‌شود كه از حل‌گر گام‌متغییر استفاده شود. این حل‌گر بنا به نیاز، میزان گام زمانی را بطور اتوماتیك تغییر می‌دهد. حال برای پیاده‌سازی این مدار به‌صورت زیر عمل كنید:

Simulink >> Sources >> Clock

Simulink >> Math Operations >> Sum

Simulink >> Discrete >> Memory

Simulink >> Sinks >> Scope

Simulink >> Sinks >> Display

 

حال بلوک‌ها را مانند شکل زیر مرتب کرده و بعد از اعمال تنظیمات لازم، بلوك‌ها را سیم کشی کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

تنظیمات بلوک‌ها:

  • روی بلوك Sum دوبار كلیك نموده و در قسمت List of signs علامت های +-| را وارد كنید.

حال مدلتان را Run کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

همان‌طور كه مشاهده می‌شود، حل‌گر سیمولینك این مدل را با گام زمانی ثابت 0.2 حل كرده است، در حالی كه نوع حل‌گر در حالت گام‌متغییر قرار دارد.(چرا؟)

اكنون با فشردن كلید Ctrl+E به صفحه تنظیمات مدل رفته و نوع حل‌گر را گام‌ثابت انتخاب كرده و مقدار Fixed-step size را 0.005 قرار داده و OK كنید.

حال مدلتان را مجدد Run کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

بله در این حالت از همان ابتدا تا انتها، گام زمانی ثابت و برابر 0.005 می‌باشد.(چرا؟ اینكه معلومه دیگه كلك!)

در مثال بعدی مدار یك اسیلاتور موج مربعی رو بهتون نشون می‌دم كه بچه‌های برق به اون نوسان‌ساز حلقوی می‌گن(ring oscillator). البته هدف من از معرفی این مدار تولید موج مربعی نیست، چرا كه همان‌طور كه می‌دانید مولدهای متنوعی در كتابخانه‌ی سورس سیمولینك وجود دارد در واقع نكته‌ای در این مدار هست كه فهمیدن آن خالی از لطف نیست.

بلوك‌ها:

Simulink >> Logic and Bit Operations >> Logical Operator

Simulink >> Discrete >> Unit Delay

Simulink >> Sinks >> Scope

تنظیمات بلوک‌ها:

  • روی بلوك‌های Logical Operator دوبار كلیك نموده و نوع عملگر را NOT انتخاب كرده و سپس در قسمت Icon shape نوع نمایش را distinctive انتخاب كنید.

حال بلوک‌ها را مانند شکل زیر مرتب کرده و سیم کشی کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

مدلتان را Run کنید:

 

 

 

 

 

 

 

 

 

 

 

توضیح مدل:

اگر تعداد فرد گیت معكوس‌كننده را پشت سر هم ببندیم و خروجی آخرین گیت را به ورودی اولین گیت وصل كنیم، یك تناقض منطقی بوجود می‌آید. این تناقض منطقی سبب ناپایدارشدن مدار شده و مدار شروع به نوسان می‌كند. فركانس نوسانات این مدار بستگی به تاخیر در انتشار گیت‌ها دارد كه مسلما هرچه این تاخیر بالاتر باشد، فركانس پایین‌تر است. اما گیت‌های NOT موجود در سیمولینك، تاخیر ندارند و باید تاخیر بیرونی به مدار اعمال كنیم، در غیر این صورت سیمولینك نمی‌تواند مدل را حل كند(چرا؟).

در مثال آخر شما را با بلوكی آشنا می‌كنم كه شما می‌توانید به راحتی آن را با كدهای متلب برنامه‌ریزی كنید. این بلوك مانند یك بلوك FPGA است كه با یك زبان توصیف سخت‌افزاری مثل VHDL ، پیكربندی می‌شود. از جمله مزایای استفاده از این بلوك انعطاف‌پذیری آن است، بدین معنی كه شما با وجود این بلوك به گستره‌ی عظیم توابع متلب دسترسی پیدا خواهید كرد. حالا یك مثال ساده مخابراتی رو برای معرفی این بلوك بررسی می‌كنیم. این مثال مدولاسیون AM است. می‌خواهیم با داشتن دو موج پیام و حامل، موج مدوله شده AM را بدست آوریم.

بلوك‌ها:

Simulink >> Sources >> Constant

Simulink >> Sources >> Signal Generator

Simulink >> User-Defined Functions >> Embedded MATLAB Function

Simulink >> Sinks >> Scope

تنظیمات بلوک‌ها:

  • روی بلوك Constant1 دوبار كلیك نموده و مقدار آن را 0.5 قرار دهید.
  • روی بلوك Signal Generator دوبار كلیك نموده و مقدار فركانس آن را 1000 هرتز وارد كنید.
  • روی بلوك Signal Generator1 دوبار كلیك نموده و مقدار فركانس آن را 10000 هرتز وارد كنید.
  • روی بلوك Scope دوبار كلیك نموده و سپس به منوی Parameters رفته و تعداد محورها را برابر 3 قرار دهید.
  • روی بلوك Embedded MATLAB Function دوبار كلیك نموده و در ویرایشگر باز شده، كد زیر را وارد كنید:

function AM = fcn(Message,Carrier,Ac,m)

% Modulation AM

AM = Ac*(1+m*Message)*Carrier;

 

تنظیمات مدل:

  • مقدار Stop time را 10 میلی ثانیه قرار دهید.
  • مقدار Max step size را 10 میكرو ثانیه قرار دهید.

حال بلوک‌ها را مانند شکل زیر مرتب کرده و سیم کشی کنید:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Run کنید: