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

لطفا از طریق این لینک برای ثبت نام اقدام نمایید.

    
You have (1) Unread PM; Click The Icon To Read It You have a new PM
جدیدترین موضوعات انجمنها


بازگشت   متارو > ميكروكنترلر > AVR > پروژهای عملی با AVR

کنترل دور موتور dc با pid کنترلر

پروژهای عملی با AVR

پاسخ
 
LinkBack ابزارهای موضوع نحوه نمایش
قدیمی 06-04-2010, 07:28 PM   #1
پیش فرض کنترل دور موتور dc با pid کنترلر

در این پروژه سرعت یک موتور dc با استفاده از pid کنترلر با دقت خوبی کنترل می شه. سیستم کنترل هم از نوع حلقه بسته است و در این پروژه برای اندازه گیری سرعت از یک اپتو کپلر که به شفت موتور متصل شده استفاده شده .
پس از اندازه گیری سرعت که در مدت زمان 0.1 ثانیه اندازه گیری می شه توسط کنترل کننده این سرعت با سرعت مطلوب ورودی که توسط یک پتانسیومتر به میکرو اعمال می شه مقایسه شده و در صورت وجود خطا سیستم کنترل این خطا را در کمتر 1 ثانیه بر طرف میکنه!
از قابلیتهای این طرح امکان تغییر پارامترهای کنترل کننده مانند ki , kd , kp و تغییر سرعت ورودی و تغییر جهت حرکت موتور و نمایش موارد فوق بر روی lcd است.
سیستم تغذیه این طرح توسط برق شهر تأمین میشه. برای این جهت از یک ترانس 220/12دوبل و پل دیود برای ولتاژ dc تغذیه و آی سی lm2576 برای کنترل ولتاژ موتور dc مورد نظر در نظر گرفته شده ...
فعلاً برنامشو براتون میزارم اکه خاستین بگین تا نقشه شماتیکشم براتون میل کنم !
فایل های پیوست شده
نوع فایل: rar mt.rar (2.8 کیلو بایت, 351 نمایش)
mohammad_reza آنلاین نیست.   پاسخ با نقل قول
7 کاربر از mohammad_reza به خاطر این مطلب مفید تشکر کرده اند
قدیمی 06-05-2010, 09:44 AM   #2
پیش فرض پاسخ : کنترل دور موتور dc با pid کنترلر

اگر لطف بفرمایید و شماتیک مدار را در Proteus بکشید و شبیه سازی آنرا به همراه برنامه آن قرار دهید برای یادگیری سایر دوستان بسیار مفید خواهد بود.
__________________
خدایا... می خواهم آنگونه زنده ام نگه داری که نشکند دلی از زنده بودنم و آنگونه مرا بمیرانی که کسی به وجد نیاید ازنبودنم

خدایا ... به من زیستنی عطا کن که در لحظه مرگ،
بر بی ثمری لحظه ای که برای زیستن گذشته است، حسرت نخورم و مُردنی عطا کن که، بر بیهودگیش، سوگوار نباشم.

بگذار تا آن را، خود انتخاب کنم، اما آنچنان که تو دوست می داری ...


-------------------------------------------------

برای تشکر فقط از دکمه استفاده کنید

با سپاس
Razavi آنلاین نیست.   پاسخ با نقل قول
اين کاربران از Razavi به خاطر این مطلب مفید تشکر کرده اند
قدیمی 06-05-2010, 11:30 AM   #3
Arrow پاسخ : کنترل دور موتور dc با pid کنترلر

