Đồ án Lập trình PIC16F877A điều khiển tốc độ động cơ DC

LUẬN VĂN TỐT NGHIỆP  
ĐỀ TÀI  
Lập trình PIC16F877A  
điều khiển tốc độ  
động cơ DC  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
MỤC LỤC  
2
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Chương I: KHÁI QUÁT ĐỀ TÀI  
I/ Tóm tắt đề tài:  
1/ Giới thiệu sơ lược các modul của mạch:  
-Tên đề tài đồ án 2:“Lập trình PIC16F877A điều khiển tốc độ động cơ DC”  
-Yêu cầu đặt ra: Lập trình C cho Pic 16F877A điều khiển tốc độ cho động cơ DC có  
gắn encoder hồi tiếp tốc độ.Tốc độ được cài đặt từ bàn phím và tốc độ tức thời hồi tiếp  
từ encoder được hiển thị trên màn hình LCD 16x2.  
-Tóm tắt hướng thực hiện đề tài:  
Sử dụng Pic 16F877A là vi điều khiển trung tâm. Dùng chương trình CCS lập  
trình C và biên dịch chương trình.  
Xây dựng khối bàn phím gồm 16 phím để nhập tốc độ điều khiển động cơ  
DC:  
10 phím từ 0 đến 9 để cài đặt tốc độ (vòng /phúc).  
1 phím SET (hay ENTER) để lưu tốc độ cài đặt.  
1 phím CLEAR để xóa tốc độ cài đặt.  
1 phím SAVE để lưu tốc độ vào epprom.  
3 phím điều điều khiển: quay thuận (FORWARD), quay nghich  
(REVERSE), dừng (STOP).  
Hiền thị tốc độ dùng màn hình LCD 16x2, lập trình ở chế độ 4 bit (sử dụng 4  
chân để nhận dữ liệu từ Pic).  
Sử dụng mạch cầu H là IC L298N để đảo chiều động cơ.  
Sử dụng 2 kênh PWM của vi điều khiển Pic thay đổi giá trị áp trung bình đặt  
vào động cơ để điều khiển tốc độ.  
Đối tượng điểu khiển động cơ DC 12V có gắn Encoder.  
Ngoài ra trên mạch còn có 1 phím nguồn (POWER) cấp điện từ adapter cho  
mạch và 1 phím RESET cho pic 16F877A.  
3
SVTH: Trần Tường Băng  
Văn Chính  
   
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Để cấp nguồn cho mạch ta dùng adapter AC/DC (220V/12V) và khối nguồn sử  
dụng IC 7805 để ổn áp điện áp 5V cung cấp cho Pic.  
2/ Sơ đồ nguyên lí mạch:  
VCC  
LCD1  
16_X_2_LCD  
1
2
3
0 (10)  
CLEAR (11)  
set (12)  
13  
R1  
5k  
R2  
5k  
R3  
5k  
R4  
5k  
4
7
5
8
6
9
RV1  
FW(16)  
RV(15)  
STOP (14)  
1K  
C1  
+12V  
+12V  
4
U1  
30pF  
13  
14  
33  
34  
35  
36  
37  
38  
39  
40  
X1  
OSC1/CLKIN  
OSC2/CLKOUT  
RB0/INT  
RB1  
RB2  
RB3/PGM  
RB4  
RB5  
CLK  
CRYSTAL  
C2  
U1  
9
p0  
p1  
p2  
p3  
CLK  
2
3
4
5
6
7
RA0/AN0  
RA1/AN1  
RA2/AN2/VREF-/CVREF  
RA3/AN3/VREF+  
RA4/T0CKI/C1OUT  
RA5/AN4/SS/C2OUT  
J3  
5
7
10  
12  
6
IN1 VCC  
IN2  
VS  
OUT1  
CCP2  
CCP1  
30pF  
5
4
3
2
1
2
M1  
M2  
RB6/PGC  
RB7/PGD  
IN3  
IN4  
ENA  
ENB  
3
OUT2  
OUT3  
OUT4  
M1  
M2  
VCC  
CLK  
15  
16  
17  
18  
23  
24  
25  
26  
11  
13  
14  
RC0/T1OSO/T1CKI  
RC1/T1OSI/CCP2  
RC2/CCP1  
RC3/SCK/SCL  
RC4/SDI/SDA  
RC5/SDO  
8
9
10  
+88.8  
RE0/AN5/RD  
RE1/AN6/WR  
RE2/AN7/CS  
CCP1  
CCP2  
SIL-100-05  
1
15  
SENSA  
SENSB GND  
R5  
1
MCLR/Vpp/THV  
8
L298  
R9  
10k  
R1 R2  
2k2  
RC6/TX/CK  
RC7/RX/DT  
0.5  
0.5  
b2  
b0  
b1  
19  
20  
21  
22  
27  
28  
29  
30  
RD0/PSP0  
RD1/PSP1  
RD2/PSP2  
RD3/PSP3  
RD4/PSP4  
RD5/PSP5  
RD6/PSP6  
RD7/PSP7  
a4  
a5  
a6  
a7  
RESET  
C3  
10uF  
+12V  
+5V  
U2  
7805  
PIC16F877A  
J1  
R26  
3
2
1
1
3
VI  
VO  
1k  
GND  
J2  
JACK  
D8  
LED  
2
1
C4  
100uF  
C5  
100nF  
C6  
100uF  
C7  
100nF  
TERMINAL2  
Hình 1: Sơ đồ nguyên lí mạch  
3/Cách vận hành mạch:  
Bước 1:  
Bật nguồn (nhấn nút POWER), chờ cho Pic và màn hình LCD khởi động, màn hình  
hiển thị: “CHỌN CHẾ ĐỘ:”  
Chương trính có 2 chế độ làm việc: chế độ1 là bám tốc độ đặt, lưu tốc độ vào  
epprom; chế độ 2 là bám tốc độ định thời gian để thay đổi chiều quay.  
Bước 2:  
4
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Nhập tốc độ từ bàn phím các phím từ 0 đến 9.Nếu nhập sai ta nhấn phím CLEAR con  
trỏ trên LCD sẽ xóa hết các số đã nhập, ta phải nhập lại từ đầu.Sau khi nhập xong,  
nhấn phím ENTER để lưu tốc độ đặt, tốc độ đặt được tính theo đơn vị vòng/phút.  
Nếu chế độ 2 thì ta phải nhập them thời gian, sau đó nhấn phím ENTER  
Bước 3:  
Để điều khiển động cơ ta nhấn phím: quay thuận (FORWARD), quay nghịch  
(REVERSE), dừng (STOP).  
Bước 4:  
Để nhập lại tốc đta nhấn phím CLEAR rồi tiến hành đăt tốc độ như bước 2.  
-Tốc độ tức thời của động cơ sẽ đươc cập nhật mỗi 0,5s và sẽ được so sánh với tốc độ  
đặt để đưa ra tính hiệu điều khiển, đồng thời cứ mỗi 0,5s tốc độ sẽ hiển thị trên màn  
hình LCD.  
4/ Khuyết điểm của mạch:  
-Do không áp dụng các phương pháp điều khiển (ví dụ như: PID, điều khiển mờ,…)  
nên tốc độ động cơ chưa được ổn định.  
-Mạch cầu H sử dụng IC L298 chỉ điều khiển được động DC có công suất nhỏ.  
-Đối với khối hiển thị, do tính chất của màn hình LCD nên bị hạn chế quan sát giá trị  
hiển thị ở khoảng cách xa.  
5/ Hướng phát triển đề tài:  
- Cải thiện ổn định tốc độ động cơ bằng phương pháp PID hay điều khiển mờ.  
- Tính toán thiết kế mạch công suất để thể điều khiển được động cơ có công suất  
lớn hơn.  
- Sử dụng led 7 đoạn để tăng khả năng quan sát của khối hiển thị.  
- Kết nối với máy tính, sử dung visual basic lập trình để điều khiển tốc độ động cơ  
DC.  
5
SVTH: Trần Tường Băng  
Văn Chính  
 
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
CHƯƠNG II:  
GIỚI THIỆU VCÁC LINH KIỆN PHẦN TỬ SỬ DỤNG TRONG MẠCH  
I.Vi điều khiển PIC16F877A  
1. Khái quát về vi điều khiển PIC16F877A  
a/ Khái quát:  
- PIC là tên viết tắt của “Programmable Intelligent computer” do hãng General  
Instrument đặt tên cho con vi điều khiển đầu tiên của họ.Hãng Micrchip tiếp tục  
phát triển sản phầm này và cho đến hàng đã tạo ra gần 100 loại sản phẩm khác  
nhau.  
- PIC16F887A là dòng PIC khá phổ biến, khá đầy đủ tính năng phục vụ cho hầu hết  
tất cả các ứng dụng thực tế. Đây là dòng PIC khá dễ cho người mới làm quen với  
PIC có thể học tập tạo nền tản về họ vi điều khiển PIC của mình.  
- PIC 16F877A thuộc họ vi điều khiển 16Fxxx có các đặt tính sau:  
Ngôn ngữ lập trình đơn giản với 35 lệnh độ dài 14 bit.  
Tất cả các câu lệnh thực hiện trong 1 chu kì lệnh ngoại trừ 1 số câu lệnh rẽ  
nhánh thực hiện trong 2 chu kì lệnh. Chu kì lệnh bằng 4 lần chu kì dao động của  
thạch anh.  
Bộ nhớ chương trình Flash 8Kx14 words, với khả năng ghi xoá khoảng 100  
ngàn lần.  
Bộ nhớ Ram 368x8bytes.  
Bộ nhớ EFPROM 256x8 bytes.  
Khả năng ngắt (lên tới 14 nguồn cả ngắt trong và ngắt ngoài).  
6
SVTH: Trần Tường Băng  
Văn Chính  
       
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Ngăn nhớ Stack được chia làm 8 mức.  
Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.  
Dải điện thế hoạt động rộng: 2.0V đến 5.5V.  
Nguồn sử dụng 25mA.  
Công suất tiêu thụ thấp:  
<0.6mA với 5V, 4MHz  
20uA với nguồn 3V, 32 kHz.  
Có 3 timer: timer0, 8 bit chức năng định thời bộ đếm với hệ số tỷ lệ  
trước.Timer1, 16 bit chức năng bộ định thời, bộ đếm với hệ số tỷ lệ trước, kích  
hoạt chế độ Sleep.Timer2, 8 bit chức năng định thời bộ đếm với hệ số tỷ lệ  
trước và sau.  
Có 2 kênh Capture/ so sánh điện áp (Compare)/điều chế độ rộng xung PWM 10  
bit / (CCP).  
Có 8 kênh chuyển đổi ADC 10 bit.  
Cổng truyền thong nối tiếp SSP với SPI phương thức chủ và I2C (chủ/phụ).Bộ  
truyền nhận thông tin đồng bộ, dị bộ (USART/SCL) có khả năng phát hiện 9 bit  
địa chỉ.  
Cổng phụ song song (PSP) với 8 bít mở rộng, với RD, WR và CS điều khiển.  
Do thời gian làm đồ án có hạn nên chúng em chỉ tập trung tìm hiểu các tính  
năng của PIC 16F877A có liên quan đến đề tài, dưới đây là 1 vài tính năng của  
PIC 16F877A được ứng dụng trong đồ án như:  
- Tổ chức bộ nhớ của PIC 16F877A.  
- Chức năng của các Port I/O.  
- Chức năng và cách thiết lập các tham số của 3 Timer 0,1,2.  
- Chức năng và cách thiết lập bộ điều chế độ rộng xung PWM.  
- Định nghĩa ngắt, các nguồn ngắt và tìm hiểu sâu về ngắt timer và ngắt  
ngoài là hai chức năng được sử dụng trong đề tài này.  
7
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Hình 2: S
ơ đồ
nguyên lí PIC 16F877A  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
b/Sơ đồ chân và sơ đồ nguyên lý của PIC16F877A  
Sơ đồ chân  
Hình 3: Sơ đồ chân của PIC 16F877A  
Sơ đồ nguyên lý  
9
SVTH: Trần Tườ
Văn
   
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
c/Nhận xét:  
Từ sơ đồ chân và sơ đồ nguyên lý trên, ta rút ra các nhận xét ban đầu như sau :  
- PIC16F877A có tất cả 40 chân  
- 40 chân trên được chia  
thành 5 PORT, 2 chân cấp  
nguồn, 2 chân GND, 2  
chân thạch anh và một  
chân dùng để RESET vi  
điều khiển.  
- 5 port của PIC16F877A  
bao gồm :  
+ PORT B: 8 chân  
+ PORT D: 8 chân  
+ PORT C: 8 chân  
+ PORT A: 6 chân  
+ PORT E: 3 chân  
2. Tổ chức bộ nhớ:  
Cấu trúc bộ nhớ của vi điều khiển  
PIC16F877A bao gồm bộ nhớ  
chương trình (Program memory) và  
bộ nhớ dữ liệu (Data Memory).  
2.1. Bộ nhớ chương trình:  
SVTH: Trần Tường Băng  
Văn Chính  
10  
   
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng bộ  
nhớ 8K word (1 word = 14 bit) được phân thành nhiều trang (từ page0 đến page 3) .  
Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024 = 8192 lệnh (vì một lệnh  
sau khi mã hóa sẽ có dung lượng 1 word (14 bit).Để mã hóa được địa chỉ của 8K word  
bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit (PC<12:0>).  
Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset  
vector).Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt  
vector). Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa  
bởi bộ đếm chương trình.  
2.2. Bộ nhớ dữ liệu:  
- Bộ nhớ dữ liệu của PIC16F877A  
Hình 5: Cấu trúc bộ nhớ chương trình  
được chia thành 4 bank. Mỗi  
PIC 16F877A  
bank có dụng lượng 128 byte.  
- Nếu như 2 bank bộ nhớ dữ liệu của 8051 phân chia riêng biệt : 128 byte đầu tiên  
thuộc bank1 là vùng Ram nội chỉ để chứa dữ liệu, 128 byte còn lại thuộc bank 2 là  
cùng các thanh ghi có chức năng đặc biệt SFR mà người dùng không được chứa dữ  
liệu khác, còn 4 bank bộ nhớ dữ liệu của PIC16F877A được tổ chức theo cách  
khác.  
- Mỗi bank của bộ nhớ dữ liệu PIC16F877A bao gồm cả các thanh ghi có chức năng  
đặc biệt SFR nằm ở các các ô nhớ địa chỉ thấp và các thanh ghi mục đích dùng  
chung GPR nằm ở vùng địa chỉ còn lại của mỗi bank thanh ghi. Vùng ô nhớ các  
thanh ghi mục đích dùng chung này chính là nơi người dùng sẽ lưu dữ liệu trong  
quá trình viết chương trình. Tất cả các biến dữ liệu nên được khai báo chứa trong  
vùng địa chỉ này.  
- Trong cấu trúc bộ nhớ dữ liệu của PIC16F877A, các thanh ghi SFR nào mà thường  
xuyên được sử dụng (như thanh ghi STATUS) sẽ được đặt ở tất cả các bank để  
thuận tiện trong việc truy xuất. Sở dĩ như vậy là vì, để truy xuất một thanh ghi nào  
đó trong bộ nhớ của 16F877A ta cần phải khai báo đúng bank chứa thanh ghi đó,  
việc đặt các thanh ghi sử dụng thường xuyên giúp ta thuận tiên hơn rất nhiều trong  
quá trình truy xuất, làm giảm lệnh chương trình.  
11  
SVTH: Trần Tường Băng  
Văn Chính  
 
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Dựa trên sơ đồ 4 bank bộ nhớ dữ liệu PIC16F877A ta rút ra các nhận xét như sau :  
-Bank0 gồm các ô nhớ địa chỉ từ 00h đến 77h, trong đó các thanh ghi dùng chung  
để chứa dữ liệu của người dùng địa chỉ từ 20h đến 7Fh. Các thanh ghi PORTA,  
PORTB, PORTC, PORTD, PORTE đều chứa ở bank0, do đó để truy xuất dữ liệu các  
thanh ghi này ta phải chuyển đến bank0. Ngoài ra một vài các thanh ghi thông dụng  
khác ( sẽ giới thiệu sau) cũng chứa ở bank0  
- Bank1 gồm các ô nhớ địa chỉ từ 80h đến FFh. Các thanh ghi dùng chung có địa  
chỉ từ A0h đến Efh. Các thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE cũng được  
chứa ở bank1  
- Tương tự ta có thể suy ra các nhận xét cho bank2 và bank3 dựa trên sơ đồ trên.  
Cũng quan sát trên sơ đồ, ta nhận thấy thanh ghi STATUS, FSR… có mặt trên cả 4  
bank. Một điều quan trọng cần nhắc lại trong việc truy xuất dữ liệu của PIC16F877A  
là : phải khai báo đúng bank chứa thanh ghi đó.Nếu thanh ghi nào mà 4 bank đều chứa  
thì không cần phải chuyển bank.  
12  
SVT
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
2.2a/ Thanh ghi chức năng đặc biệt SFR: (Special Function Register)  
- Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập điều  
khiển các khối chức năng được tích hợp bên trong vi điều khiển. thể phân  
thanh ghi SFR làm hai lọai: thanh ghi SFR liên quan đến các chức năng bên trong  
(CPU) và thanh ghi SRF dùng để thiết lập điều khiển các khối chức năng bên  
ngoài (ví dụ như ADC, PWM, …).  
- Một số thanh ghi cức năng đặc biệt:  
Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chứa kết quả thực hiện  
phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất  
trong bộ nhớ dữ liệu.  
Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi,  
cho phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các  
tham số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0.  
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh): thanh ghi cho phép đọc và  
,chứa các bít điều khiển và các cờ hiệu khi timer0 bị tràn, ngắt ngoại vi  
RB0/INT và ngắt interrput-on-change tại các chân của PORTB.  
Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối  
chức naêng ngoaïi vi.  
Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt  
này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1.  
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức  
năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM.  
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset  
của vi điều khiển.  
2.2b/ Thanh ghi muc đích chung GPR: (General Purpose Register)  
13  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi  
FSG (File Select Register).Đây là các thanh ghi dữ liệu thông thường, người sử dụng  
thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các  
biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình.  
Hình 7: Cấu trúc thanh ghi chức năng chung của PIC  
16F877A  
2.3. Stack  
- Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng  
nhớ đặc biệt không cho phép đọc hay ghi. Khi lệnh CALL được thực hiện hay khi một  
ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động  
được vi điều khiển cất vào trong stack. Khi một trong các lệnh RETURN, RETLW hat  
RETFIE được thực thi, giá trị PC sẽ tự động được lấy ra từ trong stack, vi điều khiển  
sẽ thực hiện tiếp chương trình theo đúng qui trình định trước.  
- Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa  
chỉ hoạt động theo cơ chế xoay vòng. Nghia là giá trị cất vào bộ nhớ Stack lần thứ 9  
sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ  
10 sẽ ghi đè lên giá tri6 cất vào Stack lần thứ 2.  
- Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết  
được khi nào stack tràn. Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không  
lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển  
bởi CPU.  
3. Khái quát về chức năng của các port trong vi điều khiển PIC16F877A  
a/ PORTA:  
-PORTA (RPA) bao gồm 6 I/O pin.Đây là các chân “hai chiều” (bidirectional  
pin), nghĩa là có thể xuất nhập được.Chức năng I/O này được điều khiển bởi thanh  
ghi TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PORTA là  
14  
SVTH: Trần Tường Băng  
Văn Chính  
   
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
input, ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược  
lại, muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều  
khiển tương ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương tự  
đối với các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là  
TRISA, đối với PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là  
TRISD vàđối với PORTE là TRISE).  
-Ngoài ra, PORTA còn có các chức năng quan trọng sau :  
Ngõ vào Analog của bộ ADC : thực hiện chức năng chuyển từ Analog  
sang Digital  
Ngõ vào điện thế so sánh  
Ngõ vào xung Clock của Timer0 trong kiến trúc phần cứng : thực hiện  
các nhiệm vụ đếm xung thông qua Timer0…  
Ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)  
- Các thanh ghi SFR liên quan đến PORTA bao gồm:  
PORTA (địa chỉ 05h)  
TRISA (địa chỉ 85h)  
CMCON (địa chỉ 9Ch)  
: chứa giá trị các pin trong PORTA.  
: điều khiển xuất nhập.  
: thanh ghi điều khiển bộ so sánh.  
CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp.  
ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC.  
b/PORTB:  
- PORTB (RPB) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là  
TRISB.  
- Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp  
chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên  
quan đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện  
trở kéo lên được điều khiển bởi chương trình.  
- Các thanh ghi SFR liên quan đến PORTB bao gồm:  
PORTB (địa chỉ 06h, 106h)  
TRISB (địa chỉ 86h, 186h)  
: chứa giá trị các pin trong PORTB  
: điều khiển xuất nhập  
OPTION_REG (địa chỉ 81h, 181h): điều khiển ngắt ngoại vi và bộ Timer0.  
c/PORTC:  
15  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
PORTC có 8 chân và cũng thực hiện được 2 chức năng input và output dưới sự điều  
khiển của thanh ghi TRISC tương tự như hai thanh ghi trên.  
Ngoài ra PORTC còn có các chức năng quan trọng sau :  
- Ngõ vào xung clock cho Timer1 trong kiến trúc phần cứng  
- Bộ PWM thực hiện chức năng điều xung lập trình được tần số, duty cycle: sử  
dụng trong điều khiển tốc độ vị trí của động cơ v.v….  
- Tích hợp các bộ giao tiếp nối tiếp I2C, SPI, SSP, USART  
d/PORTD:  
-PORTD có 8 chân. Thanh ghi TRISD điều khiển 2 chức năng input và output của  
PORTD tương tự như trên.PORTD cũng cổng xuất dữ liệu của chuẩn giao tiếp song  
song PSP (Parallel Slave Port).  
-Các thanh ghi liên quan đến PORTD bao gồm:  
Thanh ghi PORTD: chứa giá trị các pin trong PORTD.  
Thanh ghi TRISD: điều khiển xuất nhập.  
Thanh ghi TRISE: điều khiển xuất nhập PORTE và chuẩn giao tiếp PSP.  
e/PORTE:  
-PORTE có 3 chân.Thanh ghi điều khiển xuất nhập tương ứng là TRISE.Các chân  
của PORTE có ngõ vào analog Bên cạnh đó PORTE còn là các chân điều khiển của  
chuẩn giao tiếp PSP.  
-Các thanh ghi liên quan đến PORTE bao gồm:  
PORTE: chứa giá trị các chân trong PORTE.  
TRISE: điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP.  
ADCON1: thanh ghi điều khiển khối ADC.  
4. Các vấn đề về Timer  
PIC16F877A có tất cả 3 timer : timer0 (8 bit), timer1 (16 bit) và timer2 (8 bit).  
4.1. Timer0  
a/ Là bộ định thời hoặc bộ đếm những ưu điểm sau:  
8 bit cho bộ định thời hoặc bộ đếm.  
khả năng đọc viết.  
thể dùng đồng bên trong hoặc bên ngoài.  
thể chọn cạnh xung của xung đồng hồ.  
16  
SVTH: Trần Tường Băng  
Văn Chính  
   
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
thể chọn hệ số chia đầu vào (lập trình bằng phần mền).  
Ngắt tràn.  
b/ Hoạt động của Timer 0:  
Timer 0 có thể hoạt động như một bộ định thời hoặc một bộ đếm.Việc chọn bộ  
định thời hoặc bộ đếm thể được xác lập bằng việc xoá hoặc đặt bít TOCS  
của thanh ghi OPTION_REG<5>.  
Nếu dùng hệ số chia xung đầu vào thì xoá bit PSA của thanh ghi  
OPTION_REG<3>.  
Trong chế độ bộ định thời được lựa chọn bởi việc xoá bit T0CS (OPTION  
REG<5>), nó sẽ được tăng giá trị sau một chu kỳ lệnh nếu không chọn hệ số  
chia xung đầu vào.Và giá trị của được viết tới thanh ghi TMR0.  
Khi dùng xung clock bên ngoài cho bộ định thời Timer0 và không dùng hệ số  
chia clock đầu vào Timer0 thì phải đáp ứng các điều kiện cần thiết để thể  
hoạt động đó phải bảo đảm xung clock bên ngoài có thể đồng bộ với xung  
clock bên trong (TOSC).  
Hệ số chia dùng cho Timer 0 hoặc bộ WDT. Các hệ số nay không có khả năng  
đọc khả năng viết. Để chọn hệ số chia xung cho bộ tiền định của Timer0  
hoặc cho bộ WDT ta tiến hành xoá hoặc đặt bít PSA của thanh ghi  
OPTION_REG<3>  
Những bít PS2, PS1, PS0 của thanh ghi OPTION_REG<2:0> dùng để xác lập  
các hệ số chia.  
Bộ tiền định có giá trị 1:2 chẳng hạn, nghĩa là : bình thường không sử dụng  
bộ tiền định của Timer0 (đồng nghĩa với tiền định tỉ lệ 1:1) thì cứ khi có tác  
động của 1 xung clock thì timer0 sẽ tăng thêm một đơn vị. Nếu sử dụng bộ tiền  
định 1:4 thì phải mất 4 xung clock thì timer0 mới tăng thêm một đơn vị. Vô  
hình chung, giá trị của timer0 (8 bit) lúc này không còn là 255 nữa mà là  
255*4=1020.  
c/ Ngắt của bộ Timer0  
Ngắt của bộ Timer 0 được phát sinh ra khi thanh ghi TMR0 bị trμn tức từ  
FFh quay về 00h.Khi đó bít T0IF của thanh ghi INTCON<2> sẽ được đặt.  
Bít nμy phải được xóa bằng phần mềm nếu cho phép ngắt bit T0IE của  
17  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
thanh ghi INTCON<5> được set.Timer0 bị dừng hoạt ở chế độ SLEEP  
ngắt Timer 0 không đánh thức bộ xử ở chế độ SLEEP.  
d/ Các thanh ghi liên quan đến Timer0 bao gồm:  
- Thanh ghi OPTION_REG : điều khiển hoạt động của Timer0  
Hình 8: Cấu trúc thanh ghi OPTION_REG REGISTER  
điều khiển hoạt động của Timer0  
bit 5 TOCS lựa chọn nguồn clock  
1=Clock ngoμi từ chân T0CKI  
0=Clock trong Focs/4  
bit 4 T0SE bit lựa chon s−ờn xung clock  
1=Timer 0 tăng khi chân T0CKI tử cao xuống thấp(s−ờn xuống)  
0=Timer 0 tăng khi chân T0CKI tử thấp lên cao(s−ờn xuống)  
bit 3 PSA bit gán bộ chia xung đầu vμo  
1=gán bộ chia Prescaler cho WDT  
0=gán bộ chia Prescaler cho Timer 0  
bit 2:0 PS2:PS1 lựa chọn hệ số chia hệ số xung theo bảng sau:  
PS2:PS0  
000  
Timer0  
1:2  
WDT  
1:1  
001  
1:4  
1:2  
010  
1:8  
1:4  
011  
100  
101  
110  
1:16  
1:32  
1:64  
1:128  
1:256  
1:8  
1:16  
1:32  
1:64  
1:128  
111  
- Thanh ghi TMR0 đại chỉ 01h và 101h : chứa giá trị của bộ định thời Timer0  
18  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
- Thanh ghi INTCON : cho phép ngắt hoạt động  
Thanh ghi chứa các bit điều khiển và các bít cờ hiệu khi timer0 bị tràn, ngắt ngoại  
vi RB0/INT và ngắt interrupt_on_change tại các chân của PORTB.  
Hình 9: Cấu trúc thanh ghi INTCON cho phép ngắt  
Timer0 hoạt động  
Bit 7 GIE Global Interrupt Enable bit  
GIE = 1 cho phép tất cả các ngắt.  
GIE = 0 không cho phép tất cả các ngắt.  
Bit 6 PEIE Pheripheral Interrupt Enable bit  
PEIE = 1 cho phép tất cả các ngắt ngoại vi.  
PEIE = 0 không cho phép tất cả các ngắt ngoại vi.  
Bit 5 TMR0IE Timer0 Overflow Interrupt Enable bit  
TMR0IE = 1 cho phép ngắt Timer0.  
TMR0IE = 0 không cho phép ngắt Timer0.  
Bit 4 RBIE RB0/INT External Interrupt Enable bit  
RBIE = 1 cho phép tất cả các ngắt ngoại vi RB0/INT  
RBIE = 0 không cho phép tất cả các ngắt ngoại vi RB0/INT  
Bit 3 RBIE RB Port change Interrupt Enable bit  
RBIE = 1 cho phép ngắt RB Port change  
RBIE = 0 không cho phép ngắt RB Port change  
Bit 2 TMR0IF Timer0 Interrupt Flag bit  
TMR0IF = 1 thanh ghi TMR0 bị tràn (phải xóa cờ hiệu bằng chương  
trình).  
TMR0IF = 0 thanh ghi TMR0 chưa bị tràn.  
Bit 1 INTF BR0/INT External Interrupt Flag bit  
INTF = 1 ngắt RB0/INT xảy ra (phải xóa cờ hiệu bằng chương trình).  
INTF = 0 ngaột RB0/INT chửa xaỷy ra.  
Bit 0 RBIF RB Port Change Interrupt Flag bit  
19  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
RBIF = 1 ít nhất một chân RB7:RB4 có sự thay đổi trạng thái. Bít này  
phải được xóa bằng chương trình sau khi đã kiểm tra lại các giá trị chân  
tại PORTB.  
RBIF = 0 không có sự thay đổi trạng thái các chân RB7:RB4.  
4.2.TIMER1  
a/Timer1 bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi 8  
bit TMR1H:TMR1L. Cờ ngắt của Timer1 là bit TMR1IF, bit điều khiển của Timer1 là  
TRM1IE.Cặp thanh ghi của TMR1 sẽ tăng từ 0000h lên đến FFFFh rồi sau đó tràn về  
0000h. Nếu ngắt được cho phép, nó sẽ xảy ra khi khi giá trị của TMR1 tràn từ FFFFh  
rồi về 0000h, lúc này TMR1IF sẽ bật lên.  
b/ Timer1 có 3 chế độ hoạt động :  
Chế độ hoạt động định thời đồng bộ: Chế độ được lựa chọn bởi bit TMR1CS.  
Trong chế độ này xung cấp cho Timer1 là Fosc/4, bit T1SYNC không có tác  
dụng.  
Chế độ đếm đồng bộ: trong chế độ này, giá trị của timer1 sẽ tăng khi có xung  
cạnh lên vào chân T1OSI/RC1. Xung clock ngoại sẽ được đồng bộ với xung  
clock nội, hoạt động đồng bộ được thực hiện ngay sau bộ tiền định tỉ lệ xung  
(prescaler).  
Chế độ đếm bất đồng bộ:chế độ này xảy ra khi bit T1SYNC được set. Bộ định  
thời sẽ tiếp tục đếm trong suốt quá trình ngủ (Sleep) của vi điều khiển và có khả  
năng tạo một ngắt khi bộ định thời tràn và làm cho vi điều khiển thoát khỏi  
trạng thái ngủ.  
c/ Các thanh ghi liên quan đến Timer1 bao gồm:  
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (2 bit GIE  
và PEIE).  
PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF).  
PIE1 (địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE).  
Ba thanh ghi vừa nêu trên sẽ được trình bày ở phần chương trình ngăt của PIC  
TMR1L (địa chỉ 0Eh): chứa giá trị 8 bít thấp của bộ đếm Timer1.  
TMR1H (địa chỉ 0Eh): chứa giá trị 8 bít cao của bộ đếm Timer1.  
20  
SVTH: Trần Tường Băng  
Văn Chính  
 
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Hai thanh ghi TMR1L và TMR1H là 2 thanh ghi chứa dữ liệu 16 bit (lần lượt  
chứa 4 bit thấp và 4 bit cao) của bộ đếm Timer1  
T1CON (địa chỉ 10h): xác lập các thông số chi Timer  
Hình 10: Cấu trúc thanh ghi T1CON điều khiển hoạt động  
của Timer1  
- bit 7,6 không sử dụng  
- bit 5,4 T1CKPS1: T1CKPS0 lựa chọn hệ số chia xung vào.  
T1CKPS1  
T1CKPS0  
1:1  
00  
01  
1:2  
10  
1:4  
11  
1:8  
- bit 3 T1OSCEN bit điều khiển bộ dao động Timer1  
1= Bộ dao động hoạt động  
0= Bộ dao động không hoạt động  
- bit 2 bit điều khiển xung clock ngoμi đồng bộ  
khi TMR1CS=1  
- bit2=0 có đồng clock ngoai  
=1 không đồng bộ clock ngoài  
khi TMR1CS=0 bit này không có tác dụng  
- bit 1 TMR1CS bit lựa chọn nguồn xung clock vào  
TMR1CS=1 clock từ chân RC0/T1OSO/T1CKI (sườn lên)  
TMR1CS=0 clock trong Fosc/4  
- bit 0 bit bật tắt Timer  
1= Timer 1 enable  
0=Timer 1 Disable  
21  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
4.3.Timer 2  
a/ Timer2: bộ định thời 8 bit bao gồm một bộ tiền định (prescaler), một bộ hậu định  
Postscaler và một thanh ghi chu kỳ viết tắt là PR2. Việc kết hợp timer2 với 2 bộ định tỉ  
lệ cho phép nó hoạt động như một bộ đinh thời 16 bit. Module timer2 cung cấp thời  
gian hoạt động cho chế độ điều biến xung PWM nếu module CCP được chọn.  
Hình 11: Sơ đồ khối Timer2  
b/ Hoạt động của bộ Timer2  
-
Timer2 được dùng chủ yếu ở phần điều chế xung của bộ CCP, thanh  
ghi TMR2 có khả năng đọc viết, nó có thể xóa bằng việc reset lại thiết bị.  
Đầu vào của xung có thể chọn các tỷ số sau; 1:1; 1:4 hoặc 1:16 việc lựa  
chọn các tỷ số này có thể điều khiển bằng các bit sau T2CKPS1 và bit  
T2CKPS0.  
- Bộ Timer2 có 1 thanh ghi 8 bít PR2 . Timer 2 tăng từ gi trị 00h cho đến  
khớp với PR2 và tiếp theo nó sẽ reset lại gi trị 00h và lệnh kế tiếp thực  
hiện.Thanh ghi PR2 là một thanh ghi có khả năng đọc khả năng viết.  
c/ Thanh ghi T2CON: điều khiển hoạt động của Timer2  
22  
SVTH: Tr
V
Hình 12: Cấu trúc thanh ghi T2CON điều khiển hoạt động  
của Timer2  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
- bit 7 không sử dụng  
- bit 6-3 TOUTPS3: TOUTPS0 bit lựa chọn hệ số đầu ra Timer 2  
0000=1:1  
0001=1:2  
0010=1:3  
1111=1:16  
- bit 2 TMR2ON bit bật tắt hoạt động Timer 2  
1= enable  
0= disable  
- bit 1- 0 T2CKPS1:T2CKPS0 chọn hệ chia đầu vào  
00 = 1:1  
01 = 1:4  
1x=1:16  
5. NGẮT (INTERRUPT):  
- PIC16F877A có đến 14 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi  
INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển cờ ngắt  
riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất  
chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIE và  
các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi  
INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều  
khiển các ngắt nằm trong thanh ghi PIE1 và PIE2.Cờ ngắt của các ngắt nằm trong  
thanh ghi PIR1 và PIR2.  
- Trong một thời điểm chỉ một chương trì nh ngắt được thực thi, chương trình ngắt  
được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự  
động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ  
nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được  
dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời  
bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được  
dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi  
23  
SVTH: Trần Tường Băng  
Văn Chính  
 
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp  
theo mà ngắt xảy ra.  
- Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các  
pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3  
hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.  
- Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương  
trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được  
cất và có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt.Điều này nên  
được xử bằng chương trình để tránh hiện tượng trên xảy ra.  
- Các nguồn ngắt của Pic 16F877A:  
1) RTCC hoặc TIMER0: ngắt tràn Timer0.  
2) RB: ngắt khi có sự thay đổi trạng thái 1 trong các chân từ RB4 đến RB7 của  
PORTB.  
3) EXT: (External Interrupt) ngắt ngoài khi có sự thay đổi trạng thái chân  
RB0 cùa PORTB.  
4) AD: ngắt khi bộ chuyển đổi tính hiệu tương tự sang tính hiệu số chuyền đổi  
hoàn tất 1 tính hiệu.  
5) TBE: ngắt khi bộ đệm của cổng RS232 rỗng.  
6) RDA: ngắt khi cổng RS232 nhận tính hiệu.  
7) TIMER1: ngắt khi timer1 bị tràn.  
8) TIMER2: ngắt khi timer2 bị tràn.  
9) CCP1; CCP2: ngắt khi bộ capture hoặc bộ Compare (bộ so sánh điện áp)  
hoạt động; ở kênh 1 hoặc 2.  
10) SSP: ngắt khi SPI hoặc I2C hoạt động.  
11) PSP: ngắt khi truyền nhận dữ liệu song song.  
12) BUSCOL: ngắt khi xung đột đường truyền.  
13) EEPROM: ngắt khi ghi xong dữ liệu.  
14) COMP: ngắt sau khi thực hiện so sánh tính hiệu.  
24  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Hình 13: Sơ đồ hoạt động ngắt của PIC 16F877A  
Với đề tài “Điều khiển tốc độ động cơ DC” chúng em sử dụng hai loại nguồn ngắt là  
ngắt ngoài khi có sự thay đổi trạng thái chân RB0 của PORTB và ngắt tràn Timer1,  
thế chúng em sẽ trình bày cụ thể hơn về nguyên lí hoạt động và các cài đặt của hai  
loại ngắt này trong phần dưới đây:  
a/ Ngắt ngoài (External Interrupt):  
-
Ngắt này dựa trên sự thay đổi trạng thái của pin RB0/INT. Cạnh tác động gây ra  
ngắt thể cạnh lên hay cạnh xuống được điều khiển bởi bit INTEDG (thanh ghi  
OPTION_ REG <6>). Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ  
ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE. Ngắt này có  
25  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước  
khi lệnh SLEEP được thực thi.  
- Thanh ghi OPTION_REG: địa chỉ 81h, 181h  
Thanh ghi này cho phép điều khiển chức năng pull-up của các pin trong PORTB, xác  
lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi RB0 (External  
Interrupt) và bộ đếm Timer0.  
Hình 14: Cấu trúc thanh ghi OPTION_REG cho phép ngắt  
ngoại ngắt timer0  
Bit 7 PORTB pull-up enable bit  
= 1 không cho phép chức năng pull-up của PORTB  
= 0 cho phép chức năng pull-up của PORTB  
Bit 6 INTEDG Interrupt Edge Select bit  
INTEDG = 1 ngắt xảy ra khi cạnh dương chân RB0/INT xuất hiện.  
INTEDG = 0 ngắt xảy ra khi cạnh âm chân BR0/INT xuất hiện.  
Bit 5 TOCS Timer0 Clock Source select bit  
TOSC = 1 clock lấy từ chân RA4/TOCK1.  
TOSC = 0 dùng xung clock bên trong (xung clock này bằng với xung clock  
dùng để thực thi lệnh).  
Bit 4 TOSE Timer0 Source Edge Select bit  
TOSE = 1 tác động cạnh lên.  
TOSE = 0 tác động cạnh xuống.  
Bit 3 PSA Prescaler Assignment Select bit  
PSA = 1 bộ chia tần số (prescaler) được dùng cho WDT  
PSA = 0 bộ chia tần số được dùng cho Timer0  
Bit 2:0 PS2:PS0 Prescaler Rate Select bit  
26  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Các bit này cho phép thiết lập tỉ số chia tần số của Prescaler.  
b/ Ngắt tràn Timer1:  
- Cặp thanh ghi TMR1H và TMR1L chứa giá trị đếm của Timer1, chúng tăng từ  
gía trị 0000h đến gía trị FFFFh đến giá trị này tiếp tục tăng thì timer1 tràn và  
quay lại giá trị 0000h.Và ngắt xuất hiện khi tràn quá giá trị FFFFh khi này cờ  
ngắt TMR1IF sẽ được đặt.Ngắt thể hoạt động hoặc không hoạt động nhờ  
việc đặt hoặc xóa bít TMR1IE.  
- Thanh ghi điều khiển Timer1 T1CON:  
bit 7,6 không sử dụng  
bit 5,4 T1CKPS1:T1CKPS0 lựa chọn hệ số chia xung vào  
T1CKPS1:T1CKPS0  
tỷ lệ chia đầu vào  
00  
01  
10  
11  
1:1  
1:2  
1:4  
1:8  
bit 3 T1OSCEN bit điều khiển bộ dao động Timer1  
1= Bộ dao động hoạt động  
0= Bộ dao động không hoạt động  
bit 2 bit điều khiển xung clock ngoài đồng bộ  
khi TMR1CS=1  
bit2=0 có đồng clock ngoài  
=1 không đồng bộ clock ngoài  
27  
SVTH: Trần Tường Băng  
Văn Chính  
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
khi TMR1CS=0 bit này không có tác dụng  
bit 1 TMR1CS bit lựa chọn nguồn xung clock vào  
TMR1CS=1 clock từ chân RC0/T1OSO/T1CKI (sườn lên)  
TMR1CS=0 clock trong Fosc/4  
bit 0 bit bật tắt Timer  
1= Timer 1 enable  
0=Timer 1 Disable  
6. Phương pháp điều chế xung PWM:  
Để điều khiển tốc độ động cơ DC người ta có thể dùng nhiều phương pháp khác nhau  
trong đó một phương pháp hết sức quan trọng và thông dụng phương pháp điều  
chế độ rộng xung kích (PWM).  
6.1. Điều chế PWM là gì?  
Phương pháp điều chế độ rộng xung PWM (Pulse Width Modulation) là phương pháp  
điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự thay  
đổi độ rộng của chuỗi xung kích để điều khiển linh kiện đóng ngắt (SCR hay  
Transistor) dẫn đến sự thay đổi điện áp ra tải.  
Đồ thị dạng xung điều chế PWM  
Hình 15: Đồ thị dạng xung điều chế PWM  
6.2. Nguyên lí của PWM:  
28  
SVTH: Trần Tường Băng  
Văn Chính  
   
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
Đây phương pháp được thực hiện theo nguyên tắc dóng ngắt nguồn tải một cách  
có chu kì theo luật điều chỉnh thời gian đóng ngắt.Phần tử thực hiện nhiệm vụ đóng cắt  
là các van bán dẫn.Sơ đồ nguyên lí điều khiển tải dùng PWM.  
NGUON  
PWM xung vuông  
Q1(B)  
Q1  
NPN  
TAI  
Hình 16: Sơ đồ nguyên lí dùng PWM điều khiển điện áp tải (trái)  
Sơ đồ xung van điều khiển đầu ra (phải)  
Trong khoảng thời gian 0 - to ta cho van Q1 mở toàn bộ điện áp nguồn Ud được đưa ra tải.  
Cũn trong khoảng thời gian từ t0 đến T cho van Q1 khóa, cắt nguồn cung cấp cho tải.Vì vậy  
với thời gian t0 thay đổi từ 0 cho đến T ta sẽ cung cấp toàn bộ , một phần hay khóa hoàn toàn  
điện áp cung cấp cho tải.  
Công thức tính giá trị trung bình của điện áp ra tải là:  
Ud = Umax . (t0/T) hay Ud = Umax.D  
Trong đó Ud: là điện áp trung bình ra tải.  
Umax: là điện áp nguồn.  
t0: là thời gian xung ở sườn dương (van khóa mở)  
.
T: thời gian cả thời gian xung sươn dương sườn âm.  
29  
SVTH: Trần Tường Băng  
Văn Chính  
 
