رفتن به مطلب

آموزش شبیه سازی مباحث کنترل با Matlab


Yaser.C

ارسال های توصیه شده

بسم الله الرحمن الرحیم

 

خوب این اولین موضوعی هست که من توی این سایت شروع میکنم و امیدوارم این مباحث بتونه به بچه های این سایت کمک کنه و خودم هم بتونم تا جای خوبی این موضوع رو پیش ببرم

هدفی که من در ذهن دارم تشریح کامل مسائل مهندسی کنترل در متلب هستش

شاخه مهندسی کنترل عموما به دو دسته تقسیم میشه..اولی کنترل کلاسیک هست و دومی کنترل هوشمند

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

از مهمترین سیستم های هوشمند میشه از شبکه های فازی و عصبی نام برد که در سال های اخیر خیلی فراگیر شدن و قابلیت ترکیب با سایر گرایش های برق و حتی رشته های دیگه رو هم دارن.عموما کنترل کننده هایی که با این متد ها به دست میاد اثبات پایداری به روش لیاپانوف رو ندارن. هر چند که در برخی کنترل کننده های فازی و عصبی تو این چند سال اخیر اثبات پایداری ارائه شده.

کنترل هوشمند خیلی فراگیر شدن و تقریبا جای کنترل کلاسیک رو گرفتن و تقریبا همه جا یافت میشن... مثلا ماشین لباسشویی خونه شما یک کنترل کننده هوشمند داره...اما انتظار نداشته باشید جایی مثل نیروگاه هسته ای این کنترل کننده رو ببینید (نبود پایداری قطعی) و معمولا از کنترل کننده های کلاسیک استفاده میشه

 

اولین مبحثی رو که اینجا شروع میکنم مربوط به کنترل خطی هست که تمامی مهندسای برق با اون درگیر هستند

اگر دوستان نظری دارن اعلام کنن تا از نظرات دوستان هم بهره مند بشیم...

لینک به دیدگاه

سلام

خوب این آموزش اول هست و از پایه ای ترین مبحث کنترل شروع میکنیم... تعریف تابع تبدیل

یک تابع تبدیل در حالت کلی به صورت زیر تعریف میشه:

G(s)=B(s)/A(s) exp(-T*s)

که در رابطه فوق A چند جمله ای مخرج و B چند جمله ای صورت و T تاخیر سیستم هست.از درس سیگنال و سیستم میدونیم که ریشه های A رو قطب های سیستم و ریشه های B رو صفر های سیستم میگن.لازم به یادآوری نیست که منظور از s اپراتور مشتق ویا به زبان ساده تر متغیر تبدیل لاپلاس هست.

یک تابع تبدیل رو در حالت کلی در متلب میشه با دستور tf معرفی کرد به صورت زیر:

