BLDC sürücüsü ve sorunları

Başlatan bulut_01, 14 Mayıs 2013, 21:48:39

bulut_01

iyi aksamlar picproje ailesi bldc sürücü pcb bastım ve sonunda yaptım ama çalışması anormal videosu çekdiğim motorun hall sensor iptal ettim fazı 120 derece kaydırarak veriyorum ve verim alamadım kodda asagıdadır süreleriyle oynasamda hep aynı şekilde dönüyor  hall sensor olmadan bu motoru nasıl verimli çalıştırırım ?
not : motor bu sekilde çalışdıgında baya ısınıyor.
not 2: mosfet geyt direnclerı 0 ohm dur ve ters diyot eklemedim.
not 3: pwm sinyali 15 khz dir.

BLDC sürücü

#include <18f1330.h>
#device adc=10
#fuses INTRC_IO,NOWDT,NOMCLR
#use delay(clock=32M)
#define OSC_PLL_ON
#define OSC_32MHZ
#use fast_io(a)
#use fast_io(b) 

int16 duty1=0;
int16 duty2=0;
int16 duty3=0;
int16 P=0;

int16 f=100;
int8  c=50;

           void main()
{
   
   setup_power_pwm_pins(PWM_odd_on,PWM_odd_on,PWM_odd_on,PWM_odd_on);
   setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,100,0,1,0); 
   
   setup_adc(adc_clock_INTERNAL);
   setup_adc_ports(AN0|VSS_VDD);
   set_adc_channel(0);
   setup_comparator(NC_NC_NC); 
   set_tris_a(0b000000001);
   set_tris_b(0b000001100);
   OUTPUT_B(0x00);

  while(TRUE)
{
set_adc_channel(0);
delay_us(10);
P=Read_adc();
P=P/3;

output_low(pin_b4);
set_power_pwm4_duty(duty3=P);
output_high(pin_b0);

DELAY_ms(c);

set_power_pwm4_duty(duty3=0x00);
DELAY_ms(f);
set_power_pwm2_duty(duty2=P);

DELAY_ms(c);

output_low(pin_b0);
output_high(pin_b6);

DELAY_ms(c);

set_power_pwm2_duty(duty2=0x00);
DELAY_ms(f);
set_power_pwm0_duty(duty1=P);

DELAY_ms(c);

output_low(pin_b6);
output_high(pin_b4);

DELAY_ms(c);

set_power_pwm0_duty(duty1=0x00);
DELAY_ms(f);
set_power_pwm4_duty(duty3=P);

DELAY_ms(c);

}
}
YENİLMEZ..

skara1214

Herkes ölür ama herkes gerçekten yaşamaz

bulut_01

#2
back emf biliyorum peki back emf yapmadan motor sürülebilir mi ?
bldc uzman arkadaşlar yardımlarınızı bekliyorum.
YENİLMEZ..

AsHeS

Madem konusu var bende bir soru sorayım aşağıda ki gibi bir kodla sensörlü BLDC sürmeye çalışıyoruz.
unsigned char hall;
    TRISB=0x00;
    TRISD=0xFF;
   hall=PORTD&0x07;
    PORTB=0x00;      
   while(1){
         hall=(PORTD>>5)&0x07;
       switch(hall){
           case 1:
               PWM0=0;//L1 aç?k
               PWM1=1;//H1
               PWM2=0;//L2
               PWM3=0;//H2
               PWM4=1;//L3
               PWM5=0;//H3 aç?k
               break;
           case 2:
               PWM0=0;//L1
               PWM1=0;//H1
               PWM2=1;//L2
               PWM3=0;//H2 aç?k
               PWM4=0;//L3 aç?k
               PWM5=1;//H3
               break;
            case 3:
               PWM0=0;//L1 aç?k
               PWM1=1;//H1
               PWM2=1;//L2
               PWM3=0;//H2 aç?k
               PWM4=0;//L3
               PWM5=0;//H3
               break;
           case 4:
               PWM0=1;//L1
               PWM1=0;//H1 aç?k
               PWM2=0;//L2 aç?k
               PWM3=1;//H2
               PWM4=0;//L3
               PWM5=0;//H3
               break;
           case 5:
               PWM0=0;//L1
               PWM1=0;//H1
               PWM2=0;//L2 aç?k
               PWM3=1;//H2
               PWM4=1;//L3
               PWM5=0;//H3 aç?k
               break;
           case 6:
               PWM0=1;//L1
               PWM1=0;//H1 aç?k
               PWM2=0;//L2
               PWM3=0;//H2
               PWM4=0;//L3 aç?k
               PWM5=1;//H3
               break;
           default:
               PORTB=0x00;
               break;

       }

        }

