Ðề tài: giup e voi
View Single Post
Old 01-01-2010, 04:51 PM   #3
minhcuong1122
Đệ tử 1 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 17
:
Sao bạn không cho mọi người biết bạn đã biết những gì nhỉ. Chắc bạn đã xem datasheet rồi đúng hok, trong phần PWM có một cái hình gồm thanh ghi PR2, TMR2, CCPRxH, CCPRxL. Hãy nhìn kĩ cái hình đó đi.
Hãy hình dung đơn giản vầy thôi.
Bạn nạp giá trị cho PR2 để timer2 đếm, khi đến PR2+1 thì nó tràn, bộ so sánh sẽ so giá trị đếm trong TMR2 với PR2 để biết khi nào nó tràn. Khi timer2 tràn thì bộ so sánh sẽ xuất tín hiệu set ngõ ra xung PWM lên [1], tự nạp lại giá trị cho PR2. Thời gian giữa 2 lần set xung như vậy là một chu kì xung PWM (PWM period)
Vậy còn PWM duty ? PWM DUTY là thời gian mà xung giữ mức [1] tính từ khi bắt đầu 1 chu kì xung mới. Hết PWM duty thì xung ngõ ra sẽ về lại [0]. Duty được tính theo công thức trong datasheet, bạn cần nạp giá trị này vào thanh ghi 10 bits ghép bởi CCPRxH và 2 bit timer2 prescaler (xem lại cái hình nhá)
Hồi nãy khi bắt đầu chu kì mới thì TMR2 trở về 0 và set ngõ ra lên [1]. Bộ so sánh sẽ so TMR2 với thanh ghi duty, khi TIMR2 đếm tới giá trị duty thì xuất ngõ ra về [0]. TIMER2 vẫn đếm tiếp đến khi bằng PR2 thì lại tràn... set lại xung lên 1 và.........cứ vậy...
Vậy nên việc cần làm để tạo xung PWM bằng module có sẵn là:
Khai báo timer 2, bộ chia timer2, nạp giá trị cho PR2 (tính theo công thức để có period bạn cần).
Khai báo bộ so sánh ở chế độ PWM
Nạp giá trị cho thanh ghi duty (lại tính )
CCS có sẵn hàm setup_timer_2() để khai báo timer2, setup_ccp1() hoặc setup_ccp2() để khai báo chức năng PWM cho bộ so sánh (tùy bạn muốn CCP mấy 1 hoặc 2), set_pwm1_duty() để chọn duty (giá trị tính ra từ công thức)(cũng tùy PWm1 hoặc 2), và set_timer2(0); để cho timer2 bắt đầu đếm.
và nhớ còn một điều nữa, chân xuất xung là CCP1 hoặc CCP2, nằm ở port C nên phải set các chân này là ngõ ra nhá.

Bạn nên cho mọi người biết mình đã tìm hiểu tới đâu nhé để họ biết nên bắt đầu giúp từ đâu. (Hi, nhỡ bạn là cao thủ thì lại... múa rìu.. qua mắt thợ.) Mong giúp được bạn gì đó.
Thân.

thay đổi nội dung bởi: minhcuong1122, 01-01-2010 lúc 05:22 PM.
minhcuong1122 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn