اطلاعیه

Collapse
No announcement yet.

برنامه کنترل کننده pi برای کنترل سرعت موتور

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

    برنامه کنترل کننده pi برای کنترل سرعت موتور

    با سلام خدمت دوستان گرامی
    می خواستم برنامه یک کنترل کننده pi برای کنترل سرعت یک موتور bldc با میکرو xmega بنویسم
    موتور از نوع سنسوردار هست.باید سرعت رو با یکی از سنسورها اندازه بگیرم.مراحلی که برای اندازه گیری سرعت انجام میدم به این ترتیبه:
    اول میام rtc میکرو راه اندازی میکنم و زمان overflow inter روی 500 میلی ثانیه گذاشتم که هر 500 میلی ثانیه یک اینتراپت rtc میده که توی این اینتراپت یک متغیرtime از نوع char رو تاگل میکنم
    مرحله بعد اینتراپت یکی از پایه های میکرو که سنسور اثرهال بهش متصل هست رو فعال میکنم و در سرویس روتینش نوشتم که هر زمان که time برابر 0 بود بیاد لبه هارو بشماره(هر دو لبه)
    بعد میام تعداد لبه های خونده شده رو توی 12 ضرب میکنم که سرعت بدست میاد. این سرعت رو از سرعت مرجع کم میکنم و بعد مراحل pi کنترلر. خروجی pi هم میدم برای کم و زیاد کردن pwm.
    مشکلم اینجاست که وقتی راه اندازی میکنم سرعت خیلی نوسان داره و تا مقدار max میره و دوباره نزدیک صفر میشه . کدی که برای pi نوشتم به این صورته:
    speed=12*count1;
    error=ref-speed;

    pterm=kp*error;
    iterm=(ki*error)+last_iterm;
    dterm=(error-last_error)*kd;
    out=(pterm+iterm+dterm);
    out1=out+out1;
    if(out<1) out=100;
    if(out>2120) out=2120;
    last_iterm=iterm;
    last_error=error;
    count=0;

    }
    TCC0.CCD=out;
    TCC1.CCA=out;
    TCC1.CCB=out
    توی این دستورات count1 مربوط به تعداد لبه های خوانده شده توی اینتراپت پین متصل به سنسور هست و ضریب kd صفر.
    لطف میکنید راهنماییم کنید ممنون.;

    #2
    پاسخ : برنامه کنترل کننده pi برای کنترل سرعت موتور

    در محاسبه بخش انتگرال باید حاصل جمع خطای فعلی و خطای قبلی را بر دو تقسیم و در زمان نمونه گیری و Ki ضرب کنید.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : برنامه کنترل کننده pi برای کنترل سرعت موتور

      ممنون از وقتی که گذاشتید.
      جناب مهندس من همون طور که فرمودید عمل کردم. فکر میکنم سرعت درست محاسبه نمیشه. برای محاسبه ی سرعت طبق برنامه زیر عمل کردم:
      PORTE.OUT=0x00;

      PORTE.DIR=0x00;


      PORTE.PIN2CTRL=PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;


      PORTE.PIN4CTRL=PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;


      PORTE.PIN6CTRL=PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;


      PORTE.INTCTRL=(PORTE.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT0LVL_gm))) |
      PORT_INT1LVL_OFF_gc | PORT_INT0LVL_HI_gc;

      PORTE.INT0MASK=0x10;

      PORTE.INT1MASK=0x00;

      interrupt [PORTE_INT0_vect] void porte_int0_isr(void)
      {
      if(time==0){
      count++;
      count1=count;
      k=1;
      }
      while (1)
      {
      run_motor();


      if((k==1)&&(time==255)){

      speed=12*count;
      error=ref-speed;

      pterm=kp*error;
      iterm=ki*(error+last_error)/2;
      dterm=(error-last_error)*kd;
      out=(pterm+iterm+dterm);
      out1=out;
      if(out<1) out1=out;
      if(out1>2120) out1=2120;
      last_error=error;
      count=0;
      k=0;
      }
      TCC0.CCD=out1;
      TCC1.CCA=out1;
      TCC1.CCB=out1;

      }
      زمان نمونه برداری توسط rtc انجام میشه. یعنی هر 500 میلی ثانیه یک اینتراپت میده و توی این اینتراپت متغیر time رو تاگل میکنه. وقتی که time=0 باشه کانتر شمارش میشه و اگر time=255 باشه وارد pi کنترلر میشه. توی این برنامه فکر میکنم speed اصلا محاسبه نمیشه. لطف میکنید راهنماییم کنید.تشکر

      دیدگاه


        #4
        پاسخ : برنامه کنترل کننده pi برای کنترل سرعت موتور

        من توی برنامه قبلی اومدم مقدار speed رو عوض کردم یعنی به جای این که 12 رو در کانتر خونده شده ضرب کنم ، از یک صدم تا 5 صدم رو در کانتر ضرب کردم و دیدم برنامه بهتر عمل کرد. فکر میکنم نویز روی خروجی های سنسورهای اثر هال هست. چون فرکانس سنسور توی این موتور مثل فرکانس سنکرون ماشین القایی هست یعنی:
        120f/p
        که با توجه به 10 قطب بودن موتور ،فرکانس سنسورها مثلا در سرعت 1500 rpm باید 125 باشه. ولی فکر میکنم میکرو خیلی از این بیشتر رو داره توی بازه 500 میلی ثانیه میخونه. به نظرتون اگر توی خروجی سنسورها یک خازن عدسی با ظرفیت پایین موازی کنم مشکل حل میشه؟ لطف میکنید راهنمایی کنید . ممنون

        دیدگاه

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