اطلاعیه

Collapse
No announcement yet.

روش برنامه نویسی موتور های BLDC

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

    روش برنامه نویسی موتور های BLDC

    سلام
    به علت اینکه یک سری از بچه ها توی تلگرام پیام میدند و درخواست برنامه .... میکنند
    به صورت خیلی ساده روش برنامه نویسی این نمونه از موتور ها شرح میدم .
    اگه جایی اشتباه کردم دوستان اصلاح کنند
    موتوری که من درایو میکنم از نوع سنسور دار هست .
    3 تا سیم اول U - V - W و 3 تا سیم دیگه داره که مال سنسور های هال افکت هست که اون هم بسته به وضعیت موتور تغییر میکنه
    2 تا سیم دیگه هم که باید به 5 ولت متصل بشه که تغذیه سنسور های هال افکت هست



    اول از همه باید 3 تا سیم سنسور ها به 3 تا اینتراپت متصل کنید که من فعلا این کارو انجام نمیدم و فقط با پین ها وضعیت چک میکنم

    #define HALLW PINE.6
    #define HALLU PINE.5
    #define HALLV PINE.7


    بعد از اون 6 تا خروجی لازم داریم به گیت درایور
    Half-Bridge
    مثل IR2103 متصل بشه
    پایه های ورودی گیت درایور که برای درایو ماسفت های UH-VH-WH هستند به پایه هایی از میکرو متصل کنید که میشه ازشون PWM گرفت . و پایه های ورودی گیت درایور که برای درایو ماسفت های UL-VL-WL به هر یک از پین های میکرو که خواستید متصل کنید
    تایمر ها و خروجی ها اینجوری خاموش و یا روشن کنید



    unsigned int  PWM=0;

    [/FONT]#define UH_ON TCCR0=0x69,OCR0=PWM
    #define UH_OFF TCCR0=0x00
    #define UL_ON PORTB.0=0
    #define UL_OFF PORTB.0=1


    #define VH_ON TCCR1A=TCCR1A | 0B10000001,TCCR1B=0x09,OCR1A=PWM
    #define VH_OFF TCCR1A=TCCR1A & 0B01111111,TCCR1B=0x09
    #define VL_ON PORTB.2=0
    #define VL_OFF PORTB.2=1


    #define WH_ON TCCR1A=TCCR1A | 0B00100001,TCCR1B=0x09,OCR1B=PWM
    #define WH_OFF TCCR1A=TCCR1A & 0B11011111,TCCR1B=0x09
    #define WL_ON PORTB.3=0
    #define WL_OFF PORTB.3=1



    با زیاد و کم کردن عدد pwm دور موتور کم و زیاد میشه
    حالا باید مثل جدول توی عکس ببینید سنسور ها توی چه موقعیتی هستند و خروجی هارو سوئیچ کنید اینجوری


    void start_motor(void){
    char I_BLDC=0;
    if(HALLU==0 && HALLV==1 && HALLW==0)I_BLDC=3;
    else if(HALLU==0 && HALLV==1 && HALLW==1)I_BLDC=4;
    else if(HALLU==0 && HALLV==0 && HALLW==1)I_BLDC=5;
    else if(HALLU==1 && HALLV==0 && HALLW==1)I_BLDC=0;
    else if(HALLU==1 && HALLV==0 && HALLW==0)I_BLDC=1;
    else if(HALLU==1 && HALLV==1 && HALLW==0)I_BLDC=2

    if(I_BLDC==0)VL_OFF,UH_OFF,WH_OFF,WL_OFF,UL_ON,VH_ON; // 0
    else if(I_BLDC==1)VL_OFF,UH_OFF,WH_OFF,UL_OFF,WL_ON,VH_ON; // 1
    else if(I_BLDC==2)VL_OFF,WH_OFF,UL_OFF,VH_OFF,WL_ON,UH_ON; // 2
    else if(I_BLDC==3)WH_OFF,WL_OFF,UL_OFF,VH_OFF,VL_ON,UH_ON; // 3
    else if(I_BLDC==4)UH_OFF,WL_OFF,UL_OFF,VH_OFF,WH_ON,VL_ON; // 4
    else if(I_BLDC==5)VL_OFF,UH_OFF,WL_OFF,VH_OFF,WH_ON,UL_ON; // 5
    }



    من با اوسکوپ خروجی سنسور های این موتور هارو دیدم . بعضی هاشون مربعی نیست و بعضی وقت ها میکرو نمیتونست درست سنسور ها چک کنه که بعد از اینکه از 40106 سر راه خروجی سنسور ها استفاده کردم مشکل حل شد . دو تا گیت با هم سری کنید . توی ورودی از مقاومت 2.2 کیلو استفاده کنید و پایه های سنسور ها pullup کنید. همین

    جدیدترین ویرایش توسط sepehr63; ۱۱:۳۳ ۱۳۹۶/۱۰/۱۰.

    #2
    پاسخ : روش برنامه نویسی موتور های BLDC

    سلام مهندس خسته نباشی میشه مدل بدون سنسور رو هم برای ما برنامه نویسی کنی

    دیدگاه


      #3
      پاسخ : روش برنامه نویسی موتور های BLDC

      با سلامالبته به این سادگی ها که مهندس فرمودن نیست پیچیدگی این موضوع بسیار زیاده بنده حدود دوسال هست روی پروژه سنسورلس foc دارم کار میکنم حتی با روش سنسوردار هم باید adc خونده بشه

      دیدگاه


        #4
        پاسخ : افزایش طول سیم اسپید کنترل تا موتور

        [FONT=Yekan]سلام . من از موتور براشلس بصورت ثابت با منبع تغذیه استفاده میکنم به حسب نیاز باید بین اسپید کنترل و موتور حدود یک متر فاصله باشه. چطور میتونم سه تا سیم از اسپید کنترل تا موتور رو افزایش طول بدم که به مشکلی پیش نیاد؟ یکبار این کار رو با همین سیم های سیلیکونی انجام دادم متاسفانه بعد از یک دقیقه سروو تست که باهاش دور موتور تنظیم میکنم سوخت. ممنون میشم راهنمایی کنید

        دیدگاه

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