C dilinde mplap da pwm ile dc motor hız kontrolu

Başlatan akayım, 25 Aralık 2011, 17:08:40

akayım

arkadas lar mplap pwm ile dc motor kontrolunu  yazamıyorum  yeniyim bu konuda  yardımcı olurmusunuz ??

justice_for_all

bazı sorularım olacak

hangı derleyıcıyı kullanıyosunuz?
hangı denetleyiciyi kullaniyosunuz?
programinizi gorebilirmiyim?
bide devre semanizi
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

MrDarK

akay C dilinde hazırlanmış bir pwm programında yapman gereken tek şey,

CCPR1L değerini 0 - 255 arası değiştirmen. Bunu ister butonla yap istersen belirli bir süreden sonra yap.

Bu arada CCPR1L pwm'in duty cycle değerinin yüzdesidir. Duty Cycle ise kare dalganın + seviyede kalma süresi olarak düşünebilirsin.

Bu konuyu takip edicem , öncelikli olarak kendinin bişeyler yapman gerektiğini düşündüğümden şimdilik bu kadarlık bilgi veriyorum. Biraz konuyu araştır bakalım ;)
Picproje Eğitim Gönüllüleri ~ MrDarK

akayım

aslında söle diyim ex8b2 boards aldık pwm ile dc motor hız kontrolü yapıcaz bir turlu beceremedık mplap programında bu salı proje son gun hocamız yardımcı olmuyor(aslında kendı de bilmiyo:)) arastırın fln hep .. yazabılırmısın acaba

akayım

biraz daha ayrınlı olabilirmisiz

duty ile

float duty=veri*50; 

hepsini karıstırdm

akayım

     mplap ta yazdım ama hatayı anlayamdm mr bi bakabilirmisin
 

#include <pıc.h>
void main(void)
{
char i=100;
ADCON1=0x07;
TRISA=0x03;
TRISC=0x00;
PORTA=0x00;
PORTC=0x00;
CCPR1L=0x15E;
CCP1X=1;
CCP1Y=0;
T2CKPS1=1;
T2CKPS0=1;
TOUTPS3=0;
TOUTPS2=0;
TOUTPS1=0;
TOUTPS0=0;
CCP1M0=1;
CCP1M1=1;
CCP1M2=1;
CCP1M3=1;
TMR2ON=1;
for(;;)
{
if(RA0)
{
while(RA0);
i-=5;
if(i<65)
i=65;
}
if(RA1)
{
while(RA1);
i+=5;
if(i>250)
i=250;
}
PR2=i;
}
}

justice_for_all

hitech derleyicin yuklumu mplabla birlikte ?cunku programi onla yazmissin
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

MrDarK

Hata ne bilmiyorum ama PR2 registeri daha çok pwm'in frekansını belirlemekte kullanılır. Aslında frekansı değiştirerekte motorun gerilimini değiştirebilirsin. Ama bana kalırsa sen şu satırı değiştir ;

Programın başında CCPR1L=0x15E yazıyor bunu CCPR1L=100 yap.

PR2=i satırını aşşağıdaki kodla değiştir.

--------------
CCPR1L=i;

--------------

Bu sayede sadece duty cycle değerini değiştirmen gerekir. bu kod proteusta falan çok rahat çalışır ama kodunun başında Config vb ayarları göremedim.

Kodlarıda fırat deveci arkadaşımız (fxdev)'in kitabından almışsın sanırsam :)

Örnek bir config ibaresi ;
   
__CONFIG (UNPROTECT & WDTDIS & HS & LVPDIS & PWRTDIS & BORDIS & MCLRDIS);   // Konfigürasyon verileri yüklendi

   #define _XTAL_FREQ 8000000   // Kullanılan kristal değeri 8Mhz ise HS 8mhz altı bir değerde ise Configde XT yazmalısın.
Picproje Eğitim Gönüllüleri ~ MrDarK