Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

pic 18f1330

Başlatan bulut_01, 17 Eylül 2012, 00:06:13

bulut_01

iyi geceler arkadaslar benım sorunum proteusda yapdıgım blcd brushless motor driver devresinde pwm çıkıs frekans artıramıyorum buda motor yavas dönmesıne neden oluyor pwm 1 khz yakın frekans almam için ne yapmalıyım max 20 hz alabıldım yada benım pc proteus mu öyle gösteriyo pwm sinyallerinin frekans nasıl yükseltirim 800 hz de yeter.
not:proteus mcu clock hızı 20 mhz




#include <18f1330.h> 
#fuses INTRC,NOWDT,NOMCLR
#use delay(clock=20000000) 

#use fast_io(a)
#use fast_io(b) 

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

int16 p=255;  // duty oranı (0-255)
   
int1 f=0;
int1 l=0;
int1 e=0;


 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 );
   
   set_tris_a(0b000000111);
   set_tris_b(0x00);
  
 while(1)
   {
  
 f=input(pin_a0);
 l=input(pin_a1);
 e=input(pin_a2);  
  
  
  if ((f==1)&&(l==0)&&(e==1))        //101
   {
   
  duty3=p*64;
      
      set_power_pwm4_duty(duty3);
     output_high(pin_b4);
    
  }
  else if ((f==1)&&(l==0)&&(e==0))
  {
  set_power_pwm4_duty(duty3*0);
  output_low(pin_b4);
  } 

   if ((f==1)&&(l==0)&&(e==0))          // 100
  {
     
       duty3=p*64;
      set_power_pwm4_duty(duty3);
      output_high(pin_b0);
  }
   else if ((f==1)&&(l==1)&&(e==0))
  {
  set_power_pwm4_duty(duty3*0);
  output_low(pin_b0);
 
}

 if ((f==1)&&(l==1)&&(e==0))          //110
    {
     
  duty2=p*64;
      
      set_power_pwm2_duty(duty2);
     output_high(pin_b0);
     }  
  else if ((f==0)&&(l==1)&&(e==0))   
    {
    set_power_pwm2_duty(duty2*0);
    output_low(pin_b0);
 }

if ((f==0)&&(l==1)&&(e==0))        //010
     
     {
    duty2=p*64;
    set_power_pwm2_duty(duty2);
    output_high(pin_b6);
    }  
   else  if ((f==0)&&(l==1)&&(e==1))
    {
    set_power_pwm2_duty(duty2*0);
    output_low(pin_b6);
    } 
 
  if ((f==0)&&(l==1)&&(e==1))    //011
    
    {
  duty1=p*64;
      
      set_power_pwm0_duty(duty1);
         output_high(pin_b6);
     }
      if ((f==0)&&(l==0)&&(e==1))
     {
     set_power_pwm0_duty(duty1*0);
     output_low(pin_b6);
     }
     
 if ((f==0)&&(l==0)&&(e==1))   //001
   {
     
   duty1=p*64;
      
      set_power_pwm0_duty(duty1);
       output_high(pin_b4);
  
    }
   if ((f==1)&&(l==0)&&(e==1))
  {
  set_power_pwm0_duty(duty1=0x00);
 
  }
  
  delay_ms(1) ;

}
   }
   
YENİLMEZ..

fgokcegoz

PWM frekansının motor hızı ile alakası yokki. Ayrıca 20Hz~1kHz PWM için çok düşük frekanslar.. 10kHz~20kHz arası normal kabul edilebilir seviyedir... Bu inverter anahtarlama frekansı için böyledir. DC-DC çeviriciler için 20kHz bile düşüktür. 100kHz e çıkan uygulamalar mevcuttur. Bu nedenle 1kHz oldukça düşük bir seçimdir, PWM frekansı için..
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

bulut_01

burchless motor calısma frekansı bılmıyorum 1khz yeter diye düsündüm yada 10khz olsun bu frekans cıkmak ıcın yukardakı code  neresı degıstırmem lazım yada ne eklemem lazım koda ki 10 khz almam için ? yukardakı koddan  20 hz fazla alamıyorum.
YENİLMEZ..

Kazım

#3
CCS bilmiyorum ama PWM çıkış frekansını PR2 değeri ile ayarlayabilirsiniz ... CCS 'yi de bırakırsan mecburen registerilerin ne işe yaradığını öğrenmek zorunda olacağından bu soruyu da sorma ihtiyacı duymazsın

The PWM period is specified by writing to the PR2
register. The PWM period can be calculated using the
following formula:

PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)

PWM frequency is defined as 1/[PWM period]

TABLE 8-3: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 20 MHz


PWM Frequency                     1.22 kHz       4.88 kHz        19.53 kHz           78.12kHz      156.3 kHz          208.3 kHz

