IR2113 çalışmama sebebi nedir ?

Başlatan bulut_01, 19 Nisan 2013, 13:44:15

bulut_01

iyi günler pic proje ailesi bldc sürücüsü yaptım pwm alıyorum mcu dan. ir2113 Hin ve Lin girişlerinde mcu pwm sinyallerini görüyorum gel gelelimki ir2113 Hout ve Lout çıkışlarından sinyal yok boost kapasitör 22uf ve VB baglı diyot 1n4148 ir2113 çıkısından sinyal alamadım giriş frekans 60 hz pwm frekans çok düşük olması neden olabilir mi ?
birde 18f1330 dahili osilatör kullanıyorum PLL açık proteusda çıkış pwm frekansı 3 khz civarındayken devreyi kurdum 60 hz pwm aldım mcu 40 mhz çalıstırmam için kristal bağlamam şartmıdır ? bundanda  birşey anlamadım semayı ve kod asagıdadır simdiden tessekküer ederim yardımlarınız için.

#include <18f1330.h> 
#fuses INTRC_IO,NOWDT,NOMCLR,H4   // PLL açık
#use delay(clock=40M)
#use fast_io(a)
#use fast_io(b) 

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

 int16 P=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,4095,0,1,0); 
   setup_adc_ports(NO_ANALOGS); 
   setup_adc( ADC_OFF );
   setup_comparator(NC_NC_NC);

   set_tris_a(0x00);
   set_tris_b(0x00);
   OUTPUT_B(0x00);

 while(TRUE)
  {

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

DELAY_MS(10);

set_power_pwm4_duty(duty3=0x00);
set_power_pwm2_duty(duty2=P*64);
output_high(pin_b0);

DELAY_MS(10);

output_low(pin_b0);
output_high(pin_b6);

DELAY_MS(10);

set_power_pwm2_duty(duty2=0x00);
set_power_pwm0_duty(duty1=P*64);
output_high(pin_b6);

DELAY_MS(10);

output_low(pin_b6);
output_high(pin_b4);

DELAY_MS(10);

set_power_pwm0_duty(duty1=0x00);
set_power_pwm4_duty(duty3=P*64);
output_high(pin_b4);
DELAY_MS(10);
}
   }
   


YENİLMEZ..

Kabil ATICI

ir2113 daha iyi tanıyorsun.
Sadece şunu soracağım lojik kısmını 12V ile beslerken bu alet nasıl olacakta 5V işlemci çıkışlarına yanıt verecek acaba?
ambar7

Okan AKÇA

sectiginiz malzelere dikkat etmenizi oneririm daha once bende ugraşmıştım sonra tesadüfen çalışmıstı sonradan farkettim kullandıgım malzemeleri degiştirmiştim.   gözle sorunsuz çalıştıgını söyleyebilirim .

z

#3
IR2113 girişleri 3.3v lojik uyumlu.
Pardon bunun geçerli olması için Vdd nin düşürülmesi gerekiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bulut_01

5 tane 2113 değiştir gine çıkış yok semada gözden bi yer varda ben mi göremiyorum hin ve lin pwm sinyali 60 hz frekans çok düşük olmasından olabilir mi bu frekans düşük oldugundan boost kapasitör dolduramıyor mu ondan dolayı çıkışlarda sinyal yok  ? Kodda adladıgım yer var mı görmediğim 18f1330 dahili osilatörde pll açıkken 40 mhz calışması gerekmez mi illa kristal mi gerekli 40 mhz için
YENİLMEZ..

Okan AKÇA


bulut_01

O zaman mcu 40 mhz çalışması için harici osc kullanmak lazım dahili osc pll açık halde 60 hz elde ettim katalog dahili osc ve pll açık iken 40 mhz elde etmem gerekmezmiydi yoksa ben mi yanlış anlamışım.
YENİLMEZ..

Okan AKÇA

#7
dahili osilatör *pll
örnek
osc 8mhz * 4 =32mhz eder


   setup_timer_2(T2_DIV_BY_16,100,1);
   set_pwm1_duty(0);
   set_pwm2_duty(0);

bulut_01

Hpwm de timer kullanmadan bu frekans elde etmemiz lazım değil mi yoksa ben mi yanlış biliyorum bu arada 2113 girişleri lojik uyumlu değil mi ?
YENİLMEZ..

bulut_01

Bu konuda detaylı bilgi verebilirmisiniz ?
YENİLMEZ..

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bulut_01

ir2113 bilmecesini çözdüm bülent hocam vdd 5v ile beslesem hin ve lin girişleri için 5v riskli mcu transistör ile invert edip 12v üzerinden 2113 sürmek en mantıklısı burda hem fikiriz şu 18F1330 dahili osc takıldım 32 mhz PLL açıkken vermesı lazımken vermiyor.
YENİLMEZ..

bulut_01

asagıdakı deneme amaçlı yazdım PLL açık en az 300 khz pwm almam gerekırken 370 hz alıyorum bir el atın arkadaslar pic katili olacam  :o

#include <18f1330.h> 
#fuses INTRC_IO,NOWDT,NOMCLR,H4
#use delay(clock=40M)
#use fast_io(a)
#use fast_io(b) 
  
 int16 duty3=0;

int16 P=250;



   
         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,4095,0,1,0); 
   setup_adc_ports(NO_ANALOGS); 
   setup_adc( ADC_OFF );
   setup_comparator(NC_NC_NC);
 
   set_tris_a(0x00);
   set_tris_b(0x00);
   OUTPUT_B(0x00);

 while(TRUE)
  {

set_power_pwm4_duty(duty3=P*64);
delay_us(1);
set_power_pwm4_duty(duty3=0x00);
delay_us(1);

}
   }
   
YENİLMEZ..

bulut_01

YENİLMEZ..

iyildirim

Bu power PWM konusunu biryerlerden hatırlıyorum.   :)

Eğer diğer ayarlarında değişiklik yoksa periyod değeri 4095 ile 7-8kHz gibi birşey üretiliyordu diye aklımda kalmış.
Öte yandan duty de while döngüsünde PWM periyodundan çok daha kısa bir sürede sürekli değiştiriliyor.

set_power_pwm4_duty(duty3=P*64); Bu satıra ccs ne der bilmiyorum.
duty3=P*64;set_power_pwm4_duty(duty3); şeklinde daha iyi.

Motoru sürerken duty'yi sadece istediğin devire ulaşmak için değiştirmeye ihtiyacın var.  Kullandığın işlemcinin 3 PWM modülüne de aynı duty değerini atayıp komutasyon için de  hall sensörlerden gelen bilgiye göre PWM overwrite registerlerini kullanmak daha kolay olur. 

Bir de duty 64*250 = 16000 verilmiş. Yanlış hatırlamıyorsam duty konfigürasyona göre periyod değerinin en fazla 2 katı gibi birşey olabiliyordu. O da up-down counter modunda.

Pwm için şöyle bi denermisin.

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,4095,0,1,0); 
   setup_adc_ports(NO_ANALOGS); 
   setup_adc( ADC_OFF );
   setup_comparator(NC_NC_NC);
 
   set_tris_a(0x00);
   set_tris_b(0x00);
   OUTPUT_B(0x00);

   set_power_pwm4_duty(2000);

    while(TRUE);
}