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

javad ta

عضو جدید
کاربر ممتاز
در این قسمت نحوه طراحی یک کنترل کننده فازی با Matlab را برای کنترل یک سروموتور DC آموزش می دهیم. فرض کنید تابع تبدیل یک سروموتور DC بصورت زیر است: قبل از اینکه وارد طراحی شویم ابتدا باید نحوه ایجاد کنترل کننده فازی در متلب را آموزش بدهیم.برای این کار هم می توان از دستورات متلب استفاده کرد و هم می توان از تولباکسی که در متلب قرار دارد استفاده کرد که ما کار با تولباکس Fuzzy Logic Design را آموزش می دهیم.برای وارد شدن به این تولباکس ابتدا دستور fuzzy را در command window بنویسید تا صفحه زیر آشکار شود: همان طور که مشاهده می کنید این صفحه از قسمت های زیر تشکیل شده است: ۱) input :در این قسمت ورودی های سیستم مشخص می شود که برای کار ما دو ورودی خطای سرعت و تغییرات خطای سرعت می باشد. ۲) Untitled :در این قسمت قوانین نوشته می شود. ۳) output :در این قسمت خروجی های سیستم تعیین می شود که برای کار ما ولتاژ موتور می باشد. ۴) Current Variable :در این قسمت اطلاعات مربوط به متغیری که انتخاب شده نشان داده می شود.سعی کنید برای هر متغیر نام مناسبی انتخاب کنید تا زمانی که قوانین را طراحی می کنیم دچار مشکل نشویم. ۵) قسمت پایین سمت چپ که در این قسمت نحوه استدلال و استنتاج کردن قوانین و روابط فازی مشخص می شود.بهتر است این قسمت ها را تغییر ندهید. برای اضافه کردن ورودی و خروجی می توانید مانند شکل زیر عمل کنید: ابتدا ما دو ورودی با نام های e و deltae و یک خروجی با نام V می سازیم.حال روی ورودی e دو بار کلیک کرده تا وارد صفحه زیر شویم: ابتدا با کلیک بر روی هر متغیر رنج تغییرات آن (گوشه پایین سمت چپ) را مشخص می کنیم.که برای کار ما رنج تغییرات هر سه متغیر را [-۳,۳] انتخاب کرده ایم.حال باید توابع عضویت ها را طراحی کنیم.از قسمت Type توابع مختلفی را می توان انتخاب کرد (مثلثی ،ذوزنقه ای ،زنگوله ای و …) و در قسمت Params می توان پارامتر های یک تابع را مشخص کرد (مثلا در مورد تابع مثلثی پارامترها عبارت اند از: نقطه شروع،نقطه ارتفاع و نقطه انتهایی) . برای طراحی ما روی mf1 کلیک کرده و در قسمت Name حرف n را و از قسمت Type گزینه trapmf را انتخاب و در قسمت Params اعداد [-Inf -3 -2 0] را می نویسیم.می توان توابع عضویت دلخواه نیز ایجاد کرد.برای این کار از سربرگ Edit گزینه ی Add Custom MF را انتخاب کنید.به همین ترتیب توابع عضویت های دیگر p,z,any را تشکیل داده و همین کار را برای متغیرهای دیگر انجام می دهیم. حال باید قوانین را طراحی کنیم،برای این کار روی گزینه Untitled کلیک کرده و وارد آن می شویم و سپس قوانین زیر را در آن ایجاد می کنیم:
۱٫ If (e is n) and (deltae is any) then (output1 is n)​
۲٫ If (e is p) and (deltae is any) then (output1 is p)​
۳٫ If (e is z) and (deltae is any) then (output1 is n)​
۴٫ If (e is z) and (deltae is any) then (output1 is p)​
۵٫ If (e is z) and (deltae is any) then (output1 is z)​
توجه کنید که پس از انتخاب هر کدام از پارامترها گزینه Add rule را زده تا قانون ثبت شود و برای حذف قانونی،ابتدا روی آن کلیک کرده و سپس گزینه Delete rule را بزنید. برای مشاهده خروجی از سربرگ View گزینه Rule را انتخاب کنید و با تغییر دادن ورودی ها تغییرات خروجی را مشاهده کنید. برای ذخیره فایل طراحی از سربرگ File گزینه Export To File را انتخاب کرده و فایل را با پسوند fis ذخیره کنید. برای استفاده از این فایل در سیمولینک متلب باید بلوک Fuzzy Logic Controller را انتخاب کنید. توجه کنید که چون فایل fis ما یک استراکچر می باشد باید نام فایل را داخل ‘ ‘ قرار دهیم. شکل زیر نحوه کنترل را نشان می دهد:
در اینجا برای اینکه مقایسه ای بین کنترل کننده فازی با کنترل کننده PID انجام دهید به شکل موج های زیر توجه کنید:
همان طور که مشخص است پاسخ کنترل کننده فازی سریع تر بوده است. شکل زیر یک تفاوت دیگر این دو کنترل کننده را نشان می دهد:
همان طور که می دانید خروجی کنترل کننده ها نباید به اشباع برود ولی کنترل کننده PID به اشباع رفته است.
 
بالا