bldc motor sürücü problem

Başlatan irdal, 24 Aralık 2014, 18:27:22

irdal


hébergement gratuit d'images

Bitirme tezi için bldc motor sürücü devresi yapmaktayım. Mosfet sürücü olarak tlp 251  kullandım,mosfetler irf540. Motor olarak e-scooter ların hub motorunu kullanmaktayım (36 V 250W). Motor sensörlü olduğu için sensör verisine göre pic de(18f4431) durum kesmesi yaparak fazları değiştiriyorum. Fazların değişiminde bi sorun olmuyor, komutasyon işlemi olması gerektiği gibi çalışmaktadır.Motora enerji verdiğimde motorda titreme oluşuyor sonra benim mosfetlerde aşırı ısınma meydana geliyor ve nur topu gibi bi çift yanım mosfetim oluşuyor . 16khz de anahtarlama yapıyorum, turn of-on zamanı için 1usn lik dead time ekledim mosfetleri korumak için lakin ısınmanın önüne geçemedim. Half bridge yapıyı breadboard a kurduğumda istediğim gibi mosları iletime sokuyorum, hiç ısınma olmuyor. Hiç endüktif yüklerle çalışmadım, di(t)/dt den oluşan spike  dan  süphelendim ve VDSSgerilimi 100V olan mosfetlerle değiştirdim gene de durum aynı. Kodlarımı tekrar tekrar kontrol ettim gene bi sonuca ulaşamadım, dışardan birinin daha efektif bakacağını düşünüyorum.


Kodum aşağıda ki şekilde


#byte CAP1CON=0xF63
#byte CAP2CON=0xF62
#byte CAP3CON=0xF61
#byte OVDCOND=0xF6B
#byte OVDCONS=0xF6A
#byte PWMCON0=0xF6F
#byte PWMCON1=0xf6e
#byte PTCON0=0xf7f
#byte PTCON1=0xf7e
#byte PTPERL=0xf7b
#byte PTPERH=0xf7a

int hall_value;
int a=1;
#int_IC3DR
void  IC3DR_isr(void)
{
hall_value=input_a();
hall_value&=0x1C;
OVDCOND=0b00000000;
OVDCONS=0b00000000;
delay_cycles(10); // 1usn delay
switch(hall_value)
{
case 0x04:
OVDCOND=0b00010010;  // A(V+) C(V-)
break;
case 0x0c:
OVDCOND=0b00000110; // A(V+)  B(V-)
break;
case 0x08:
OVDCOND=0b00100100; // C(V+) B(V-)
break;
case 0x18:
OVDCOND=0b00100001;// C(V+) A(V-)
break;
case 0x10:
OVDCOND=0b00001001;// B(V+) A(V-)
break;
case 0x14:
OVDCOND=0b00011000; // B(V+) C(V-)
break;
default:
OVDCOND=0b00000000;
OVDCONS=0b00000000;
break;
}

clear_interrupt(INT_IC1);
clear_interrupt(INT_IC3DR);
clear_interrupt(INT_IC2QEI);
}

#int_IC2QEI
void  IC2QEI_isr(void)
{
IC3DR_isr();
return;
}

#int_IC1
void  IC1_isr(void)
{
IC3DR_isr();
return;
}



