kiểm tra hộ cách tạo PWM bằng timer1?
Mình chân thành cảm ơn
Chào mọi người. Mình có 1 câu hỏi cần nhờ các bạn giúp đỡ: Mặc dù trong con 16f887 đã có 2 bộ CCPx nhưng mình muốn dùng Timer1 để tạo ra để tạo xung PWM –nhưng vẫn chưa được! Yêu cầu:dùng dùng bộ chuyển đổi ADC để xác định mức cao cho xung PWM-dùng Timer1 Ghi chú:- T_h,T_l là thời gian mức cao và mức thấp của xung PWM - thạch anh=12MHz. - ADC dùng kênh 1. điện áp tham chiếu 0V và 5V - Dùng ngắt timer1 để thay đổi độ rộng xung. - Tần số PWM=1khz => T_s=1000us. Giải quyết: - Do ta dùng bộ adc để tạo T_h cho PWM nên T_h=(giá_trị_đọc_về/1024)*1000 - tính giá trị mức cao để nạp cho thanh ghi của timer1 mỗi khi có ngắt: value_T1=T_h/(1/3)=3*T_h Register_T1_h=65534-value_T1. - tính giá trị mức thấp để nạp cho thanh ghi của timer1 mỗi khi có ngắt: T_l=1000-T_h Register_T1_l=65534-(T_l/(1/3))=65534-3*T_l. - mình làm như vậy mà sao khi điều chỉnh biến trở mà tần số vẫn không hể thay đổi (chu kì của xung PWM cố định ở 32,29ms chứ kg phải là 1ms) Mình có kèm theo file mô phỏng (proteus). Mong mọi người giúp đỡ. Chân thành cảm ơn. Code:
#include<16f887.h> |
huhu, ai giúp em với ạ !!!!!!
|
Múi giờ GMT. Hiện tại là 08:14 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam