در سیمولینک ، خیلی راحت میشه یک مدل یا سیستم فیزیکی رو نمایش داد .به طور کلی یک سیستم دینامیکی می تونه فقط با قوانین پایه فیزیک ساخته بشه. ما می خوایم اینو با یک مثال ثابت کنیم.
در این مثال ، ما می خوایم یه قطار اسباب بازی که شامل یک لوکوموتیو و یک واگن هست رو بررسی کنیم. فرض می کنیم که قطار فقط در یک جهت سفر می کند. ما می خوایم کنترل رو بر روی قطار اعمال کنیم چون که قطار آغاز حرکت ( راه اندازی ) و توقف آرام و روانی داره به علاوه یک سرعت حرکت ثابت.
جرم لوکوموتیو و واگن را به ترتیب با M1 و M2 نمایش می دهیم. این دو با یک فنر در کنار هم نگه داشته شده اند ؛ و ضریب سختی فنر را با K ، نیروی به کار برده شده توسط لوکوموتیو با F و اصطکاک بین چرخ ها و ریل را با حرف یونانی میو ( که ما آن را با u نمایش می دهیم ) نشان می دهیم.
نمودار ایستایی و قانون نیوتون
این سیستم را می توانیم با نمودار ایستایی زیر نمایش بدیم:
از قانون نیوتون ، شما می دانید که مجموع نیروهای فعال روی یک جرم برابر است با جرم ضربدر شتاب. در این حالت ، نیروهای وارد بر M1 ، نیروی فنر ، اصطکاک و نیروی به کار گرفته شده در لوکوموتیو هستند. نیروهای وارد بر M2 نیز نیروی فنر و اصطکاک است. در جهت عمودی هم نیروی گرانش به وسیله نیروی قائم زمین از بین می رود ، برای اینکه در جهت عمودی هیچ شتابی وجود نخواهد داشت. ما شروع به ساختن مدل حقیقی می کنیم با این عبارات:
Sum(forces_on_M1)=M1*x1”
Sum(forces_on_M1)=M1*x1”
ساختن مدل
این روابط چیده شده سیستم می توانند به صورت گرافیکی نمایش داده شوند ، بدون دستکاری اضافی. ابتدا ما دو نسخه ( هر جرم یکی) برای عبارات sum-F=Ma یا a=1/M*sum-F خواهیم ساخت .
یک پنجره مدل جدید باز کنید و دو بلوک جمع وارد کنید. برچسب یکی را “Sum_F1” و دیگری را “Sum_F2” انتخاب کنید.
خروجی هر کدام از بلوک های جمع نشان دهنده مجموع نیروهای وارد شده به آن جرم است ، لذا با ضرب کردن آن در 1/M شتاب را بدست خواهیم آورد. دو بلوک گین وارد کنید و با خط آنها را به خروجی بلوک جمع وصل کنید. بر روی گین بالایی دابل کلیک کرده و مقدار آن را 1/M1 تعیین کنید. مقدار 1/M2 را هم برای گین پایینی وارد کنید.
( مقادیر عددی M1 و M2 را بعدا می توان در محیط مطلب وارد کرد. )
حالا مشاهده می کنید که مقادیری که وارد کردیم در داخل گین ها ظاهر شده است. اگر به جای مقادیر نوشته شده ، مقدار “-K-” دیده می شود گوشه مثلث گین را گرفته و آن را بزرگ کنید.
برچسب گین بالایی را a1 و دیگری را a2 تعیین کنید. خروجی این بلوک های گین ، شتاب هر جرم است.
بد نیست حالا که شتاب ها را داریم ، سرعت و مکان هر جرم را هم داشته باشیم .پس به طریق زیر عمل می کنیم:
می دانیم که سرعت انتگرال شتاب است و مکان انتگرال سرعت. لذا با وارد کردن بلوک های انتگرال گیر پارامترهای مذکور را بدست می آوریم.
مطابق شکل ، 4 بلوک انتگرال گیر وارد کنید و دو تا دو تا پشت هم قرار دهید و با خط به هم وصل کنید. خروجی گین a1 ( یا شتاب اول) را به یک دسته دو تایی انتگرال گیر وصل کنید . با a2 نیز همین کار را انجام دهید. برچسب های انتگرال گیرها را نیز “v1”, “x1”, “v2”, and “x2” انتخاب کنید ( مطابق شکل ) ، چون اینها پارامترهایی هستند که این انتگرال گیرها تولید خواهند کرد.
حالا دو تا اسکوپ وارد کنید و به خروجی انتگرال گیرها متصل کنید. برچسب آنها را “View_x1” و “View_x2” انتخاب کردیم.
حالا ما آماده ایم که نیروهای وارد بر هر جرم را اضافه کنیم. ابتدا ما باید ورودی های هر بلوک مجموع را تنظیم کنیم تا نشان دهنده علامت مناسب نیروها باشد.( تا بعدا نگران علامت عددها نباشیم )
خب در M1 مجموع سه نیروی وارد شونده داریم ، پس روی بلوک جمع آن دابل کلیک کرده و در فیلد مربوطه یک علامت جمع دیگر اضافه کنید. +++
و در M2 دو نیروی فعال ، پس لازم نیست کار اضافه ای انجام بدهیم.
اولین نیروی فعال در M1 ، نیروی وارده F است. یک سیگنال ژنراتور (از Sources library) وارد کرده و به بالاترین ورودی Sum_F1 وصل کنید. برچسب آن را F قرار دهید.
نیروی دیگر فعال روی M1 ، اصطکاک است. این نیرو معادل است با :
F_friction_1=mu*g*M1*v1
برای ساختن این نیرو ، می توانیم از ضرب پارامتر سرعت V1 در گین mu*g*M1 استفاده کنیم. یک بلوک گین وارد کنید. از خروجی انتگرال گیر V1 که معادل سرعت است یک خط به ورودی گینی که وارد کردیم وصل می کنیم . خروجی گین را به دومین ورودی بلوک Sum_F1 وصل کنید. بهره این بلوک را به صورت زیر تغییر دهید:
mu*g*M1
برچسب آن را نیز Friction_1 برگزیدیم.
این نیرو در جهت منفی x1 عمل می کند و لذا ما باید آن را به ورودی ای از Sum_F1 اعمال کنیم که علامت منفی داشته باشد.
لیست علامت های Sum_F1 را به + – + تغییر دهید.
آخرین نیروی فعال روی جرم M1 نیروی فنر بین جرم هاست که معادل عبارت زیر است :
k*(x1-x2)
ابتدا ما لازم داریم که x1-x2 را بسازیم و بعد آنرا در k ضرب کنیم تا نیروی مورد نظر ساخته شود. یک بلوک جمع در فضای خالی مدل خود وارد کرده و برچسب آنرا “(x1-x2)” تعیین کنید و لیست علامت های آن را به ” – +” تغییر دهید.
بلوک را از راست به چپ بچرخانید ، برای این کار گزینه Flip را از منوی Format انتخاب کنید. ( Ctrl+F یا در نسخه های جدید تر Ctrl+i )
حالا یک انشعاب از x2 به سر منفی بلوک جمع “(x1-x2)” و یک انشعاب از x1 به سر مثبت آن وصل کنید .
حالا ما این تفاضل مکان ها را در ثابت فنر ضرب می کنیم تا نیروی فنر بدست آید. یک بلوک گین دیگر وارد می کنیم ، مقدار آن را “k” تعیین کرده و برچسب آنرا “spring” می نامیم. خروجی بلوک “(x1-x2)” را به ورودی گین فنر وصل کرده و خروجی گین فنر را به سومین ورودی Sum_F1 وصل می کنیم. علامت سوم نیز باید منفی شود. (+ – -)
حالا نیروهای فعال بر M2 را اعمال می کنیم. برای نیروی اول ، ما نیروی فنر را مشابه با نیرویی که به M1 اعمال کردیم به M2 نیز اعمال می کنیم به جز اینکه آن را با علامت مثبت اضافه می کنیم. از خروجی بلوک فنر یک انشعاب دیگر گرفته و آن را به ورودی مثبت بلوک Sum_F2 وصل کنید.
آخرین نیرویی که اضافه می کنیم اصطکاک روی M2 است. این کار مشابه با اعمال اصطکاک بر روی M1 است. از V2 انشعاب بگیرید آن را در بلوک گین mu*g*M2 ضرب کنید و با علامت منفی آن را به Sum_F2 اضفه کنید. بعد از ساختن اینها شما باید چنین شکلی داشته باشید.
حالا مدل کامل است . واضح است که ما به یک منبع ورودی مناسب نیاز داریم تا یک خروجی مناسب مشاهده کنیم. ورودی سیستم نیروی Fای است که توسط لوکوموتیو فراهم می شود. ما قبلا یک سیگنال ژنراتور در ورودی قرار دادیم. خروجی سیستم ، سرعت موتور خواهد بود. یک بلوک اسکوپ وارد کنید. یک انشعاب از خروجی انتگرال گیر V1 گرفته و به آن وصل کنید.این اسکوپی است که خروجی را در آن مشاهده می کنیم. برچسب اسکوپ را “View_v1” نام گذاری کنید.
حالا مدل کامل شده است. مدل خود را با هر نامی که می خواهید ذخیره کنید. همچنین می توانید مدل کامل آن را از اینجا دانلود کنید.
اجرای مدل
قبل از اجرای مدل ما باید مقادیر عددی هر متغیری که در مدل استفاده کردیم را تعیین کنیم.برای سیستم قطار داریم:
• M1 = 1 kg
• M2 = 0.5 kg
• k = 1 N/sec
• F= 1 N
• u = 0.002 sec/m
• g = 9.8 m/s^2
یک m-file جدید باز کنید و فرامین زیر را در آن وارد کنید:
M1=1;
M2=0.5;
k=1;
F=1;
mu=0.002;
g=9.8;
m-file را اجرا کنید تا مقادیر برای مطلب تعریف شود. Simulink مقادیر متغیرهای تعریف شده در مطلب را که در مدل استفاده شده باشد را تصدیق می کند.
حالا ما نیاز داریم که یک ورودی اختصاصی به لوکوموتیو بدهیم. روی سیگنال ژنراتور (بلوک F) دابل کلیک کنید . در قسمت شکل موج ( wave form ) ، گزینه square را انتخاب کنید و فرکانس آنرا 0.001Hz و دامنه آن را 1- وارد کنید.(تا پله اول مثبت و پله دوم منفی شود)
آخرین مرحله قبل از اجرای شبیه سازی انتخاب یک زمان مناسب شبیه سازی است. برای دیدن یک سیکل از موج مربعی 0.001Hz ، زمان شبیه سازی باید 1000 ثانیه باشد. گزینه Parameters را از منوی Simulation انتخاب کرده و در فیلد “Stop Time” عددد 1000 را وارد کنید. پنجره را ببندید.
شبیه سازی را اجرا کنید و اسکوپ View_v1 را باز کنید تا سرعت خروجی را بررسی کنیم. دوربین(autoscale) بالای پنجره اسکوپ را کلیک کنید تا شکل واضح شود. ورودی یک موج مربعی بود با دو پله یکی مثبت و یکی منفی . طبق قواعد فیزیک این به این معنی است که لوکوموتیو ابتدا به جلو رفته و سپس به عقب برگشته است. سرعت خروجی این نتیجه را می دهد.
بدست آوردن مدل در مطلب
حالا ما می توانیم مدل مطلب ( فضای حالت و تابع انتقال ) را از روی مدل سیمولینک بدست بیاوریم. این کار را می توانیم با بلوک های اتصال ورودی و خروجی و نیز فرمان Linmod انجام بدیم.
ابتدا بلوک F ورودی را با یک بلوک In و بلوک اسکوپ خروجی را با یک بلوک Out تعویض کنید. ( آنها را از Connections block یا Commonly Used Block بیابید). این بلوک ها ، ورودی و خروجی سیستمی را که ما می خواهیم فرایند استخراج را انجام دهیم تعریف می کنند.
این مدل را با نام train2.mdl ذخیره کنید . حالا ما میتوانیم مدل را به داخل مطلب استخراج کنیم.فرمان زیر را در پنجره مطلب وارد کرده و اجرا کنید تا مدل فضای حالت را بدست آورید:
[A,B,C,D]=linmod(‘train2’)
شما باید ماتریس های A,B,C,D را بدست آورده باشید.اینها ماتریس های فضای حالت مدل سیمولینک شما هستند.
برای بدست آوردن تابع انتقال نیز فرمان زیر را در پنجره مطلب اجرا کنید.
[num,den]=ss2tf(A,B,C,D)
اکنون شما باید نتیجه فرمان را مشاهده کنید. مطلب صورت(num) و مخرج (den) تابع اتقال را داده است.
در آخر حل دستی این مثال رو برای بدست آوردن تابع انتقال و فضای حالت براتون میذارم.
معادله حرکت در جهت افقی به صورت زیر است:
متغیر های حالت و رابطه خروجی
در این معادله سیستم چیده شده می توانیم شکل متغیرهای حالت را دستکاری کنیم. متغیرهای حالت ما مکان (X1 , X2) ، سرعت (V1 , V2) و ورودی که F است.رابطه متغیر های حالت را به شکل زیر تعیین کردیم:
اجازه بدهید تا خروجی سیستم را سرعت لوکوموتیو در نظر بگیریم:
1- تابع انتقال
برای بدست آوردن تابع انتقال سیستم ، ما ابتدا از معادله دیفرانسیل بالا تبدیل لاپلاس می گیریم:
خروجی هست : “(Y(s) = V1(s) = s X1(s” . همان طور که می دانیم تابع انتقال نسبت خروجی به ورودی است ؛ پس آن را به فرم (Y(s)/F(s می نویسیم. همچنین برای نوشتن تابع انتقال شرایط اولیه را “صفر” در نظر می گیریم. تابع انتقال به صورت زیر به دست می آید:
2 – فضای حالت
روش دیگر حل مسئله استفاده از فرم فضای حالت است.چهار ماتریس A,B,C,D رفتار سیستم را توصیف می کنند و در حل مسئله استفاده می شوند. فرم فضای حالت که از روی متغیرهای حالت و رابطه خروجی به دست می آید به شکل زیر است:
توجه کنید که:
در نسخه های جدید بعضی از گزینه ها یا بلوک ها تغییر داده یا جا به جا شده اند. در صورت مشکل بگین تا راهنماییتون کنم.
در نوشتن بعضی فرمان ها ، پرانتز ها و سمیکالن ها جا به جا شده اند . اگر کپی پیست می کنید، مراقب باشید.
کپی برداری مطلب فوق تنها با ذکر منبع (www.daneshju.ir) و نام نویسنده (رضا) مجاز میباشد .
5 دیدگاه ها
salam
agha reza khaste nabashid migam karet harf nadareh.
agha man mikham to mohite GUI ye systeme jermo fanar ro tori tarahi konam ke beshe harekate jermo nesbat be vorudihaye mokhtalef be toree vazeh barresi kard.
mituni komakam koni.
kheli fori niaz be komak daram.
ghablan az komaket mamnunam.
سلام
واقعا ممنون
سلام
از مثالتون خیلی ممنونم فقط چنتا سوال داشتم که جوای یدی ممنون میشم
1 اگر بخاهیم یک کنترل کننده pid اعمال کنیم. به طوری سیستم شبه سازی شده را به یک subsystem در بیاریم
که ورودی سیگنال ژنراتور و خروجیها v1,x1,v2 باشندباید چکار کونیم
2 مدل فضای حالت را به صورت دستی چگونه درست کنیمو ماتریسهای a,b,c,d متناسب با معادلات حالت را چه گونه چگونه وارد m file کنیم
اگه راهنمایی کنی خیلی ممنون میشم
عالیییییییییییییییییییییییییییییییییییییی بود.مرسی
واقا عالی بود… مرسیییییییییییییییی