![]() |
![]() |
#11 |
Nhập môn đệ tử
Tham gia ngày: Jun 2008
Nơi Cư Ngụ: Ho Chi Minh city, VietNam
Bài gửi: 1
: |
![]() Em dùng Wizard của CCS 4.065, tạo chương trình xuất xung PWM cho PIC6F877A như sau:
(mục đích là tần số điều xung= 10kHz, 2 xung độ rộng 30% và 80%) #include "F:\TRANNING-PIC\PWM.H" void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_4,124,1); //tần số PWM = 10kHz setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_tris_c(0x00); set_pwm1_duty(150); // độ rộng xung 30% set_pwm2_duty(400); // độ rộng xung 80% setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); while (1); } Mô phỏng bằng Proteus 7.2 cho thấy xung ra bị sai, cả về tần số và độ rộng xung (xin lỗi các bác em chưa biết cách post hình lên) Khi cài lại duty cycle, thì mô phỏng cho thấy xung ra đúng: set_pwm1_duty(37); set_pwm2_duty(100); 2 trường hợp này sai lệch nhau ở hệ số nhân 4 là hệ số chia tần đưa vào timer2. Em đọc Data sheet thấy trường hợp 1 do CCS tự tính giá trị value là hợp với miêu tả về PWM. Tuy nhiên mô phỏng thấy sai. Em có mạch chạy PIC tuy nhiên không có Oscilocope nên không biết thực tế ra sao. Em không biết đây là do CCS sai hay do Proteus mô phỏng sai. Mong các bác giải đáp giúp em với. Em xin cám ơn. |
![]() |
![]() |
|
|