رفتن به مطلب

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


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

http://dl.picpars.com/newsimg/193.gif

امروز یک پروژه جالب به نام کنترل کننده PID طراحی کردم، که هدف من از این پروژه پیاده سازی کنترلر PID با استفاده از میکروکنترلر AVR می باشد. من این پروژه را تا آنجایی که بتوانم به زبان ساده توضیح خواهم داد که افراد مبتدی هم متوجه قضایای این کنترلر PID شوند. و اما اول اینکه کنترل کننده PID چیست؟

PID مخفف Proportional Integral Derivative می باشد. کنترل PID یعنی عمل کردن بر روی متغییر مورد کنترل از طریق ترکیب مناسب سه عمل کنترلی تناسبی، انتگرالی، مشتق گیر، که به شرح زیر میباشد:

  1. تناسبی: که در آن عمل کنترل با سیگنال خطای محرک که برابر تفاضل میان سیگنال ورودی و سیگنال پس خور است متناسب می باشد.
  2. انتگرالی: که در آن عمل کنترل با انتگرال سیگنال خطای محرک متناسب است.
  3. مشتق گیر: که در آن عمل کنترل با مشتق سیگنال خطای محرک متناسب است.

 

چه موقع باید از کنترلر PID استفاده کنیم؟

بهترین مثال برای روشن شدن این قضیه کنترل دمای یک هیتر می باشد که در پروتیوس هم این هیتر برای شبیه سازی وجود دارد. همانطور که می دانیم وقتی که ما هیتر را روشن می کنیم عوامل زیادی در دمای آن نقش دارند مثلا هیتر در فضای باز قرار دارد یا در فضای بسته و یا اینکه اندازه ابعاد اتاق چقدر است و ... خلاصه وقتی ما سیگنالی به هیتر اعمال می کنیم دما کم کم شروع به بالا رفتن می کند بعد از مدتی دیگه با اعمال تعدادی پالس مشخص دما به صورت تناسبی بالا نمی رود و می بینیم که دما به طور چشمگیری خود به خود بالا می رود و کنترل آن از دست ما خارج می شود. این مسئله را می توانید در پروتیوس به صورت عملی اجرا کنید که من آن را به صورت فایل جداگانه در پوشه Test_heter گذاشتم. می بینیم که کلیک کردن بر روی Button دمای هیتر بالا می رود شما چند کلیک که انجام بدهید دما سریع بالا می رود و دیگه قابل کنترل نیست و خود به خود بالا می رود. (حتما اجرا کنید تا به نقش مهم کنترلر PID پی ببرید)

حالا نقش کنترل کننده PID چیست؟

کنترل PID از حاصل جمع سه کنترل کننده تناسبی، انتگرالی، مشتق گیر، تشکیل شده است به عنوان مثال ما می خواهیم دمای هیتر را روی 50 درجه سانتیگراد تثبیت کنیم پس مقدار مطلوب ما یا همان Set Point برابر با SP=50 می باشد.

اگر ما سیگنالی به هیتر اعمال کنیم و دمای هیتر 50 درجه شود یعنی اینکه سیگنال خطا برابر با صفر شده پس فقط کنترل کننده تناسبی وارد عمل می شود و پروسه را کنترل می کند و قسمت انتگرالی و مشتق گیری ما مقدار صفر را خواهند داشت. OUT=P+0+0

اگر دمای اندازه گیری شده بیشتر یا کمتر از مقدار SP شود آنگاه کنترل کننده انتگرالی و مشتق گیر وارد عمل خواهند شد تا پروسه را به مقدار مطلوب برسانند. OUT=P+I+D وقتی این دو کنترل کننده وارد عمل خواهند شد که ما سیگنال خطا داشته باشیم (صفر نباشد) آنگاه قسمت انتگرالی از سیگنال خطا انتگرال می گیرد و قسمت مشتق گیر هم از سیگنال خطا مشتق می گیرد که حاصل جمع این سه خروجی PID ما می باشد.

تا اینجا مسئله روشن شده که کنترل PID چه کاربرد مهمی در پروسه ها مخصوصا پروسه های غیر قابل پیش بینی دارد. PID با استفاده خطا های قبلی و خطا های حال، آینده را پیش بینی کرده و تدابیری برای کنترل هر چه بهتر سیستم ایجاد می کند.

پس معاله خروجی ما برابر است با:

Kp+Ki(Integral (e(t)))+Kd(dif(e(t)))

که در این معادله Kp, Ki, Kd ضرایب تناسبی و انتگرالی و مشتق گیر ما می باشد که با انتخاب درست این ضرایب که اکثرا به صورت عملی و تجربی بدست می آیند می توان کنترلر PID را به نحوی تنظیم کرد که نه اورشوت و نه فراجهش بیش از حدی داشته باشیم و سیستم در وضعیت پایداری قرار گیرد.

 

اما پروژه و قسمت های مختلف آن:

  1. LCD 4*16
  2. Micro ATMEGA32
  3. Keypad 3*4
  4. Heater (OVEN)

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

  1. روتین کیبورد که وظیفه اسکن کیبور را دارد و با آن مقدرا دمای مطلوب SP را وارد می کنیم.
  2. روتین وقفه INT0 که در آن برنامه اسکن کیبور نوشته شده.
  3. روتین مبدل آنالوگ به دیجیتال ADC که دمای هیتر را تبدیل و برای میکرو آماده می کند.
  4. روتین LCD و حلقه بی نهایت که وظیفه نمایش اطلاعات و محاسبات مربوط به PID را انجام می دهد.

