طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
ورودی این فرکانس متر قادر است با ولتاژهای 12 تا 500 ولت AC کار کند. ماکزیمم فرکانس اندازه گیری 20KHz می باشد. همچنین با تعیین نرخ نمونه برداری می توانید فرکانس را تا دو رقم اعشار اندازه گیری نمائید.این پروژه در اصل یک شمارنده می باشد که می توان عبور مرور افراد از یک گیت را شمارش کرد، شمارنده هم می تواند به صورت بالا شمار و هم پایین شمار کار کند. همچنین توسط شدت نور یک عدد LED می‌توان سنسور فرستنده و گیرنده را در یک راستای مستقیم تنظیم کرد. سنسورها ار نوع مادون قرمز با برد تقریبی 120cm می باشد.این پروژه یک دماسنج ساده می باشد که توانایی اندازه گیری دما از منفی 40 تا مثبت 120 درجه سانتی گراد با دقت دو رقم اعشار را دارد.اندازه گیری ظرفیت خازن از 1pF تا 1uF، سلف از 1nH تا 1H و فرکانس از 1Hz تا 4MHz تنها با یک میکرو سوئیچ و همچنین کلیدی برای کالیبراسیون اتوماتیک.یک سیستم امنیتی که دارای یک کاربر اصلی می باشد و توسط این کاربر می توان کاربرهای متعددی با پسورد های مجزا تعریف نمود. می توان تا 100 کاربر و 100 پسورد مختلف را تعریف، و در قسمت ورود هر یک از اعضاء که نام کاربری و رمز عبور خود را بدرستی وارد کند یک رله به همراه LED روشن خواهد شد.
پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr

MCP-1

پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr
پروژه شمارش افراد با سنسور مادون قرمز و avr

MCP-6

پروژه شمارش افراد با سنسور مادون قرمز و avr
پروژه دماسنج ساده با avr

MCP-29

پروژه دماسنج ساده با avr
پروژه خازن سنج و سلف سنج-LC متر با avr

MCP-14

پروژه خازن سنج و سلف سنج-LC متر با avr
پروژه سیستم امنیتی با قابلیت تعریف کاربر و رمز عبور با avr

MCP-12

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

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

www.picpars.com پروژه کنترل دمای هیتر با استفاده از کنترل کننده PID با میکروکنترلر AVR 193

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

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

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

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


چه موقع باید از کنترلر 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 را انجام می دهد.

 جهت جلوگیری از شلوغی برنامه برنامه اسکن کیبورد را در یک فایل هدر جداگانه نوشتم و این فایل را با استفاده از دستور #include <keypad.h> معرفی می کنیم و در برنامه با استفاده از دستور 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(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

 

  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 کلید # را فشار دهید.

این پروژه همراه با توضیحات آن تنها در وب سایت www.picpars.com به صورت متن باز ارئه شده و کپی برداری از آن تنها با ذکر منبع امکان پذیر می باشد.

با تشکر فراوان سید محسن قاسمیان

ورژن نرم افزار ها: CodeVisionAVR V2.04.4a  و Proteus 7.7 sp2 Professional

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 108 | حجم 76 کیلوبایت | دانلود 10768 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود پروژه کنترل دمای هیتر با استفاده از کنترل کننده PID با میکروکنترلر AVR

