تحلیل و شبیه سازی سیستم های خطی لازمه طراحی سیستم کنترل برای هر پلنت می باشد. خوشبختانه این ابزار در حوزه کنترل خطی بسیار گسترده است. مهمترین ابزار تحلیل پایداری سیستم های خطی عبارتند از نمودار مکان هندسی ریشه ها ، نمودار بودی و نائکوئیست. که نمودار مکان هندسی براساس صفر و قطب های سیستم بدست می آید و دو نمودار بودی و نائکوئیست از جمله ابزار تحلیل در حوزه فرکانسی می باشند.
مکان هندسی ریشه ها
از جمله مهمترین ابزار به منظور بررسی سیستم های کنترل خطی نمودار مکان هندسی می باشد که تحلیل آن در پست(کلیک کنید) بصورت کامل تشریح شده است. این تحلیل براساس صفر و قطب های سیستم انجام می شود. در این بخش می خواهیم دستورات مرتبط با رسم مکان هندسی ریشه ها در متلب را بررسی و مثال هایی را مرور کنیم.
فرمت کلی دستورات متلب برای رسم نمودار مکان هندسی ریشه ها بصورت زیر می باشند :
rlocus(sys)
rlocus(sys1,sys2,…)
[r,k] = rlocus(sys)
r = rlocus(sys,k)
rlocus(sys) مکان هندسی ریشه های مدل تک ورودی تک خروجی (SISO) sys را محاسبه و ترسیم می کند. مکان ریشه مسیرهای قطب حلقه بسته را به عنوان تابعی از بهره بازخورد k (با فرض فیدبک منفی) برمی گرداند. مکان هندسی ریشه برای مطالعه اثرات افزایش فیدبک های مختلف در مکان های قطب حلقه بسته استفاده می شود. به نوبه خود، این مکان ها اطلاعات غیرمستقیم در مورد پاسخ های زمان و فرکانس ارائه می دهند.
میتوانید از rlocus برای رسم نمودار منبع ریشه هر یک از حلقههای فیدبک منفی زیر با تنظیم sys مانند شکل زیر استفاده کنید:
شکل 1 ) انتخاب تابع تبدیل حلقه باز برای sys به عنوان آرگومان تابع rlocus
دقت در این شکل نشان دهنده لزوم انتخاب تابع تبدیل حلقه باز برای آرگومان (ورودی) تابع rlocus جهت رسم مکان هندسی ریشه ها می باشد. تابع تبدیل حلقه باز از ضرب هر آنچه در مسیر فیدفوروارد و فیدبک در پلنت می باشد بدست می آید.
به عنوان مثال، اگر sys یک تابع انتقال است که توسط رابطه زیر بیان می شود :
قطب های حلقه بسته سیستم عبارت خواهند بود با ریشه های معادله زیر :
نمودار مکان هندسی ریشه، مسیر قطب های حلقه بسته را در زمانی که بازخورد بهره k از 0 تا بی نهایت تغییر می کند، نشان می دهد. rlocus به طور تطبیقی مجموعه ای از بهره های مثبت k را برای ایجاد یک نمودار صاف انتخاب می کند. قطب های روی نمودار منبع ریشه با x و صفرها با o نشان داده می شوند.
کد متلب rlocus(sys1,sys2,…) جایگاه ریشه چندین مدل LTI با نام های sys1, sys2,… را در یک نمودار رسم می کند. برای هر مدل می توانید رنگ، سبک خط و نشانگر را مشخص کنید.
کد متلب [r,k] = rlocus(sys) بردار بهره فیدبک k و مکان های ریشه مختلط r را برای این بهره ها برمی گرداند.
کد متلب r=rlocus(sys,k) از بردار مشخص شده توسط کاربر برای بهره بازخورد k برای خروجی قطب های حلقه بسته r که نمودار منبع ریشه را تعریف می کنند، استفاده می کند.
مثال :
برای این مثال. مکان ریشه سیستم دینامیکی SISO زیر را رسم کنید:
ابتدا نیاز است تا پلنت بصورت یک تابع تبدیل تعریف شود که برای این منظور از کد متلب tf (Transfer Function) استفاده می شود که ابتدا چند جمله ای صورت و سپس چندجمله ای مخرج برای آن به صورت زیر تعریف می شوند :
sys = tf([2 5 1],[1 2 3]);
در ادامه به سادگی با کد rlocus(sys) نسبت به رسم مکان هندسی اقدام می شود که نتیجه آن شکل زیر می باشد :
شکل 2 ) نمودار مکان هندسی ریشه ها برای مثال اول
قطب های سیستم با x نشان داده می شوند، در حالی که صفرها با o در نمودار مکان ریشه نشان داده می شوند. می توانید از منوی درون نمودار منبع ریشه تولید شده برای اضافه کردن خطوط شبکه، بزرگنمایی یا کوچکنمایی و همچنین فراخوانی Property Editor برای سفارشی کردن نمودار استفاده کنید.
نمودار مکان هندسی ریشه چندین مدل سیستم دینامیکی
این کار بیشتر به منظور مقایسه چندین سیستم LTI از لحاظ پایداری استفاده می شود .
برای این مثال، sisoModels.mat (این سیستم در متلب تعریف شده است و دارای سه تابع تبدیل SISO می باشد) را در نظر بگیرید که شامل سه مدل SISO زیر است:
sys1 – یک مدل تابع انتقال
sys2 – یک مدل فضای حالت
sys3 – یک مدل با افزایش قطب صفر
مدل ها را از فایل mat بارگیری کنید. برای این منظور از دستور load استفاده می شود : (نرم افزار متلب شما بایستی ورژن بالای 2020 باشد و الا در شناسایی sisoModels.mat خطا خواهد داد)
load(‘sisoModels.mat’,’sys1′,’sys2′,’sys3′);
نمودار مکان هندسی ریشه را با استفاده از کد متلب rlocus ایجاد کنید و رنگ هر سیستم را مشخص کنید. همچنین یک legend به نمودار منبع ریشه اضافه کنید.
rlocus(sys1,’b’,sys2,’k’,sys3,’r’)hold onlegend(‘sys1′,’sys2′,’sys3’)hold off
شکل زیر نتیجه بدست آمده را نشان می دهد .
شکل 3 ) نمودار مکان هندسی ریشه ها برای مثال دوم با نمایش سه مکان هندسی در یک رسم
شکل شامل نمودارهای مکان هندسی ریشه ها برای هر سه سیستم در یک نمودار است.
قطب های حلقه بسته و بدست آوردن مقادیر فیدبک با استفاده از کد متلب Root Locus
برای این مثال، مدل تابع انتقال SISO زیر را در نظر بگیرید:
از مدل تابع انتقال بالا با دستور rlocus برای استخراج قطب های حلقه بسته و مقادیر بهره بازخورد مربوطه استفاده کنید. در این شرایط دستور زیر را به کار می گیریم :
sys = tf([3 1],[9 7 5 6]);[r,k] = rlocus(sys)
و در نتیجه در پنجره command متلب خواهیم داشت :
r = 3×53 complex
-0.9406 + 0.0000i -0.8744 + 0.0000i -0.8685 + 0.0000i
که در اینجا تنها سطر اول نمایش داده شده است حال آنکه تمامی 53 سطر در command متلب نمایش داده می شود و همچنین به دنبال آن بردار بهره را به شکل زیر در command متلب خواهیم داشت :
k = 1×53
104 ×
0 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0002 0.0002 0.0002 0.0002
که تنها بخشی از پاسخ در اینجا نمایش داده شده است.
از آنجایی که sys شامل 3 قطب است، اندازه آرایه حاصل از قطب های r ، 3×53 است. هر ستون در r مربوط به یک مقدار افزایش از بردار k است. برای این مثال، rlocus به طور خودکار 53 مقدار k را از صفر تا بی نهایت را برای به دست آوردن یک مسیر صاف برای سه قطب حلقه بسته انتخاب کرد.
حال دستورات زیر را در نظر بگیرید :
display(r(:,39)) -0.4229 + 0.0000i -0.1775 + 2.4299i -0.1775 – 2.4299i
display(k(39)) 16.5907
این نشان می دهد که r(:,39) حاوی قطب های حلقه بسته بالا برای مقدار بهره بازخورد معادل با 16.5907 است. (در مقدار متناظر با این بهره قطب های سیستم تعیین شده اند)
نمودار بودی
نمودار بودی از جمله ابزار در حوزه فرکانسی است که به منظور تحلیل پایداری سیستم های دینامیکی خطی به کار می رود. کد متلب برای رسم نمودار بودی عبارت است از bode
دستور bode نمودار پاسخ فرکانسی را برای سیستم مورد نظر رسم می کند که عبارت از یک نمودار بزرگی و یک نمودار فاز می باشد.
فرمت کلی انواع کاربردهای دستور bode به صورت زیر می باشد :
bode(sys)
bode(sys1,sys2,…,sysN)
bode(sys1,LineSpec1,…,sysN,LineSpecN)
bode(___,w)
[mag,phase,wout] = bode(sys)
[mag,phase,wout] = bode(sys,w)
[mag,phase,wout,sdmag,sdphase] = bode(sys,w)
bode(sys) یک نمودار bode از پاسخ فرکانسی یک سیستم مدل سیستم دینامیکی ایجاد می کند. نمودار بزرگی (بر حسب دسی بل) و فاز (بر حسب درجه) پاسخ سیستم را به عنوان تابعی از فرکانس نمایش می دهد. bode به طور خودکار فرکانس ها را برای رسم بر اساس دینامیک سیستم تعیین می کند.
اگر sys یک مدل چند ورودی و چند خروجی (MIMO) باشد، آنگاه bode آرایهای از نمودارهای bode را تولید میکند که هر نمودار پاسخ فرکانسی یک جفت ورودی/خروجی را نشان میدهد.
اگر sys مدلی با ضرایب مختلط باشد، در این صورت :
مقیاس فرکانس لگاریتمی، نمودار دو شاخه را نشان می دهد، یکی برای فرکانس های مثبت و دیگری برای فرکانس های منفی. نمودار همچنین فلش هایی را برای نشان دادن جهت افزایش مقادیر فرکانس برای هر شاخه نشان می دهد.
مقیاس فرکانس خطی، نمودار یک شاخه منفرد با محدوده فرکانس متقارن در مرکز مقدار فرکانس صفر را نشان می دهد.
bode(sys1,sys2,…,sysN) پاسخ فرکانسی چندین سیستم دینامیکی را در یک نمودار ترسیم می کند. همه سیستم ها باید تعداد ورودی و خروجی یکسانی داشته باشند.
bode(sys1,LineSpec1,…,sysN,LineSpecN) یک رنگ، سبک خط و نشانگر را برای هر سیستم در نمودار مشخص می کند.
bode(___,w) پاسخ های سیستم را برای فرکانس های مشخص شده توسط w ترسیم می کند.
اگر w آرایه سلولی به شکل {wmin,wmax} باشد، bode پاسخ را در فرکانسهای بین wmin و wmax ترسیم میکند.
اگر w بردار فرکانسها باشد، bode پاسخ را در هر فرکانس مشخص ترسیم میکند. بردار w می تواند دارای هر دو فرکانس منفی و مثبت باشد.
میتوانید w را با هر یک از ترکیبهای ورودی-آگومان در دستورات قبلی استفاده کنید.
مثال :
یک نمودار Bode از سیستم دینامیکی SISO زمان پیوسته زیر ایجاد کنید.
برای این منظور بایستی طبق آنچه برای رسم مکان هندسی نشان داده شد ابتدا سیستم را با دستور تابع تبدیل تشکیل داده و سپس دستور bode را استفاده کنیم :
H = tf([1 0.1 7.5],[1 0.12 9 0 0]);bode(H)
نتیجه به صورت شکل زیر بدست می آید :
شکل 4 ) نمودار بودی برای مثال انتخابی – دستور بودی رنج مورد نظر فرکانسی را براساس دینامیک سیستم به صورت اتوماتیک نمایش می دهد
ترسیم نقشه در فرکانس های مشخص
یک نمودار Bode در یک محدوده فرکانس مشخص ایجاد کنید. زمانی که می خواهید روی دینامیک در محدوده خاصی از فرکانس ها تمرکز کنید از این رویکرد استفاده کنید.
H = tf([-0.1,-2.4,-181,-1950],[1,3.3,990,2600]);bode(H,{1,100})grid on
در نتیجه اجرای این کدها خواهیم داشت :
شکل 5 ) نمودار بودی برای مثال انتخابی در محدوده فرکانسی مشخص شده در صورت کد متلب
آرایه سلولی {1100} مقادیر حداقل و حداکثر فرکانس را در نمودار Bode مشخص می کند. وقتی مرزهای فرکانس را به این روش ارائه می کنید، این تابع نقاط میانی را برای داده های پاسخ فرکانسی انتخاب می کند.
همچنین می توانید بردار نقاط فرکانس را برای ارزیابی و ترسیم پاسخ فرکانسی مشخص کنید به صورت زیر :
w = [1 5 10 15 20 23 31 40 44 50 85 100];bode(H,w,’.-‘)grid on
در نتیجه خواهیم داشت :
شکل 6 ) نمودار بودی برای سیستم انتخابی به ازای نقاط فرکانسی مشخص شده در کد دستور متلب
نمودار نایکوئیست
نمودار نایکوئیست یکی دیگر از ابزار تحلیل پایداری دینامیکی در حوزه فرکانسی می باشد. نائکوئیست نیز تنها در سیستم های خطی کاربرد دارد. فرمت کلی دستورات متناسب با نایکوئیست بصورت زیر می باشد :
nyquist(sys)
nyquist(sys1,sys2,…,sysN)
nyquist(sys1,LineSpec1,…,sysN,LineSpecN)
nyquist(___,w)
[re,im,wout] = nyquist(sys)
[re,im,wout] = nyquist(sys,w)
[re,im,wout,sdre,sdim] = nyquist(sys,w)
nyquist(sys) یک نمودار Nyquist از پاسخ فرکانسی یک سیستم مدل دینامیک sys ایجاد می کند. نمودار بخش های واقعی و مجازی پاسخ سیستم را به عنوان تابعی از فرکانس نمایش می دهد.
nyquist یک کانتور متشکل از فرکانس های مثبت و منفی را ترسیم می کند. نمودار همچنین فلش هایی را برای نشان دادن جهت افزایش فرکانس برای هر شاخه نشان می دهد. nyquist به طور خودکار فرکانس ها را برای رسم بر اساس دینامیک سیستم تعیین می کند.
اگر sys یک مدل چند ورودی و چند خروجی (MIMO) باشد، nyquist آرایهای از نمودارهای Nyquist را تولید میکند که هر نمودار پاسخ فرکانسی یک جفت I/O را نشان میدهد.
اگر sys مدلی با ضرایب مختلط باشد، در این صورت شاخه های مثبت و منفی متقارن نخواهند بود.
کد متلب nyquist(sys1,sys2,…,sysN) پاسخ فرکانسی چندین سیستم پویا را در یک نمودار ترسیم می کند. همه سیستم ها باید تعداد ورودی و خروجی یکسانی داشته باشند.
کد متلب nyquist(sys1,LineSpec1,…,sysN,LineSpecN) یک رنگ، سبک خط و نشانگر را برای هر سیستم در نمودار مشخص می کند.
کد متلب nyquist(___,w) پاسخ های سیستم را برای فرکانس های مشخص شده توسط w ترسیم می کند.
اگر w آرایه سلولی به شکل {wmin,wmax} باشد، nyquist پاسخ را در فرکانسهای بین wmin و wmax ترسیم میکند.
اگر w بردار فرکانس ها باشد، nyquist پاسخ را در هر فرکانس مشخص ترسیم می کند. بردار w می تواند دارای هر دو فرکانس منفی و مثبت باشد.
میتوانید w را با هر یک از ترکیبهای ورودی-آگومان در دستورات قبلی استفاده کنید.
[re,im,wout] = nyquist(sys) بخشهای واقعی و خیالی پاسخ فرکانسی را در هر فرکانس در بردار wout برمی گرداند. این تابع به طور خودکار فرکانس ها را بر اساس دینامیک سیستم تعیین می کند. این دستور نموداری ترسیم نمی کند.
مثال :
تابع انتقال زیر را ایجاد کرده و پاسخ Nyquist آن را رسم کنید.
طبق صحبت های در مورد نمودار مکان هندسی ریشه ها و بودی دستورات زیر را بایستی برای این منظور وارد کنیم :
H = tf([2 5 1],[1 2 3]);nyquist(H)
در نتیجه این دستورات شکل زیر را در خروجی خواهیم داشت :
شکل 7 ) نمودار نایکوئیست برای مثال انتخابی
تابع nyquist میتواند شبکهای از دایرههای M را نمایش دهد، که خطوطی با قدر حلقه بسته ثابت هستند. دایره های M به عنوان مکان اعداد مختلط تعریف می شوند که در آن کمیت زیر یک مقدار ثابت در فرکانس است.
در اینجا، ω فرکانس بر حسب رادیان بر TimeUnit است، که در آن TimeUnit واحدهای زمان سیستم است، و G مجموعه ای از اعداد مختلط است که نیاز مقدار ثابت را برآورده می کند. برای نمایش شبکه دایره های M، روی نمودار کلیک راست کرده و Grid را انتخاب کنید. یا از دستور grid استفاده کنید.
grid on
شکل 8 ) نمودار نائکوئیست برای مثال انتخابی با اعمال دستور gid on
نمودار Nyquist در فرکانس های مشخص
یک نمودار Nyquist در یک محدوده فرکانس مشخص ایجاد کنید. زمانی که می خواهید روی دینامیک در محدوده خاصی از فرکانس ها تمرکز کنید از این رویکرد استفاده کنید.
H = tf([-0.1,-2.4,-181,-1950],[1,3.3,990,2600]);nyquist(H,{1,100})
نتیجه به صورت شکل زیر خواهد بود :
شکل 9 ) نمودار نایکوئیست برای مثال انتخابی در یک محدوده فرکانسی مشخص شده
آرایه سلولی {1,100} یک محدوده فرکانس [1,100] برای شاخه فرکانس مثبت و [-100,-1] برای شاخه فرکانس منفی در نمودار Nyquist مشخص میکند. شاخه فرکانس منفی با تقارن برای مدل هایی با ضرایب واقعی به دست می آید. وقتی مرزهای فرکانس را به این روش ارائه می کنید، این تابع نقاط میانی را برای داده های پاسخ فرکانسی انتخاب می کند.
منبع : نرم افزار متلب