Timer Prescaler (1, 4, 16)                16                4                  1                          1                  1                         1
PR2 Value                                     0xFFh          0xFFh           0xFFh                    0x3Fh          0x1Fh                 0x17h
Maximum Resolution (bits)             10                 10               10                          8                   7                       5.5


Maximum Resolution--> Duty Sycle Çözünürlüğüdür ..

Bir de CCS ile PWM kullanımı falan , bunlar için kitap alacağına yada library arayacağına aç datasheetini şu 5-6 satırı oku.Bunu anlamak bana senin kodlarının ne anlama geldiğini anlamaktan daha kolay geliyor..

8.3.3 SETUP FOR PWM OPERATION

The following steps should be taken when configuring
the CCP module for PWM operation:

1. Set the PWM period by writing to the PR2 register.

2. Set the PWM duty cycle by writing to the
CCPR1L register and CCP1CON<5:4> bits.

3. Make the CCP1 pin an output by clearing the
TRISC<2> bit.

4. Set the TMR2 prescale value and enable Timer2
by writing to T2CON.

5. Configure the CCP1 module for PWM operation


bulut_01

regıster ayarı bılıyorum ccs c  dırek hangı kodu yazarım bu konuyla ilgili.
YENİLMEZ..

Kazım

#5
Alıntı yapılan: bulut_01 - 17 Eylül 2012, 12:52:01
regıster ayarı bılıyorum ccs c  dırek hangı kodu yazarım bu konuyla ilgili.

Resgisterleri bilipde ayarlamasını bilmemek ??        --->>>>>>>>>>>>>         İşte CCS C budur ........  Yada biraz daha araştır.İlla ki CCS C 'nin bunun için de bir kütüphanesi vardır..Ne diyeyim

Peki sana birşey sorabilirmiyim.Diyelim ki birgün ihtiyaçtan yada meraktan aklına bir proje geldi ve çinden,ordan burdan IC aldın.Nasıl kullanacaksın sen bunu hiç düşündün mü ?

Yadığın mesaj adedine baktım da birhayli mesai harcamış ancak MCU ların internal pheripharellerini bile kavrayamamışsın. Hazır kodları bırakma zamanına gelmiş geçmişsin.Tamam biz de yaptık ama ISRAR ETME Bir sonraki adıma geç artık



bulut_01

Alıntı yapılan: graski - 17 Eylül 2012, 13:35:17
Resgisterleri bilipde ayarlamasını bilmemek ?? :-\       --->>>>>>>>>>>>>         İşte CCS C budur ........  Yada biraz daha araştır.İlla ki CCS C 'nin bunun için de bir kütüphanesi vardır..Ne diyeyim

Peki sana birşey sorabilirmiyim.Diyelim ki birgün ihtiyaçtan yada meraktan aklına bir proje geldi ve çinden,ordan burdan IC aldın.Nasıl kullanacaksın sen bunu hiç düşündün mü ?

Yadığın mesaj adedine baktım da birhayli mesai harcamış ancak MCU ların internal pheripharellerini bile kavrayamamışsın. Hazır kodları bırakma zamanına gelmiş geçmişsin.Tamam biz de yaptık ama ISRAR ETME Bir sonraki adıma geç artık
arkadas bu kod bak bakım kendım  mı yazmısım hazır kod mu ben 18f1330 kullanmadım hiç eger bilgin yoksa bosa yorum yapma ne sen benım kım oldugumu bılıyorsun nede ne kadar elektronık bıldıgımı bılmıyosun 4 katalogdan registir yazdın dıye kendını bırseyler bılıyorsun sanma
YENİLMEZ..

Kazım

#7
+

skara1214

setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,4095,0,1,0);  buradaki rakamları değiştireceksin ccs manuelinde bunların ne oldukları yazıyordur mesela pwm_clock_div_4 ü değiştirirsen otomatikman frekansta değişim olur.
Herkes ölür ama herkes gerçekten yaşamaz

bulut_01

#9
DIV_4 en hızlı hali zaten digerler frekans fazla alakası yok bu 18f1330 farklı register kurcalamak lazım 18f kullanan arkadaslar bu mcu hızlandırmanın yolu bılıyorsa yardım ederse makbule geçer.

mesaj birleştirme:: 17 Eylül 2012, 20:00:24

18f1330 kullanan kimse yok mu ?
YENİLMEZ..

pwm.c

Alıntı yapılan: bulut_01 - 17 Eylül 2012, 15:55:16
18f1330 kullanan kimse yok mu ?
var :)

Hızlı pwm için osilatörü hızlandırmak çözüm olabilir. istersen PLL yi açıp öyle dene bakalım.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-