پروژه کنترل دمای المنت DC به صورت pid

به نام خدا و باسلام خدمت دوستان

در این مطلب قصد دارم پروژه کنترلر دما به صورت pid  را خدمت دوستان معرفی کنم،در این پروژه ابتدا سیستم را شناسایی میکنیم و از سیستم نمونه برداری میکنیم و سپس نمونه هارا وارد نرم افزار متلب میکنیم و در متلب با استفاده بلوک ها و محاسباتی تابع تبدیل سیستم را محاسبه می کنیم و سپس این تابع تبدیل را  وارد بلوک سیمولینک متلب میکنم و یک کنترل کندده pid قرار می دهیم سپس با تیون کردن ضرایب بهینه را بدست می آوریم و در مرحله بعد از تعریف pid  استفاده کرده و آن را به کد به زبان c تبدیل میکنیم و ضرایب را به برنامه میکرو در کدویژن انتقال می دهیم سپس میکروکنترلر با استفاده از pwm دما کنترلر می کند،دقت کنید که برای اجرای کنترلر pid حتما باید سیستم فیدبک دار داشته باشید به عنوان مثال در این پروژه بنده یک المنت قرار دادم (۱۲ ولتی دست ساز،که البته شما روش کار را یادبگیرید در تمام سیستم ها می توانید اجرا کنید)و یک سنسور دمای دیجیتال ds1307  که این سنسور دما نقش فیدبک را دارد.

برای درست کردن المنت میتوانید سیم مخصوص المنت را تهیه کنید که مخصوص برق ۲۲۰ ولت است و ۱۱ دور آن را دور خودکار بپیچید(در این پروژه بنده به همین شکل است)وبا استفاده از ترانزیستور tip122 ان را  با ۱۲ ولت درایو کنید.

شماتیک پروژه به صورت زیر است :

در مدار فوق دو کلید برای up  و down هم قرار دارد که میتوانید مقدار setpoint  را تغییر دهید…

برای تعیین ضرایب کنترل کننده pid به غیر از نرم افزار متلب میتوانید از روش زیگلر-نیکولز استفاده کنید که به صورت زیر است:

نحوه تعیین ضرایب کنترل کننده pid برای یک موتور به صورت زیر است است که شما میتوانید این روند را برای پروژه دما نیز تعمیم بدهید(پروژه کنترل دور موتور pid هم انجام شده است) :

ابتدا موتور مورد نظر را شناسایی میکنیم به طوری که هر ثانیه یک بار با دادن ولتاژ  های مختلف به موتور دور را اندازه گیری میکنیم و نمونه ها را وارد نرم افزار متلب میکنیم و با استفاده از دستور ident موتور مورد نظر را شناسایی میکنیم

که نمونه ها ،برای یک موتور صنعتی به شرح زیر است:

x=[50    ۶۰   ۷۰   ۸۰   ۹۰  ۱۰۰  ۱۱۰  ۱۲۰  ۱۳۰  ۱۴۰  ۱۵۰  ۱۶۰  ۱۷۰  ۱۸۰  ۱۹۰  ۲۰۰  ۲۱۰  ۲۲۰  ۲۳۰ ]

y=[900  ۱۰۲۰ ۱۳۰۰ ۱۸۰۰ ۲۱۰۰ ۲۵۰۰ ۲۹۰۰ ۳۴۰۰ ۳۹۵۰ ۴۳۰۰ ۴۷۰۰ ۵۱۰۰ ۵۶۰۰ ۶۱۰۰ ۶۳۰۰ ۶۷۰۰ ۶۸۰۰ ۶۹۰۰ ۷۰۰۰]

پس از وارد کردن مقادیر که ماتریس x مقادیر ولتاژ و ماتریس y مقادیر دور موتور است به نرم افزار متلب وارد بخش  ident   در شکل ۱۰ می شویم :

شکل۱۰- پنجره قسمت ident

در پنجره شکل۱۱  در بلوک ۱ گزینه imprt data را انتخاب میکنیم و در بلوک ۲ ترانهاده ماتریس های xوy را وارد میکنیم و در بلوک ۳ دکمه import را می فشاریم که پنجره شکل ۱۱ گشوده می شود

شکل۱۱-پنجره قسمت ident و process models

در این پنجره در بلوک ۴ گزینه process models  را انتخاب می کنیم و در پنجره جدید تنظیمات را مانند بلوک ۵ انجام می دهیم و یک قطب برای موتور انتخاب می کنیم و در بلوک ۶ تخمین را  اعمال می کنیم که پنجره شکل۱۲ به نمایش در می آید

شکل ۱۲-پنجره قسمت ident  و رسم نمودار موتور