[font=Courier New]sys = tf(num,den,[/font][color=#A020F0][font=Courier New]'InputDelay'[/font][/color][font=Courier New],T)[/font]

که منظور از num و den ضرایب صورت و مخرج هست.خوب با یه مثال شروع میکنیم.مثلا تابع تبدیل زیر:

G(s)=(s^2+5s+1)/(3s^4+2s^2+4)

ابتدا ضرایب صورت و مخرج رو تعریف میکنیم

num=[1 5 1];
den=[3 0 2 0 4];

که این ضرایب رو به صورت ماتریس سطری معرفی کردیم.سیستم هم هیچ‌تاخیری نداره پس میشه زمان تاخیر رو صفر در نظر گرفت یا اصن تعریف نکرد

[font=Courier New]sys = tf(num,den,[/font][color=#A020F0][font=Courier New]'InputDelay'[/font][/color][font=Courier New],0)
[/font][font=Courier New]sys = tf(num,den)[/font]

همونطور که متوجه شدید میبایست تمامی ضراینب چند جمله ای صورت و مخرج رو به صورت کامل بیان کرد حتی اونایی که صفر شدن.اگه اونایی که صفر نشدن رو تعریف نکنیم درجه صورت و مخرج کاهش پیدا میکنه (چرا؟؟)

یه مثال دیگه:

G(s)=1/(5s+1) exp(-2.34s)

خوب اینو میشه این شکلی نوشت:

 Sys=[font=Courier New]tf(1,[5 1],[/font][color=#A020F0][font=Courier New]'InputDelay'[/font][/color][font=Courier New],2.34)[/font]

در تعریف فوق تمامی تاخیر ها رو برای ورودی در نظر گرفتیم هر چند که میشد اینو برای خروجی هم نوشت.برای مطالعه بیشتر به لینک زیر مراجعه کنید

http://www.mathworks.com/help/control/examples/specifying-time-delays.html 

برای تعریف تابع تبدیل راه حل ساده تری هم وجود داره اگه در ابتدای برنامه خودتون وارد کنید:

[font=Courier New]s=tf([/font][color=#A020F0][font=Courier New]'s'[/font][/color][font=Courier New])[/font]

در تمامی خطوط پایین تر این دستور s رو به عنوان متغیر لاپلاس میشناسه و در نتیجه تعریف تابع تبدیل راحت تر میشه.البته این به شرطی هست که s رو دوباره چیز دیگه ای تعریف نکنیم.برای مثال اولی که اینجا آوردم:

[font=Courier New]s=tf([/font][color=#A020F0][font=Courier New]'s'[/font][/color][font=Courier New])
[/font][font=Courier New]sys=(s^2+5*s+1)/(3*s^4+2*s^2+4)
[/font]

و برای مثال دوم

[font=Courier New]s=tf([/font][color=#A020F0][font=Courier New]'s'[/font][/color][font=Courier New])
[/font][font=Courier New]sys=(12)/(5*s+1)*exp(-2.34*s)
[/font]

که میبینیم این تریف از تعریف قبلی ملموس تر هست. حالا اگه شما بخواید صفر و قطب یه تابع تبدیل رو به دست بیارید کافیه بزنید

[font=Courier New]z=zero(sys)
[/font][font=Courier New]p=pole(sys)
[/font]

که sys خودش یه تابع تبدیل هست.اگه بخوایم تابع تبدیلمون از نمایش چند جمله ای به صورت ضرب صفر ها و قطب ها نمایش داده بشه کافیه بزنیم:

[font=Courier New]zpk(sys)[/font]

خوب فک کنم برای جلسه اول کافی باشه در جلسه بعد ساده سازی بلوک های میسون و بدست آوردن پاسخ سیستم و مشخصات پاسخ پله سیستم ها رو بررسی میکنیم

تذکر: توجه کنید که این یک آموزش مقدماتی هست و مسلم است که هرکدوم از این دستور ها کاربردهای بسیار وسیعتری دارن اما در اینجا فقط به بیان کاربرد های اون ها در کنترل خطی پرداخته شده

 

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید http://www.noandishaan.com

لینک به دیدگاه

قسمت دوم:ساده سازی بلوک دیاگرام ها و پاسخ پله و ضربه

حتما شما مهندسای برق و کامپیوتر که درس کنترل خطی رو گذروندید یادتون میاد که یه قسمت از مسائل کنترل خطی ساده سازی بلوک دیاگرام ها بود

بلوک دیاگرام ها که از کوپلاژ شدن چن تا تابع تبدیل به دست میومدن به روش های مختلفی ساده میشدن..مثل جبر بلوک دیاگرام ها و قاعده میسون

حالا ما میخوایم با متلب این ساده سازی رو انجام بدیم

خوب به شکل زیر دقت کنید

zpcevsh1etunkf4q9q3x.gif

فرض کنید که فید بک ها واحد هستن یعنی k=1. خوب طبق ساده سازی به روش میسون خیلی راحت میشه گفت که سیستم حلقه بسته تابع تبدیلش میشه این:

T(s)=(20)/(s^3+5s^2+4s+40)

 

خوب اگه بخوایم اینو تو متلب تعریف کنیم به این شکل باید بنویسیم:

 


close all;clear all;clc
s=tf('s');

P=20/((s+4)*(s+1));
Q=1/s;

systemnames='[P Q]';
inputvar='[setpoint]';
outputvar='[Q(1)]';
input_to_P='[setpoint-Q(1)-Q(1)]';
input_to_Q='[P(1)]';
cleanupsysic='yes';
T=sysic

 

 

دو سه خط اول که مربوط به آموزش قبله و من توضیح دوباره نمیدم...تو اینجا تابع تبدیل های هر بلوک رو معرفی کردیمخوب دستور اصلی ای که این کار رو میکنه sysic هست اما قبلش یه تنظیماتی داره

۱- systemnames اسم بلوک هاتونو میذارید

۲- inputvar تمامی ورودی هاتونو میذارید مثل ورودی مرجع، اغتشاش و یا نویز و...

۳- outputvar اسم متغیر یا متغیر های خروجی تومیذارید...بستگی داره سیستم چند خروجی باشه

۴- ..._input_to ورودی های هر بلوک رو به طور مجزا تعریف میکنه که باید برای هر بلوک مشخص شه... مثلا خروجی بلوک P رو با P(1) نشون میدن

۵- cleanupsysic متغیر های واسطه ای که تعریف کردیم رو از ورک اسپیس پاک میکنه

خوب قسمت دومی که میخوام اینجا بگم مربوط به پاسخ های سیستم هست اگه یه تابع تبدیل داشته باشیم با دستور های زیر پاسخ پله و پاسخ ضربه اونو حساب میکنن

 


step(T);
impulse(T);

 

خوب اگه بخواید مشخصات پاسخ پله یه سیستم مث زمان صعود، فراجهش، زمان نشست و... رو حساب کنید کافیه بزنید

 


stepinfo(T);

خوب اینم از آموزش بخش دوم. به امید خدا جلسه بعدی تحلیل مکان هندسی ریشه ها رو بررسی میکنیم

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید http://www.noandishaan.com

لینک به دیدگاه

قسمت سوم:تحلیل مکان هندسی ریشه ها

 

سلام

قبل از شروع آموزش جا داره از همه دوستانی که به من لطف دارن تشکر کنم (به ویژه اقا ایمان گل:icon_gol:) و بگم باعث افتخار هست که توی همچین سایتی مطلب می نویسم و عضو هستم! دوم اینکه از همه دوستان معذرت میخوام که آموزش یه چند روزی عقب افتاد

 

خوب بریم سراغ تحلیل مکان هندسی ریشه ها....

در تحلیل مکان هندسی ریشه ها بحث سر اینه که سیستمی که حالا به صورت حلقه بسته در آوردیم به ازای چه بهره هایی پایدار هست... مثلا سیستم زیر رو در نظر بگیرید

G(s)=1/(s+1)^3

اینجا یه سیستم مرتبه سه مثال زدم چون دوستان حتما به خاطر دارن که سیستم مرتبه ۱ و ۲ که به صورت حلقه باز پایدار باشن حتما حلقه بستشون پایداره

خوب خودتون میتونید از قانون روث-هرویتس بگید سیستم حلقه بسته تا چه بهره ای پایداره و با حل نقطه محل برخورد با محور موهومی بگید فرکانس نوسان دائم چه قدره؟

خوب متلب باز هم کار ما رو راحت کرده....مکان هندسی یه سیستم به صورت زیر با متلب قابل رسمه....

close all;clear all;clc

s=tf('s');

G=1/(s+1)^3;

rlocus(G)

 

سوال: دستور l=rlocus(G) رو بررسی کنید (یعنی اگه اینو برابر با یه متغیر بذاریم چی میشه؟؟؟)

 

خوب شکل مکان هندسی میشه این شکلی با کلیک کردن رو هر نقطه مشخصه حلقه بسته رو به ازای قطب انتخابی شما نشون میده

مثلا من دو نقطه رو مشخص کردم که یکی از این نقطه مرز پایداری هست

ybf4kggjx4w0u4nix890.jpg

یکی از ابزارهای مهم مکان هندسی ریشه ها تحلیلی بر پایداری سیستم و طراحی کنترل کننده هست. فرض کنید شما مثلا با بهره ۱ این سیستم رو حلقه بسته کردید

close all;clear all;clc

s=tf('s');

G=1/(s+1)^3;

T=feedback(G*1,1);

step(T)

دستور feedback یه سیستم رو با با فرض فیدبک منفی حلقه بسته میکنه (رجوع به help)

خوب پاسخ پله این سیستم میشه این

lvgnbnxkavapg8jrjnwc.jpg

میبینیم که این سیستم خطای حالت ماندگار داره پس ساده ترین کنترل کننده ای که بتونه این مشکل رو‌ حل کنه یه کنترل کننده انتگرالگیر هست فقط سوال اینه که بهره کنترل کننده انتگرالگیر رو چی بذاریم؟؟؟ فرض کنید علاوه بر پایداری میخوایم اورشوت کمی هم داشته باشیم.برای این کار انتگرال گیر رو میدیم داخل سیستم و مکان هندسی رو رسم میکنیم.(این کار رو خودتون انجام بدید) از مکان هندسی می بینیم که چون انتگرالگیر گذاشتیم پایداری سیستم دچار مشکل شده و نمیشه بهره رو خیلی زیاد کرد با انتخاب بهره ۰.۲ و حلقه بسته کردن سیستم پاسخ پله به صورت زیر میشه

uykw33ho1rv3n8r77e6b.jpg

ظاهرا همه چی نسبت به سیستم حلقه بسته قبلی خوب تر شده.... هم خطای حالت ماندگار نداریم و هم اورشوت کم شده...اما یه چیزی خراب شده!!! (مهندسا بگن....چی؟؟؟ چرا؟؟؟؟ چیکار کنیم؟؟؟؟)

تحلیل مکان هندسی ریشه ها صرفا یه تحلیل پایداری ساده نیست بلکه می تونیم عملکرد سیستم رو هم موررد ارزیابی و تحلیل قرار بدیم....البته واضح هست که عملکرد و پایداری دو مقوله متقابل هستن و یه مهندس باید بتونه اینجا مصالحه کنه

 

توجه::::اگه فقط پایداری مورد سوال باشه میشه از دستور isstable است استفاده کرد....ولی در مورد عملکرد هیچ دیدی نداریم... (رجوع به help)

 

خوب فکر کنم برای مکان هندسی کافی باشه از قسمت بعدی وارد تحلیل های فرکانسی سیستم میشیم....

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید http://www.noandishaan.com

لینک به دیدگاه

قسمت چهارم: تحلیل فرکانسی با استفاده از نمودار های بود و نایکوییست

 

بدون هیچ‌مقدمه ای میریم سراغ تحلیل فرکانسی سیستم های خطی.ابزارهای زیادی برای این کار وجود دارن اما از مهمترین اون ها دو نمودار معروف بود و نایکوییست هست. تحلیل مکان هندسی ریشه ها رو در بعضی مراجع تحلیل زمانی سیستم خطی هم میگن (شما بگید چرا؟؟) اما در اینجا هدف تحلیل فرکانسی هست.

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

قضیه فوق میگه اگر به سیستم خطی فرکانس مشخصی وارد بشه خروجی هم همون فرکانس رو داره واصطلاحا سیستم خطی هیچگاه "فرکانس زایی" نداره.پس میشه گفت خروجی در حالت ماندگار یه بهره و یه اختلاف فاز نسبت به ورودی خودش داره. در نمودار بود فرکانس ورودی رو تغییر میدن و به ازای هر فرکانس یه بهره و اختلاف فاز به دست میاد. پس میشه این دو نمودار رو بر حسب فرکانس کشید.

سیستم زیر رو در نظر بگیرید:

G(s)=2/((s+1)*(s+2))

این سیستم خطای حالت ماندگار نداره (چرا؟ این که انتگرال گیر نداره!!!:ws52:) پس بهرش در فرکانس پایین برابر یک یا معادل صفر دسیبل هست. اما اگه فرکانس بره بالا بهرش افت میکنه

من اینجا برای شما یه مثال میزنم. فرض کنید این تابع تبدیل یه موتور الکتریکی هست.اگه به این موتور سینوسی بدید معادل اینه که موتور رو مداوما چپگرد راستگرد کنیم (رجوع به تاپیک های بچه های گل قدرت:icon_gol:) خوب اگه فرکانس سینوسی پایین باشه موتور میتونه این کار رو بکنه اما اگه فرکانس بره بالا اصن موتور نمیتونه عکس العمل نشون بده... یعنی تا بخواد چپ گرد بشه مقدار سینوس از مثبت به منفی تغییر میکنه و راستگرد میشه و دوباره به همین صورت. اصطلاحا میگن موتور قفل کرده. در واقع میشه گفت موتور چپگرد راستگرد میشه اما اینقدر این دامنه کوچیکه که اصن دیده نمیشه. این یعنی همون کاهش بهره در فرکانس های بالا. این جا همون مبحث پهنای باند مطرح میشه. این موتور تا چه فرکانسی می تونه به ورودی خودش پاسخ بده؟؟؟؟؟؟

خوب نمودار بود همین دید رو به ما میده...متلب میتونه این نمودار بود رو به این صورت رسم کنه

close all;clear all;clc
s=tf('s');

G=2/((s+2)*(s+1));

bode(G)

که به صورت شکل زیر هست

e7lzqleigjgxp58zj0u.jpg

میبینید که تمام تحلیل هایی که داشتیم در نمودار بود کاملا دیده میشه.در مورد سیستم های خطی دو تحلیل پایداری برای سیستم وجود داره.حد فاز و حد بهره

حد بهره همون محدوده بهره ای است که تو مکان هندسی داشتیم. اما حد فاز یه تعریف جدید هست که تو ناحیه فرکانس دیده میشه و غالبا بیان میکنه که چه قدر میشه به این سیستم فاز منفی داد تا پایدار بمونه. با راست کلیک کردن بر روی نمودار بود و انتخاب گزینه Characteristics و Minimum Stability Margins میتونید این دو مشخصه رو ببینید.

سیستمی رو مینیمم فاز میگن که اون سیستم به ازای تغییرات فرکانس کمترین تغییرات فاز رو داشته باشه. به زبان ساده سیستمی غیر مینیمم فاز هست که حداقل یه صفر یا یه قطب در نیمه سمت راست داشته باشه. کلا غیر مینیمم فاز بودن چیز خوبی نیست چون اگه قطب سمت راست باشه که کلا ناپایداریم و اگه صفر سمت راست باشه امکان ایجاد فروجهش در پاسخ پله هست. نرم افزار متلب نمودار بود سیستم های مینیمم فاز ر به درستی میکشه اما برای سیستم های غیر حداقل فاز ممکنه در نمودار فازش اون چیزی که سر کلاس کنترل خطی یاد گرفتید رو نبینید. اما توجه کنید که شما مجاز هستید از هر فازی 360 درجه کم یا به اون اضافه کنید و در صورتی که این عمل رو انجام بدید (شیفت نمودار فاز به بالا یا پایین به اندازه ۳۶۰ درجه) میبینید که تحلیل های متلب با تحلیل های درس کنترل خطی همخوانی داره.

نکته بسیار مهم: در سالهای اخیر طراحان سوالات درس کنترل خطی در مقطع کارشناسی ارشد و دکتری از نمودار های بودی متلب استفاده میکنن

خلاصه اگه سر کنکور دیدید که نمودار بود ترو تمیز کشیده شده بدونید کار متلب هست و اگه دیدید فازش عجیب غریبه و با تحلیل های شما نمیخونه میتونید از اون ۳۶۰ درجه فاز اضافه یا کم کنید!!!!!!

نمودار نایکوییست هم به سادگی برای سیستم های خطی به دست میاد در این نمودار ها فرکانس از محور ها حذف میشه و یه نمودار در خروجی میبینید. تحلیل نایکوییست سیستم های خطی تک ورودی تک خروجی کار سختی نیست اما چالش ها و جذابیت های این نمودار در سیستم های چند ورودی- چند خروجی (MIMO) هست که اگه عمری باشه در سیستم های کنترل چند متغیره بررسیش میکنیم

دستور زیر نمودار نایکوییست رو برای سیستم های خطی رسم میکنه

nyquist(G)

smcr0mp9v0mq6dihwieh.jpg

باز هم میتونید با استفاده از راست کلیک کردن حد فاز و حد بهره رو پیدا کنید

 

توجه۱: حدود فاز و بهره با دستور margin قابل محاسبه هستند برای اطلاعات بیشتر به Help مراجعه کنید

توجه۲: نمودار نیکولز یکی از نمودار های تحلیل فرکانسی مهم هست که عموما در کنترل خطی زیاد بهش پرداخته نمیشه این نمودار با دستور nichols قابل رسم هست

توجه۳: دستور grid on که در رسم های ساده متلب استفاده میکردیم در این دستورها مشخصه های مهمی رو نشون میده.مثلا در نمودار نیکولز دوایر M ثابت و N ثابت رو رسم میکنه

خوب دوستان مباحث عمومی کنترل خطی تموم شد. در جلسه بعد یه شبیه سازی کامل از مباحث کنترل خطی همراه با طراحی انواع کنترل کننده ها رو داریم و بعد از اون میریم که وارد مباحث بسیار زیبای کنترل مدرن بشیم.......

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید

http://www.noandishaan.com

لینک به دیدگاه
  • 4 هفته بعد...

بعد مدت ها سلام.....:icon_gol::icon_gol:

امروز با طراحی کامل یه جبران ساز پس فاز با شما هستم!!!!!!! امیدوارم که لذت کافی رو ببرید.

 

فرض کنید که سیستم زیر در اختیار ماست.هدف کاهش خطای حالت ماندگار به شیب هست...

[font=Courier]G=550/(s*(s+6)*(s+35));[/font]

خوب سیستم حلقه بسته خطای حالت ماندگار به پله نداره و حالت گذرای خوبی داره.تقریبا ضیرب میرایی ۰.۷ داره که اورشوت ۴ درصد رو میده و زمان نشستی حدود ۳ ثانیه داره....

خوب هدف ما کاهش خطای حالت ماندگار شیب هست پس باید بریم سراغ کنترل کننده پس فاز (چرا؟؟؟؟؟)

اول ثابت خطای شیب رو پیدا میکنیم که میشه حدود ۲.۶۱ که زیاد جالب نیست....برای افزایش این ضیرب صفر پس فاز رو میذاریم روی 0.1 و بتا رو هم میگیریم 10.

پس کنترل کننده به صرت زیر میشه

 

[font=Courier]Gc =Kc (s+0.1)/(s+0.01);[/font]

 

فقط میمونه پیدا کردن Kc که اول مکان هندسی سیستم زیر رو میکشیم.

[font=Courier]Sys=Gc*G;[/font]

 

که اگه بخوایم همون حالت گذرای قبلی رو داشته باشیم بایستی بهره رو تقریبا برابر با ۰.۹ بگیریم (قطب های مطلوب رو از روی ضریب میرایی و نسبت ضریب میرایی اینو گفتم...)

 

در این صورت ثابت خطای شیب برابر با ۲۳.۵۷ که خطای حالت ماندگار کمی به ورودی شیب داره.....

 

این کد متلب مربوط به این جبران ساز هست که تو اون سیستم جبران شده حلقه بسته و سیستم جبران نشده حلقه بسته مقایسه شدن در مکان هندسی و ورودی پله و ورودی شیب......

 

[font=Courier]close all; clear all; clc; [/font]

[font=Courier]s = tf('s');[/font]

[font=Courier]G=550/(s*(s+6)*(s+35));[/font]

[font=Courier]figure(1)[/font]
[font=Courier]rlocus(G)[/font]
[font=Courier]set(gcf,'color',[1 1 1])[/font]

[font=Courier]Gc = (s+0.1)/(s+0.01);[/font]
[font=Courier]Sys=Gc*G;[/font]

[font=Courier]figure(2)[/font]
[font=Courier]rlocus(Sys);[/font]
[font=Courier]set(gcf,'color',[1 1 1])[/font]

[font=Courier]Kc = 0.9;[/font]
[font=Courier]T1 = feedback(G,1);[/font]
[font=Courier]T2 = feedback(Kc*Sys,1);[/font]

[font=Courier]t = 0:0.01:10;[/font]
[font=Courier]ramp=t;[/font]

[font=Courier]figure(3)[/font]
[font=Courier]step(T1,t)[/font]
[font=Courier]set(gcf,'color',[1 1 1])[/font]

[font=Courier]figure(4)[/font]
[font=Courier]lsim(T1,ramp,t)[/font]
[font=Courier]set(gcf,'color',[1 1 1])[/font]

[font=Courier]figure(5)[/font]
[font=Courier]step(T2,t)[/font]
[font=Courier]set(gcf,'color',[1 1 1])[/font]

[font=Courier]figure(6)[/font]
[font=Courier]lsim(T2,ramp,t)[/font]
[font=Courier]set(gcf,'color',[1 1 1])[/font]

 

دوستان اگه سوالی دارن همینجا بپرسن!!!!!!!

 

 

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید http://www.noandishaan.com

لینک به دیدگاه

در ادامه این مباحث میخوام دستورات پایه ای درس کنترل مدرن رو معرفی کنم....

کنترل مدرن به شاخه ای از مهندسی کنترل گفته میشه که معادلات دیفرانسیل مرتبه n به ن معادله مرتبه اول کاهش پیدا میکنه که در دروس مدار های الکتریکی با اونا آشنا شدیم قبلا... مهمترین انعطاف پذیری ای که فضای حالت نسبت به نمایش تابع تبدیل داره در معرفی سیستم های چند متغیره هست. شما با استفاده از این فضا میتونید به راحتی سیستم های چند ورودی و چند خروجی خودتونو مدل کنید.

خوب بریم سراغ دستورات مربوط به این بخش

اول اینکه اگه شما فضای حالت سیستمی رو در اختیار داشته باشید چه جور میتونید این فضای حالت رو به سیستم معرفی کنید؟؟؟؟؟؟ فرض کنید که فضای حالت زیر و تابع تبدیل اون در اختیار شماست...

vnzcvpxbfet7qn6p29ev.png

در متلب کافیه به صورت زیر این فضا رو معرفی کنید

[font=Courier]close all;clear all;clc[/font]
[font=Courier] [/font]
[font=Courier]A=[0 1;-30 11];[/font]
[font=Courier]B=[0;1];[/font]
[font=Courier]C=[2 1];[/font]
[font=Courier]D=0;[/font]
[font=Courier] [/font]
[font=Courier]State_Space=ss(A,B,C,D)[/font]

 

خوب اگه بخواید این فضا رو به تابع تبدیل ببرید کافیه که بنویسید

[font=Courier]G=tf(State_Space)[/font]

که با این دستور تو قسمت کنترل خطی آشنا شده بودیم...عکس این دستور هم کار برد داره و میتونید از توابع تبدیلتون یه تحقق به دست بیارید....تو قسمت تحقق ها توضیح کامل میدم براتون.... فقط اینجا یه مثال براتون میارم...

 

[font=Courier]close all;clear all;clc[/font]
[font=Courier] [/font]
[font=Courier]s=tf('s');[/font]
[font=Courier] [/font]
[font=Courier]G=1/(s^2-11*s+30);[/font]
[font=Courier] [/font]
[font=Courier] [/font]
[font=Courier]State_Space=ss(G);[/font]
[font=Courier] [/font]
[font=Courier]A=State_Space.a[/font]
[font=Courier] [/font]
[font=Courier]B=State_Space.b[/font]
[font=Courier] [/font]
[font=Courier]C=State_Space.c[/font]
[font=Courier] [/font]
[font=Courier]D=State_Space.d[/font]


 

توجه کنید که وقتی شما فضای حالت از متلب تحویل میگیرید به صورت یک بلوک حاوی اطلاعات هست که برای بیرون کشیدن ماتریس های لازم باید مثل دستور فوق عمل کنیم.

 

خوب این شروعی بود بر مباحث کنترل مدرن.....قسمت بعد یه بحث مفصل بر روی کنترل پذیری فضای حالت داریم...نتایج اون بخش رو میشه به رویت پذیری هم تعمیم داد...

 

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید http://www.noandishaan.com

لینک به دیدگاه
  • 1 ماه بعد...

خوب مبحث کنترل پذیری و رویت پذیری رو امروز بررسی میکنیم....اصن کنترل پذیری و رویت پذیری یعنی چی؟؟؟؟؟؟

 

به زبان بسیار ساده میگم....

 

کنترل پذیری یعنی اینکه آیا در یه سیستم میشه با سیگنال کنترلی تمامی حالت های اونو کنترل کرد؟؟؟؟؟؟؟؟

 

رویت پذیری هم یعنی اینکه آیا در یه سیستم میشه با خروجی (و یا قرار دادن سنسور اضافی ) تمامی حالت های یه سیستم رو رویت کرد؟؟؟؟؟؟

 

در جایگاه اول این دو مبحث مهم از لحاظ ریاضی بررسی شدن و شرط اون فول رنک بودن دو ماتریس کنترل پذیری و رویت پذیری هست.....شما میتونید این دو ماتریس رو به صورت دستور زیر با متلب حساب کنید.....

 

[font=Courier]close all;clear all;clc[/font]
[font=Courier] [/font]
[font=Courier]A=[1 16;0 1];[/font]
[font=Courier] [/font]
[font=Courier]B=[0;1];[/font]
[font=Courier] [/font]
[font=Courier]C=[1 1];[/font]
[font=Courier] [/font]
[font=Courier]D=0;[/font]
[font=Courier] [/font]
[font=Courier]Phi_c=ctrb(A,B);[/font]
[font=Courier] [/font]
[font=Courier]Phi_o=obsv(A,C);[/font]


 

که اگه این دو ماتریس فول رنک باشن میتونید بگید که کنترل پذیری و رویت پذیری شما تضمینه.... خوب اگه به صورت زیر بنویسید....

 

[font=Courier]rank(Phi_c)[/font]
[font=Courier] [/font]
[font=Courier]rank(Phi_o)[/font]

 

که در این مثال میبینیم که فضای حالت ما هم کنترل پذیر هست و هم رویت پذیر.....

 

نکته اول: اگه یه سیستم کنترل پذیر باشه سیستم دوگان اون حتما رویت پذیر هست (این مساله برای رویت پذیری هم صادقه..) پس با همون دستور ctrb میشه هم کنترل پذیری رو چک کرد و هم رویت پذیری رو....(خودتون بگید چه طور؟؟؟)

 

نکته دوم: این دستور ها رو برای سیستم های مایمو هم میتونیم به کار ببریم و فقط مختص سیستم های تک ورودی تک خروجی نیست....

 

نکته سوم: اگه تابع تبدیلی مینیمال باشه صد در صد هم کنترل پذیره و هم رویت پذیر (برای سیستم های چند متغیره بایستی سیستم ها دارای صفر دکوپله نباشن و برای چک کردن صفر های دکوپله هم میتونید از صورت اسمیث- مک میلان یه تابع تبدیل استفاده کنید....) پس چک کردن رویت پذیری و کنترل پذیری یه تابع تبدیل مینیمال که ازش تحقق فضای حالت گرفتین ضرورتی نداره

 

نکته چهارم: اگه تابع تبدیلی با ساده سازی صفر و قطب همراه بود (Pole Zero Cancellation) قطعا رویت پذیری ویا کنترل پذیری اون دچار مشکل خواهد شد اما اینکه کدام یک دچار مشکل میشه بستگی به نوع نوشتن تحقق های شما داره....اگه ازش تحقق کنترل پذیر بنویسید رویت پذیر نخواهد بود و اگه از اون یه تحقق رویت پذیر بنویسید کنترل پذیر نخواهد بود

 

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید

http://www.noandishaan.com

لینک به دیدگاه
  • 1 ماه بعد...

در این قسمت میخوایم یه مبحثی از جایابی قطب رو مطرح کنیم.....قبلا در این پست به صورت مفصل توضیح دادم که اصن جایابی قطب یعنی چی و چرا میخوایم جایابی قطب کنیم؟؟؟؟؟؟؟

 

تو این پست صرفا شبیه سازی همون مثال رو انجام میدیم و خروجی سیستم حلقه بسته رو مشاهده می کنیم

 

خوب اول فضای حالت مربوط به این سیستم رو معرفی می‌کنیم

 

[font=Courier]close all;[/font]
[font=Courier]clear all;[/font]
[font=Courier]clc[/font]
[font=Courier] [/font]
[font=Courier]A=[0 1;-30 11];[/font]
[font=Courier]B=[0;1];[/font]
[font=Courier]C=[2 1];[/font]
[font=Courier]D=0;[/font]

 

خوب اینجا پاسخ پله این سیستم رو میبینید (قبلا در مورد دستور های ss و step توضیح دادم)

 

[font=Courier]step(ss(A,B,C,D))[/font]

 

و خروجی به شکل زیر هست که میبینیم ناپایداره.....

ohjsv5vjbim4e24l0i0.png

 

 

مشخص هم بود چون سیستم قطب های ناپایداری داره.......حالا میخوایم از فیدبک حالت استفاده کنیم و قطب ها رو جایی جایابی کنیم که پایدار بشن.....طبق همون مثال اگه بخوایم قطب ها روی -۳ و -۴ جایابی بشن وضعیت پایداریش تایید میشه........برای همین با استفاده از دستور place جایابی قطب رو انجام میدیم به صورت زیر

 

[font=Courier]Close_Pole=[-3 -4];[/font]
[font=Courier] [/font]
[font=Courier]K=place(A,B,Close_Pole);[/font]

 

بردار بهره فیدبک حالت دقیقا همون چیزی به دست اومد که تو تحلیل دستی تو اون پست به دست آورده بودیم.

توجه: اون قدیم قدیما تو متلب یه دستوری بود به اسم acker. این دستور جایابی قطب رو به روش آکرمن انجام میداد اما چون روش آکرمن یه روش حل دستگاه معادلات بود ممکن بود که تو حل به یه ماتریس ill Condition برسیم که حل دستگاه رو تقریبا غیر ممکن میکرد.این دستور به مرور از هلپ متلب حذف شد اما هنوز دستورش تو متلب کار میکنه (تا ورژن ۲۰۱۲ رو که میدونم کار میکنه) اگه شما میخواید جایابی قطب رو انجام بدید منم بهتون پیشنهاد میکنم که از دستور place استفاده کنید.

 

خوب حالا ماتریس سیستم حلقه بسته رو تشکیل میدیم!!!!! طبق تعریف فیدبک حالت میشه

 

[font=Courier]Ac=A-B*K;[/font]

 

خوب حالا پاسخ سیستم حلقه بسته رو پیدا می‌کنیم

jzd9xfibg2t6z1whrzvo.png

 

که میبینیم به خوبی و خوشی سیستم پایدار شد!!!!!!!!!!!!!!!حالا اینجا دو تا سوال مطرح میکنم شما بهش فکر کنید

 

سوال اول: این سیستم چرا خطای حالت ماندگار داره؟؟؟؟؟؟؟؟؟میشه درستش کرد یا نه؟؟؟؟؟؟

 

سوال دوم: به نظرتون میشه صفر رو هم جایابی کرد یا نه؟؟؟؟؟؟؟؟؟؟چرا؟؟؟؟؟؟

 

تو پست بعدی به این سوالا جواب میدیم!!!!

 

توجه: این یک آموزش اختصاصی برای سایت نو اندیشان است و در صورت استفاده حتما نام منبع را ذکر کنید http://www.noandishaan.com

لینک به دیدگاه
  • 3 ماه بعد...

سلام.من دانشجوی رشته کنترل هستم.ازتون می خوام که قسمت تحقق و روئیتگر مرتبه کامل رو برام توضیح بدین .خیلی گیرمو ازتون می خوام اگه زحمتی نیست سریع برام بفرستید.:4564:

لینک به دیدگاه
سلام.من دانشجوی رشته کنترل هستم.ازتون می خوام که قسمت تحقق و روئیتگر مرتبه کامل رو برام توضیح بدین .خیلی گیرمو ازتون می خوام اگه زحمتی نیست سریع برام بفرستید.:4564:

 

سلام دوست عزیز

احتمالا توی این تاپیک توضیح داده شده:

 

[h=1]کنترل مدرن[/h]

لینک به دیدگاه
  • 1 ماه بعد...
با سلام

با تشکر از زحماتتون، لطفا" راه حل خطای زیر را به من بگید.

'Undefined function 'gain_cal' for input arguments of type 'double

 

 

(Error in (line 10

(K=gain_cal(A,B,R1,R2

 

سلام دوست عزیز

توی متن ارور هم داره میگه، فانکشن gain_cal تعریف نشده، چنین فانکشنی وجود نداره.:a030:

لینک به دیدگاه
  • 1 ماه بعد...

با سلام

 

سیستم اصلی من به این شکله :

 

Untitled.jpg

 

میخوام اینو تو متلب تعریف کنم که بعدا از دستور estim استفاده کنم. میشه بگید اینو چطوری تعریف کنم؟ چون یه جمله ثابت داره.

 

درباره دستور estim هم میشه یه مثال حل کنید؟

 

برا پروژم لازم دارم اگه راهنمایی کنین ممنون میشم. :hanghead:

لینک به دیدگاه
با سلام

 

سیستم اصلی من به این شکله :

 

Untitled.jpg

 

میخوام اینو تو متلب تعریف کنم که بعدا از دستور estim استفاده کنم. میشه بگید اینو چطوری تعریف کنم؟ چون یه جمله ثابت داره.

 

درباره دستور estim هم میشه یه مثال حل کنید؟

 

برا پروژم لازم دارم اگه راهنمایی کنین ممنون میشم. :hanghead:

 

 

سلام دوست عزیز شما فضای حالت رو در آوردید؟ قبل از همه فضای حالت سیستم رو دز بیارید بعد sys رو بدست بیارید بادستور SS . نهایتا با دستور زیر بدست میاد

est = estim(sys,L) 

که L هم estimator gain یا بهره رویت گر هست از دستور place و یا acker برای پیدا کردنش کمک بگیرید .

 

 

لینک به دیدگاه
  • 3 ماه بعد...
  • 1 ماه بعد...
سلام

ممکنه راجع به دستورات کنترل بهینه در متلب هم توضیح بدید .ممنون

 

سلام

آیا میتوان از روی بلوک دیاگرام تابع تبدیل را بدست آورد

این کار با نرم افزار مطلب چگونه میشود انجام داد

 

سلام....:a030:

 

 

http://www.noandishaan.com/forums/thread128247.html

http://www.noandishaan.com/forums/thread95481.html

 

ب این تاپیک ها مراجعه کنید.....امیدوارم جواب سوالاتون رو پیدا کنید....:w16:

لینک به دیدگاه
  • 11 ماه بعد...

با سلام و تشکر

من میخوام یک سیستم چند ورودی و چند خروجی یک کنترل کننده H∞ طراحی کنم و برنامه رو کامل نوشتم فقط برای استفاده از دستور

[controler_hin , L,Goptimal]= hinfsyn(p);

همان طور که میبینید باید یک p مناسب تعریف کنم که برای این کار از دستور sysic استفاده کنم (راه دیگه ای داره؟) و این دستور رو قبلا برای یک تک ورودی تک خروجی به شکل زیر انجام داده ام اما برای سیستم چند ورودی چند خروجی که در پایین اورده ام دستور sysic باید درست بشه که هر کار میکنم نمیشه لطفا راهنمایی کنید و برایم درست کنید

تعریف سیستم و ... تا دستر مربوطه که خطا میده را در زیر اورده ام

با تشکر

clc;

clear;

G0=[87.8 -86.4;108.2 -109.6];

Gs=tf(1,[75 1])*G0; %Plant Model

Gd=[7.88 8.81;11.72 11.19]; %Disturbance Model

[A,B,C,D]=ssdata(Gs);

G=pck(A,B,C,D)

M=1.5; wb=10; A= 1e-4;

We=[[1/M wb];[1 wb*A];[1/M wb];[1 wb*A]];

Wu=[1 1;1 1];

Wy=[];

systemnames='[G We Wu]';

inputvar='[r(1);u(1)]';

outputvar='[We;Wu;r-G]';

input_to_G='';

input_to_We='[r-G]';

input_to_Wu='';

sysoutname='P';

cleanupsysic='yes';

P=sysic;

لینک به دیدگاه

با سلام و تشکر

من میخوام یک سیستم چند ورودی و چند خروجی یک کنترل کننده H∞ طراحی کنم و برنامه رو کامل نوشتم فقط برای استفاده از دستور

[controler_hin , L,Goptimal]= hinfsyn(p);

همان طور که میبینید باید یک p مناسب تعریف کنم که برای این کار از دستور sysic استفاده کنم (راه دیگه ای داره؟) و این دستور رو قبلا برای یک تک ورودی تک خروجی به شکل زیر انجام داده ام اما برای سیستم چند ورودی چند خروجی که در پایین اورده ام دستور sysic باید درست بشه که هر کار میکنم نمیشه لطفا راهنمایی کنید و برایم درست کنید

تعریف سیستم و ... تا دستر مربوطه که خطا میده را در زیر اورده ام

با تشکر

clc;

clear;

G0=[87.8 -86.4;108.2 -109.6];

Gs=tf(1,[75 1])*G0; %Plant Model

Gd=[7.88 8.81;11.72 11.19]; %Disturbance Model

[A,B,C,D]=ssdata(Gs);

G=pck(A,B,C,D)

M=1.5; wb=10; A= 1e-4;

We=[[1/M wb];[1 wb*A];[1/M wb];[1 wb*A]];

Wu=[1 1;1 1];

Wy=[];

systemnames='[G We Wu]';

inputvar='[r(1);u(1)]';

outputvar='[We;Wu;r-G]';

input_to_G='';

input_to_We='[r-G]';

input_to_Wu='';

sysoutname='P';

cleanupsysic='yes';

P=sysic;

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...