ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





  1. #1
    تاریخ عضویت
    2017/07/29
    5
    6

    برنامه کنترل کننده 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. #2
    تاریخ عضویت
    2009/10/27
    تهران
    3,312
    1,075

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

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

    پاسخ : برنامه کنترل کننده 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. #4
    تاریخ عضویت
    2017/07/29
    5
    6

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

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

موضوعات مشابه

  1. مقاله کنترل کننده منطق فازی برای سرعت ماشین سنکرون
    توسط electri30ty در انجمن ترانسفورماتورها و ماشين هاي الکتريکی
    پاسخ: 1
    آخرين نوشته: 2014/10/09, 10:16
  2. مدار کنترل سرعت موتور برای سوراخکاری pcb
    توسط sinaa2251 در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 0
    آخرين نوشته: 2013/08/26, 14:56
  3. برنامه کنترل سرعت موتور با pwm
    توسط mehdi-70 در انجمن میکروکنترلرهای AVR
    پاسخ: 13
    آخرين نوشته: 2012/08/13, 17:33
  4. پاسخ: 1
    آخرين نوشته: 2011/10/31, 08:36
  5. برنامه کنترل سرعت موتور با pwm
    توسط mehdi-70 در انجمن رباتیک و مکاترونیک
    پاسخ: 2
    آخرين نوشته: 2011/10/14, 17:20

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

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

مجوز های ارسال و ویرایش

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