void main()
{

   setup_adc_ports(sAN1|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   enable_interrupts(INT_IC3DR);
   enable_interrupts(INT_IC2QEI);
   enable_interrupts(INT_IC1);
   enable_interrupts(GLOBAL);
   PWMCON0=0b01001111; // pwm independent mode
   PWMCON1=0b00000001;
   PTCON0= 0b00000100;
   PTCON1= 0b10000000;
   PTPERH=0x00;
   PTPERL=0x4c; // Pwm freq =16 khz
   CAP1CON=0x48;
   CAP2CON=0x48; 
   CAP3CON=0x48;
   OVDCOND=0b00000000;
   OVDCONS=0b00000000;
   set_tris_a(0xff);
   set_tris_b(0x00);

while (1)
{
if(a==1);
{
IC3DR_isr(); //first start
--a;
}
set_power_pwm0_duty(400);
set_power_pwm2_duty(400);
set_power_pwm4_duty(400);
}   

}

FxDev

Öğrenci kardeşim,

Devrende bir akım ölçüm noktası görememekteyim. Mosfetlerinin yanma nedeni akımdan dolayıdır. Motor dönmezken, bir tel parçası gibi kısa devredir aslında. Sen bu akım kontrolünü yapamaz isen devren her zaman yanmaya mahkumdur. Sana önerim, bir akım sensörü, bir adet half bridge ve bir adet normal fırçalı DC motor ile akım kontrolü üzerine çalışman. Akımı yazılımsal olarak okuduktan sonra istediğin akımda motor kitli rotor/yükte ya da yüksüz olduğunda kontrol yapabiliyorsan bundan sonraki kısımların aynını BLDC için de uygulayacaksın.

Kolay gelsin.
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

irdal

#2
akım ölçümü yapıyorum, h bridge yapıda ki power beslemesinden önce acs 712 (akım sensörü)ile akım okuyorum,yani bridge yapıya giren akımı okuyorum,akşam yoğunluktan bir önceki versiyonunu yollamışım devrenin. 30 A kadar ölçüm olanağım var.Devrenin en düzgün halini tekrar upload edeceğim kusura bakmayın. Aşırı akım konusu aklıma geldi, bu yüzden pwm duty i çok düşük tuttum gene aynı sonuçu elde ettim. Akım kontrolü olayını biraz açarsanız üzerine hemen yoğunlaşırım. Kısa soluklu proje değil, tez olduğu için mutlaka çalıştırmak gibi bi düşüncem yok,neden çalışmadığını öğrenmem gerek ,merakımı gidermem için

hasankara

ilk olarak dikkatimi çeken nokta, high side için n tipi mos kullanmışsın ve mosfet sürücünün gnd si faz a bağlanmış daha önce bu tip bir bağlantı görmemiştim bu şekilde bootstrap yapıyor mu emin olamadığım için, mosfetlerinin Vgs sinyalini osilaskopta inceleyip low iken kaç volt high iken kaç volt olduğunu inceleyebilirsin.

bir komutasyon süresince; bir faza pwm uygularken diğer faza tam dolu sinyal uygulayıp 3. fazı da boşa alacak şekilde yazılımı ayarlamanın sonucunda fayda görebilirsin. diğer bir deyişle, iki faza pwm uygulayıp 3. fazı boşa alacak şekilde sinyal uygulayınca mosfet ve mosfet sürücüleri bu durumdan pek memnun kalmayabilir. bu konudaki anahtar kelime ise demanyetizasyon olmakta.

irdal

Alıntı yapılan: hasankara - 25 Aralık 2014, 02:26:47
ilk olarak dikkatimi çeken nokta, high side için n tipi mos kullanmışsın ve mosfet sürücünün gnd si faz a bağlanmış daha önce bu tip bir bağlantı görmemiştim bu şekilde bootstrap yapıyor mu emin olamadığım için, mosfetlerinin Vgs sinyalini osilaskopta inceleyip low iken kaç volt high iken kaç volt olduğunu inceleyebilirsin.

bir komutasyon süresince; bir faza pwm uygularken diğer faza tam dolu sinyal uygulayıp 3. fazı da boşa alacak şekilde yazılımı ayarlamanın sonucunda fayda görebilirsin. diğer bir deyişle, iki faza pwm uygulayıp 3. fazı boşa alacak şekilde sinyal uygulayınca mosfet ve mosfet sürücüleri bu durumdan pek memnun kalmayabilir. bu konudaki anahtar kelime ise demanyetizasyon olmakta.

High side da p tipi mos kullanmadım rds(on) direncinin fazla olmasından dolayı,yüksüz çalıştıracağım için sorun olmazdı lakin biraz daha zorlamak istedim kendimi n tipini high side kullanarak . High side mos driverin gnd sini faza bağlamamış olsaydım bağımsız kaynak kullanmak gerekecekti. Sadece high side ı kurup motor ve şerit led bağladım anahtarlamada sorun çıkmadı, lakin bu yükler fazla akım çekmediğinden çok tatmin olmadım yaptığım deneyden.

Half bridge yapıda herhangi bi anda secili olan high ve low side a pwm sinyali gönderiyorum dediğiniz gibi, low side mos a tam dolu sinyal göndermedim kayıpları azaltmak amacı ile. Demagnetizasyon olayından açıkcası haberim yoktu, google da arama yapınca da çok sağlıklı veriler elde edemedim. Fakülteye gidip ieee de biraz daha araştırma yapmam gerekebilir. Eğer low side ı tamamen on yapacaksam donanimında değişmesi gerekebilir ,bildiğim kadarı ile yaptığım devrede  duty kullanmak zorundayım yükü sürmek için

hasankara

irdal, bootstrap yok şeklinde kesin konuşmadım, belki oluyordur diyot vs takılmış yine de bir kontrol et dedim. şuradan da yola çıkabilirsin; eğer motor takınca fazla ısınma oluyorsa ve bu ısınma high side mosfeti ile low side mosfeti arasında bariz bir sıcaklık farkı da oluyorsa büyük ihtimalle mosfet sürme kısmında eksikliğin vardır diyebiliriz.

F.T

high side mosfeti izoleli voltajdan sürmen lazım.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

irdal

Alıntı yapılan: hasankara - 25 Aralık 2014, 18:59:57
irdal, bootstrap yok şeklinde kesin konuşmadım, belki oluyordur diyot vs takılmış yine de bir kontrol et dedim. şuradan da yola çıkabilirsin; eğer motor takınca fazla ısınma oluyorsa ve bu ısınma high side mosfeti ile low side mosfeti arasında bariz bir sıcaklık farkı da oluyorsa büyük ihtimalle mosfet sürme kısmında eksikliğin vardır diyebiliriz.

sitem kokan bi yanıt vermedim ,öyle anlaşılmasın aman. Her türlü yoruma açığım. High side ı  bread boarda kurup test ettim anahtarlama yapabiliyordum. Yüksek akımlar çekmedim ama. Motor hiç dönmüyor sıkıntı orda, titreşiyor sonra moslara elveda demek zorunda kalıyorum. FxDev akım konusu hatırlattıktan sonra biraz kurcalayınca I=(V-Vbemf)/R*(1-exp(-Rt/Lm)) formülünden, başlangıç anında yüksek akımlar çekiyorum.En çok süphelendiğim konu bu. Sizin dediğiniz bir kez başıma geldi önce high side aşırı ısındı sonra low side mos da ısınmaya başladı ve mosları yaktım. Soft start yazılımını yazdıktan sonra fakültede osilaskop ile kontrol etmem lazım. High side kısmı benimde süphelendiğim ikinci kısım

FxDev

High side mosfetler yukarıdaki şemadaki haliyle sürülebilir. PWM %100 açmasın yeter.
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!