![]() |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 1
: |
Cần giúp về tính toán thông số cho PWM - PIC18F4431
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. :
Code:
#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); } thay đổi nội dung bởi: superman136, 26-07-2010 lúc 06:42 PM. |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Dec 2008
Bài gửi: 2
: |
đâ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 |
![]() |
![]() |
![]() |
|
|