اطلاعیه

Collapse
No announcement yet.

پاسخ : راه اندازی موتور براشلس بدون سنسور به روش چهار سوئیچه ( FSTP BLDC )

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

    #16
    پاسخ : راه اندازی موتور براشلس بدون سنسور به

    نوشته اصلی توسط sepehr63 نمایش پست ها
    این عکس خیلی کمک میکنه


    این برنامه هم عجله ای نوشتم مثل اسب موتوره کار کرد
    [code=c]
    #include <mega32.h>
    #include <delay.h>

    #define Uh PORTC.0
    #define Ul PORTC.1
    #define Vh PORTC.2
    #define Vl PORTC.3
    #define Wh PORTC.4
    #define Wl PORTC.5
    #define ON 0
    #define OFF 1

    void main(){
    PORTC=0xff;
    DDRC=0xff;
    i=0;
    while(1){

    if(Motor_Map==0)Uh=ON , Ul=OFF ,Vh=OFF , Vl=ON , Wh=OFF , Wl=OFF ,Motor_Map=1; //
    else if(Motor_Map==1)Uh=OFF , Ul=OFF ,Vh=OFF , Vl=ON , Wh=ON , Wl=OFF ,Motor_Map=2;
    else if(Motor_Map==2)Uh=OFF , Ul=ON ,Vh=OFF , Vl=OFF , Wh=ON , Wl=OFF ,Motor_Map=3;
    else if(Motor_Map==3)Uh=OFF , Ul=ON ,Vh=ON , Vl=OFF , Wh=OFF , Wl=OFF ,Motor_Map=4;
    else if(Motor_Map==4)Uh=OFF , Ul=OFF ,Vh=ON , Vl=OFF , Wh=OFF , Wl=ON ,Motor_Map=5;
    else if(Motor_Map==5)Uh=ON , Ul=OFF ,Vh=OFF , Vl=OFF , Wh=OFF , Wl=ON ,Motor_Map=0;
    delay_ms(2);
    Uh=OFF , Ul=OFF ,Vh=OFF , Vl=OFF , Wh=OFF , Wl=OFF;
    delay_ms(3);
    }
    }
    [/code]
    این خط
    Uh=OFF , Ul=OFF ,Vh=OFF , Vl=OFF , Wh=OFF , Wl=OFF;
    برای این نوشتم که موتور جریان کم بکشه اگه پاکش کنید موتور جریان وحشتناکی میکشه
    با درود و سپاس
    شما چهع موتوری رو تست کردید ؟ موتور هارد ؟

    دیدگاه


      #17
      پاسخ : راه اندازی موتور براشلس بدون سنسور به

      نوشته اصلی توسط کاکو نمایش پست ها
      با درود و سپاس
      شما چهع موتوری رو تست کردید ؟ موتور هارد ؟
      سلام
      نه موتور درب برقی بود . کاملش کردم وقت کردم کد کاملش قرار میدم

      دیدگاه


        #18
        پاسخ : راه اندازی موتور براشلس بدون سنسور به

        نوشته اصلی توسط sepehr63 نمایش پست ها
        سلام
        نه موتور درب برقی بود . کاملش کردم وقت کردم کد کاملش قرار میدم
        سپاس
        موتور چه نوع ای بود ؟ براشلس بدون سنسور ؟

        دیدگاه


          #19
          پاسخ : راه اندازی موتور براشلس بدون سنسور به

          نوشته اصلی توسط کاکو نمایش پست ها
          سپاس
          موتور چه نوع ای بود ؟ براشلس بدون سنسور ؟
          این براشلس با سنسور بود . بدون سنسور کد دارم باید پیدا کنم . مال قدیمه

          دیدگاه


            #20
            پاسخ : راه اندازی موتور براشلس بدون سنسور به

            نوشته اصلی توسط sepehr63 نمایش پست ها
            این براشلس با سنسور بود . بدون سنسور کد دارم باید پیدا کنم . مال قدیمه
            با سپاس
            فقط یه سوال پی میاد توی همین برنامه سنسوری یا اطلاعات ورودی نیست ؟عبارت موتور مپ هم جای تعریف نشده در دیفاین ها یا نام متغیری تعریف شده ای باشه
            برنامه شبیه بدون سنسور عمل میکنه و سه فاز

            دیدگاه


              #21
              پاسخ : راه اندازی موتور براشلس بدون سنسور به

              نوشته اصلی توسط کاکو نمایش پست ها
              با سپاس
              فقط یه سوال پی میاد توی همین برنامه سنسوری یا اطلاعات ورودی نیست ؟عبارت موتور مپ هم جای تعریف نشده در دیفاین ها یا نام متغیری تعریف شده ای باشه
              برنامه شبیه بدون سنسور عمل میکنه و سه فاز

              [LEFT]

              #include <mega8.h>
              #include <delay.h>
              #include <stdio.h>
              #define L 1
              #define R 2
              #define S 0
              unsigned int PWM=0;
              char MOTOR=0;


              #define UH_ON DDRD.7=1,PORTD.7=1
              #define UH_OFF DDRD.7=1,PORTD.7=0


              #define VH_ON DDRD.6=1,PORTD.6=1
              #define VH_OFF DDRD.6=1,PORTD.6=0


              #define WH_ON DDRD.5=1,PORTD.5=1
              #define WH_OFF DDRD.5=1,PORTD.5=0




              // 0X81
              #define VL_ON TCCR1A=TCCR1A | 0B10000001 , OCR1A=PWM
              #define VL_OFF TCCR1A=TCCR1A & 0B01111111 , OCR1A=0,DDRB.1=1,PORTB.1=1


              #define UL_ON TCCR1A=TCCR1A | 0B00100001 , OCR1B=PWM
              #define UL_OFF TCCR1A=TCCR1A & 0B11011111 , OCR1B=0,DDRB.2=1,PORTB.2=1 // 0X21


              #define WL_ON TCCR2=0x69,OCR2=PWM
              #define WL_OFF TCCR2=00 ,OCR2=0,PORTB.3=1






              #define HALLV PIND.3
              #define HALLU PIND.4
              #define HALLW PIND.2


              //#define SW_UP PINB.6
              //#define SW_DO PINB.7


              unsigned char I_BLDC=0;
              //unsigned int WAIT=0;
              //-------------------------------------------------------------------------------
              bit RUN=0;


              #include <delay.h>


              // Declare your global variables here


              // Voltage Reference: AVCC pin
              #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (1<<ADLAR))


              // Read the 8 most significant bits
              // of the AD conversion result
              unsigned char read_adc(unsigned char adc_input)
              {
              ADMUX=adc_input | ADC_VREF_TYPE;
              // Delay needed for the stabilization of the ADC input voltage
              delay_us(10);
              // Start the AD conversion
              ADCSRA|=(1<<ADSC);
              // Wait for the AD conversion to complete
              while ((ADCSRA & (1<<ADIF))==0);
              ADCSRA|=(1<<ADIF);
              return ADCH;
              }










              void BLDC_READ_SENS(){ // KHANDAN SENSOR HAYE MOTOR BLDC
              #asm("wdr")
              if(MOTOR==L){
              if(HALLU==0 && HALLV==1 && HALLW==0)I_BLDC=0;
              else if(HALLU==0 && HALLV==1 && HALLW==1)I_BLDC=1;
              else if(HALLU==0 && HALLV==0 && HALLW==1)I_BLDC=2;
              else if(HALLU==1 && HALLV==0 && HALLW==1)I_BLDC=3;
              else if(HALLU==1 && HALLV==0 && HALLW==0)I_BLDC=4;
              else if(HALLU==1 && HALLV==1 && HALLW==0)I_BLDC=5;
              else I_BLDC++;
              if(I_BLDC>5)I_BLDC=0;
              }
              else if(MOTOR==R){
              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;
              else I_BLDC++;
              if(I_BLDC>5)I_BLDC=0;
              }






              }
              //-------------------------------------------------------------------------------


              void RUN_Motor(){
              MOTOR=L;


              if(MOTOR==L)BLDC_READ_SENS();
              else if(MOTOR==R)BLDC_READ_SENS();


              #asm("wdr")
              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




              }
              ////////////////////////////END BLDC MOTOR DRIVE////////////////////////////////////


              // Timer 0 overflow interrupt service routine // 0.5ms
              interrupt [TIM0_OVF] void timer0_ovf_isr(void)
              {
              TCNT0=0xC2;


              if(RUN==1)RUN_Motor();
              else VL_OFF,UH_OFF,WL_OFF,VH_OFF,WH_OFF,UL_OFF;


              }






              void main(void)
              {
              //DDRB=0B00111111;
              //PORTB=0B11000000;
              //PORTD=0XFF;
              int vol;


              // Timer/Counter 0 initialization
              // Clock source: System Clock
              // Clock value: 125.000 kHz
              TCCR0=(0<<CS02) | (1<<CS01) | (1<<CS00);
              TCNT0=0xC2;

              TCCR1B=0x09;
              TCCR1A=0x01;


              DDRB.1=1;
              DDRB.2=1;
              DDRB.3=1;


              DDRD =0B11100000;
              PORTD=0B00011100;


              PORTB.1=1;
              PORTB.2=1;
              PORTB.3=1;


              TIMSK=0x01;
              VL_OFF,UH_OFF,WL_OFF,VH_OFF,WH_OFF,UL_OFF;
              // delay_ms(5000);


              // ADC initialization
              // ADC Clock frequency: 1000.000 kHz
              // ADC Voltage Reference: AVCC pin
              // Only the 8 most significant bits of
              // the AD conversion result are used
              ADMUX=ADC_VREF_TYPE;
              ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
              SFIOR=(0<<ACME);








              MOTOR=R;
              MOTOR=S,PWM=0,RUN=1;


              PWM=100;




              vol=read_adc(7);
              //while (vol>50)vol=read_adc(7);
              #asm("sei")
              while (1)
              {
              #asm("wdr")
              vol=read_adc(7);


              if(vol>50)RUN=1,MOTOR=L,PWM=50,delay_ms(1);

              else MOTOR=S,PWM=0,RUN=0;



              }
              }


              [/LEFT]


              ببین من اینجوری نوشتم مال اوایل کار با این موتور هست ولی توی ورژن بعدی 3 تا پایه سنسور به 3 تا اینتراپت خارجی میکرو دادم و با تغییر وضعیت سنسور ها خروجی ها تغییر دادم
              برای موتور بدون سنسور هم همین وضع هست فقط توی اون سخت افزار خیلی مهمه . با سخت افزار باید بفهمی که کی خروجی ها تغییر بدی

              دیدگاه


                #22
                پاسخ : راه اندازی موتور براشلس بدون سنسور به

                نوشته اصلی توسط sepehr63 نمایش پست ها
                برای موتور بدون سنسور هم همین وضع هست فقط توی اون سخت افزار خیلی مهمه . با سخت افزار باید بفهمی که کی خروجی ها تغییر بدی
                با سپاس فراوان خدمت شما

                رازی به زحمت نبودم ولی شما لطف کردید .و سپاس دارم

                دیدگاه

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