اطلاعیه

Collapse
No announcement yet.

برنامه PID

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برنامه PID

    من تو نت هرچی سرچ کردم نتونستم یک برنامه PID واقعی پیدا کنم.یک عده اومدن برنامه پولی گذاشتن.که همونا هم فکر نکنم بدرد بخوره.میخوام با همکاری همدیگه یک برنامه PID درست کنیم.دوستانی که قبلن نمونه اینجور برنامه ها رو نوشتن یک نمونه بذارن تا بحث کنیم.

    #2
    پاسخ : برنامه PID

    سلام کاری نداره که
    فرض کن ورودی سیستم r باشه خروجی کل که ازش فیدبک میگیرید y ، ضرایب هم ki kp kd باشن فاصله زمانی هم dt باشه و e خطا و u خروجی تون است که به سمت سیستم میره
    کد:
    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*//
    }
    مشخصه دیگه عملیاته انتگرال و مشتق عددی که معلومن و تمپ هم در واقع مقدار خروجی تو لحظه ی قبل است که تو مشتق استفاده میشه. تو اون قسمته کامنت دوم در واقع احتصاص دادن مقدار جدید به y است یعنی خروجی فیدبک گرفته شده رو پدیت کردیم
    فقط میمونه tune کردن سیستم که ضرایب رو تعیین کنید و خلاص



    head<=
    ...تشکر خدا...
    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

    دیدگاه


      #3
      پاسخ : برنامه 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 [آموزشی]

      دیدگاه


        #4
        پاسخ : پاسخ : برنامه PID

        نوشته اصلی توسط m4hd1r
        سلام کاری نداره که
        فرض کن ورودی سیستم r باشه خروجی کل که ازش فیدبک میگیرید y ، ضرایب هم ki kp kd باشن فاصله زمانی هم dt باشه و e خطا و u خروجی تون است که به سمت سیستم میره
        کد:
        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*//
        }
        مشخصه دیگه عملیاته انتگرال و مشتق عددی که معلومن و تمپ هم در واقع مقدار خروجی تو لحظه ی قبل است که تو مشتق استفاده میشه. تو اون قسمته کامنت دوم در واقع احتصاص دادن مقدار جدید به y است یعنی خروجی فیدبک گرفته شده رو پدیت کردیم
        فقط میمونه tune کردن سیستم که ضرایب رو تعیین کنید و خلاص
        منم مشابه همین برنامه رو نوشتم.فقط بدون احتساب زمان نمونه گیری که شما میفرمایید.
        1-مگه زمان چه تاثیری میتونه داشته باشه؟مهم اینه که فاصله زمانی بین نمونه گیری ها برابر باشند دیگه.
        2-شما متغیرها رو از چه نوعی تعریف میکنید؟
        3-یکی از بزرگترین مشکلات همین تیون کردنشه . با سعی و خطا میشه تیون کرد ولی در عمل وقتی مدارو میبندم برای یک کار خاص مثلا کنترل دور موتور اونوقت میبینم از یک کنترل کننده تناسبی هم ضعیف تر عمل میکنه!!! چطور تیون کنم؟

        دیدگاه


          #5
          پاسخ : برنامه PID

          نوشته اصلی توسط 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;
          1-منظور از anti wind up چیه؟
          2-شما اینجا یک گین هم به کل مجموعه PID دادی.این گین رو چجوری تیون کردی؟
          3-هنوز یک مورد کلا برای من مبهمه.اونم اینکه در پایان برنامه باید مقدار بدست اومده رو با set point جمع کرد یا نه؟ در واقع مقدار بدست اومده از این تابع که شما و یا دوست دیگمون نوشتن باید با مقدار set point جمع بشه و بره رو خروجی یا نه مقدار این تابع خودش باید بره رو خروجی ؟

          دیدگاه


            #6
            پاسخ : برنامه PID

            نوشته اصلی توسط m4hd1r
            ضرایب هم ki kp kd باشن
            ضرایب رو چه طوری تعیین می کنیم ؟
            خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
            [hr]

            دیدگاه


              #7
              پاسخ : برنامه 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]

              دیدگاه


                #8
                پاسخ : برنامه PID

                سلام
                برای بدست آوردن ضرایب باید تابع تبدیل سیستم رو داشته باشید مثلا موتور رو باید شبیه سازی کنید
                اگر بتونید مذل ریاضی موتور رو بدست بیاری با مطلب به راحتی ضرایب بدست میان ولی اگر نتونید مدل
                ریاضی رو بدست بیارید بهترین راه سعی و خطا هست

                یادتون باشه شما تو کتابها وقتی در مورد PID صحبت میکنید متظورتون سیستک های پیوسته هست ولی
                میکرو زمان رو پیوسته به سما نمیده پس باید بعد از طراحی سیستم پیوسته معادل اون رو تو گسسته بدست
                بیارید .گسسته هم یعنی میکرو هر ثانیه رو 8000000 قطعه زمانی یا به اندازه MIPS خودش میبینه و هرچه این
                مقدار بیشتر بشه به پیوسته نزدیکتر میشه پیاده سازی یه سیستم با کنترل کننده PID تو زمان پیوسته خیلی راحت
                تر از گسسته است . برنامه ای هم که آقای hamedhamidi گذاشتن خیلی خوبه ولی شما اگر مدل ریاضی سیستم
                هودتون رو نداشته باشی مثل اینه که یه بلوک داشته باشی که فقط توش نوشته شده باشه G و تو درس کنترل خطی
                بگن یه PID با این مشخصات ..... واسه این سیستم طراحی کن ،به نظر شما شدنی هست؟

                دیدگاه


                  #9
                  پاسخ : برنامه PID

                  نوشته اصلی توسط ehsanbagheri
                  سلام
                  برای بدست آوردن ضرایب باید تابع تبدیل سیستم رو داشته باشید مثلا موتور رو باید شبیه سازی کنید
                  اگر بتونید مذل ریاضی موتور رو بدست بیاری با مطلب به راحتی ضرایب بدست میان ولی اگر نتونید مدل
                  ریاضی رو بدست بیارید بهترین راه سعی و خطا هست

                  یادتون باشه شما تو کتابها وقتی در مورد PID صحبت میکنید متظورتون سیستک های پیوسته هست ولی
                  میکرو زمان رو پیوسته به سما نمیده پس باید بعد از طراحی سیستم پیوسته معادل اون رو تو گسسته بدست
                  بیارید .گسسته هم یعنی میکرو هر ثانیه رو 8000000 قطعه زمانی یا به اندازه MIPS خودش میبینه و هرچه این
                  مقدار بیشتر بشه به پیوسته نزدیکتر میشه پیاده سازی یه سیستم با کنترل کننده PID تو زمان پیوسته خیلی راحت
                  تر از گسسته است . برنامه ای هم که آقای hamedhamidi گذاشتن خیلی خوبه ولی شما اگر مدل ریاضی سیستم
                  هودتون رو نداشته باشی مثل اینه که یه بلوک داشته باشی که فقط توش نوشته شده باشه G و تو درس کنترل خطی
                  بگن یه PID با این مشخصات ..... واسه این سیستم طراحی کن ،به نظر شما شدنی هست؟
                  تشکر ولی همین مدل ریاضی سیستم کنترلی رو چه طور باید به دست آورد؟ اگه میشه با یه مثال توضیح بدین
                  خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
                  [hr]

                  دیدگاه


                    #10
                    پاسخ : برنامه PID

                    نوشته اصلی توسط امین غفاری
                    تشکر ولی همین مدل ریاضی سیستم کنترلی رو چه طور باید به دست آورد؟ اگه میشه با یه مثال توضیح بدین
                    مدل ریاضی هر سیستمی رو با فرمول های متفاوتی بدست میارن شما دز موزد کنترل خطی تو google سرچ کن
                    تا یه جزوه پبدا کنی داخلش توضیح کامل هست . اگر پیدا نکردی بگو تا واست پیدا کنم و پ کنم
                    تو جزوه کنترل خطی یه فصل کوتاه در این رابطه هست. اگر درست متوجه نشدید بگید کمکتون میکنم

                    دیدگاه


                      #11
                      پاسخ : برنامه PID

                      نوشته اصلی توسط ehsanbagheri
                      مدل ریاضی هر سیستمی رو با فرمول های متفاوتی بدست میارن شما دز موزد کنترل خطی تو google سرچ کن
                      تا یه جزوه پبدا کنی داخلش توضیح کامل هست . اگر پیدا نکردی بگو تا واست پیدا کنم و پ کنم
                      تو جزوه کنترل خطی یه فصل کوتاه در این رابطه هست. اگر درست متوجه نشدید بگید کمکتون میکنم
                      ممنون منظورتون همون معادلاتی هست که در فصل های اول درس کنترل خطی در مورد فنر و دمپر و . . .مثال میزنن هست ؟ :rolleyes:
                      اما اگه ما بخواهیم در مورد کنترل دمای یک محیط این روش رو به کار ببریم این معادلات چه طوری به دست می آن ؟
                      همین قسمتش برام مبهمه ؟ برای هر پروسه این کار از کجا آغاز میشه ؟
                      خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
                      [hr]

                      دیدگاه


                        #12
                        پاسخ : برنامه PID

                        نوشته اصلی توسط امین غفاری
                        ممنون منظورتون همون معادلاتی هست که در فصل های اول درس کنترل خطی در مورد فنر و دمپر و . . .مثال میزنن هست ؟ :rolleyes:
                        اما اگه ما بخواهیم در مورد کنترل دمای یک محیط این روش رو به کار ببریم این معادلات چه طوری به دست می آن ؟
                        همین قسمتش برام مبهمه ؟ برای هر پروسه این کار از کجا آغاز میشه ؟
                        من زیاد روی این موضوع کار نکردم تو اینتر سرچ کنید مطالب زیاد هست ولی در کل شما باید یه رابطه بین
                        تغییرات دمای محیطی که نیاز دارید دماش رو کنترل کنید بدست بیاری و یه رابطه هم بین جریان و ولتاژ هیتر و انرژی که به محیط میده
                        شما با این معادلات به مدل ریاضی سیستمتون دست پیدا کردید. اگیر از هیتر به تنهایی استفاده میکنید معادلات زیاد پیچیده نیست
                        چون هیتر خودش فقط یه رابطه داره و راندمانش هم 100% هست ولی اگر نیاز به کولر هم باشه شرایط فرق میکنه . تو مسئله شما
                        بدست اوردن رابطه بین انرژی داده شده به محیط و دمای محیط باید چنتا پارامتر رو داشته باشید. ظرفیت گرمایی محیط. که این به تغییر رطوبت
                        و... وابسته هست

                        دیدگاه


                          #13
                          پاسخ : برنامه PID

                          در مورد معادلات سیستم باید بگم که پیدا کردنش در مورد یک سیستم واقعی فوق العاده پر هزینه و در 90 درصد مواقع غیر عملی هست.همونطور که از درس کنترل خطی میدونیم باید یک تابع ضربه به سیستم وارد بشه و پاسخ سیستم به این تابع معلوم بشه تا بشه معادلات توصیف کننده سیستم رو در آورد.که چون در عمل تابع ضربه وجود نداره بجاش از تابع پله استفاده میشه و پاسخ سیستم به تابع پله معلوم میشه و بعد میگن تابع پله مشتق تابع ضربه است و از روی روابط مربوطه معادلات سیستم بدست میاد.
                          مثال واقعی عملی در مورد سیستم کنترل دما :برای وارد کردن یک تابع ضربه به سیستم باید مثلا دمای محیط رو مثلا بطور آنی از یک مقدار به مقدار دیگه ای که بینهایت باهاش فرق داره برد و به طور آنی دوباره اونو به دمای قبلی برگردوند.مثلا دمای اتاق رو از 25 درجه در عرض یک دقیقه به 100 درجه برسونی و بعد دوباره در عرض یک دقیقه به همون 25 درجه برگردونی !!! خوب این غیر واقعیه
                          تابع پله: دمای اتاق رو از 25 به 100 ببری .
                          تا اینجاش که واقعا مسخره است.
                          مسخره تر اینه که وقتی تابع تبدیل یک سیستم واقعی رو در میاری میشه از مرتبه N!!!
                          یعنی مثلا اگه اتاق رو یک سیستم در نظر یگیری دماش تابع پارامترهای جنس دیوار و ضریب حرارتیش؛ میزان گردش هوا در اتاق؛مقدار ظرفیت گرمایی سیستم گرم کنندش ؛و دمای اجسامی که داخلش قرار دارن میشه که میشه یک معادله مسخره مرتبه 4 و ......
                          میدونم که مثال هام صد جور ایراد دارن.خرده نگیرین به مثال هام و توضیحات دست و پا شکستم
                          به خاطر همین اومدن یک سری کنترل هایی به نام فازی ساختن که از حوصله این بحث خارجه....
                          اما برگردیم به بحث خودمون
                          صرف نظر از این حرفا: تو اکثر پروژه ها همه دنبال ساده سازی هستند و حتی برای یک سیستم مرتبه خییلی بالاتر از دو میان از کنترلر PID استفاده میکنن.نمونش تو درایوهای کنترل دور موتورهای AC که برای کنترل گردش آب پمپهای آب استفاده میشن.تو اینجور درایوا بصورت پیش فرض ضرایب رو تنظیم میکنن و با همون ضرایب هم بخوبی کار میکنه و امکان تغییر ضرایب هم وجود داره.ولی هیچ کی نمیره تابع تبدیل سیستم رو بدست بیاره .پس از این فکرا که بیاین تابع تبدیل سیستم رو بدس بیارین کلا بیاین بیرون.

                          دیدگاه


                            #14
                            پاسخ : برنامه PID

                            نوشته اصلی توسط hamedhamidi
                            به خاطر همین اومدن یک سری کنترل هایی به نام فازی ساختن که از حوصله این بحث خارجه....
                            درسته از کنترل فازی در پروژه هایی که توصیف ریاضی سیستم سخته یا غیرممکنه استفاده میشه ولی کنترل دمای محیط نباید اینقد ها هم سخت باشه که بریم سراغ کنترل فازی من تو نت گشتم در این مورد چیز به درد بخوری پیدا نکردم از دوستان کسی مطلبی در این مورد نداره ؟
                            خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
                            [hr]

                            دیدگاه


                              #15
                              پاسخ : برنامه PID

                              نوشته اصلی توسط امین غفاری
                              درسته از کنترل فازی در پروژه هایی که توصیف ریاضی سیستم سخته یا غیرممکنه استفاده میشه ولی کنترل دمای محیط نباید اینقد ها هم سخت باشه که بریم سراغ کنترل فازی من تو نت گشتم در این مورد چیز به درد بخوری پیدا نکردم از دوستان کسی مطلبی در این مورد نداره ؟
                              در کدوم مورد؟ فازی یا پی ای دی؟

                              دیدگاه

                              لطفا صبر کنید...
                              X