Bu kodla motor dönüyor ama beklediğimiz kopmayı yapamıyor bir türlü 30000 devri bulmuyor en fazla 10-15 bin devir hissi veriyor.
İkinci sorum şu olsun motoru döndürürken iki tane komutasyon yöntemi planladım birincisi sensörlerden gelen bilgiye göre faz değişimini yavaşlatmak yani yukarıda ki döngüyü diyelim ki 1 ms de bir yaparsam 1 sonraki hareketi yapmadığım için motor yavaşlamış olur ama bu sefer motorun sahip olduğu hızdan dolayı kendiliğinden dönerek aynı noktaya gelme durumu ve buna müteakip motorun hızını sabitleme durumu var mıdır ?İkinci olarak planladığım yöntem sensörle belirlediğim iki faza pwm sinyali göndererek hız kontrolü yapmak hangisini önerirsiniz ve de artı eksileri nelerdir ?
http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=9821

Saruman

Alıntı yapılan: AsHeS35 - 15 Mayıs 2013, 16:32:29
Madem konusu var bende bir soru sorayım aşağıda ki gibi bir kodla sensörlü BLDC sürmeye çalışıyoruz.
unsigned char hall;
    TRISB=0x00;
    TRISD=0xFF;
   hall=PORTD&0x07;
    PORTB=0x00;      
   while(1){
         hall=(PORTD>>5)&0x07;
       switch(hall){
           case 1:
               PWM0=0;//L1 aç?k
               PWM1=1;//H1
               PWM2=0;//L2
               PWM3=0;//H2
               PWM4=1;//L3
               PWM5=0;//H3 aç?k
               break;
           case 2:
               PWM0=0;//L1
               PWM1=0;//H1
               PWM2=1;//L2
               PWM3=0;//H2 aç?k
               PWM4=0;//L3 aç?k
               PWM5=1;//H3
               break;
            case 3:
               PWM0=0;//L1 aç?k
               PWM1=1;//H1
               PWM2=1;//L2
               PWM3=0;//H2 aç?k
               PWM4=0;//L3
               PWM5=0;//H3
               break;
           case 4:
               PWM0=1;//L1
               PWM1=0;//H1 aç?k
               PWM2=0;//L2 aç?k
               PWM3=1;//H2
               PWM4=0;//L3
               PWM5=0;//H3
               break;
           case 5:
               PWM0=0;//L1
               PWM1=0;//H1
               PWM2=0;//L2 aç?k
               PWM3=1;//H2
               PWM4=1;//L3
               PWM5=0;//H3 aç?k
               break;
           case 6:
               PWM0=1;//L1
               PWM1=0;//H1 aç?k
               PWM2=0;//L2
               PWM3=0;//H2
               PWM4=0;//L3 aç?k
               PWM5=1;//H3
               break;
           default:
               PORTB=0x00;
               break;

       }

        }

Bu kodla motor dönüyor ama beklediğimiz kopmayı yapamıyor bir türlü 30000 devri bulmuyor en fazla 10-15 bin devir hissi veriyor.
İkinci sorum şu o
lsun motoru döndürürken iki tane komutasyon yöntemi planladım birincisi sensörlerden gelen bilgiye göre faz değişimini yavaşlatmak yani yukarıda ki döngüyü diyelim ki 1 ms de bir yaparsam 1 sonraki hareketi yapmadığım için motor yavaşlamış olur ama bu sefer motorun sahip olduğu hızdan dolayı kendiliğinden dönerek aynı noktaya gelme durumu ve buna müteakip motorun hızını sabitleme durumu var mıdır ?İkinci olarak planladığım yöntem sensörle belirlediğim iki faza pwm sinyali göndererek hız kontrolü yapmak hangisini önerirsiniz ve de artı eksileri nelerdir ?
http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=9821

Kullandigin motor kac kutuplu ?

AsHeS

Alıntı yapılan: silvercopper - 15 Mayıs 2013, 18:33:18
Kullandigin motor kac kutuplu ?
Verdiğim linkte yazmıyor(datasheet) motorun içi zaten gözükmüyor kısacası bilmiyorum ama dışarıdan öğrenme yolu varsa anlatırsanız söyleyebilirim ancak.

Saruman

#6
Motorun miline kapakçık gibi bir şey takıp üzerini işaretleyeceksiniz, sensör beslemesini de bağlayın, herhangi bir sensör çıkışını PULL UP direnci ile 5Va bağlayın, sensör çıkışına bir adet sayıcı koyun, motor milini 1 tur döndürün ve sayıcının kaç değerini gösterdiğini gözlemleyin.

Özetle mil 1 tur döndüğünde sensör çıkışı kaç defa sıfıra düşüyor bunu ölçeceksiniz.

Bu sayı size kutup çiftlerini ( pole pairs  ) ifade edecek, 2 ile de çarpınca kutup sayısını bulmuş olacaksınız.

Kutup çiftini bilmemiz yeterlidir.