من تو نت هرچی سرچ کردم نتونستم یک برنامه PID واقعی پیدا کنم.یک عده اومدن برنامه پولی گذاشتن.که همونا هم فکر نکنم بدرد بخوره.میخوام با همکاری همدیگه یک برنامه PID درست کنیم.دوستانی که قبلن نمونه اینجور برنامه ها رو نوشتن یک نمونه بذارن تا بحث کنیم.
اطلاعیه
Collapse
No announcement yet.
برنامه PID
Collapse
X
-
پاسخ : برنامه PID
سلام کاری نداره که
فرض کن ورودی سیستم r باشه خروجی کل که ازش فیدبک میگیرید y ، ضرایب هم ki kp kd باشن فاصله زمانی هم dt باشه و e خطا و u خروجی تون است که به سمت سیستم میره
مشخصه دیگه عملیاته انتگرال و مشتق عددی که معلومن و تمپ هم در واقع مقدار خروجی تو لحظه ی قبل است که تو مشتق استفاده میشه. تو اون قسمته کامنت دوم در واقع احتصاص دادن مقدار جدید به y است یعنی خروجی فیدبک گرفته شده رو پدیت کردیمکد:while(1) { //*your code before new output*// temp = e; //*after new output*// //*************** // e = y-r; i = i + e*dt; d = (e - temp)/dt; u = Ki * i + Kd * d + Kp * e; //*your code*// }
فقط میمونه tune کردن سیستم که ضرایب رو تعیین کنید و خلاص

head<=
...تشکر خدا...
[img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]
-
پاسخ : برنامه PID
اینو خودم تست کردم خوب جواب میده...میتونی از این هم استفاده کنی....تازه !Anti Wind Up هم داره!!! :mrgreen:
کد:error=sp-temp_adc; // Defining Error Signal pterm=kp*error; // Defining Proportional Signal iterm=(ki*error)+last_iterm; // Defining Integral Signal dterm=(error-last_error)*kd; // Defining Derivative Signal //============================================Anti Wind up======================================= if(iterm>.5) iterm=.5; if(iterm<-.1) iterm=-.1; ////=====================================Defining Control Signal================================= control_signal=(pterm+iterm+dterm)*900; if(control_signal<1) control_signal=0; //H6 if(control_signal>10000) control_signal=10000; //H7 //=============================================================================================== last_iterm=iterm; last_error=error;
تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی
www.intelart.ir
ساخت کنترلر دما PID فازی با AVR [آموزشی]
دیدگاه
-
پاسخ : پاسخ : برنامه PID
منم مشابه همین برنامه رو نوشتم.فقط بدون احتساب زمان نمونه گیری که شما میفرمایید.نوشته اصلی توسط m4hd1rسلام کاری نداره که
فرض کن ورودی سیستم r باشه خروجی کل که ازش فیدبک میگیرید y ، ضرایب هم ki kp kd باشن فاصله زمانی هم dt باشه و e خطا و u خروجی تون است که به سمت سیستم میره
مشخصه دیگه عملیاته انتگرال و مشتق عددی که معلومن و تمپ هم در واقع مقدار خروجی تو لحظه ی قبل است که تو مشتق استفاده میشه. تو اون قسمته کامنت دوم در واقع احتصاص دادن مقدار جدید به y است یعنی خروجی فیدبک گرفته شده رو پدیت کردیمکد:while(1) { //*your code before new output*// temp = e; //*after new output*// //*************** // e = y-r; i = i + e*dt; d = (e - temp)/dt; u = Ki * i + Kd * d + Kp * e; //*your code*// }
فقط میمونه tune کردن سیستم که ضرایب رو تعیین کنید و خلاص
1-مگه زمان چه تاثیری میتونه داشته باشه؟مهم اینه که فاصله زمانی بین نمونه گیری ها برابر باشند دیگه.
2-شما متغیرها رو از چه نوعی تعریف میکنید؟
3-یکی از بزرگترین مشکلات همین تیون کردنشه . با سعی و خطا میشه تیون کرد ولی در عمل وقتی مدارو میبندم برای یک کار خاص مثلا کنترل دور موتور اونوقت میبینم از یک کنترل کننده تناسبی هم ضعیف تر عمل میکنه!!! چطور تیون کنم؟
دیدگاه
-
پاسخ : برنامه PID
1-منظور از anti wind up چیه؟نوشته اصلی توسط punisher.x64اینو خودم تست کردم خوب جواب میده...میتونی از این هم استفاده کنی....تازه !Anti Wind Up هم داره!!! :mrgreen:
کد:error=sp-temp_adc; // Defining Error Signal pterm=kp*error; // Defining Proportional Signal iterm=(ki*error)+last_iterm; // Defining Integral Signal dterm=(error-last_error)*kd; // Defining Derivative Signal //============================================Anti Wind up======================================= if(iterm>.5) iterm=.5; if(iterm<-.1) iterm=-.1; ////=====================================Defining Control Signal================================= control_signal=(pterm+iterm+dterm)*900; if(control_signal<1) control_signal=0; //H6 if(control_signal>10000) control_signal=10000; //H7 //=============================================================================================== last_iterm=iterm; last_error=error;
2-شما اینجا یک گین هم به کل مجموعه PID دادی.این گین رو چجوری تیون کردی؟
3-هنوز یک مورد کلا برای من مبهمه.اونم اینکه در پایان برنامه باید مقدار بدست اومده رو با set point جمع کرد یا نه؟ در واقع مقدار بدست اومده از این تابع که شما و یا دوست دیگمون نوشتن باید با مقدار set point جمع بشه و بره رو خروجی یا نه مقدار این تابع خودش باید بره رو خروجی ؟
دیدگاه
-
پاسخ : برنامه PID
درباره زمان من یه نکته ای رو بگم ، اگه زمان نمونه برداری به نسبت تغییراته خروجی سیستم کم باشه شدیدا ناپایدار میشه ....
بعد برای تیون کردن چن روش هست که یکیش دستیه ، با کم و زیاد کردن ضرایب به صورت دستی میشه به نتیجه رسید
تو ویکیپدیا هست :
من فقط با همین روش کار کردمکد:Manual tuning If the system must remain online, one tuning method is to first set and values to zero. Increase the until the output of the loop oscillates, then the should be set to approximately half of that value for a "quarter amplitude decay" type response. Then increase until any offset is corrected in sufficient time for the process. However, too much will cause instability. Finally, increase , if required, until the loop is acceptably quick to reach its reference after a load disturbance. However, too much will cause excessive response and overshoot. A fast PID loop tuning usually overshoots slightly to reach the setpoint more quickly; however, some systems cannot accept overshoot, in which case an over-damped closed-loop system is required, which will require a setting significantly less than half that of the setting that was causing oscillation.

head<=
...تشکر خدا...
[img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]
دیدگاه
-
پاسخ : برنامه PID
سلام
برای بدست آوردن ضرایب باید تابع تبدیل سیستم رو داشته باشید مثلا موتور رو باید شبیه سازی کنید
اگر بتونید مذل ریاضی موتور رو بدست بیاری با مطلب به راحتی ضرایب بدست میان ولی اگر نتونید مدل
ریاضی رو بدست بیارید بهترین راه سعی و خطا هست
یادتون باشه شما تو کتابها وقتی در مورد PID صحبت میکنید متظورتون سیستک های پیوسته هست ولی
میکرو زمان رو پیوسته به سما نمیده پس باید بعد از طراحی سیستم پیوسته معادل اون رو تو گسسته بدست
بیارید .گسسته هم یعنی میکرو هر ثانیه رو 8000000 قطعه زمانی یا به اندازه MIPS خودش میبینه و هرچه این
مقدار بیشتر بشه به پیوسته نزدیکتر میشه پیاده سازی یه سیستم با کنترل کننده PID تو زمان پیوسته خیلی راحت
تر از گسسته است . برنامه ای هم که آقای hamedhamidi گذاشتن خیلی خوبه ولی شما اگر مدل ریاضی سیستم
هودتون رو نداشته باشی مثل اینه که یه بلوک داشته باشی که فقط توش نوشته شده باشه G و تو درس کنترل خطی
بگن یه PID با این مشخصات ..... واسه این سیستم طراحی کن ،به نظر شما شدنی هست؟
دیدگاه
-
پاسخ : برنامه PID
تشکر ولی همین مدل ریاضی سیستم کنترلی رو چه طور باید به دست آورد؟ اگه میشه با یه مثال توضیح بدیننوشته اصلی توسط ehsanbagheriسلام
برای بدست آوردن ضرایب باید تابع تبدیل سیستم رو داشته باشید مثلا موتور رو باید شبیه سازی کنید
اگر بتونید مذل ریاضی موتور رو بدست بیاری با مطلب به راحتی ضرایب بدست میان ولی اگر نتونید مدل
ریاضی رو بدست بیارید بهترین راه سعی و خطا هست
یادتون باشه شما تو کتابها وقتی در مورد PID صحبت میکنید متظورتون سیستک های پیوسته هست ولی
میکرو زمان رو پیوسته به سما نمیده پس باید بعد از طراحی سیستم پیوسته معادل اون رو تو گسسته بدست
بیارید .گسسته هم یعنی میکرو هر ثانیه رو 8000000 قطعه زمانی یا به اندازه MIPS خودش میبینه و هرچه این
مقدار بیشتر بشه به پیوسته نزدیکتر میشه پیاده سازی یه سیستم با کنترل کننده PID تو زمان پیوسته خیلی راحت
تر از گسسته است . برنامه ای هم که آقای hamedhamidi گذاشتن خیلی خوبه ولی شما اگر مدل ریاضی سیستم
هودتون رو نداشته باشی مثل اینه که یه بلوک داشته باشی که فقط توش نوشته شده باشه G و تو درس کنترل خطی
بگن یه PID با این مشخصات ..... واسه این سیستم طراحی کن ،به نظر شما شدنی هست؟
خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.[hr]
دیدگاه
-
پاسخ : برنامه PID
مدل ریاضی هر سیستمی رو با فرمول های متفاوتی بدست میارن شما دز موزد کنترل خطی تو google سرچ کننوشته اصلی توسط امین غفاریتشکر ولی همین مدل ریاضی سیستم کنترلی رو چه طور باید به دست آورد؟ اگه میشه با یه مثال توضیح بدین
تا یه جزوه پبدا کنی داخلش توضیح کامل هست . اگر پیدا نکردی بگو تا واست پیدا کنم و پ کنم
تو جزوه کنترل خطی یه فصل کوتاه در این رابطه هست. اگر درست متوجه نشدید بگید کمکتون میکنم
دیدگاه
-
پاسخ : برنامه PID
ممنوننوشته اصلی توسط ehsanbagheriمدل ریاضی هر سیستمی رو با فرمول های متفاوتی بدست میارن شما دز موزد کنترل خطی تو google سرچ کن
تا یه جزوه پبدا کنی داخلش توضیح کامل هست . اگر پیدا نکردی بگو تا واست پیدا کنم و پ کنم
تو جزوه کنترل خطی یه فصل کوتاه در این رابطه هست. اگر درست متوجه نشدید بگید کمکتون میکنم
منظورتون همون معادلاتی هست که در فصل های اول درس کنترل خطی در مورد فنر و دمپر و . . .مثال میزنن هست ؟ :rolleyes:
اما اگه ما بخواهیم در مورد کنترل دمای یک محیط این روش رو به کار ببریم این معادلات چه طوری به دست می آن ؟
همین قسمتش برام مبهمه ؟ برای هر پروسه این کار از کجا آغاز میشه ؟خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.[hr]
دیدگاه
-
پاسخ : برنامه PID
من زیاد روی این موضوع کار نکردم تو اینتر سرچ کنید مطالب زیاد هست ولی در کل شما باید یه رابطه بیننوشته اصلی توسط امین غفاریممنون
منظورتون همون معادلاتی هست که در فصل های اول درس کنترل خطی در مورد فنر و دمپر و . . .مثال میزنن هست ؟ :rolleyes:
اما اگه ما بخواهیم در مورد کنترل دمای یک محیط این روش رو به کار ببریم این معادلات چه طوری به دست می آن ؟
همین قسمتش برام مبهمه ؟ برای هر پروسه این کار از کجا آغاز میشه ؟
تغییرات دمای محیطی که نیاز دارید دماش رو کنترل کنید بدست بیاری و یه رابطه هم بین جریان و ولتاژ هیتر و انرژی که به محیط میده
شما با این معادلات به مدل ریاضی سیستمتون دست پیدا کردید. اگیر از هیتر به تنهایی استفاده میکنید معادلات زیاد پیچیده نیست
چون هیتر خودش فقط یه رابطه داره و راندمانش هم 100% هست ولی اگر نیاز به کولر هم باشه شرایط فرق میکنه . تو مسئله شما
بدست اوردن رابطه بین انرژی داده شده به محیط و دمای محیط باید چنتا پارامتر رو داشته باشید. ظرفیت گرمایی محیط. که این به تغییر رطوبت
و... وابسته هست
دیدگاه
-
پاسخ : برنامه PID
در مورد معادلات سیستم باید بگم که پیدا کردنش در مورد یک سیستم واقعی فوق العاده پر هزینه و در 90 درصد مواقع غیر عملی هست.همونطور که از درس کنترل خطی میدونیم باید یک تابع ضربه به سیستم وارد بشه و پاسخ سیستم به این تابع معلوم بشه تا بشه معادلات توصیف کننده سیستم رو در آورد.که چون در عمل تابع ضربه وجود نداره بجاش از تابع پله استفاده میشه و پاسخ سیستم به تابع پله معلوم میشه و بعد میگن تابع پله مشتق تابع ضربه است و از روی روابط مربوطه معادلات سیستم بدست میاد.
مثال واقعی عملی در مورد سیستم کنترل دما :برای وارد کردن یک تابع ضربه به سیستم باید مثلا دمای محیط رو مثلا بطور آنی از یک مقدار به مقدار دیگه ای که بینهایت باهاش فرق داره برد و به طور آنی دوباره اونو به دمای قبلی برگردوند.مثلا دمای اتاق رو از 25 درجه در عرض یک دقیقه به 100 درجه برسونی و بعد دوباره در عرض یک دقیقه به همون 25 درجه برگردونی !!! خوب این غیر واقعیه
تابع پله: دمای اتاق رو از 25 به 100 ببری .
تا اینجاش که واقعا مسخره است.
مسخره تر اینه که وقتی تابع تبدیل یک سیستم واقعی رو در میاری میشه از مرتبه N!!!
یعنی مثلا اگه اتاق رو یک سیستم در نظر یگیری دماش تابع پارامترهای جنس دیوار و ضریب حرارتیش؛ میزان گردش هوا در اتاق؛مقدار ظرفیت گرمایی سیستم گرم کنندش ؛و دمای اجسامی که داخلش قرار دارن میشه که میشه یک معادله مسخره مرتبه 4 و ......
میدونم که مثال هام صد جور ایراد دارن.خرده نگیرین به مثال هام و توضیحات دست و پا شکستم
به خاطر همین اومدن یک سری کنترل هایی به نام فازی ساختن که از حوصله این بحث خارجه....
اما برگردیم به بحث خودمون
صرف نظر از این حرفا: تو اکثر پروژه ها همه دنبال ساده سازی هستند و حتی برای یک سیستم مرتبه خییلی بالاتر از دو میان از کنترلر PID استفاده میکنن.نمونش تو درایوهای کنترل دور موتورهای AC که برای کنترل گردش آب پمپهای آب استفاده میشن.تو اینجور درایوا بصورت پیش فرض ضرایب رو تنظیم میکنن و با همون ضرایب هم بخوبی کار میکنه و امکان تغییر ضرایب هم وجود داره.ولی هیچ کی نمیره تابع تبدیل سیستم رو بدست بیاره .پس از این فکرا که بیاین تابع تبدیل سیستم رو بدس بیارین کلا بیاین بیرون.
دیدگاه
-
پاسخ : برنامه PID
درسته از کنترل فازی در پروژه هایی که توصیف ریاضی سیستم سخته یا غیرممکنه استفاده میشه ولی کنترل دمای محیط نباید اینقد ها هم سخت باشه که بریم سراغ کنترل فازی من تو نت گشتم در این مورد چیز به درد بخوری پیدا نکردم از دوستان کسی مطلبی در این مورد نداره ؟نوشته اصلی توسط hamedhamidiبه خاطر همین اومدن یک سری کنترل هایی به نام فازی ساختن که از حوصله این بحث خارجه....خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.[hr]
دیدگاه
-
پاسخ : برنامه PID
در کدوم مورد؟ فازی یا پی ای دی؟نوشته اصلی توسط امین غفاریدرسته از کنترل فازی در پروژه هایی که توصیف ریاضی سیستم سخته یا غیرممکنه استفاده میشه ولی کنترل دمای محیط نباید اینقد ها هم سخت باشه که بریم سراغ کنترل فازی من تو نت گشتم در این مورد چیز به درد بخوری پیدا نکردم از دوستان کسی مطلبی در این مورد نداره ؟
دیدگاه








دیدگاه