منبع www.picpars.com  پسورد: www.picpars.com

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال يكشنبه، 10 بهمن ماه، 1389    نویسندهنویسنده: مدیریت    نظرات 31 نظر    بازدید بازدید [ 57664 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان   

در ارتباط با این مطلب پروژه های آماده زیر جهت خرید موجود است
پروژه کنترل اتوماتیک کولرهای آبی با ریموت کنترل و avr
کد پروژه: MCP-4
عنوان: پروژه کنترل اتوماتیک کولرهای آبی با ریموت کنترل و avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
با استفاده از میکروکنترلر Atmega8‌، سنسور دیجیتال دما DS18B20 و LCD‌ متنی شما به راحتی می توانید کولر خانه تان را توسط کنترل تلویزیون و کلید های تعبیه شده، در مد های مختلفی برنامه ریزی کنید، از ویژگی آن می توان به کاهش مصرف انرژی در کولرها آبی اشاره نمود.
پروژه کنترل بی سیم دور موتور برحسب دما با avr
کد پروژه: MCP-8
عنوان: پروژه کنترل بی سیم دور موتور برحسب دما با avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
با استفاده از ماژول HM-R و HM-T ابتدا به کمک سنسور LM35 دما اندازه گیری شده و به ماژول HM-T ارسال می شود، در سمت گیرنده سیگنال توسط HM-R دریافت شده و بر اساس مقدار دما دور موتور به صورت PWM کنترل می شود. همچنین قابلیت تعریف رنج دمای کاری برای موتور نیز امکان پذیر می باشد.
پروژه ولت متر DC و دماسنج با avr
کد پروژه: MCP-16
عنوان: پروژه ولت متر DC و دماسنج با avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
اندازه گیری ولتاژ DC از 0 تا 24 ولت با سه رقم دقت (اعشار) و اندازه گیری دما از منفی 20 تا مثبت 100 درجه سانتی گراد. دارای نمایشگر السیدی
پروژه کنترل دور موتور با PWM برحسب دما با avr
کد پروژه: MCP-18
عنوان: پروژه کنترل دور موتور با PWM برحسب دما با avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
بر اساس رنج حداقل و حداکثر تعریف شده توسط کاربر و با توجه به دمای محیط، سرعت موتور بین 10 تا 99 به صورت خودکار تنظیم می شود.
پروژه کنترل سروو موتور از 0 تا 180 درجه با avr
کد پروژه: MCP-2
عنوان: پروژه کنترل سروو موتور از 0 تا 180 درجه با avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها.
پروژه ریموت کنترل 433-315 مگاهرتز تک کاناله با قابلیت لرنینگ
کد پروژه: MCP-30
عنوان: پروژه ریموت کنترل 433-315 مگاهرتز تک کاناله با قابلیت لرنینگ
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
این پروژه یک مدار گیرنده رادیویی 433 یا 315 مگاهرتز می باشد که قابلیت تعریف و ذخیره سازی انواع ریموت کنترل هایی از قبیل (ریموت دزدگیر ماشین، پارکینگ، بالابر و ...) را دارد. می توان رله مربوطه را روی هر کلید دلخواه تعریف نمود.

مرتبط باموضوع :          مطالب بیشتر در این موضوع

 ماشین حساب ساده به زبان سی با میکروکنترلر AVR  [ سه شنبه، 19 بهمن ماه، 1389 ] 52291 مشاهده
 ساعت دقیق با وقفه تایمر یک به زبان سی CodeVision  [ شنبه، 16 ارديبهشت ماه، 1391 ] 36518 مشاهده
 کنترل رله با AVR و سی شارپ C (اینترفیس)  [ چهارشنبه، 19 مرداد ماه، 1390 ] 22417 مشاهده
 پروژه اتصال کیبورد کامپیوتر به میکرو کنترلر AVR با کدویژن  [ يكشنبه، 14 شهريور ماه، 1389 ] 31384 مشاهده
 دانلود پروژه کامل ماشین حساب مهندسی با AVR با (Codevision)  [ پنجشنبه، 4 شهريور ماه، 1389 ] 55642 مشاهده
نام شما:
ایمیل شما:
در مورخه : دوشنبه، 28 شهريور ماه، 1390

سلام

با تشکر از برنامه بسیار جالبتون

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

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : پنجشنبه، 31 شهريور ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

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

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : پنجشنبه، 31 شهريور ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

سلام به دوستان عزیز.

من این برنامه رو با بیسیک پیاده کردم البته بدون کیپدوالبته فعلا.یعنی دمارو تو برنامه یه عدد ثابت قرار میدم بعد از کامپایل واجرا به عنوان ست پوینت دما به سمت اون میره.مشکل اینجاس که تو دماهای کم  5 درجه و تا دمای 100 درجه  که به ست پوینت میدم 20 درجه اختلاف دما دارم.لطفا راهنماییم کنید(ایشا... بتونم کاملش کنم وتو سایت قرار بدم).شما pwm خروجی رو برابر با چی قرار دادید.من برابر با D قرار دادم.شما چطور  هم hd ,ld رو به pwm دادید.من از ocr2 واز پایه portd.7 استفاده می کنم

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : جمعه، 1 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

واقعا یه نفر تو این سایت نیست جواب ادم رو بده؟

 

جوابیه ها

نام شما:
ایمیل شما:
در مورخه : شنبه، 2 مهر ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

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

نکته اول: دمای پیش فرض هیتر روی 25 درجه هست و وقتی شما ست پوینت رو به 5 کاهش میدهید پس باید در propertic هیتر در قسمت Ambient Temperature دمای محیط رو روی صفر درجه بزارید.

نکته دوم: ضرایب اولیه PID در برنامه برای دمای مطلوب 68 تنظیم شده مطمئنا برای دما های دیگر باید این ظرایب کمی تغییر کنند. باید توجه داشته باشیم که این ضرایب به صورت تجربی یعنی با آزمون و خطا بدست آمده اند و قانونا شما باید از طریق محاسبات علمی این ضرایب را بدست آورید تا سیستم با دقت خیلی بالاتری کار کند.

اما در مورد HD , LD در اینجا من کار خاصی نکردم فقط محتوای متغییر D که 16 بیتی هستش رو به دو متغییر 8 بیتی سبک و سنگین تجزیه کردم و دادم به PWM این خاصیت زبان C هست و توی بیسک نیازی به این کار نیست چون خود کامپایلر این کار رو براتون انجام میده.

 

امیدوارم توضیحات کامل باشه

با تشکر

 

ارسال جوابیه

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : شنبه، 2 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

سلام واقعا ممنون که بالاخره جواب دادید.توضیحاتتون مطمءنا کامله ولی چون من زبان C کار نکردم منظور شمارو خوب درک نکردم.برنامه ای که من با بیسیک نوشتم البته بدون کیپد اینه لطفا راهنماییم کنید مشکل من از کجاست که دما 4 الی 6 درجه بیشتر از میزان SETPOINT میرسه؟بازم متشکرم.

'------------------------------  #include <mega32.h> ---------------------------
$regfile = "m32def.dat"
'$crystal = 11059200
$crystal = 4000000
$baud = 9600
'--------------------------- #include <lcd.h> ----------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
Db7 = Portb.7 , Rs = Portb.0 , E = Portb.2
'----------------------------  #include <keypad.h> -----------------------------
'Config Kbd = Portb

' char buffer[64];
 'float SP=50,temp,error,last_error,last_iterm,kp=.025,ki=.0000075,kd=1;
' float pterm,iterm,dterm,D;
'unsigned int  D2,LD,HD;

Dim Setpoint As Byte , Temp As Single , Error As Single , Last_error As Single
Dim Last_iterm As Single , Kp As Single , Ki As Single , Kd As Single
Dim Pterm As Single , Iterm As Single , Dterm As Single , D As Single
Dim D2 As Word , Lowd As Word , Highd As Word , A As Word , B As Single , C As Word , E As Word
Setpoint = 80
Kp = 0.020                                                  '0.025
Ki = 0.0000075
Kd = 1
C = 0
E = 0
'--------   interrupt [EXT_INT0] void ext_int0_isr(void)      ------------------
'Config Single = Scientific , Digits = 7
Config Timer2 = Pwm , Pwm = On , Compare Pwm = Clear Up , Prescale = 64

'-----------   interrupt [ADC_INT] void adc_isr(void)---------------------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
' Config Adc = Single , Prescaler = Auto , Reference = Internal
 Start Adc
Enable Interrupts

'-------------------------------------------------------------------------------



Do

'----------------------------    get tempreture   ------------------------------
A = Getadc(0)
B = A / 200
Temp = B * 100
'---------------------------  while(1) -----------------------------------------

            Error = Setpoint - Temp
            Pterm = Kp * Error
            Iterm = Ki * Error
            Iterm = Iterm + Last_iterm
            Dterm = Error - Last_error
            Dterm = Dterm * Kd
            D = Pterm + Iterm
            D = D + Dterm
            D = D * 100
            If D < 1 Then
            D = 1
            End If
            If D > 1020 Then
            D = 1020
            End If
            Last_iterm = Iterm
            Last_error = Error
            D2 = D
            Highd = D2 / 256                                'change to int val [xx xx]
            Lowd = D2 Mod 256

'-----------------   sprintf(temp,SP,pterm,iterm,dterm)   ----------------------
'Ocr2 = D
C = C + 1
E = C Mod 2
If E = 0 Then
Ocr2 = Highd                                                'D
Else
Ocr2 = Lowd                                                 ' - Highd
End If
'-------------------------------------------------------------------------------
                                                    'Lowd - Highd'D2
Locate 1 , 1 : Lcd Temp
'Locate 1 , 1 : Lcd D
Locate 2 , 1 : Lcd "KP= " : Lcd Pterm
Locate 3 , 1 : Lcd "KI= " : Lcd Iterm
Locate 4 , 1 : Lcd "KD= " : Lcd Dterm


 Loop
 End
جوابیه ها

نام شما: الیا
ایمیل شما: elia_abbasi@yahoo.com
در مورخه : چهارشنبه، 24 خرداد ماه، 1391

با سلام

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

ارسال جوابیه

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : يكشنبه، 3 مهر ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

دوست عزیز شما ست پوینت رو روی 68 بزارید و بعد اجرا کنید. ببینید چقدر اختلاف دارید؟

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : يكشنبه، 3 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

اختلاف دما میرسه به 5.5

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : يكشنبه، 3 مهر ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

دوست عزیز من بیسیک زیاد کار نکردم و خیلی اش یادم رفته ولی فکر کنم باید Ocr2 رو برابر با D قرار بدهید. در ضمن Kp = 0.020 قرار دادید که توی برنامه سی مقدرا اون 0.025 هستش که این خودش تقزیبا 0.5 درجه اختلاف درست میکنه.

در ضمن شما می تونید با بالابردن kp به صورت تدریجی به مقدار مطلوب نزدیک بشید

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : يكشنبه، 3 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

سلام.متشکر که جواب دادید.

با kp=.025  اختلاف دما 5 درجه هست.ولی با kp=.020  اختلاف دما 4 درجه هست.

با ocr2=d  اختلاف دما 11 درجه هست.

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


E = Highd + Lowd
E = E / 4
Ocr2 = E

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

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : يكشنبه، 3 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

ازتون ممنونم.
چندتا سوال برام پیش اومده  ما تو کنترلر pid  طبق شکلی که براتون قرار میدم
Pterm = Kp * Error  که به نظر درسته چون تو شکل هم  p=kp*e
و همچنین در مورد Iterm = (Error + Last_iterm)*ki که طبق شکل ki ضرب در انتگرال خطا(که همان مجموع خطاهاست)

اما در مورد Dterm = Error - Last_error*kd   متوجه نمیشم که چرا این رابطه رو نوشتین.مگه طبق شکل
مقدار ترم دی برابر با مشتق خطا نسبت به زمان که در اخر ضربدر kd شده نیست؟ پس چرا شما نوشتید
Dterm = Error - Last_error*kd  رابطه بین این دورو من متوجه نمیشم.ممنون میشم راهنماییم کنید.راستی چه شکلی باید عکس رو براتون اپلود کنم؟بازم ممنون

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : دوشنبه، 4 مهر ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

سلام دوست عزیز برنامه تون رو چک کردم یه سری اشکال داشت:

فرکانس برنامه 4مگا هستش و فرکانس کاری تایمر باید 15.625 کیلوهرتز باشه بنابراین Prescale=256 باید باشه.

شما از تایمر2 استفاده کردید در صورتی که باید از تایمر1 استفاده کنید (16بیتی)

همچنین PWM بابد 10 بیتی انتخاب شود

مشخصات زبان C برای پیکره بندی تایمر:

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Fast PWM top=0x03FF
// OC1A output: Inverted
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off

پیکره بندی به زبان بیسیک:

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 256

و اگر اشتباه نکم باید Compare1a = Highd
Compare1b = Lowd

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

برای ارسال فایل می توانید به ایمیل سایت picpars [at] gmail [dot] com بفرستید.

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : دوشنبه، 4 مهر ماه، 1390

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

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : چهارشنبه، 6 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

دستت درد نکنه .از همون دستوری که بالا گفتید استفاده کردم.بالاخره درست شدsmiley

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : پنجشنبه، 7 مهر ماه، 1390توسط
(مشخصات کاربر raminrayat | ارسال پیغام شخصی)

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

اونم اینه که من از تایمر 1 واسه خوندن دما از سنسور smt160 که خروجی pwm داره استفاده کردم.حالا به نظر شما میشه از تایمر1 هم برای خوندن دما وهم برای ایجاد pwm  استفاده کرد؟

Config Timer1 = Timer , Prescale = 1
Enable Timer1

 

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 256

ارسال جوابیه

نام شما:
ایمیل شما:
در مورخه : دوشنبه، 11 مهر ماه، 1390

از برنامه های جالب شما سپاسگزارم

ارسال جوابیه

نام شما: mojtaba
ایمیل شما: zamanzada.mojtaba@yahoo.com
در مورخه : دوشنبه، 8 خرداد ماه، 1391

 سلام

می خواستم بپرسم اسم این هیتر سه پایه در بازار چیست

خیلی فوری جواب می خواستم با تشکر

ارسال جوابیه

نام شما: marichy
ایمیل شما: maryamvalirezai@yahoo.com
در مورخه : شنبه، 3 فروردين ماه، 1392

سلام.ميتونين در كاربرد كنترل پي اي دي در ربات مسير ياب راهنماييم كنيدسوال

ارسال جوابیه

نام شما: سحر
ایمیل شما: atashwebcam@yahoo.com
در مورخه : پنجشنبه، 26 ارديبهشت ماه، 1392

سلام میشه روش تعیین ضرایب (Ki , Kp , Kd ) که همون روش سعی وخطا هست توضیخ بدید.

ja;v

ارسال جوابیه

نام شما: محمد
ایمیل شما: mohammad_shahmirzayi@yahoo.com
در مورخه : يكشنبه، 9 تير ماه، 1392

سلام

ممنون از برنامه ی خوبتون.

من جندتا سوال ازتون داشتم، اول اینکه چرا بعداز محاسبات PID مقادیر رو در 100 ضرب کردید؟

دومم اینکه اگر میشه در مورد این دوخط یکم توضیح بدید که چطوری نوشتید:

iterm=(ki*error)+last_iterm; //H3
            dterm=(error-last_error)*kd; //H4

پیشاپیش ممنون

 

ارسال جوابیه

نام شما: HOAL
ایمیل شما: h.golshik@yahoo.com
در مورخه : جمعه، 12 مهر ماه، 1392

پروژه کاربردی و خوبیه. من می خوام برای کنترل یک موتور با مد PWM میکروکنترلر از کنترلر PID استفاده کنم که با labview هم ارتباط داره (برای نمایش مقادیر و گراف ها) . به نظر شما کدوم بهتره؟

1-کنترلر PID در میکرو طراحی بشه و ضرایب کنترلر از طریق labview آپدیت بشه

2- کل کنترلر و ضرایب در labview پیاده سازی شده و خروجی نهایی مثلا برای کنترل موتور به pwm میکرو داده بشه؟

 ممنون از سایت خیلی خوب و حرفه ای شما

ارسال جوابیه

نام شما: farhad
ایمیل شما: controlengineer1369@gmail.com
در مورخه : شنبه، 10 خرداد ماه، 1393

سلام ميشه در مورد ساخت كنترل موتور dc با كنترلرpid آنالوگ كمكم كنيد؟مرسي

ارسال جوابیه

نام شما: mohamadsafi
ایمیل شما: mohamad.safipoor@yahoo.com
در مورخه : چهارشنبه، 19 آذر ماه، 1393توسط
(مشخصات کاربر mohamadsafi | ارسال پیغام شخصی)

با سلام خدمت شما من می خوام بدونم برای ساخت عملی پروژه هیتر با کنترل کننده pidبرای وصل کردن هیتر به میکرو باید چه کار کرد؟ باید از یک سنسور دما استفاده کرد که دمارو به ولتازتبدیل کنه ؟

با تشکراز شما

جوابیه ها

نام شما: geli
ایمیل شما: gelavizhgoudarzi@gmail.com
در مورخه : يكشنبه، 6 ارديبهشت ماه، 1394توسط
(مشخصات کاربر geli | ارسال پیغام شخصی)

به نظرم بايد از رله استفاده كني واسه اتصال فن و هيتر به ميكرو

ارسال جوابیه

ارسال جوابیه

نام شما: ali
ایمیل شما: ali.savani72@gamil.com
در مورخه : چهارشنبه، 26 آذر ماه، 1393

سلام این هیتر توی بازار چیه؟؟؟  جووووووون هرکی دوست داری سری جوابمو بده 

خییلیی چاکریم )

