Lời cảm ơn
Lời cảm ơn
Với sự giúp đỡ tận tình của các thầy cô trong khoa Điện tự động hóa Trường
Cao Đẳng Công Nghệ Đại học Đà Nẵng cùng với người thân, gia đình và bạn bè,
chúng em đã hoàn thành đồ án theo đúng thời gian quy định.
Để đạt được thành công này, chúng em xin chân thành cảm ơn thầy giáo
Phó giáo sư-Tiến sĩ Đoàn Quang Vinh, người đã luôn theo dõi, chỉ bảo tận tình cho
em trong suốt thời gian thực hiện đề tài, người đã đóng góp ý kiến và hướng dẫn em
hoàn thành đồ án. Bên cạnh đó, em cũng xin chân thành cảm ơn đến các thầy cô
giáo trong khoa Điện tử động đã tận tình dạy dỗ chúng em trong những năm học
vừa qua. Cuối cùng, chúng em xin gởi lời cảm ơn chân thành đến gia đình, bạn bè
đã giúp đỡ em hoàn thành đồ án này.
Chúng em xin chân thành cảm ơn.
Đà Nẵng, ngày 10 tháng 06 năm 2010
Sinh viên thực hiện
Trần Nguyễn Quốc Huy
Phan Hoàng Anh
Nguyễn Đức Ba
Nguyễn Tấn Thạch
Lời cam đoan
Cộng hòa xã hội chủ nghĩa Việt Nam
Độc lập – Tự do – Hạnh phúc
Lời cam đoan
Kính gởi: Hội đồng bảo vệ tốt nghiệp khoa Điện tự động – Trường Cao
Đẳng Công Nghệ – Đại học Đà Nẵng.
Em tên là: Trần Nguyễn Quốc Huy
Phan Hoàng Anh
Nguyễn Đức Ba
Nguyễn Tấn Thạch
Đang là sinh viên lớp 08LTĐ – Khoa Điện tự động – Trường Cao Đẳng
Công Nghệ – Đại học Đà Nẵng.
Hiện nay chúng em làm đồ án tốt nghiệp với đề tài “Điều khiển tốc độ động
cơ điện một chiều ”.
Chúng em xin cam đoan nội dung đồ án hoàn toàn không giống với bất kỳ đồ
án hoặc công trình nào đã có trước đó.
Đà Nẵng, ngày 10 tháng 06 năm 2010
Sinh viên thực hiện
Trần Nguyễn Quốc Huy
Phan Hoàng Anh
Nguyễn Đức Ba
Nguyễn Tấn Thạch
Mục lục
MỤC LỤC
Chương 1: Động cơ điện một chiều 1
1.1. Giới thiệu chương 1
1.2. Nội dung 1
1.2.1 Giới thiệu động cơ DC 1
1.2.2 Mô hình hóa động cơ DC 1
1.2.3 Phương pháp điều khiển tốc độ động cơ: 3
1.2.4 Khảo sát hàm truyền 4
1.2.4.1 Hàm truyền lý tưởng: 4
1.2.4.2 Hàm truyền gần đúng tìm được bằng thực nghiệm 5
1.2.5 Phương pháp ổn định động cơ dùng thuật toán PID 6
1.2.5.1 Thuật toán PID 6
1.2.5.2 Phương pháp hiệu chỉnh thông số bộ PID Ziegler-Nichols: 7
1.3. Kết chương 8
Chương 2 : Giới thiệu vi điều khiển PIC16F887 9
1.4. Giới thiệu chương 9
1.5. Nội dung 9
2.2.1 Một vài chi tiết chính của vi điều khiển PIC16F887 9
2.2.2 Bộ dao động của PIC16F887 11
2.2.3 Các Port I/O 12
2.2.4 Hoạt động của khối giao tiếp EUSART 13
2.2.5 Cấu tạo và hoạt động của khối điều xung PWM 15
2.2.6 Ngắt ngoài trên chân RB0 17
2.2.7 Cấu tạo và hoạt động của bộ Timer1 18
Mục lục
2.2.8 Cách nạp cho PIC16F887 18
1.6. Kết chương 20
Chương 3: Thiết kế và thi công phần cứng 21
1.7. Mở chương 21
1.8. Nội dung 21
3.2.1 Sơ đồ khối phần cứng 21
3.2.2 Sơ đồ nguyên lý và hoạt động của các khối mạch 22
3.2.3 Tính toán các thông số của mạch 24
3.2.3.1 Mạch đảo chiều động cơ 24
3.2.3.2 Tính toán cho FET 25
3.2.3.3 Tính toán mạch lái cho FET 27
3.3.4 Layout và thi công mạch 30
1.9. Kết chương 31
Chương 4 : Thiết kế phần mềm 32
1.10. Mở chương 32
1.11. Nội dung 32
4.2.1 Phần mềm cho vi điều khiển PIC16F887 32
4.2.1.1 Thuật toán chương trình chính 32
4.2.1.2 Thuật toán chương trình xử lý phím 35
4.2.1.3 Thuật toán chương trình đo tốc độ động cơ 37
4.2.1.4 Thuật toán chương trình phục vụ ngắt nhận UART 39
4.2.2 Phần mềm trên máy vi tính giao tiếp với mạch điều khiển 41
1.12. Kết luận chương 46
1.13. Nhận xét đánh giá hệ thống 46
Mục lục
1.14. Hướng phát triển đề tài 46
47
Các từ viết tắt
CÁC TỪ VIẾT TẮT
PID Proportional–Integral–Derivative
DC Direct Current
PWM Pulse Width Modulation
EEPROM Electrically Erasable Programmable Read Only Memory
ADC Analog Digital Converter
USART Universal Synchronous Synchronous Asynchronous Receiver
Transmitter
MUX Multiplexer
MCU Microcontroller Unit
GPIO General Purpose Input Ourput
EUSART Enhanced Universal Synchronous Asynchronous Receiver
Transmitter
LCD Liquid Crystal Display
FET Field-Effect Transistor
BJT Bipolar Junction Transistor
MOSFET Metal Oxide Semiconductor Field-Effect Transistor
UART Universal Asynchronous Receiver Transmitter
Mở đầu
Mở đầu
Với sự phát triển rộng rãi của thiết bị điện, ngày nay, người người, nhà nhà
hầu hết đã sử dụng các công nghệ hiện đại. Và khi mức sống của người dân được
nâng cao thì việc quản lý các thiết bị điện trong nhà là hết sức cần thiết. Chính vì
vậy việc điều khiển thiết bị và giám sát hoạt động của nó thông qua một quá trình tự
động là việc làm mang nhiều lợi ích.
Đề tài thực hiện việc điều khiển thông qua vi điều khiển PIC16F887A, chính
vì vậy đề tài nghiên cứu sâu về việc ổn định tốc độ động cơ điện một chiều. Trong
giới hạn thời gian nghiên cứu cho phép, đề tài chỉ phát triển một hệ thống điều
khiển đơn giản. Các thiết bị được giám sát và điều khiển tiêu tốn rất ít năng lượng
sẽ mang lại lợi ích kinh tế và hiệu quả sử dụng cao.
Nội dung của đồ án gồm:
Chương 1: Động cơ điện 1 chiều
Chương 2: Giới thiệu về vi điều khiển PIC 16F887A
Chương 3:Thiết kế và thi công phần cứng
Chương 4: Thiết kế phần mềm
Phương pháp nghiên cứu của đồ án là tính toán thiết kế mạch, xây dựng các
lưu đồ thuật toán và thi công lắp ráp để kiểm chứng tính đúng đắn của thiết kế và
các lưu đồ thuật toán đã xây dựng.
Với phương pháp trên, đồ án đã được thiết kế và thi công thành công.
Vì thời gian chuẩn bị không nhiều cùng với kiến thức còn hạn hẹp, đồ án
không tránh khỏi những sai sót, chúng em rất mong nhận được ý kiến đóng góp của
các thầy cô trong khoa, chúng em xin chân thành cảm ơn.
Đà Nẵng, ngày 10 tháng 06 năm 2010
Sinh viên thực hiện
Trần Nguyễn Quốc Huy
Phan Hoàng Anh
Nguyễn Đức Ba
Nguyễn Tấn Thạch
Chương 1: Động cơ điện một chiều
Chương 1: Động cơ điện một chiều
1.1. Giới thiệu chương
Chương này giới thiệu cơ bản về động cơ DC, các phương pháp điều khiển
tốc độ động cơ và phương pháp ổn định tốc độ động cơ dùng thuật toán PID.
1.2. Nội dung
1.2.1 Giới thiệu động cơ DC
Động cơ điện một chiều là động cơ điện hoạt động với dòng điện một chiều.
Động cơ điện một chiều ứng dụng rộng rãi trong các ứng dụng dân dụng cũng như
công nghiệp.
Cấu tạo của động cơ gồm có 2 phần: stato đứng yên và rôto quay so với
stato. Phần cảm (phần kích từ-thường đặt trên stato) tạo ra từ trường đi trong mạch
từ, xuyên qua các vòng dây quấn của phần ứng (thường đặt trên rôto). Khi có dòng
điện chạy trong mạch phần ứng, các thanh dẫn phần ứng sẽ chịu tác động bởi các
lực điện từ theo phương tiếp tuyến với mặt trụ rôto, làm cho rôto quay.
Tùy theo cách mắc cuộn dây roto và stato mà người ta có các loại động cơ
sau:
- Động cơ kích từ độc lập: Cuộn dây kích từ (cuộn dây stato) và cuộn
dây phần ứng (roto) mắc riêng rẽ nhau, có thể cấp nguồn riêng biệt.
- Động cơ kích từ nối tiếp: Cuộn dây kích từ mắc nối tiếp với cuộn dây
phần ứng.
Đối với loại động cơ kích từ độc lập, người ta có thể thay thế cuộn dây kích
từ bởi nam châm vỉnh cữu, khi đó ta có loại động cơ điện 1 chiều dùng nam châm
vĩnh cữu. Đây là loại động cơ được sử dụng trong đồ án này.
1.2.2 Mô hình hóa động cơ DC
Mô hình tương đương của phần ứng động cơ như sau:
Trang 1
Chương 1: Động cơ điện một chiều
A
-
+
12
R a
L a
E g
U a
I a
g
a
aaaa
e
dt
di
LiRu ++=
(1.1)
nke
vg
Φ=
(1.2)
Trong đó Φ là từ thông do nam châm vĩnh cữu gây ra. n là tốc độ động cơ.
Momen điện từ:
T
d
= K
t
Φi
a
(1.3)
Phương trình của động cơ:
Ld
TB
dt
d
JT ++=
ω
ω
(1.4)
B: hệ số ma sát
T: monen tải.
Ở chế độ xác lập:
gaaa
eiRu +=
(1.5)
atLd
iKTnBT Φ=+=
π
2
(1.6)
Ta có được tốc độ động cơ ở chế độ xác lập:
Φ
−
=
v
aaa
K
RIU
n
(1.7)
Trang 2
Chương 1: Động cơ điện một chiều
1.2.3 Phương pháp điều khiển tốc độ động cơ:
Đối với loại động cơ kích từ độc lập dùng nam châm vĩnh cữu, để thay đổi
tốc độ, ta thay đổi điện áp cung cấp cho roto. Việc cấp áp 1 chiều thay đổi thường
khó khăn, do vậy người ta dùng phương pháp điều xung (PWM):
Hình 1.1 Điều chỉnh độ rộng xung PWM.
Phương pháp điều xung sẽ giữ tần số không đổi, thay đổi chu kì nhiệm vụ
(Duty cycle) để thay đổi điện áp trung bình đặt lên động cơ.
Điện áp trung bình:
in
on
dk
V
T
T
V =
Do đặc tính cảm kháng của động cơ, dòng qua động cơ là dòng liên tục, gợn
sóng như sau:
Hình 1.2 Dạng sóng dòng và áp trên động cơ.
Trang 3
Chương 1: Động cơ điện một chiều
1.2.4 Khảo sát hàm truyền
1.2.4.1 Hàm truyền lý tưởng:
Biến đổi Laplace các công thức từ (1.1) – (1.4 ) ta được:
U
a
(p) = R
a
I
a
(p)+pL
a
I
a
(p)+E
g
(p) (1.9)
)()( pnkpE
vg
Φ=
(1.10)
T
d
(p) = K
t
ΦI
a
(p) (1.11)
)()(2)(2)( pTpBnppJnpT
Ld
++=
ππ
(1.12)
Từ 1.12 tính được:
)1(2
)()(
)(
+
−
=
m
Ld
pB
pTpT
pn
τπ
(1.13)
(1.14)
Trong đó:
a
τ
=L
a
/R
a
Hằng số thời gian của mạch phần ứng
m
τ
=J/B Hằng số thời gian cơ.
Vậy ta có mô hình hệ thống như sau:
Hình 1.3 Mô hình hệ thống động cơ điện DC
Khi momen tải bằng 0, ta có:
Φ+++
Φ
=
vma
t
a
a
Kpp
K
BR
pUpn
)1)(1(
2
1
)()(
ττ
π
Trang 4
Chương 1: Động cơ điện một chiều
Vậy hàm truyền của động cơ lúc này có dạng khâu dao động.
1.2.4.2 Hàm truyền gần đúng tìm được bằng thực nghiệm
Để tìm hàm truyền bằng thực nghiệm ta tìm đáp ứng xung của động cơ.
Ta đặt áp bằng áp định mức vào động cơ và vẽ đồ thị vận tốc theo thời gian.
Vì thời gian lấy mẫu vận tốc nhỏ do đó ta không thấy được các điểm uốn của đồ thị,
do đó ở đây ta xấp xỉ hàm truyền động cơ là khâu quán tính bậc 1 có dạng như sau.
1+
=
Tp
k
G
Đáp ứng xung của động cơ:
n(p)=
pTp
kU
)1( +
Biến đổi Laplace ngược ta được:
n=kU(1-e
-t/T
)
Khi t = T, n = kU(1-e
-1
)=0.63kU=0.63n
max
Vậy trên đồ thị ta xác định điểm tại đó n=0.63n
max
sau đó tìm được T.
Dựa vào đồ thị tìm được bằng thực nghiệm ta tìm được kU và T.
Hình 1.4 Đồ thị tìm được bằng thực nghiệm của động cơ DC
kU = 150 vòng/s
Trang 5
Chương 1: Động cơ điện một chiều
T = 30ms=0.03s
Vậy hàm truyền gần đúng:
103.0
5.37
103.0
24/150
1
+
=
+
=
+
=
ppTp
k
G
1.2.5 Phương pháp ổn định động cơ dùng thuật toán PID
1.2.5.1 Thuật toán PID
τ
τ
ττ
d
de
KdeKKG
dip
)(
)(
++=
∫
Trong đó:
- K
p
: Hệ số khâu tỉ lệ (khâu khuếch đại)
- K
i
: Hệ số tích phân
- K
d
: hệ số vi phân
Hình 1.5 Mô hình hệ thống PID.
Luật điều khiển PID:
Đáp ứng của hệ
thống
Thời gian
tăng
Vọt
lố
Thời gian ổn
định
Sai lệch so với trạng
thái bền
K
P
Giảm Tăng Ít thay đổi Giảm
K
I
Giảm Tăng Tăng Triệt tiêu
K
D
Ít thay đổi Giảm Giảm Ít thay đổi
Bảng 1.1 Luật điều khiển PID
Trang 6
Chương 1: Động cơ điện một chiều
Dựa vào bảng trên ta thấy rằng luật tỉ lệ (P) có đặc điểm tác động nhanh
nhưng không triệt tiêu được sai lệch, đồng thời làm vọt lố của hệ thống tăng. Khâu
tích phân cho phép triệt tiêu sai lệch nhưng tác động chậm. Khâu vi phân phản ứng
với tốc độ biến thiên của sai lệch. Ta cần xác định các thông số K
p
, K
i
, K
d
để được
hệ thống có chất lượng mong muốn.
Thuật toán của bộ điều khiển PID số:
Khâu tỉ lệ P (Proportional): G
P
(z) = K
P
Khâu tích phân I (Integrate):
1
1
1
)(
−
−
=
z
TKzG
II
với
∫
∑
=
=
kT
k
n
nTTedtte
0
0
)()(
Trong đó T là chu kì lấy mẫu vận tốc. Công thức tích phân gần đúng theo
thuật toán xấp xỉ hình chữ nhật tới.
Khâu vi phân D (Derivative):
)1(
1
)(
1−
−=
−
= zK
Tz
z
KzG
dDD
với thành phần vi
phân xấp xỉ bởi
T
TnenTe
dt
tde ))1(()()( −−
=
Vậy ta được hàm truyền khâu PID rời rạc:
)1(
1
1
)(
)(
1
1
−
−
−+
−
+== zK
z
KK
zE
zU
G
dip
dk
U
dk
(z)(1-z
-1
) = E(z)(K
p
(1-z
-1
) + K
i
+ K
d
(1-z
-1
)
2
Suy ra:
u
k
– u
k-1
= K
p
(e
k
– e
k-1
) + K
i
e
k
+ K
d
(e
k
– 2e
k-1
– e
k-2
)
1.2.5.2 Phương pháp hiệu chỉnh thông số bộ PID Ziegler-Nichols:
Thông thường việc chọn các thông số P, I, D được xác định bằng thực
nghiệm dựa vào đáp ứng xung của hệ thống. Ziegler – Nichols đưa ra phương pháp
chọn tham số PID cho mô hình quán tính bậc nhất có trễ. Ở đây ta xấp xỉ hàm
truyền của động cơ để dùng phương pháp này, tuy không hoàn toàn chính xác
nhưng có thể cho đáp ứng tương đối tốt.
Trang 7
Chương 1: Động cơ điện một chiều
Phương pháp này đỏi hỏi phải tính được giá trị giới hạn của của khâu tỉ lệ
K
gh
và chu kì giới hạn của hệ kín T
gh
. Sau đó tìm các thông số khác theo bảng sau:
Bộ điều khiển K
P
T
I
T
D
P 0.5·K
gh
- -
PI 0.45·K
gh
0.83·T
gh
-
PID 0.6·K
gh
0.5·T
gh
0.125·T
gh
Bảng 1.2 Các giá trị thông dụng của các hệ số K
P
, K
I
, K
D.
Để tìm được K
gh
và T
gh
, ban đầu ta chỉnh K
i
, K
d
bằng 0 sau đó tăng từ từ K
p
để hệ thống ở biên giới ổn định (dao động với biên độ và chu kì không đổi), tại đây
ta xác định được K
gh
và T
gh
sau đó tính các thông số khác tùy theo bộ điều khiển
như bảng trên.
Ki = Kp/Ti
Kd = KxTd
Để thuận tiện trong quá trình điều chỉnh và quan sát đáp ứng của động cơ, đồ
án này đã xây dựng chương trình viết bằng VB trên máy tính để giao tiếp với mạch
điều khiển. Phần này sẽ được giới thiệu trong chương 4.
1.3. Kết chương
Chương này đã giới thiệu cơ sở lý thuyết về động cơ, phương pháp điều
khiển động cơ và thuật toán điều khiển PID.
Chương tới sẽ giới thiệu vi điều khiển PIC16F887, trong đề tài này
PIC16F887 được sử dụng làm khối điều khiển trung tâm, điều khiển động cơ dùng
thuật toán PID và giao tiếp với máy tính theo chuẩn giao tiếp RS232 cho phép
người sử dụng giám sát trạng thái của động cơ.
Trang 8
Chương 2: Giới thiệu vi điều khiển PIC16F887
Chương 2 : Giới thiệu vi điều khiển PIC16F887
1.4. Giới thiệu chương
Chương này giới thiệu cơ bản về vi điều khiển PIC16F887 của hãng
Microchip và hoạt động của nó bao gồm nội dung về cách cấu hình xung clock,
hoạt động khối giao tiếp UART, khối PWM, ngắt ngoài trên chân RB, cấu tạo và
hoạt động của các bộ timer, và cách nạp chương trình cho PIC16F887.
1.5. Nội dung
2.2.1 Một vài chi tiết chính của vi điều khiển PIC16F887
PIC16F887 là vi điều khiển 8-bit có kiến trúc Harvard của Microchip có
những thông số kỹ thuật như sau:
- Clock hoạt động tối đa 20MHz.
- Chu kỳ máy bằng bốn lần chu kỳ xung clock.
- Chip có nhiều dạng vỏ khác nhau, loại chip được sử dụng trong đề tài là
loại 40 chân PDIP.
- Điện áp hoạt động rộng từ 2V đến 5.5V.
- Bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau, bus địa chỉ cũng
như bus dữ liệu là riêng biệt. Bộ nhớ chương trình Flash 8K ô nhớ cho
phép ghi 100,000 lần. Mỗi ô nhớ có 14 bit. Bộ nhớ dữ liệu RAM có 512
Byte gồm các thanh ghi chức năng đặc biệt và các thanh ghi đa mục đích.
Ngoài ra PIC16F887 được tích hợp 256 Byte EEPROM cho phép ghi đến
1,000,000 lần.
- 35 chân I/O của 5 port điều khiển là PortA, PortB, PortC, PortD, PortE.
- Bộ chuyển đổi ADC 10-bit với 14 kênh.
- 3 bộ timer. Bộ timer0 8-bit, bộ timer1 16-bit và bộ timer2 8-bit.
- Module Capture, Compare và PWM
- Module Enhanced USART hỗ trợ RS-485, RS-232.
Những chi tiết trên được thể hiện cụ thể trong hình 2.1.
Trang 9
Chương 2: Giới thiệu vi điều khiển PIC16F887
Hình 2.1 Sơ đồ khối của PIC16F887
Trang 10
Chương 2: Giới thiệu vi điều khiển PIC16F887
2.2.2 Bộ dao động của PIC16F887
Sơ đồ khối của bộ dao động được minh họa trong hình 2.2.
Hình 2.2 Sơ đồ khối bộ dao động của PIC16F887
Clock hệ thống của PIC16F887 có thể được chọn từ hai nguồn dao động nội
(Internal Oscillator) hoặc dao động ngoại (External Oscillator) nhờ bộ chọn kênh
MUX. Bộ MUX được điều khiển bởi các bit FOSC<2:0> (bit 2, bit 1, bit 0 của
thanh ghi CONFIG1 16-bit định vị tại địa chỉ 2007H và 2008H trong bộ nhớ
chương trình) và bit SCS<0> (bit 0 của thanh ghi OSCCON). Nếu SCS = 1, clock
hệ thống được chọn từ INTOSC. Nếu SCS = 0, clock hệ thống được chọn từ bộ dao
động ngoại. Các bit FOSC<2:0> được sử dụng để cấu hình bộ dao động ngoại là
LP, XT, HS, RC, RCIO hay EC.
Bộ dao động nội gồm 2 bộ dao động HFINTOSC 8MHz và LFINTOSC
31kHz. Clock 8MHz của bộ HFINTOSC được chia thành các tần số
8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz nhờ bộ chia tần
số postscaler. Các bit IRCF<2:0> điều khiển bộ MUX chọn kênh cho
INTOSC.
Trang 11
Chương 2: Giới thiệu vi điều khiển PIC16F887
Bộ dao động ngoại (được tích hợp bên trong PIC) cần được kết nối với
các bộ lọc tại các chân OSC1, OSC2. Trong đề tài, tôi sử dụng thạch anh
12MHz và 2 tụ 33pF kết nối như hình 2.3. Bộ dao động ngoại được hoạt
động ở chế độ HS. Tín hiệu dao động được qua bộ đệm Trigger theo
sườn xuống và tạo thành xung clock HS 12MHz cung cấp cho clock hệ
thống.
Hình 2.3 Bộ dao động ngoại ở chế độ HS.
2.2.3 Các Port I/O
PIC16F887 tất cả 35 chân I/O mục đích thông thường (GPIO: General
Purpose Input Ouput) có thể được sử dụng. Tùy theo những thiết bị ngoại vi được
chọn mà một vài chân có thể không được sử dụng ở chức năng GPIO. Thông
thường, khi một thiết bị ngoại vi được chọn, những chân liên quan của thiết bị ngoại
vi có thể không được sử dụng ở chức năng GPIO. 35 chân GPIO được chia cho 5
Port: PortA gồm 8 chân, PortB gồm 8 chân, PortC gồm 8 chân, PortD gồm 8 chân
và PortE gồm 3 chân.
Mỗi port được điều khiển bởi 2 thanh ghi 8-bit, thanh ghi Port và thanh ghi
Tris. Thanh ghi Tris được sử dụng để điều khiển port là nhập hay xuất. Mỗi bit của
Tris sẽ điều khiển mỗi chân của port đó, nếu giá trị của bit là 1 thì chân liên quan là
nhập, ngược lại nếu giá trị của bit là 0 thì chân liên quan là xuất. Thanh ghi Port
được sử dụng để chứa giá trị của port liên quan. Mỗi bit của thanh ghi Port sẽ chứa
giá trị của chân liên quan.
Cấu trúc của chân GPIO được thể hiện trong hình 2.4
Trang 12
Chương 2: Giới thiệu vi điều khiển PIC16F887
Hình 2.4 Cấu tạo của chân GPIO
2.2.4 Hoạt động của khối giao tiếp EUSART
Khối giao tiếp nối tiếp EUSART (Enhanced Universal Synchronous
Asynchronous Receiver Transmitter) cho phép cấu hình hoạt động ở chế độ giao
tiếp nối tiếp đồng bộ và không đồng bộ. Trong đề tài này, chế độ giao tiếp không
đồng bộ được sử dụng. Phần này sẽ tập trung mô tả hoạt động của module
EUSART ở chế độ không đồng bộ.
Hoạt động truyền:
Sơ đồ khối bộ truyền được thể hiện trong hình 2.5.
Hình 2.5 Sơ đồ khối bộ truyền của module EUSART
Trang 13
Chương 2: Giới thiệu vi điều khiển PIC16F887
Bộ phận chính của khối truyền là thanh ghi truyền TSR. Thanh ghi này
không thể truy cập bằng phần mềm, mà được truy cập gián tiếp qua thanh
ghi đệm truyền TXREG. Bộ truyền được kích hoạt khi cấu hình các bit
TXEN=1, SYNC=0, SPEN=1. TXEN=1 kích hoạt bộ truyền của EUSART.
SYNC=0 cấu hình EUSART hoạt động ở chế độ không đồng bộ. SPEN=1
cho phép bộ EUSART hoạt động và cấu hình chân TX/CK là chân xuất.
- Quá trình truyền được khởi tạo bằng cách ghi dữ liệu truyền vào thanh
ghi TXREG. Nếu đây là dữ liệu truyền đầu tiên hoặc dữ liệu truyền trước
đã truyền hoàn tất thì dữ liệu trong TXREG ngay lập tức sẽ được truyền
vào thanh ghi TSR. Nếu thanh ghi TSR vẫn còn chứa dữ liệu của ký tự
truyền trước thì dữ liệu mới trong TXREG sẽ được giữ cho đến khi bit
Stop của ký tự đang truyền hoàn tất. Sau đó dữ liệu chờ trong TXREG sẽ
được truyền vào TSR.
- Các bước thiết lập quá trình truyền:
o Khởi tạo cặp thanh ghi SPBRGH, SPBRG và các bit BRGH,
BRG16 để cấu hình tốc độ Baud.
o Thiết lập bit SYNC=0, và bit SPEN=1.
o Gởi dữ liệu cần truyền vào TXREG, quá trình truyền sẽ bắt đầu.
Hoạt động nhận:
Sơ đồ khối bộ nhận được thể hiện trong hình 2.6.
Dữ liệu được nhận trên chân RX/DT và đẩy vào khối Data Recovery. Khi tất
cả 8 hoặc 9 bit của ký tự nhận đã được dịch vào, chúng sẽ ngay lập tức được
chuyển vào bộ đệm 2 ký tự FIFO. Bộ đệm FIFO và thanh ghi RSR không thể
truy cập trực tiếp bằng phần mềm mà được truy cập gián tiếp thông qua
thanh ghi RCREG. Dữ liệu trong bộ đệm nhận được đọc bằng cách đọc
thanh ghi RCREG. Bộ nhận được kích hoạt khi cấu hình các bit CREN=1,
SYNC=0, SPEN=1. CREN=1 kích hoạt bộ nhận của EUSART. SYNC=0
cấu hình EUSART hoạt động ở chế độ không đồng bộ. SPEN=1 cho phép bộ
EUSART hoạt động và cấu hình chân RX/DT là chân nhập.
Trang 14
Chương 2: Giới thiệu vi điều khiển PIC16F887
Cờ ngắt nhận RCIF=1 khi bộ nhận EUSART được kích hoạt và có một ký tự
đã được nhận trong bộ đệm nhận FIFO và chưa được đọc. Bit RCIF là bit chỉ
đọc, không thể ghi bằng phần mềm. Ngắt nhận được kích hoạt khi cấu hình
các bit sau: RCIE=1, PEIE=1 và GIE=1. Sau khi đã thiết lập các bit như trên,
ngắt nhận xảy ra ngay khi nhận xong một ký tự trong bộ đệm nhận. Cờ RCIF
được xóa bằng phần cứng khi không có ký tự nào chưa đọc trong bộ đệm
nhận.
Hình 2.6 Sơ đồ khối bộ nhận USART.
2.2.5 Cấu tạo và hoạt động của khối điều xung PWM
PIC16F887 có hai bộ điều xung, hai bộ này sẽ tạo ra các tín hiệu điều xung
trên các chân CCP1 và CCP2. Độ rộng, chu kỳ, và độ phân giải được xác định bởi
các thanh ghi PR2, T2CON, CCPR1L, CCPR2L, CCP1CON, CCP2CON.
Để các chân CCPx (CCP1 và CCP2) hoạt động ở chế độ PWM, cần xóa bit
TRIS tương ứng của các chân đó. Sơ đồ khối của các bộ điều xung được mô tả
trong hình 2.7.
Chú thích (1) trong hình 2.7 biểu thị rằng thanh ghi 8-bit TMR2 được kết
hợp với 2-bit prescaler của bộ dao động nội để tạo ra bộ định thời 10-bit. Các thanh
ghi CCPRxH là các thanh ghi chỉ đọc, kết hợp với 2 bit 5 và 4 của các thanh ghi
CCPxCON có vai trò định độ rộng của xung, các thanh ghi này được ghi gián tiếp
thông qua các thanh ghi CCPRxL. Thanh ghi 8-bit PR2 định chu kỳ cho xung ra.
Trang 15
Chương 2: Giới thiệu vi điều khiển PIC16F887
Hình 2.7 Sơ đồ khối bộ PWM.
Sóng điều xung tại các chân CCPx có giản đồ thời gian như hình 2.8.
Hình 2.8 Giản đồ thời gian của sóng điều xung tại chân CCPx
Thanh ghi TMR2 kết hợp với 2 bit prescaler sẽ đếm lên nhờ xung clock của
hệ thống. Khi giá trị của TMR2 nhỏ hơn giá trị của CCPRxL:CCPxCON<5:4>,
chân CCPx ở mức cao. Khi giá trị của TMR2 bằng với giá trị này, bộ so sánh sẽ đảo
chân CCPx xuống mức 0. Khi giá trị của TMR2 bằng với PR2, TMR2 sẽ được xóa
về 0 đồng thời kết thúc chu kỳ xung, chân CCPx lại được thiết lập mức cao.
Chu kỳ của xung được tính theo công thức sau:
Chu kỳ PWM = [(PR2)+1].4.T
OSC
.(giá trị Prescale của TMR2)
Ở đây T
OSC
là chu kỳ của clock hệ thống. T
OSC
= 1/F
OSC.
Độ rộng xung được tính theo công thức sau:
Độ rộng xung = (CCPxL:CCPxCON<5:4>).T
OSC
.(giá trị Prescale của TMR2)
Trang 16
Chương 2: Giới thiệu vi điều khiển PIC16F887
2.2.6 Ngắt ngoài trên chân RB0
Hình 2.9 là sơ đồ khối logic của hệ thống ngắt trong PIC16F887.
Hình 2.9 Sơ đồ khối logic của hệ thống ngắt trong PIC16F887.
Ngắt ngoài trên chân RB0 được kích khởi theo sườn. Sườn lên nếu như bit
INTEDG=1 (bit 6 của thanh ghi OPTION_REG), sườn xuống nếu INTEDG=0. Khi
một sườn thích hợp xuất hiện trên chân RB0, cờ INTF được bật lên 1. Ngắt này có
thể được cho phép nếu bit INTE=1, không cho phép nếu INTE=0. Cờ INTF cần
được xóa bằng phần mềm trong trình phục vụ ngắt trước khi cho phép ngắt trở lại.
Trang 17
Chương 2: Giới thiệu vi điều khiển PIC16F887
2.2.7 Cấu tạo và hoạt động của bộ Timer1
Bộ timer1 là bộ định thời 16-bit có cấu tạo như hình 2.10.
Hình 2.10 Sơ đồ khối của bộ timer1.
Bộ timer1 là bộ đếm lên 16-bit được truy xuất gián tiếp thông qua cặp thanh
ghi TMR1H, TMR1L. Đọc hoặc ghi các thanh ghi này sẽ cập nhật trực tiếp giá trị
cho bộ timer. Khi được sử dụng với nguồn clock nội, bộ timer 1 sẽ có vai trò là bộ
định thời. Khi được sử dụng với nguồn clock ngoại, nó sẽ có vai trò là định thời
hoặc bộ đếm. Sử dụng bit TMR1CS để chọn nguồn clock.
Các bit T1CKPS<1:0> định giá trị cho bộ chia tần số Prescaler. Khi bộ
TMR1 tràn (từ FFFFh đến 0000h) cờ ngắt TMR1IF sẽ được thiết lập lên 1. Nếu lúc
này cờ TMR1IE =1, cờ PEIE=1 và GIE=1 thì ngắt timer1 sẽ xảy ra. Cờ TMR1IF
cần được xóa trong trình phục vụ ngắt timer1.
2.2.8 Cách nạp cho PIC16F887
Có nhiều cách nạp cho chip PIC16F887, trong đề tài này sử dụng cách nạp
bằng mạch nạp ezPIC Programmer của Sunrom và phần mềm nạp PICPgm
Programmer. Mạch nạp được kết nối qua cổng COM của máy vi tính. Sơ đồ nguyên
Trang 18