در پنجره شکل ۱۲ روی بلوک هفت دوبار کلیک میکنیم و تابع تبدیل موتور مورد نظر  در بلوک ۸ به نمایش در می آید و همینطور با زدن تیک بلوک ۹ نمودار بلوک ۱۰ به نمایش در می آید  که نمودار موتور مورد نظر را با تخمین ۸۸٫۸۲ درصد نمایش می دهد

حال تابع تبدیل مورد نظر را با استفاده از دستور c2d و با سرعت نمونه برداری ۱ ثانیه به فضای گسسته z برده و ضرایب pid را برای آن مانند شکل زیر تعیین میکنیم

شکل۱۳- انتقال تابع تبدیل از فضای s به فضای z

پس از محاسبه تابع تبدیل در فضای z وارد قسمت سیمولینک متلب میشویم و شکل زیر را رسم میکنیم

شکل۱۴-شکل رسم شده در سیمولینک برای موتور

حال بر روی بلوک pid دوبار کلیک میکنیم و ضرایب را مانند شکل زیر tune میکنیم

 

شکل۱۵- Tune ضرایب برای بهترین حالت ممکن

و پس از طراحی بهینه، دکمه آپدیت را می فشاریم و سپس پنجره شکل۱۶ به نمایش در می آید که ضرایب محاسبه شده را به صورت بهینه ترین شکل ممکن نمایش می دهد

 

 

شکل۱۶-ضرایب محاسبه شده برای موتور مورد نظر

و در مرحله آخر کافیست تا ضرایب فوق را در برنامه میکرو کنترلر قرار دهیم .

فیلم نحوه عملکرد پروژه به صورت زیر است :

دوستان در فیلم منظور از مقدار ocr همان مقدار دیوتی سایکل موج pwm است که ۱۰ بیت است.

لیست قطعات مورد استفاده :

۱-سنسور دمای ds18b20

۲-میکرو کنترلر atmega16

۳-lcd کاراکتری ۲ در ۱۶

۴-ترانزیستور tip122

۵-تغذیه و المنت دی سی

و دیگر قطعات لازم مثل مقاومت ، led ، خازن ,پین هئر مادگی و نری و ترمینال فونیکس

«این قطعات رو از هر فروشگاهی میتونید تهیه کنید»

توضیحات تنظیمات میکروکنترلر:

فرکانس کاری میکرو ۸ مگا هرتز است که میتوانید از اسیلاتور داخلی استفاده کنید و فیوز بیت ها رو به صورت زیر تنظیمات کنید:

کلاک سلکت صفر برابر ۰

کلاک سلکت یک برابر ۰

کلاک سلکت دو برابر ۱

کلاک سلکت سه برابر ۰

و در صورت اتصال کریستال خارجی ۸ مگا هرتز تمامی کلاک سلکت هارو ۱ کنید

توضیحات بیشتر در مورد نحوه پروگرام کردن میکرو از این لینک ببینید.

برا دریافت پروژه میتوانید اقدام کنید و سوالی بود در قسمت نظرات در خدمتم.

 

مطالب پیشنهادی:

بخش نرم افزار پروژه ردیاب : برنامه اندرویدی tracker (ردیاب) و نمایش مختصات

سخت افزار پروژه ردیاب : ارسال موقعیت جغرافیایی روی سرور از طریق ماژول A7 و LPC1768

لینک مطلب بخش نرم افزار پروژه ماژول بلوتوث که تحت #C نوشته شده است.

لینک مطلب بخش سخت افزار پروژه ارتباط ماژول بلوتوث با میکروکنترلر lpc1768 با برنامه اندرویدی و #C )

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

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

Subscribe
Notify of
guest

6 نظرات
Inline Feedbacks
View all comments
عادل
عادل
5 years ago

سلام
تشکر میکنم از مطلب مفیدی که در این پست قرار دادید
میخواستم بدونم با این برنامه میشه دمای یک مخزن آب رو با استفاده از یک المنت ثابت نگه داشت؟
(بدون استفاده از ترموستات)
مثلا دمای مخزن آب ما دائما در دمای ۶۰ درجه باقی بمونه؟(البته بدون قطع و وصل با یک ترموکوپل)

امیرحشین
امیرحشین
5 years ago

سلام خدا خیرتون بده من این پروژه رو می خوام با چی شماره ای زنگ بزنم ۰۹۳۸۸۲۱۶۴۸۰این کنترلو برای دستگاه گرم کن شکلات می خوام می خوام دما رو روی ۷۰ تقریبا ثابت نگه دارم

نادر افشار
نادر افشار
2 years ago

درود فرض کنید بخواهیم از مدار طراحی شده شما در کنترل دمای یک هویه لحیم کاری یا (هویه هوای گرم) در رنج ۱۵۰ تا ۵۰۰ درجه سانتیگراد استفاده کنیم چه تغییراتی در نرم افزار – در مدار – در سنسور دما باید اعمال گردد اگر اینکار ممکن است لطفا هزینه را هم اعلام نمایید.

6
0
Would love your thoughts, please comment.x