اطلاعیه

Collapse
No announcement yet.

کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

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

    #76
    پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کم

    نوشته اصلی توسط Mahdi.Faani
    درسته که انتگرالگیر یه جای دیگه ذخیره میشه ولی در نهایت که همشون با هم جمع میشن!پس جلوی تاثیر زیاد انتگرالگیر رو میگیره...
    ضریب Kd رو خییییییییلی بزرگ در نظر گرفتی....کلا نمیدونم چرا اینقدر ضریبا گنده ن!بهتره که یه بازه کوچیکتر در نظر بگیری.مثلا 0 تا 100 کنترلر تو این محدوده کار کنه بعدش خروجیشو مپ کنی به اون مقداری که مد نظرته...دقیقا مفهوم Actuator اینجا به صورت نرم افزاری پیاده سازی میشه...تو اون تاپیک کنترلر PID که خودم نوشتم اونجا در مورد Actuator توضیح دادم.این کارو بکن...ضرایب کوچیکتر میشن...

    خواهش میکنم...خوشحال میشم به نتیجه برسی...
    سلام مهندس
    خسته نباشی.امروز اون پست 0 تا 100 آموزش PID داشتم میخوندم ...واقعا دستت درد نکنه و ایشالا همیشه انرژی داشته باشی تا اطلاعات و برداشتهای کاربردیتو برای همه ما به اشتراک بزاری :job:
    ضریب kp واسه این بزرگ گرفتم که سریعتر به مقدار ocr مورد نظرم برسم ولی kd رو از روی نمونه های دیگه و مطالب همینجوری دوبرابر گرفتم آخه همه جا نوشته بود باید بزرگ در از kp باشه البته با ضرب در dt بزرگتر میشه باز :mrgreen:
    من فکر کنم باید کدم رو یه باز نگری کنم و فک کنم لازم باشه بهم بگی که برای سرریز متغییر هام درون فرمولم از چه بازدهایی استفاده کنم و اسکیل کنمشون
    الان اسکیل کردنم مشکل داره؟لطفا این قسمتو بهم راهنمایی کن شاید باید کاره دیگه ای انجام بدم
    مثلا :
    برای انتگرال گیر چه بازدهی رو انتخاب کنم ؟ مقدار سایز int یا ماکسیمم مینیمم خروجیم (الان -1024 تا 1024 هست)
    توی کد اتمل که واسه pid گذاشته بود یه همچین کاری کرده بود موقع init کردن pid
    :
    maxError = outMax / (P_Factor + 1);
    maxSumError = outMax / (I_Factor + 1);
    منم اینو بهش اضافه کردم :

    P_Factor = Kp;
    I_Factor = Ki * SampleTimeInSec;
    D_Factor = Kd / SampleTimeInSec;

    و ازش توی کد پایین استفاده کرده
    لطفا کد منو یه نگاهی بنداز :
    کد:
    int8_t Compute( )
    {
      if(!inAuto) return False;
      /*Compute all the worI_Factorng error variables*/
      float error = *Setpoint - *Input;
    	
    	// Calculate Pterm and limit error overflow
    	if (error > maxError)
    		PTerm = maxError;
    	else if (error < -maxError)
    		PTerm = -maxError;
    	else
    		PTerm = P_Factor * error;
    	
    	// Calculate Iterm and limit integral runaway
      ITerm += (I_Factor * error);
    	
      if(ITerm > maxSumError) ITerm= maxSumError;
      else if(ITerm < -maxSumError) ITerm= -maxSumError;
    	
    	// Calculate Dterm
      DTerm = (D_Factor *(error-Lasterror)) ; 
    	
      /*Compute PID Output*/
      float output = PTerm + ITerm +  DTerm; ;
       
    	if(output > outMax) 
    	{
    		output = outMax;
    	}
      else if(output < pid_st->outMin) 
    	{
    		output = pid_st->outMin;
    	}
    	
    	*Output = output;
    	Lasterror=error;
    	return	True; 
    }
    توی کد اتمل یه کار دیگه هم کرده بود...واسه init کردن pid موقعی که داره ضرایب رو set میکنه در یک SCALING_FACTOR ضرب کرده بود (مقدارش 128) و در قسمت محاسبه Pid باز بر همون تقسیم کرده :
    ret = (p_term + i_term + d_term) / SCALING_FACTOR;
    pdf اش رو خوندم نوشته بود برای افزایش حساسیت هست ...
    حالا من اینجارو دیگه حذف کردم

    دیدگاه


      #77
      پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

      سلام بر شما
      خواهش میکنم لطف داری...کاری نکردم...
      چرا بازه شامل اعداد منفی هم میشه؟به نظرم همشو مثبت در نظر بگیر بین 0 تا یه حد نهایی....اون منفی رو واسه وقتی بذار که مثلا کنار هیتر یه کولر هم داری و از قسمت منفی واسه کولر استفاده کنی...

      شما یه کار کن که نخای هی ضرب و تقسم کنی....یه بازه کوچیک مثلا میگم بین 0 تا 10 از نوع دابل انتخاب کن که اعشارش تا چند رقم بتونه تغییر کنه...
      کاری کن که PID فقط و فقط با همین متغیر که بین 0 تا 10 میتونه مقدار بگیره سر و کار داشته باشه...
      در نهایت وقتی میخای این سیگنال رو به سیستم اعمال کنی یه گین واسش در نظر بگیر.مثلا اگه OCR بین 0 ال 1024 تغییر میکنه این عدد بین 0 تا 10 رو در 102.4 ضرب کن...اینطور وضعیت بهتر میشه...
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


      ساخت کنترلر دما PID فازی با AVR [آموزشی]

      دیدگاه


        #78
        پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

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

        دیدگاه


          #79
          پاسخ : کنترل کننده PID برای دمای کوره(نیاز به کمک فوری)

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

          دیدگاه

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