جوابیه ها

نام شما: علی
ایمیل شما:
در مورخه : چهارشنبه، 26 آذر ماه، 1393توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

چیز خاصی نیست، هیترهای معمولی تو بازار ...

ارسال جوابیه

ارسال جوابیه

نام شما: دارینا
ایمیل شما: whiterose_yas@yahoo.com
در مورخه : سه شنبه، 25 فروردين ماه، 1394توسط
(مشخصات کاربر darina | ارسال پیغام شخصی)

سلام اول از همه تشکر میکنم بابت سایت خوبتون و بابت پروژه ها .من ازتون چند تا سوال داشتم من دنبال ساخت یک وسیله هستم که ابتدا دما تا یک حدی زیاد و بعد سرد کنه به نظر شما از چه نوع هیتری باید استفاده کنم میخوام انعطاف پذیر باشه و برای سرد کردن باید چکار کنم؟ دوم اینکه میشه در مورد کنترل دما با pwm کمی توضیح دهید و کلا در مورد سخت افزارش یکم توضیح بیشتری بدید و سوم اینکه میشه به جای استفاده از کنترلر PID از کنترلر های دیگه مثل pi استفاده شود؟اگر جواب من بدید ممنونت میشم چون خیلی کارم گیره و فرصتم محدود

ارسال جوابیه

