[HỌC AVR] Bài 5: TẠO XUNG ĐIỀU RỘNG PWM VỚI AVR

0
1481

[HỌC AVR] Bài 5: TẠO XUNG ĐIỀU RỘNG PWM VỚI AVR

Chú ý : Source code bài viết dưới đây được biên dịch bằng phần mềm CodeVisionAVR để biên dịch code không lỗi xin vui lòng Download bảnCodeVisionAVR Tại Đây

XIN CHÀO CÁC BẠN!
Trong bài viết này, tôi xin hướng dẫn cho các bạn sử dụng một chế độ mới trong các bộ TIMER của AVR, đó là tạo xung điều rộng PWM. Ở đây tôi dùng Timer1 của Atmega8, trình biên dịch CodeVisionAVR.

I.CÁC KHÁI NIỆM TRONG ĐIỀU CHẾ PWM.

1.Điều chế PWM là gì?
Các bạn có thể hiểu đơn giản điều chế PWM là thay đổi duty cycle (khoảng thời gian tín hiệu ở mức cao) trong một chu kỳ (Time period) cố định, qua đó làm thay đổi điện áp trung bình cấp ra tải (sử dụng để thay đổi vận tốc động cơ DC,…).

Ta có:
T: chu kỳ của xung.
T1: là thời gian xung ở mức cao.
Hệ số điều chỉnh D(%): D = T1/T.
-Điện áp lớn nhất cấp cho tải: Udmax
-Điện áp trung bình cấp cho tải khi có PWM: Ud = Udmax.D

2.Điều chế PWM với Atmega8.

Bộ Timer1 của Atmega8 cung cấp cho chúng ta 2 kênh tạo xung điều rộng PWM:
-Kênh A: tín hiệu ra ở OC1A (PORTB.1)
-Kênh B: tín hiệu ra ở OC1B (PORTB.2)
Cùng nhiều chế độ tạo PWM (các bạn tham khảo thêm ở Datasheet) ở đây tôi sẽ nói rõ cho các bạn chế độ Fast PWM, mode 14 (Kênh A).
ØCác bạn thiết lập dạng tín hiệu PWM ra trên thanh ghi TCCR1A .
ØKhi hoạt động, ban đầu chân OC1A ở mức cao (tùy vào dạng tín hiệu PWM ra bạn chọn ở trên), TCNT1 tăng giá trị từ 0 cho đến khi bằng giá trị trên thanh ghi OCR1A thì chân OC1A được xóa về 0. TCNT1 vẫn tiếp tục tăng đến khi bằng giá trị trong thanh ghi ICR1 thì TCNT1 reset về 0 và chân OC1A được kéo lên mức cao.

Vì vậy ở đây, các bạn có thể thiết lập:
ØGiá trị của ICR1: là chu kỳ xung.
ØGiá trị của OCR1A: là thời gian xung ở mức cao.
Như vậy các bạn đã tạo ra được xung điều rông PWM với hệ số điều chỉnh tùy ý.

II.BÀI TOÁN VÍ DỤ

Để các bạn hiểu rõ hơn, tôi xin đưa ra bài toán:

Tạo PWM trên kênh A của vi điều khiển Atmega8 có chu kỳ 20ms, D1 = 50%:
ØKhi có ngắt ngoài 0, PWM có D2 = 75%.
ØKhi có ngắt ngoài 1, PWM có D3 =25%.
Với bài toán này, tôi cấu hình tần số Timer1 để sau 1us thì TCNT1 tăng 1 đơn vị:
ØChu kỳ T = 20ms = 20000us à ICR1 = 20000.
ØD1 = 50% à Thời gian trên mức 1 là 10us à OCR1A = 10000.
ØD2 = 25% à OCR1A = 5000.
ØD3 = 75% à OCR1A = 15000.

-Cấu hình tạo PWM với CodeVision:
Tạo Project mới à chọn CodeWizardAVR à chọn Timers à Chọn Timer1

Các bạn chọn:
-Chế độ tạo PWM ở Mode
-Dạng xung PWM xuất ra ở Out. A
-Giá trị của OCR1A ở Comp.A
-Giá trị của ICR1 ở Inp Capture

Code:

Các bạn có thể tham khảo code mẫu và mô phỏng Tại đây:

 

Trao đổi học tập

Comments