BÀI 5: ĐIỀU CHẾ ĐỘ RỘNG XUNG PWM, ADC
5.1. Lập trình điều chế độ rộng xung
- Kỹ thuật điều chế độ rộng xung
PWM(Pulse-Width Modulation)còn gọi là chức năng “điều chế độ rộng xung” được ứng dụng rất nhiều trong các lĩnh vực điện tử, điều khiển... Chức năng này thực chất là thay đổi giá trị trung bình của điện áp(dòng điện,...) bằng cách điều chỉnh độ rộng xung kích mức cao trong một chu kỳ. Chức năng này thường được ứng dụng trong việc điều chỉnh điện áp đầu ra, điều chỉnh tốc độ của động cơ DC...
Bộ điều chế độ rộng xung tạo xung hình chữ nhật trên 2 chân RC1/CCP2 và RC2/CCP1- giá trị xung ở 2 chân là ngược nhau(bù nhau). Thực ra đây là một chức năng của modun CCP gồm 3 chức năng: Comparation, Capture, PWM Nguyên lý tạo xung như sau:
Khi Thanh ghi bộ đếm của bộ định thời Timer 2 đạt giá trị bằng giá trị của thanh ghi PR2, đầu ra xung RC2/CCP1 được set lên mức cao. TMR2 được reset về 0, sau đó đếm lên, khi TMR2 đạt giá trị bằng độ rộng xung, chân RC2/CCP1 được reset về 0. TMR2 tiếp tục đếm lên cho đến khi bằng giá trị PR2 thì chu trình sẽ lặp lại như lúc đầu. Xung ra ở chân RC1/CC21 là bù của xung trên chân RC2/CCP1.
- Cài đặt mô đun điều chế độ rộng xung:
Chu kỳ xung:
Để xác định chu kỳ xung cần phân tích như sau:
Như đã tìm hiểu về cách làm việc của các bộ timer: sau mỗi chu kì lệnh giá trị của TMR2 sẽ tăng lên 1 đơn vị.
Nếu dùng bộ chia tần số, giả sử là 1: N thì sau N chu kì lệnh giá trị của TMR2 mới tăng lên 1 đơn vị. Mỗi chu kì lệnh gồm 4 chu kì xung.
Chu kì xung chính là khoảng thời gian từ lúc TMR2=0 cho đến khi TMR2=PR2. Suy ra, để tăng PR2 đơn vị, hay chính là chu kì xung sẽ bằng:
Ở đây, Tosc là chu kì xung của vi điều khiển hay chu kì của thạch anh N là tỉ lệ chia tần số.
Ví dụ: với thạch anh Fosc = 4Mhz, N=4, ta có chu kì xung tối đa đạt được là khi PR2=255(PR2 là thanh ghi 8 bit)
T=(255+1)*4*(1/4Mhz)*4=1024às
Tức tần số xung là:
F=1/T=976Hz= 1KHz.
Độ rộng xung:
Độ rộng xung là giá trị 10 bit : trong đó 8 bit cao được ghi vào thanh ghi CCPR1L, và 2 bit thấp ghi vào 2 bit 5 và 4 của thanh ghi CCP1CON:
Độ rộng xung PWM được xác định theo công thức:
PWM Duty Cycle=(CCPR1L:CCP1CON<5:4>)*Tosc*N
Trong đó, CCPR1L là thanh ghi 8 bit, CCP1CON<5:4> là 2 bit 5 và 4 của thanh ghi điều khiển CCP1CON. N là tỉ lệ chia tần số.
Tính toán các thông số điều chế độ rộng xung Gồm các bước:
- Cài đăt modun CCP chức năng PWM:setup_CCP1(CCP_PWM) - Cài đặt Timer 2:setup_timer_2(mode, period, 1)
Trong đó:
+ mode có thể là: T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16, nghĩa là tắt Timer2 hoặc định tỉ lệ bộ chia tần số
+ Period chính là giá trị của thanh ghi PR2 để xác định chu kì của xung
- Cài đặt độ rộng xung: set_pwm1_duty(value);
Trong đó:
+ value là giá trị CCPR1L:CCP1CON<5:4>
+ độ rộng xung được tính theo công thức:
PWM Duty Cycle= value*Tosc*N 5.1.2. Trình tự thực hiện
Yêu cầu kỹ thuật: Viết chương trình điều khiển tốc độ động cơ điện một chiều chạy bằng 50% tốc độ lớn nhất của nó
- Bước 1:Kết nối mô đun Motor DC với KIT thực hành PIC 18F4550
Kết nối mô đun Motor DC
- Bước 2:Xây dựng lưu đồ thuật toán theo yêu cầu kỹ thuật;
- Bước 3:Viết chương trình dựa trên lưu đồ thuật toán;.
#include<18F4550.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=20000000) //---
#define DIR PIN_A5
#define PWM PIN_C2
#define ENCO_A PIN_B2 unsigned int16 var;
//---CHUONG TRINH CHINH--- void main( )
{ var=50;
output_low(DIR);
setup_ccp1(CCP_PWM);
set_pwm1_duty(var) while(1) { }
}
- Bước 4:Kiểm tra và nạp chương trình qua PICKIT2;
- Bước 5:Vận hành, quan sát và chỉnh sửa.
5.1.3. Thực hành:
Người học thực hiện viết chương trình hiển thị theo yêu cầu kỹ thuật như trên, nạp vào vi điều khiển PIC 18F4550.
Thiết bị thực hành:
- Máy vi tính;
- Mạch nạp PIC KIT 2
- Môn đun thực hành PIC Traning KIT 5.1.4. Câu hỏi ôn tập:
Câu 1: Có bao nhiêu mô đun thực hiện việc điều chế độ rộng xung trong PIC 18F4550? Liệt kê tên và chân IC tương ứng?