نام شما: Morteza mahdavi
ایمیل شما: morteza.mahdavimz@gmail.com
در مورخه : چهارشنبه، 26 فروردين ماه، 1394

با عرض سلام و خسته نباشید خدمت دوستان عزیز

در مورد پروژه کنترل دمای هیتر با استفاده از کنترل کننده PID با میکروکنترلر AVRسه تا سوال داشتم:

1-ضرایب مربوط به sp=68 از چه روشی محاسبه شده؟!

2-آیا این شبیه سازی قابل  پیاده سازی در عمل هم هست؟

3-اگر گروه شما بخواد یه همچین پروژه ای تو عمل پیاده سازی کنه چقدر حدودا هزینه داره؟

ارسال جوابیه

نام شما: geli
ایمیل شما: gelavizhgoudarzi@gmail.com
در مورخه : يكشنبه، 6 ارديبهشت ماه، 1394توسط
(مشخصات کاربر geli | ارسال پیغام شخصی)

سلام براي ساخت اين كنترل كننده براي ابعاد كوچيك(مثلا در حد كنترل دماي يك ماكت به جاي اتاق واقعي) براي هيترش بايد چيكار كرد؟ممنون ميشم اگه كمك كنين

ارسال جوابیه

نام شما: Emiyah
ایمیل شما: Emiyah.psy@gmail.com
در مورخه : يكشنبه، 7 تير ماه، 1394توسط
(مشخصات کاربر emiyahPSY | ارسال پیغام شخصی)

سلام و ممنون از برنامه ای که قرار دادید

من این برنامه رو اگه بخوام با Atmega16 انجام بدم باید چکار کنم؟

تابع atmega16.h رو جایگزین کردم ولی تو پروتئوس این ارور رو میده

writing to memory location 0x0461 out size of memory size 0x0460

اگر کسی میدونه لطفا راهنمایی کنه. خیلی کارم گیرشه

ارسال جوابیه

 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]