PDA

View Full Version : Cần giúp về tính toán thông số cho PWM - PIC18F4431


superman136
26-07-2010, 03:06 PM
Các anh ơi, em là newbie mới tập học về PIC bằng CCS, em đang làm 1 cái đồ án về điều khiển Brushless DC motor. Mà cái động cơ của em sử dụng 1 ESC (tức là 1 driver giúp điều khiển động cơ đó). Công việc còn lại là chỉ cần cấp nguồn và xung vuông PWM cho cái ESC với đúng tần số yêu cầu - 50Hz là nó chạy thôi. Nhưng không hiểu sao em đã config các thông số của (setup_power_pwm) rất kĩ rồi mà vẫn ko ra đúng 50Hz. Các bác xem giúp em cái code với ạh. :
#include <18f4431.h>
#include <DEFS_18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#include <lcd_4bit.h>
#define use_portd_lcd true
int16 duty_cycle0=0;
int16 duty_cycle0_x=0;
int16 dem=0;
int16 xung=0;
int16 rps=0;
void display_lcd();
#INT_EXT
void ngatngoai0()
{
xung++;
INT0F=0;
}
#INT_PWMTB
void interrupt_pwmtb()
{
dem++;
if (dem==5)
{
rps=xung;
dem =0;
xung=0;
}
}
void main()
{
set_tris_b(0); // port B la xuat
portb=0;
set_tris_c(0b00001000);
portc=0b00000110;
set_tris_d(0);
portd=0;
set_tris_a(0xff);
porta=0xff;
lcd_init();//setup LCD

PTCON1=0b10000000; //setup power PWM // dung che do ngat time base
SETUP_POWER_PWM(PWM_CLOCK_DIV_64|PWM_FREE_RUN,1,0, 938,0,1,0);// 12M/4/64/937.5=50hz hay chu ki là 20ms
SETUP_POWER_PWM_PINS(PWM_COMPLEMENTARY,PWM_OFF,PWM _OFF,PWM_OFF);
set_power_pwm0_duty(0);
duty_cycle0=150;

display_lcd();
enable_interrupts(INT_PWMTB);
enable_interrupts(INT_EXT); //interrupts
EXT_INT_EDGE(L_TO_H);
enable_interrupts(global);
while(1)
{
display_lcd();

SET_POWER_PWM0_DUTY(duty_cycle0);
if(RC1==0)
{
delay_ms(50);
if(RC1==0)
{
if(duty_cycle0>=3600)
duty_cycle0=3600;
else duty_cycle0=duty_cycle0+50;
duty_cycle0_x=duty_cycle0*53/500;
}
}
if(RC2==0)
{
delay_ms(50);
if(RC2==0)
{
if(duty_cycle0<=150)
duty_cycle0=150;
else duty_cycle0=duty_cycle0-50;
duty_cycle0_x=duty_cycle0*53/500;
}
}
}
}
void display_lcd()
{
lcd_setposition(0x00);
printf(lcd_putc,"h_p=%lu",duty_cycle0_x);
lcd_setposition(0x40);
printf(lcd_putc,"RPM=%lu",rps*30);
}

PS: em đã xem cách tính đó trong datasheet không biết có đúng không?

hovanphu
19-11-2010, 11:11 PM
đây là file exell tính PWM của mình
bạn tham khảo thử
không biết có đúng không
mình cũn mới vào nghề.
nhờ anh em chỉ giúp