Chào các anh, hiện nay em đang làm bộ nguồn Flyback. dùng PIC 18F452 để phát xung PWM tần số 100Khz để đóng cắt mosfet, đồng thời phản hồi dòng điện về PIC để thay đổi duty cyle nhằm ổn định dòng điện.
Nhưng không biết code của em sai ở đâu mà khi mô phỏng chỉ phát ra xung chứ không tự động thay đổi duty ( em dùng biến trở nối với cổng analog để giả tín hiệu phản hồi).
Khi nạp code vào PIC thì hoàn toàn không phát được ra xung.
Rất mong các anh xem và chỉ giúp em lỗi sai. Em xin chân thành cảm ơn.
Sau đây là code em viết và file mô phỏng.
Nhưng không biết code của em sai ở đâu mà khi mô phỏng chỉ phát ra xung chứ không tự động thay đổi duty ( em dùng biến trở nối với cổng analog để giả tín hiệu phản hồi).
Khi nạp code vào PIC thì hoàn toàn không phát được ra xung.
Rất mong các anh xem và chỉ giúp em lỗi sai. Em xin chân thành cảm ơn.
Sau đây là code em viết và file mô phỏng.
Code:
#include <18F452.h> #device adc = 8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #use delay(clock=80000000,oscollator=20000000) #int_TIMER1 long duty, value; void TIMER1_isr(void) // ngat timer1 de doc adc va thay doi duty { value = read_adc(); if (value >200) { duty = duty +50; } else {if (value < 200) { duty= duty - 50; } } } void Init_pwm(long duty) // khoi tao pwm { setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_1,199,1); set_pwm1_duty(duty); } void Init_timer1(void) // thiet lap timer1 { setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); } void Init_ADC(void) // khoi tao adc { setup_port_a(ALL_ANALOG); setup_adc(adc_clock_internal); set_adc_channel(0); delay_us(10); } void main() { while(1) { Init_timer1(); Init_pwm(400); Init_ADC(); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); } }
Comment