PDA

View Full Version : Giúp e về code pwm


truc1201
08-11-2011, 11:16 PM
E làm mạch đk 1 động cơ,dùng pic 16f877a, dùng l293d để đảo chiều, điều rộng xung bằng pp pwm.đây là code của e:

#include <16F877A.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected

#use delay(clock=20000000)
void main()

{

// cai PWM bo dieu che xung cho dong co
set_tris_c(0x00);
set_tris_b(0xff);
setup_ccp1(CCP_PWM); // Bat che do PWM cho RC1
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,200,1);//Ta co PR2=199,prescale=1
//Tpwm=[PR2+1]*4*1/clock*prescale=[199+1]*4/20000000*1=40 us
//Fpwm=1/Tpwm=25 kHZ
// set_tris_c(0b00000000);



WHILE(1)
{
set_pwm1_duty(1023);delay_us(40);
set_pwm1_duty(0);delay_us(40);
}
}

Vấn đề gặp phải là dù thay đổi duty nhưng điện áp vào đc k hề thay đổi ( tốc độ k thay đổi đc )....Xin cho e hỏi là code đã sai ở chỗ nào

tdm
09-11-2011, 01:44 PM
E làm mạch đk 1 động cơ,dùng pic 16f877a, dùng l293d để đảo chiều, điều rộng xung bằng pp pwm.đây là code của e:

#include <16F877A.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected

#use delay(clock=20000000)
void main()

{

// cai PWM bo dieu che xung cho dong co
set_tris_c(0x00);
set_tris_b(0xff);
setup_ccp1(CCP_PWM); // Bat che do PWM cho RC1
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,200,1);//Ta co PR2=199,prescale=1
//Tpwm=[PR2+1]*4*1/clock*prescale=[199+1]*4/20000000*1=40 us
//Fpwm=1/Tpwm=25 kHZ
// set_tris_c(0b00000000);



WHILE(1)
{
set_pwm1_duty(1023);delay_us(40);
set_pwm1_duty(0);delay_us(40);
}
}

Vấn đề gặp phải là dù thay đổi duty nhưng điện áp vào đc k hề thay đổi ( tốc độ k thay đổi đc )....Xin cho e hỏi là code đã sai ở chỗ nào
vẫn có xung bình thường . tuy nhiên ccp1 xung ra ở chân RC2.