دوست عزیز چون سیستم کنترل این طرح بصورت حلقه بسته عمل میکنه نیاز به قطعه ای جهت تبدیل سرعت موتور به پالسهای ساعت (اینکودر) و اعمال آن به میکرو برای اندازه گیری سرعت است ، اما در پروتئوس فکر نمیکنم چنین قطعه ای وجود داشته باشه!![-x
برای استفاده بیشتر دوستان تصویر شماتیک طرح و نمونه های عملی که خودم ساختم رو در اختیارشون قرار میدم!
فایل های پیوست شده
نوع فایل: rar sch.rar (673.2 کیلو بایت, 452 نمایش)
mohammad_reza آنلاین نیست.   پاسخ با نقل قول
2 کاربر از mohammad_reza به خاطر این مطلب مفید تشکر کرده اند
قدیمی 06-06-2010, 02:53 AM   #4
Lightbulb پاسخ : کنترل دور موتور dc با pid کنترلر

ممد جون زحمت بکش یه توضیحی بده که برنامه چجوری کار می کنه تا درکش راحت تر بشه...
__________________
_-_-_-_-_-_-_-_-_-_-_-_-_-
ذکات علم ...
---------------------------------
موفق باشین ...
Kooshan آنلاین نیست.   پاسخ با نقل قول
2 کاربر از Kooshan به خاطر این مطلب مفید تشکر کرده اند
قدیمی 06-07-2010, 02:20 AM   #5
Arrow پاسخ : کنترل دور موتور dc با pid کنترلر

با توجه به در خواست دوستان برای توضیح بیشتر عملکرد پروژه در قسمت سعی میکنم بخشهای مختلف برنامه رو تاحد ممکن تشریح کنم.

تایمر یک میکرو وظیفه کنترل دور موتور را توسط تغییر مقدار PWM به عهده داره.

تایمر 2 هر 0.1 ثانیه از سرعت موتور نمونه گیری می کنه . چون این مدت بیش از ظرفیت تایمر است برای این منظور روتین وقفه سرریز آن باید سه بار تکرار بشه . هر وقفه سرریز تایمر 2 تقریباً 0.03 ثانیه است.

تایمر صفر در مد شمارنده وظیفه شمارش تعداد پالسهای خوانده شده توسط اینکدر در مدت 0.1 ثانیه رو به عهده داره.

در روتین setting تنظیمات مورد نیاز موتور مانند سرعت ، ولتاژ ، جهت ، ضرایب ki ، kp،kd توسط پتانسیومترها و کلیدهای مربوطه قابل تنظیم میباشند. در مرحله اول این روتین به ترتیب منوها اجرا و با فشردن کلید set_key تغییرات اعمال شده ذخیره و منوی بعدی اجرا میشود به جز تنظیم ولتاژ dc که با فشردن کلید set_vdc صورت میگیرد. با اجرا شده هر منو پارامترهای مربوط به آن بر روی lcd نمایش داده میشود. پس از راه اندازی موتور برای تنظیم ضرایب باید set_key یک بار در ابتدا و یکبار در هنگام تنظیم تغییرات فشرده شود. برای تغییر ولتاژ dc نیز همین عمل با کلید set_vdc اجرا می شود.

در روتین Direction_select جهت حرکت موتور و همچنین توقف یا حرکت موتور تنظیم میشود .برای تغییر جهت حرکت موتور باید از کلید R/L استفاده کرد و برای تغییر جهت موتور باید موتور روشن باشد. با استفاده از کلید ON/OFF میتوان موتور را در این روتین خاموش و روشن نمود.

روتین DISPLY وظیفه نمایش پارامترهای مختلف رو به عهده دارد . در حالت عملکرد عادی موتور نمایشگر سرعت ورودی و سرعت موتور به همراه جهت حرکت آن را نمایش می دهد.

مهمترین روتین پروژه روتین PID_control است، در فضای گسسته جمله ی مشتقگیر توسط تفاضل دو نمونه آخر سیگنال خطا حاصل می شود. جمله انتگرالگیر نیز توسط میانگین گیری بین نمونه های خطا تولید می شود.
در این برنامه ده نمونه آخر سیگنال خطا همیشه نگهداری می شود.
برای جمله انتگرالگیری من از روش میانگین گیری استفاده کرده ام اما به هر کدام از نمونه های خطا یک ضریب اختصاص دادم در واقع مثل خازن متغییر عمل میکنه.
جمله مشتقگیر از تفاضل دو خطای آخر حاصل میشه .
بعد از محاسبه جملات فوق هر جمله در ضریب مربوط به خود ضرب میشه ، انتگرالگیر در KP ، مشتقگیر در KD ، جمله تناسبی نیز از حاصل ضرب KP در خطای آخر بدست میاد.
حاصل جمع جملات مشتقگیر،انتگرالگیر و تناسبی خروجی کنترل کننده PID مطلوب رو نتیجه میده.
برای تبدیل خروجی PID به سیگنال کنترلی مناسب باید آن را در یک ضریب مناسب ضرب نمود بطوری که به ازای حداکثر خطا حداکثر ولتاژ (PWM) به موتور اعمال بشه .این ضریب از تقسیم حداکثر PWM یعنی 255 بر حداکثر خطای قابل قبول که توسط کاربر تععین میشه بدست میاد.
پس از اعمال ضریب خروجی PID مناسب تولید میشه ، این خروجی با مقدار قبلی خروجی جمع میشه تا سیستم کنترل بصورت حلقه بسته اجرا بسه.
البته در مرحله آخر سیگنال کنترل تولید شده با PWM حداکثر وحداقل مقایسه میشه در صورتی که بیش از PWM حداکثر باشه این سیگنال برابر با آن قرار داده میشه .در مورد حداقل نیز به همین صورت.

یه چیز دیگه اینکه برنامه قبلی کمی مشکل داشت تصحیح شدش رو براتون میزارم!!!

اینم زکات علم...
پیروز باشید!
فایل های پیوست شده
نوع فایل: rar mt.rar (2.5 کیلو بایت, 143 نمایش)
mohammad_reza آنلاین نیست.   پاسخ با نقل قول
3 کاربر از mohammad_reza به خاطر این مطلب مفید تشکر کرده اند
قدیمی 08-08-2010, 04:45 PM   #6
پیش فرض پاسخ : کنترل دور موتور dc با pid کنترلر

با سلام و خسته نباشید
ضمن تشکر از شما به خاطر اطلاعات مفیدتون
میخواستم ببینم که چرا برای سرعت موتور محدودیت 5000 دور گذاشتین؟ موتور من 12000 دوره و میخوام از 0 تا 10000 دور کنترلش کنم و فقط سیمای تغذیش بیرون اومده البته من فقط در یه جهت کنترلش میکنم دقتی که لازم دارم در حد 30 دوره. همینطور میخواستم ببینم این مدار تا چه حد جریان میده؟ موتور من زیر بار حدود 8 آمپر جریان میکشه.برای راه اندازی نرم و ترمزش چیکار کنم؟
اگه این مدار جواب نمیده چه پیشنهادی دارین؟
ببخشید زیاد سوال پرسیدم
mm60_me آنلاین نیست.   پاسخ با نقل قول
قدیمی 08-08-2010, 04:53 PM   #7
پیش فرض پاسخ : کنترل دور موتور dc با pid کنترلر

با سلام و خسته نباشيد
ضمن تشکر از شما به خاطر اطلاعات مفيدتون
ميخواستم ببينم که چرا براي سرعت موتور محدوديت 5000 دور گذاشتين؟ موتور من 12000 دوره و ميخوام از 0 تا 10000 دور کنترلش کنم و فقط سيماي تغذيش بيرون اومده البته من فقط در يه جهت کنترلش ميکنم دقتي که لازم دارم در حد 30 دوره. همينطور ميخواستم ببينم اين مدار تا چه حد جريان ميده؟ موتور من زير بار حدود 8 آمپر جريان ميکشه.براي راه اندازي نرم و ترمزش چيکار کنم؟
اگه اين مدار جواب نميده چه پيشنهادي دارين؟
ببخشيد زياد سوال پرسيدم
mm60_me آنلاین نیست.   پاسخ با نقل قول
قدیمی 08-09-2010, 06:06 PM   #8
Smile پاسخ : کنترل دور موتور dc با pid کنترلر

نوشته اصلی توسط mm60_me نمایش پست ها
با سلام و خسته نباشيد
ضمن تشکر از شما به خاطر اطلاعات مفيدتون
ميخواستم ببينم که چرا براي سرعت موتور محدوديت 5000 دور گذاشتين؟ موتور من 12000 دوره و ميخوام از 0 تا 10000 دور کنترلش کنم و فقط سيماي تغذيش بيرون اومده البته من فقط در يه جهت کنترلش ميکنم دقتي که لازم دارم در حد 30 دوره. همينطور ميخواستم ببينم اين مدار تا چه حد جريان ميده؟ موتور من زير بار حدود 8 آمپر جريان ميکشه.براي راه اندازي نرم و ترمزش چيکار کنم؟
اگه اين مدار جواب نميده چه پيشنهادي دارين؟
ببخشيد زياد سوال پرسيدم
سلام دوست گرامی.
لطفاً در مورد عملکرد موتورتون بیشتر توضیح بدهید ،اینکه موتورتون چند ولته و اینکه آیا سرعت تنظیم سرعت براتون مهمه یا نه. قبل از پاسخ باید بگم این مداری که توضیح دادم دارای ویژگیهای زیره:
1- تتنظیم سرعت موتور با سرعت مطلوب ورودی در مدت کمتر از 1 ثانیه ، 2- قابلیت درایو موتورهای حداکثر 24 ولت و 3 آمپر

1:چرا براي سرعت موتور محدوديت 5000 دور گذاشتين؟ چون موتوری که من استفاده کرده بودم حداکثر 5000 دور داشت در حالت بدون بار.

2:مدار تا چه حد جريان ميده؟ همونطور که گفتم این مدار حداکثر سه آمپر میتونه بده.

برای تنظیم سرعت ورودی از 0 تا 10000 باید برنامه را کمی تغییر بدید.
برای درایو موتوری که حداکثر 8 آمپر می کشه باید تغذیه موتورتون را تغییر بدید. مثلاً می تونید از یک مدار یکسوساز و فیلتر خازنی استفاده کنید البته باید از یک ترانس تبدیل در ورودی نیز استفاده کنید.
برای درایو موتور نیز میتونید از یک ترانزیستور bjt یا ماسفت استفاده کنید. برای درایو ترانزیستورها نیاز به مدار درایور دارید مثلاً برای ماسفتها می تونید از آی سی ICL7667 استفاده کنید.
برای ترمز موتور باید از یک درایو پل استفاده کنید . برای این کار کافیه جهت حرکت موتور را تا زمانیکه می ایستد برعکس کنید.
برای راه اندازی نرم موتور اگه سرعت تنظیم موتور براتون خیلی مهم نباشه باید ولتاژ موتور در هنگام راه اندازی از صفر تا مقدار مورد نظر کمکم افزایش پیدا کند. البته میشه از NTC نیز استفاده کرد. این قطعه ابتدا مقاومت زیادی داره ، با عبور جریان از آن مقاومت آن نیز به تدریج کم میشه.
در ضمن باید حتماً از یک مبدل سرعت به پالس برای اندازه گیری سرعت استفاده کنید. این مدار رو میتونید خودتون بسازید یا از مبدلهای آماده استفاده کنید.

در کل باید برنامه تغییر داده بشه و با این مدار و برنامه نمیتونید موتورتونو کنترل کنید.

بازم اگه سؤالی داشتین بپرسید.
__________________
در بدترین روزها امیدوار باش، زیرا زیباترین باران ها از سیاهترین ابرهاست ...
*****************************************
***********************************
***************************
تنها کسانی که ما را می رنجانند عزیزانی هستند که همیشه کوشیده ایم از ما نرنجند. علی شریعتی
*****************************************
*********************************
************************
mohammad_reza آنلاین نیست.   پاسخ با نقل قول
3 کاربر از mohammad_reza به خاطر این مطلب مفید تشکر کرده اند
قدیمی 08-11-2010, 01:44 AM   #9
پیش فرض پاسخ : کنترل دور موتور dc با pid کنترلر

با سلام و عرض تشکر
از توضیحات خوبتون ممنونم
موتور من ولتاژ تغذیش 12 ولته و توانش حدود 100 تا 200 واته
کاری که من میخوام انجام بدم اینه که چند تا ست پوینت خاص(حداکثر 10 تا) به کنترل کننده بدم و ازش بخوام که با یه الگوی خاص به هر کدوم از این ست پوینت ها بره مثلا ابتدا توی یک ثانیه از صفر بره به 1000 و مدت کوتاهی بمونه بعد از 1000 بره به چند تا ست پوینت دیگه تا به 10000 برسه و کل این بازه زمانی بدون در نظر گرفتن زمانهای ثابت ماندن 4 الی 5 ثانیه باشه چیزی که خیلی برام مهمه دقت کنترلمه که میخوام حداکثر 15 دور باشه یعنی بتونم با گام 15 دور کنترلش کنم میخوام بدونم با میکرو و با کلاک 16 مگ میتونم به این دقت برسم همینطور pid میتونه این دقتو بهم بده؟
برای تغذیه موتور میخوام تغذیه سویچینگ بذارم برای تبدیل سرعت موتور هم از یک شفت انکودر که تو هر دور موتور 200 تا پالس درست میکنه استفاده میکنم
منظور شما اینه که از l298 نمیشه استفاده کرد و باید pwm میکرو رو با ترانزیستور به موتور بدیم؟
من از ترانزیستورهای 2n2955 و 2n3055 که خودشون با ترانزیستور درایو میشن و تا 15 آمپرو عبور میدن میخوام استفاده کنم نطر شما چیه؟
مدار پلی که میگین با مدار تو شماتیک فرقی داره؟
در پایان با تشکر فراوان اگر برای کل کار مداری پیشنهاد میکنین لطفا ارایه کنین یا پیشنهادتونو بگین باز هم ممنون
mm60_me آنلاین نیست.   پاسخ با نقل قول
قدیمی 08-12-2010, 07:05 AM   #10
Smile پاسخ : کنترل دور موتور dc با pid کنترلر

نوشته اصلی توسط mm60_me نمایش پست ها
با سلام و عرض تشکر
از توضیحات خوبتون ممنونم
موتور من ولتاژ تغذیش 12 ولته و توانش حدود 100 تا 200 واته
کاری که من میخوام انجام بدم اینه که چند تا ست پوینت خاص(حداکثر 10 تا) به کنترل کننده بدم و ازش بخوام که با یه الگوی خاص به هر کدوم از این ست پوینت ها بره مثلا ابتدا توی یک ثانیه از صفر بره به 1000 و مدت کوتاهی بمونه بعد از 1000 بره به چند تا ست پوینت دیگه تا به 10000 برسه و کل این بازه زمانی بدون در نظر گرفتن زمانهای ثابت ماندن 4 الی 5 ثانیه باشه چیزی که خیلی برام مهمه دقت کنترلمه که میخوام حداکثر 15 دور باشه یعنی بتونم با گام 15 دور کنترلش کنم میخوام بدونم با میکرو و با کلاک 16 مگ میتونم به این دقت برسم همینطور pid میتونه این دقتو بهم بده؟
برای تغذیه موتور میخوام تغذیه سویچینگ بذارم برای تبدیل سرعت موتور هم از یک شفت انکودر که تو هر دور موتور 200 تا پالس درست میکنه استفاده میکنم
منظور شما اینه که از l298 نمیشه استفاده کرد و باید pwm میکرو رو با ترانزیستور به موتور بدیم؟
من از ترانزیستورهای 2n2955 و 2n3055 که خودشون با ترانزیستور درایو میشن و تا 15 آمپرو عبور میدن میخوام استفاده کنم نطر شما چیه؟
مدار پلی که میگین با مدار تو شماتیک فرقی داره؟
در پایان با تشکر فراوان اگر برای کل کار مداری پیشنهاد میکنین لطفا ارایه کنین یا پیشنهادتونو بگین باز هم ممنون
سلام.
با میکرو میشه به چنین دقتی رسید هرچند در سرعتهای خیلی پیین کنترل سیستم کمی مشکله . برای این کار باید برنامه نویسیتون کمی خوب باشه و بهتره برای محاسبات از دستورات اسمبلی استفاده بشه !
اگه از تغذیه خارجی استفاده می کنید دیگه نیازی به پل دیود نیست. پل دیودم با قبلی فرقی نمی کنه ولی باید از دیود و خازن با توان بالاتر استفاده بشه.!
من خودم بیشتر ترجیح میدم با ماسفتها کار کنم چون تلفات کمتری دارند و میشه با استفاده از آی سی های درایو راه اندازیشون کرد. در مورد ترانزیستورهایی که گفتید اگه میتونند توان دریافتی موتور رو تحمل کنند مشکلی نیست.
برای مدارتون پیشنهادی ندارم فقط توصیه میکنم بهتره مدار قدرت و کنترل از هم جدا و ایزوله باشند. در طراحی pcbهاتونم باید دقت کنید. حتماً یک سیستم کنترل جریان موتورهم به مدار کنترلتون اضافه کنید که اگر موتور به دلیلی جریان زیادی کشید درایوتون آسیب نبینه!
__________________
در بدترین روزها امیدوار باش، زیرا زیباترین باران ها از سیاهترین ابرهاست ...
*****************************************
***********************************
***************************
تنها کسانی که ما را می رنجانند عزیزانی هستند که همیشه کوشیده ایم از ما نرنجند. علی شریعتی
*****************************************
*********************************
************************
mohammad_reza آنلاین نیست.   پاسخ با نقل قول
پاسخ

علاقه مندی ها (Bookmarks)

برچسب ها
dc, دور, pid, موتور, کنترل, کنترلر

« موضوع قبلی | موضوع بعدی »
ابزارهای موضوع
نحوه نمایش

انتخاب سریع یک انجمن


اکنون ساعت 12:57 PM برپایه ساعت جهانی (GMT - گرینویچ) +4.5 می باشد.


تمامي حقوق مادي و معنوي اين مجموعه متعلق به شركت ربات گستران آپادانا مي‌باشد Persian Skin By : Vbskin