Đồ án 2  
GVHD: Nguyễn Thanh Thảo  
D = t0/T: hệ số điều chỉnh hay PWM được tính bằng %  
dụ: điện áp nguồn là 12V.  
Nếu hệ số điều chỉnh là 20% => Ud = 12.20% = 2.4 V  
Nếu hệ số điều chỉnh là 50% => Ud = 12.50% = 6 V  
vậy, trong đề tài: “Điều khiển tôc độ động cơ DC” chúng em sử dụng phương pháp  
điều chế độ rộng xung PWM để thay đổi điện áp DC cấp cho động cơ từ đó thay đổi  
tốc độ của động cơ DC. Đối với PIC16F877A để sử dụng phương pháp này ta có thể  
sử dụng bộ điều chế độ rộng xung (PWM) tích hợp sẵn bên trong PIC với 2 ngõ ra  
xung tại hai chân CCP1 (17) và CCP2 (16).Tại các chân này khi hoạt động sẽ xuất  
chuỗi xung vuông với độ rộng điều chỉnh được dễ dàng.Xung ra này dùng để tạo tín  
hiệu đóng ngắt Trasistor trong mạch động lực, với độ rộng xác định sẽ tạo ra một điện  
áp trung bình xác định.  
6.3. Cách thiết lập chế độ PWM cho PIC16F877A  
- Khi hoạt động ở chế độ PWM (Pulse Width Modulation _ khối điều chế độ  
rộng xung), tính hiệu sau khi điều chế sẽ được đưa ra các pin của khối CCP  
(cần ấn định các pin này là output ). Để sử dụng chức năng điều chế này trước  
tiên ta cần tiến hành các bước cài đặt sau:  
Thiết lập thời gian của 1 chu kì của xung điều chế cho PWM (period) bằng cách  
đưa giá trị thích hợp vào thanh ghi PR2.  
Thiết lập độ rộng xung cần điều chế (duty cycle) bằng cách đưa giá trị vào  
thanh ghi CCPRxL và các bit CCP1CON<5:4>.  
Điều khiển các pin của CCP là output bằng cách clear các bit tương ứng trong  
thanh ghi TRISC.  
Thiết lập giá trị bộ chia tần số prescaler của Timer2 và cho phép Timer2 hoạt  
động bằng cách đưa giá trị thích hợp vào thanh ghi T2CON.  
Cho phép CCP hoạt động ở chế độ PWM.  
- Trong đó giá trị 1 chu kì (period) của xung điều chế được tính bằng công thức:  
PWM period = [(PR2) +1]*4*TOSC*(giaù trò boä chia taàn soá cuûa TMR2).  
- Ñoä roäng cuûa xung ñieàu cheá (duty cycle) ñöôïc tính theo coâng thöùc:  
PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(giaù trò boä chia taàn soá TMR2)  
30  
SVTH: Trần Tường Băng  
Văn Chính  
 

Tải về để xem bản đầy đủ

doc 64 trang yennguyen 18/07/2025 430
Bạn đang xem 30 trang mẫu của tài liệu "Đồ án Lập trình PIC16F877A điều khiển tốc độ động cơ DC", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docdo_an_lap_trinh_pic16f877a_dieu_khien_toc_do_dong_co_dc.doc