یکی از مهمترین مباحث در مهندسی کنترل و شاید پایه ای ترین موضوع در کنترل یک سیستم، PID است . قبل از ورود به بحث آموزش PID در متلب، باید بدانیم که سیستم کنترلر PID متشکل از سه قسمت است :
P : کنترلر تناسبی یا Proportional
I : انتگرال گیر یا Integral
D : مشتق گیر یا Derivative
در واقع یک کنترلر PID با این سه عمل، سیستم را به سمت نتایج مطلوب هدایت میکند. ما در این مقاله میخواهیم به آموزش PID در متلب بپردازیم تا با عملکرد این کنترلر آشنا شویم :
برای شروع آموزش این واحد فیدبکی را در نظر می گیریم :
تابع انتقال کنترلر PID به شکل زیر است :
که در آن Kp برابر بهره تناسبی، Ki بهره انتگرال و Kd بهره مشتق گیر است . در ابتدا به بررسی تاثیر کنترلر PID بر روی سیسم حلقه بسته بالا می پردازیم . پارامتر e یا خطا ، در واقع اختلاف بین نتیجه مطلوب r با خروجی واقعی y است که ما میخواهین e را ازبین ببریم تا r=y را داشته باشیم. کنترلر این خطا را میگیرد و مشتق و انتگرال آن را محاسبه می نماید. حال سیگنالی که به قسمت u ارسال میشود، برابر است با بهره تناسبی ضرب در دامنه خطا، بعلاوه بهره انتگرال ضربدر انتگرال خطا ، به علاوه ی بهره مشتق ضربدر مشتق خطا.
تابع حلقه باز درجه دوم به صورت زیر است :
یک مقدار بزرگ Kp میتواند باعث کاهش زمان اوج شود و خطای حالت پایدار را کم میکند. کنترلر انتگرالی میتواند خطای حالت پایدار را از بین ببرد اما پاسخ گذرا را خراب می کند. کنترلر مشتق میتواند باعث افزایش پایداری سیستم شود و فراجهش را کم کرده و پاسخ حالت گذرا را بهبود میدهد. حال در ادامه مبحث آموزش PID در متلب ، به بررسی این پاسخ ها و کنترلر ها در حالات مختلف می پردازیم .
فرض کنید برای بلوک plant در شکل اول، پاسخ فرکانسی زیر را داشته باشیم :
برای رسیدن به پاسخ پله این تابع باید از کدهای زیر استفاده نماییم :
num=1; den=[1 10 20]; step(num,den)
خط اول صورت کسر به صورت عددی و خط دوم ضرایب مخرج به صورت ماتریسی تعریف شده است و در خط سوم با تابع step خروجی پاسخ پله رسم شده است.
نکاتی که در تصویر بالا مشخص است این است که خروجی تنها به مقدار 0.05 رسیده است در حالی که برای پاسخ پله باید به 1 برسد همچنین زمان صعود و زمان نشست نیز بسیار طولانی است . پس در نتیجه ما حتما احتیاج به کنترل بیشتری داریم.
Kp در بهبود خطای حالت پایدار به ما کمک میکند.
num=1; den=[1 10 20]; Kp=10; [numCL,denCL]=cloop(Kp*num,den, -1); t=0:0.01:2; step(numCL, denCL,t)
تابع cloop در خط چهارم به منظور تبدیل تابع انتقال حلقه باز به حلقه بسته مورد استفاده قرار میکیرد. با عدد -1 به عنوان آرگومان دوم ایت تابع، مشخص میکنیم که فیدبک منفی داریم و برای آرگومان اول نیز ضریب تناسبی را در تابع انتقال حلقه باز ضرب میکنیم . حال تغییرات را در شکل زیر با هم ملاحظه می کنیم .
زمان صعود و همچنین حالت پایدار، بهتر شد . اما اگر Kp را مقدار 500 قرار دهیم، سیستم خروجی ناپایدار زیر را تولید میکند :
کنترل PD
با افزودن کنترل مشتقی در صدد بهبود پاسخ حالت گذرا تصویر بالا هستیم و داریم :
Kp=500; Kd=10; numc=[Kd Kp]; [numCL, denCL]=cloop(conv(num,numc),den); step(numCL, denCL,t)
بهبود زیادی در فراجهش ایجاد شد و حال اگر kd را بر روی 100 قرار دهیم پاسخ زیر را خواهیم داشت :
حال میبینیم تمام فاکتور ها خوب است اما به عدد 1 نمیرسیم و 5 درصد خطا داریم .
با توجه به مطالب بالا و وظیفه کنترل انتگرالی، اضافه کردن این منترل میتواند حالت پایدار را بهبود ببخشید تا به عدد 1 برسیم . برای این منظور داریم :
KP=500; KI=1; KD=100; numc=[KD KP KI]; denc=[1 0]; [numCL, denCL]=cloop(conv(num,numc),conv(den,denc)); step(numCL, denCL)
خروجی کد های بالا برای Ki برابر 1 ، 100 و 500 به ترتیب به صورت زیر است :
در تصویر آخر یعنی با Kp = 500 و Kd=100 و Ki=500 توانستیم به تمام فاکتورهای مطلوب در آموزش PID در متلب دست پیدا کنیم .