در روتین ext_int0_isr ابتدا وقفه سراسری غیر فعال شده و وارد حلقه شرطی می شود که شرط آنkey!=11 می باشد عدد 11 یعنی همان کد کلید # که به در اینجا به عنوان کلید ثبت تعریف شده و وقتی شرط برقرار شود یعنی ما کلید ثبت را فشار دادیم میکرو اعداد وارد شده را با یک ضرب و تقسیم ساده به هم می چسباند و به متغییر SP اختصاص داده می شود. از کلید * با کد 10 هم به عنوان کلید DEL استفاده شده.

در روتین adc_isr هم با استفاده از وقفه ADC عمل آنالوگ به دیجیتال انجام شده و دمای قرائت شده در متغییر temp قرار می گیرد.

در روتین main هم دستورات مربوط به پیکره بندی LCD و وقفه INT0 و ADC که همگی با Code Wizard انجام شد قرار گرفته است. در آخر هم عملیات مربوط به محاسبات کنترلر PID نوشته شده که به شرح زیر می باشد:

error=SP-temp; //H1
pterm=kp*error; //H2
iterm=(ki*error)+last_iterm;//H3
dterm=(error-last_error)*kd;//H4
D=(pterm+iterm+dterm)*100; //H5
if(D<1) D=1; //H6
if(D>1020) D=1020; //H7
last_iterm=iterm; //H8
last_error=error; //H9
D2=D; //H10
HD=D2/256; //change to int val [xx xx] //H11
LD=D2%256; //H12

جهت جلوگیری از شلوغی برنامه برنامه اسکن کیبورد را در یک فایل هدر جداگانه نوشتم و این فایل را با استفاده از دستور #include معرفی می کنیم و در برنامه با استفاده از دستور key = keypad(); کیبورد اسکن و عدد مربوطه قرائت می شود.

در روتین ext_int0_isr ابتدا وقفه سراسری غیر فعال شده و وارد حلقه شرطی می شود که شرط آنkey!=11 می باشد عدد 11 یعنی همان کد کلید # که به در اینجا به عنوان کلید ثبت تعریف شده و وقتی شرط برقرار شود یعنی ما کلید ثبت را فشار دادیم میکرو اعداد وارد شده را با یک ضرب و تقسیم ساده به هم می چسباند و به متغییر SP اختصاص داده می شود. از کلید * با کد 10 هم به عنوان کلید DEL استفاده شده.

در روتین adc_isr هم با استفاده از وقفه ADC عمل آنالوگ به دیجیتال انجام شده و دمای قرائت شده در متغییر temp قرار می گیرد.

در روتین main هم دستورات مربوط به پیکره بندی LCD و وقفه INT0 و ADC که همگی با Code Wizard انجام شد قرار گرفته است. در آخر هم عملیات مربوط به محاسبات کنترلر PID نوشته شده که به شرح زیر می باشد:

 

نقل قول
error=SP-temp; //H1 pterm=kp*error; //H2 iterm=(ki*error)+last_iterm; //H3 dterm=(error-last_error)*kd; //H4 D=(pterm+iterm+dterm)*100; //H5 if(D1020) D=1020; //H7 last_iterm=iterm; //H8 last_error=error; //H9 D2=D; //H10 HD=D2/256; //change to int val [xx xx] //H11 LD=D2%256; //H12

 

 

  1. خطای فعلی برابر است با مقدار مطلوب منهای دمای اندازه گیری شده.
  2. مقدار خطای فعلی در ضریب تناسبی Kp ضرب می شود و جمله اول معادله یعنی قسمت تناسبی را ایجاد می کند.
  3. مقدار خطای فعلی در ضریب انتگرالی Ki ضرب می شود و با مقدار خطای قبلی جمع می شود و جمله دوم معادله یعنی قسمت انتگرالی را ایجاد می کند. (همانطور که می دانید انتگرال حاصل جمع می باشد)
  4. مقدار خطای فعلی از خطای قبلی کم می شود و در ضریب مشتق گیر Kd ضرب می شود و جمله سوم معادله یعنی قسمت مشتق گیر را ایجاد می کند.
  5. حاصل جمع سه قسمت در عدد 100 ضرب شده و در متغییر D قرار می گیرد.
  6. شرطی جهت جلوگیری از کوچکتر شدن D
  7. شرطی جهت جلوگیری از بزرگتر شدن D از 1020 (ماکزیمم OCR0 تایمر)
  8. برای مرحله بعدی خطای فعلی انتگرالی در درون متغییر خطای قبلی انتگرالی قرار می گیرد.
  9. برای مرحله بعدی خطای فعلی مشتق گیر در درون متغییر خطای قبلی مشتق گیر قرار می گیرد.
  10. کپی مقدار D
  11. عدد درون D2 یک عدد در حوزه شانزده بیتی می باشد که با یک عمل ضرب و تقسیم ساده به اجزای هشت بیتی سبک و سنگین تجزیه می کنیم

بعد از اجرای دستورات مرحله 10 و 11 ORC1BL و ORC1BH که حاصل نتیجه عملیات PID می باشد بارگذاری شده و موج PWM کنترل شده را ایجاد و به استفاده از یک تقویت ترانزیستوری به هیتر اعمال می شود و بنابراین دمای هیتر همواره روی مقدار SP باقی خواهد ماند.

اصول کار مدار: بعد اجرای شبیه سازی سیستم شروع کار میکند تا دمای هیتر را به دمای SP برساند. برای تغییر دادن SP می توانید کلید فشاری را کلیک کرده تا یک وقفه رخ دهد و برنامه وارد روتین اسکن کیبورد شود در اینجا شما می توانید SP را از 0 تا 99 وارد کنید جهت تصحیح کلید * را فشار دهید و برای ثبت نهایی SP کلید # را فشار دهید.

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

image.gif

  • Like 1
لینک به دیدگاه
×
×
  • اضافه کردن...