SlideShare a Scribd company logo
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
LUẬN VĂN TỐT NGHIỆP
ĐỀ TÀI
Lập trình PIC16F877A
điều khiển tốc độ
động cơ DC
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
2
MỤC LỤC
Chương I: KHÁI QUÁT ĐỀ TÀI............................................................................................3
I/ Tóm tắt đề tài:.......................................................................................................................3
Nếu là chế độ 2 thì ta phải nhập them thời gian, sau đó nhấn phím ENTER.............................5
CHƯƠNG II:..............................................................................................................................6
GIỚI THIỆU VỀ CÁC LINH KIỆN PHẦN TỬ SỬ DỤNG TRONG MẠCH...................6
I.Vi điều khiển PIC16F877A ...................................................................................................6
1. Khái quát về vi điều khiển PIC16F877A............................................................................6
Sơ đồ chân ................................................................................................................................9
Sơ đồ nguyên lý.........................................................................................................................10
2. Tổ chức bộ nhớ:..................................................................................................................11
2.1. Bộ nhớ chương trình:......................................................................................................11
2.2. Bộ nhớ dữ liệu:.................................................................................................................11
2.3. Stack..................................................................................................................................14
3. Khái quát về chức năng của các port trong vi điều khiển PIC16F877A .......................15
4. Các vấn đề về Timer...........................................................................................................17
4.1. Timer0 ..............................................................................................................................17
4.2.TIMER1.............................................................................................................................20
5. NGẮT (INTERRUPT):......................................................................................................24
6. Phương pháp điều chế xung PWM:..................................................................................29
6.2. Nguyên lí của PWM: .......................................................................................................29
Ud = Umax . (t0/T) hay Ud = Umax.D.........................................................................................30
6.3. Cách thiết lập chế độ PWM cho PIC16F877A..............................................................31
II. Mạch cầu H ( H-Bridge Circuit ). ....................................................................................32
Hình 18: Mạch cầu H...............................................................................................................33
Khảo sát hoạt động của mạch cầu H ........................................................................................33
Hình19: Nguyên lý hoạt động của mạch cầu H .......................................................................34
III/LCD....................................................................................................................................35
VD: Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), … .................................38
IV. Đối tượng điều khiển: Động cơ DC ................................................................................42
Mô hình thứ 1 ...........................................................................................................................43
Mô hình thứ 2 ...........................................................................................................................45
CHƯƠNG 3:.............................................................................................................................46
I/ THIẾT KẾ MẠCH PHẦN CỨNG:...................................................................................47
II/ Giới thiệu về chương trình viết code và biên dịch: ........................................................51
Return(biến);}...........................................................................................................................52
III/ Lưu đồ giải thuật: ............................................................................................................52
CODE CHƯƠNG TRÌNH .....................................................................................................55
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
3
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 độ và đ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 là động cơ DC 12V có gắn Encoder.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
4
 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.
 Để 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:
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Ế ĐỘ:”
b2
a7
b0
b1
a4
a5
a6
p0
p1
p2
p3
p0
p3
p1
p2
a7
a4
a5
a6
b0
b2
b1
CCP2
CCP1
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC16F877A
C1
30pF
C2
30pF
X1
CRYSTAL
R9
10k
R1
5k
R2
5k
R3
5k
R4
5k
VCC
VCC
C3
10uF
R5
2k2
CCP1
CCP2
CLK
1 2 3
4 5 6
7 8 9
0 (10)
FW(16) RV(15) STOP (14)
CLEAR (11)
set (12)
13
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
16_X_2_LCD
RV1
1K
VI
1
VO
3
GND
2
U2
7805
3
2
1
J1
JACK C4
100uF
C5
100nF
C6
100uF
C7
100nF
D8
LED
R26
1k
+12V +5V
1
2
J2
TERMINAL2
IN1
5
IN2
7
ENA
6
OUT1
2
OUT2
3
ENB
11
OUT3
13
OUT4
14
IN3
10
IN4
12
SENSA
1
SENSB
15
GND
8
VS
4
VCC
9 U1
L298
+12V
R1
0.5
R2
0.5
M1
M2
CLK
1
2
3
4
5
J3
SIL-100-05
+88.8
D1
1N4007
D2
1N4007
D3
1N4007
D4
1N4007
+12V
M1 M2
CLK
RESET
Hình 1: Sơ đồ nguyên lí mạch
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
5
Chương trính có 2 chế độ làm việc: chế độ1 là bám tốc độ đặt, có lưu tốc độ vào
epprom; chế độ 2 là bám tốc độ có định thời gian để thay đổi chiều quay.
 Bước 2:
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 là 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 cơ 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 để có 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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
6
CHƯƠNG II:
GIỚI THIỆU VỀ CÁ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 và 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 có độ 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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
7
 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).
 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 và 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 và 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à I2
C (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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
8
- Đị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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
9
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
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
10
Sơ đồ nguyên lý
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
Hình 4: Sơ đồ nguyên lí các Port của PIC 16F877A
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
11
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:
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) và đượ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
được chia thành 4 bank. Mỗi
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 ô
Hình 5: Cấu trúc bộ nhớ chương trình
PIC 16F877A
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
12
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.
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ớ có đị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ớ có đị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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
13
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 và đ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. Có 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 và đ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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
14
 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)
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
có 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.
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.
Hình 7: Cấu trúc thanh ghi chức năng chung của PIC
16F877A
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
15
- Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa
chỉ và 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
có 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 và 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à
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) : chứa giá trị các pin trong PORTA.
TRISA (địa chỉ 85h) : điều khiển xuất nhập.
CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
16
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) : chứa giá trị các pin trong PORTB
TRISB (địa chỉ 86h, 186h) : đ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:
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à 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 là 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:
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
17
-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 có những ưu điểm sau:
 8 bit cho bộ định thời hoặc bộ đếm.
 Có khả năng đọc và viết.
 Có thể dùng đồng bên trong hoặc bên ngoài.
 Có thể chọn cạnh xung của xung đồng hồ.
 Có 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 có 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 nó đượ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 để có thể
hoạt động đó là phải bảo đảm xung clock bên ngoài có thể đồng bộ với xung
clock bên trong (TOSC).
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
18
 Hệ số chia dùng cho Timer 0 hoặc bộ WDT. Các hệ số nay không có khả năng
đọc và 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, có 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
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ử lý ở 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
 bit 5 TOCS lựa chọn nguồn clock
Hình 8: Cấu trúc thanh ghi OPTION_REG REGISTER
điều khiển hoạt động của Timer0
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
19
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 Timer0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
- Thanh ghi TMR0 đại chỉ 01h và 101h : chứa giá trị của bộ định thời Timer0
- 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.
 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.
Hình 9: Cấu trúc thanh ghi INTCON cho phép ngắt
Timer0 hoạt động
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
20
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
RBIF = 1 ít nhất có 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 là 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 :
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
21
 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.
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
- bit 7,6 không sử dụng
- bit 5,4 T1CKPS1: T1CKPS0 lựa chọn hệ số chia xung vào.
Hình 10: Cấu trúc thanh ghi T1CON điều khiển hoạt động
của Timer1
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
22
T1CKPS1 T1CKPS0
00 1:1
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
4.3.Timer 2
a/ Timer2: là 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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
23
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 và 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 và khả năng viết.
c/ Thanh ghi T2CON: điều khiển hoạt động của Timer2
- 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
…
Hình 12: Cấu trúc thanh ghi T2CON điều khiển hoạt động
của Timer2
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
24
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 và 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ỉ có 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
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
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
25
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ử lí 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.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
26
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,
vì 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 có thể là cạnh lên hay cạnh xuống và đượ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ó
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
Hình 13: Sơ đồ hoạt động ngắt của PIC 16F877A
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
27
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.
 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
Các bit này cho phép thiết lập tỉ số chia tần số của Prescaler.
Hình 14: Cấu trúc thanh ghi OPTION_REG cho phép ngắt
ngoại và ngắt timer0
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
28
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 có 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 1:1
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 ngoài
=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
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
29
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 đó có một phương pháp hết sức quan trọng và thông dụng là 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
6.2. Nguyên lí của PWM:
Đây là phương pháp được thực hiện theo nguyên tắc dóng ngắt nguồn có 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.
Hình 15: Đồ thị dạng xung điều chế PWM
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
30
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 và sườn âm.
D = t0/T: hệ số điều chỉnh hay PWM được tính bằng %
Ví dụ: điện áp nguồn là 12V.
Q1
NPN
Q1(B)
PWM xung vuông
TAI
NGUON
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 và đầu ra (phải)
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
31
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ì 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:
- Ñoä roäng cuûa xung ñieàu cheá (duty cycle) ñöôïc tính theo coâng thöùc:
PWM period = [(PR2) +1]*4*TOSC*(giaù trò boä chia taàn soá cuûa
TMR2).
PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(giaù trò boä chia taàn soá
TMR2)
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
32
- Khi giaù trò thanh ghi PR2 baèng vôùi giaù trò thanh ghi TMR2 thì quaù trình sau
xaûy ra:
 Thanh ghi TMR2 tự động được xóa.
 Pin của khối CCP được set.
 Giá trị thanh ghi CCPR1L (chứa giá trị ấn định độ rộng xung điều chế duty
cycle) được đưa vào thanh ghi CCPRxH.
II. Mạch cầu H ( H-Bridge Circuit ).
1/ Công dụng và nguyên lí hoạt động:
Hình 17: Sơ đồ khối CCP (PWMmode)(trái)
Các tham số của PWM (phải)
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
33
Mạch cầu H là một mạch điện giúp đảo chiều dòng điện qua một đối tượng .Đối
tượng là động cơ DC mà chúng ta cần điều khiển .Mục đích điều khiển là cho phép
dòng điện qua đối tượng theo chiều A đến B hoặc B đến A .Từ đó giúp đổi chiều quay
của động cơ.
Hiện nay, ngoài loại mạch cầu H được thiết kế từ các linh kiện rời như: BJT
công suất, Mosfet, … Còn có các loại mạch cầu H được tích hợp thành các IC như:
L293D và L298D. Do đối tượng điều khiển trong đề tài này là động cơ DC có điện áp
12V và công suât nhỏ nên chúng em dùng mạch cầu H đảo chiều động cơ là IC L298.
Hình 18: Mạch cầu H
Khảo sát hoạt động của mạch cầu H
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
34
Hình19: Nguyên lý hoạt động của mạch cầu H
2/ Mạch cầu H L298D:
L298D là một chip toch1 hợp 2 mạch trong gói 15 chân. L298D có điện áp danh
nghĩa cao (lớn hơn 50V) và dòng điện danh nghĩa lớn hơn 2A nên rất thích hợp cho
các ứng dụng công suất nhỏ như các động cơ DC loại vừa và nhỏ.
Hình 20: Sơ đồ chân của IC L298D (phải)
IC L298D (trái)
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
35
Có 2 mạch cầu H trên mỗi chip L298D nên có thể điều khiển 2 đối tượng riêng với 1
chip này. Mỗi mạch cầu H bao gồm 1 đường nguồn Vs (thật ra là đường chung cho 2
mạch cầu), một chân current sensing (cảm biến dòng) ở phần cuối của mạch cầu H,
chân này không được nối đất mà bỏ trống để cho người dùng nối 1 điện trở nhỏ gọi là
sensing resistor.Bằng cacch1 đo điện áp rơi trên điện trở này chúng ta có thể tính được
dòng qua điện trở, cũng là dòng qua động cơ, mục đích của việc này là để xác định
dòng quá tải. Nếu việc đo lường là không cần thiết thì ta có thể nối chân này với GND.
Động cơ sẽ được nối với 2 chân OUT1, OUT2 hoặc OUT3, OUT4.Chân EN (ENA và
ENB) cho phép mạch cầu hoạt động, khi chân này được kéo lên mức cao.
L298D không chỉ được dùng để đảo chiều động cơ mà còn điều khiển vận tốc động cơ
bằng PWM.Trong thực tế, công suất thực ma L298D có thể tải nhỏ hơn giá trị danh
nghĩa của nó (U =50V, I =2A). Để tăng dòng tải của chíp lên gấp đôi, chúng ta có thể
nối hai mạch cầu H song song với nhau (các chân có chức năng như nhau của 2 mạch
cầu được nối chung).
III/LCD
1/Chức năng và hình dạng LCD.
Hình 21: Sơ đồ nguyên lí của IC L298D
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
36
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong rất nhiều
các ứng dụng của vi điều khiển.LCD có rất nhiều ưu điểm so với các dạng hiển thị
khác: nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ
dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài
nguyên hệ thống và giá thành rẽ …
2/ Chức năng các chân
Chân
số
Tên Chức năng
1 VSS
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND
của mạch điều khiển
2 VDD
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC=5V của mạch điều khiển
3 Vee Chân này dùng để điều chỉnh độ tương phản của LCD.
4 RS
Chân chọn thanh ghi (Register select). Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở
chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ
“đọc” - read) .
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên
trong LCD
5 R/W Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0”
Hình 22: LCD và sơ đồ chân
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
37
Bảng Chức năng các chân của LCD
* Ghi chú: Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các chân
DBx.
Còn khi ở chế độ “ghi”,nghĩa là MPU xuất thông tin điều khiển cho LCD thông qua
các chân DBx.
3/Đặc tính điện của các chân giao tiếp:
LCD sẽ bị hỏng nghiêm trọng, hoặc hoạt động sai lệch nếu bạn vi phạm khoảng
đặc tính điện sau đây:
Chân cấp nguồn (Vcc-GND) Min:-0.3V , Max+7V
Các chân ngõ vào (DBx, E, …) Min:-0.3V ,
Max:(Vcc+0.3V)
Nhiệt độ hoạt động Min:-30C , Max:+75C
Nhiệt độ bảo quản Min:-55C ,
Max:+125C
4/ Tập lệnh của LCD:
Các lệnh của LCD có thể chia thành 3 nhóm như sau:
để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế
độ đọc.
6 E
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-
DB7, các lệnh chỉ được chấp nhận khi c 1 xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào (chấp nhận)
thanh ghi bên trong khi phát hiện một xung (high-to-low transition)
của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát
hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở
bus đến khi nào chân E xuống mức thấp.
7-14
DB0-
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có
2 chế độ sử dụng 8 đường bus này :
+ Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là
bit DB7.
+ Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7,
bit MSB là DB7.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
38
 Các lệnh về kiểu hiển thị.
VD: Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), …
 Chỉ định địa chỉ RAM nội.
 Nhóm lệnh truyền dữ liệu trong RAM nội.
Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này có thể khá lâu
đối với tốc độ của MPU, nên ta cần kiểm tra cờ BF hoặc đợi (delay) cho LCD thực thi
xong lệnh hiện hành mới c thể ra lệnh tiếp theo.
Tên lệnh Hoạt động
Texe
(max)
Clear
Display
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 0 0 0 0 0 0 0 1
Lệnh Clear Display (x a hiển thị) sẽ ghi một khoảng trống-
blank (mã hiển kí tự 20H) vào tất cả ô nhớ trong DDRAM, sau
đ trả bộ đếm địa AC=0, trả lại kiểu hiện thị gốc nếu n bị thay
đổi. Nghĩa là : Tắt hiển thị, con trỏ dời về g c trái (hàng đầu
tiên), chế độ tăng AC.
Return
home
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 0 0 0 0 0 0 1 *
Lệnh Return home trả bộ đếm địa chỉ AC về 0, trả lại kiểu hiển
thị gốc nếu n bị thay đổi. Nội dung của DDRAM không thay
đổi.
1.52
ms
Entry
mode set
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 0 0 0 0 0 1 [I/D] [S]
I/D : Tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiển thị
AC 1 đơn vị mỗi khi có hành động ghi hoặc đọc vùng
37 us
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
39
DDRAM. Vị trí con trỏ cũng di chuyển theo sự tăng giảm này.
S : Khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải
(I/D=0) hoặc sang trái (I/D=1) mỗi khi c hành động ghi vùng
DDRAM. Khi S=0: không dịch nội dung hiển thị.
Nội dung hiển thị không dịch khi đọc DDRAM hoặc đọc/ghi
vùng CGRAM.
Display
on/off
control
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 0 0 0 0 1 [D] [C] [B]
D: Hiển thị màn hình khi D=1 và ngược lại. Khi tắt hiển thị,
nội dung DDRAM không thay đổi.
C: Hiển thị con trỏ khi C=1 và ngược lại. Vị trí và hình dạng
con trỏ, xem hình 8
B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại. Xem
thêm hình 8 về kiểu nhấp nháy. Chu kì nhấp nháy khoảng
409,6ms khi mạch dao động nội LCD là
250kHz
37 us
Cursor or
display
shift
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 0 0 0 1 [S/C] [R/L] * *
Lệnh Cursor or display shift dịch chuyển con trỏ hay dữ liệu
hiển thị sang trái mà không cần hành động ghi/đọc dữ liệu. Khi
hiển thị kiểu 2 dòng, con trỏ sẽ nhảy xuống dòng dưới khi dịch
qua vị trí thứ 40 của hàng đầu tiên. Dữ liệu hàng đầu và hàng 2
dịch cùng một lúc.
37 us
Function
set
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
37 us
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
40
DBx = 0 0 1 [DL] [N] [F] * *
DL: Khi DL=1, LCD giao tiếp với MPU bằng giao thức 8 bit
(từ bit DB7 đến DB0).
Ngược lại, giao thức giao tiếp là 4 bit (từ bit DB7 đến bit
DB0). Khi chọn giao thức 4 bit, dữ liệu được truyền/nhận
2 lần liên tiếp. với 4 bit cao gởi/nhận trước,
4 bit thấp gởi/nhận sau.
N: Thiết lập số hàng hiển thị. Khi N=0: hiển thị 1 hàng, N=1:
hiển thị 2 hàng.
F: Thiết lập kiểu kí tự. Khi F=0: kiểu kí tự 5x8 điểm ảnh, F=1:
kiểu kí tự 5x10 điểm
* Chú ý:
 Chỉ thực hiện thay đổi Function set ở đầu chương trình.
Và sau khi được thực
thi 1 lần, lệnh thay đổi Function set không được LCD
chấp nhận nữa ngoại trừ thiết lập chuyển đổi giao thức
giao tiếp.
 Không thể hiển thị kiểu kí tự 5x10 điểm ảnh ở kiểu hiển thị
2 hàng
Set
CGRAM
address
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 0 1
[ACG][ACG][ACG][ACG][ACG][ACG]
Lệnh này ghi vào AC địa chỉ của CGRAM. Kí hiệu [ACG] chỉ
1 bit của chuỗi dữ liệu
6 bit. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ CGRAM tại
địa chỉ đã được chỉ định
37 us
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
41
Set
DDRAM
address
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = 1 [AD] [AD] [AD] [AD] [AD] [AD]
[AD]
Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cần thiết
lập tọa độ hiển thị mong muốn. Ngay sau lệnh này là lệnh
đọc/ghi dữ liệu từ DDRAM tại địa chỉ đã được chỉ định.
Khi ở chế độ hiển thị 1 hàng: địa chỉ c thể từ 00H đến 4FH.
Khi ở chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H cho hàng
thứ nhất, và từ 40h đến 67h cho hàng thứ 2.
Xem chi tiết ở hình 4.
37 us
Read BF
and
address
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = [BF] [AC] [AC] [AC] [AC] [AC] [AC]
[AC] (RS=0, R/W=1)
Như đã đề cập trước đây, khi cờ BF bật, LCD đang làm việc
và lệnh tiếp theo (nếu
có) sẽ bị bỏ qua nếu cờ BF chưa về mức thấp. Cho nên, khi lập
trình điều khiển, bạn phải kiểm tra cờ BF trước khi ghi dữ liệu
vào LCD.
Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit
[AC]. N là địa chỉ của
CG hay DDRAM là tùy thuộc vào lệnh trước đọc
0 us
Write
data to
CG or
DDRAM
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = [Write data]
(RS=1, R/W=0)
37 us
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
42
Khi thiết lập RS=1, R/W=0, dữ liệu cần ghi được đưa vào
các chân DBx từ mạch
ngoài sẽ được LCD chuyển vào trong LCD tại địa chỉ được
xác định từ lệnh ghi địa chỉ trước đ (lệnh ghi địa chỉ cũng xác
định luôn vùng RAM cần ghi)
Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy
theo thiết lập Entry mode.
Lưu ý là thời gian cập nhật AC không tính vào thời gian thực
thi lệnh.
Read
data from
CG
Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
DB0
DBx = [Read data] (RS=1, R/W=1)
37 us
IV. Đối tượng điều khiển: Động cơ DC
- Đây là động cơ sử dụng trong đề tài:
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
43
- Bên trong động cơ có gắn một encoder đồng trục với nó dùng để xác định tốc độ và
vị trí của động cơ.
- Các thông số của động cơ như sau:
+ Điện áp DC cấp cho động cơ: 12VDC
+ Tốc độ tối đa 2000 vòng/phút
+ Số xung của encoder 60xung/vòng
+ Điện cảm L=102mH
- Động cơ có tất cả 5 dây ra:
+ 2 dây cung cấp nguồn 12 V cho đông cơ
+ 2 dây nguồn 5V cung cấp nguồn cho encoder
+ 1 dây tín hiệu đưa xung encoder ra ngoài
- Phương pháp điều khiển: Thay đổi tốc độ động cơ bằng cách thay đổi áp cấp vào
cho động cơ.
- Nguyên lý hoạt động của cảm biến encoder: có nhiều loại encoder khác nhau. Mỗi
loại lại có một nguyên lý hoạt động khác nhau, trong khuôn khổ báo cáo đồ án, em
xin trình bày phần nguyên lý loại encoder trong đề tài mà em sử dụng: incremental
encoder.
-
Mô hình thứ 1
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
44
Incremental encoder về cơ bản là một đĩa tròn quay quanh một trục được đục lỗ
như hình trên.
Ở 2 bên mặt của cái đĩa tròn đó, sẽ có một bộ thu phát quang. Trong quá trình
encoder quay quanh trục, nếu gặp lỗ rống thì ánh sáng chiếu qua được, nếu gặp mãnh
chắn thì tia sáng không chiếu quá được. Do đó tín hiệu nhận được từ sensor quang là
một chuổi xung.Mỗi encoder được chế tạo sẽ biết sẵn số xung trên một vòng. Do đó ta
có thể dùng vi điều khiển đếm số xung đó trong một đơn vị thời gian và tính ra tốc độ
động cơ.
Encoder mà em sử dụng trong đồ án của mình, hoàn toàn giống với mô hình ở trên.
Tuy nhiên, mô hình trên có nhược điểm lớn là: ta không thể xác định được động cơ
quay trái hay quay phải, vì có quay theo chiều nào đi nữa thì chỉ có một dạng xung đưa
ra. Ngoài ra điểm bắt đầu của động cơ, ta cũng không thể nào biết được.
Bộ thu
phát quang
Đĩa khắc
vạch
Hình 25: Cấu tạo Encoder
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
45
Cải tiến mô hình 1 bằng mô hình 2 như sau:
Mô hình thứ 2
Trong mô hình này, người ta đục tất cả là 2 vòng lỗ. Vòng ngoài cùng giống
như mô hình 1, vòng giữa lệch pha so với vòng ngoài là 90 độ. Khi đó, dạng xung ra
từ 2 vòng trên như sau :
Hai xung đưa ra từ 2 vòng lệch nhau 90 độ, nếu vòng ngoài nhanh pha hơn vòng
trong thì chắc chắn động cơ quay từ trái sang phải và ngược lại.
Hình 27: Đồ thị xung của encoder có 2 vòng vạch lệnh pha nhau 900
Hình 26: Đĩa khắc 2 còng vạch lệch pha nhau 900
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
46
Lỗ ở vòng trong cùng dùng để phát hiện điểm bắt đầu của động cơ.Có thể viết
chương trình cho vi điều khiển nhận biết: nếu có một xung phát ra từ vòng trong cùng
này, tức là động cơ đã quay đúng một vòng.
Với những đặc tính trên, encoder dùng rất phổ biến trong việc xác định vị trí góc
của động cơ…..
Một loại encoder thứ 2 cũng phổ biến hiện nay, đó là: absolute encoder.
Mô hình đĩa quang của loại này như sau:
CHƯƠNG 3:
THIẾT KẾ MẠCH PHẦN CỨNG
CODE CHƯƠNG TRÌNH VÀ LƯU ĐỒ GIẢI THUẬT
Hình 28: Đĩa khắc nhiều vòng vạch khác nhau
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
47
I/ THIẾT KẾ MẠCH PHẦN CỨNG:
Mạch được thiết kế gồm có các khối như sau: khối nguồn, khối bàn phím, khối hiển
thị, khối mạch công suất, khối điều khiển.
1/Khối nguồn:
Mạch lấy nguồn xoay chiều qua adapter AC/DC 220VAC/12VDC, và được ổn áp nhờ
IC 7805.Sơ đồ nguyên lí mạch:
Chức năng của các phần tử trong mạch:
- IC 7805: chức năng ổn áp điện áp 5V
- C4 tụ hóa (có phân cực) ổn áp ngõ vào, điện dung của tụ này càng lớn thì điện
áp vào IC 7805 càng phẳng.
- C5 và C7 tụ giấy (không phân cực) là hai tụ lọc nhiễu tầng số cao ở ngõ vào và
ngõ ra.
- C6 tụ hóa có tác dụng dập dao động tự kích khi sử dụng IC ổn áp dòng 78xx.
2/ Khối mạch bàn phím:
Mạch bàn phím gồm 16 phím, được bố trí thành 4 hàng và 4 cột như hình vẽ:
VI
1
VO
3
GND
2
U2
7805
3
2
1
J1
JACK C4
100uF
C5
100nF
C6
100uF
C7
100nF
D8
LED
R26
1k
+12V +5V
1
2
J2
TERMINAL2
Hình 29: Khối mạch ổn áp
Hình 30: IC7805
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
48
Bốn hàng được nối với Port B (từ B4 đến B7) của vi xử lí, bốn cột được nối với Port A
(từ A0 đến A3) của vi xử lí và được nối với nguồn VCC qua điện trở (nghĩa là các
chân của Port A từ A0 đến A3 sẽ luôn nhận mức 1 khi không có phím nhấn), việc làm
này nhằm phục vụ cho giải thuật quét phím sẽ được trình bày ở phần sau.
Trong số 16 phím có 10 phím để nhập dữ liệu số từ 0 đến 9, 6 phím điều khiển (FW,
RV, STOP, ENTER, CLEAR, SAVE).
Nguồn VCC trong sơ đồ mạch bàn phím là 5V, được cấp từ khối mạch ỗn áp ở trên.Vì
mạch bàn phím truyền nhận dữ liệu trực tiếp với PIC nên cần điện áp ỗn định.
3/Khối mạch hiển thị:
Mạch hiển thị bao gồm màn hình LCD giao tiếp với PIC qua Port D với giao thức 4
bit, ngoài ra còn có biến trở để điều chỉnh độ sáng của LCD.
Ngoài ra, còn có khối hiển thị gồm 8 led đơn được hạn dòng bằng điện trở 220Ω, có
tác dụng để text chương trình,các khối khác và cũng được dùng để báo hiệu đảo chiều
trong chế độ có cài đặt thời gian.
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
K
16
A
15
LCD1
RT1602C
48%
RV1
B4
B5
B6
B7
A0
A1
A2
A3
1 2
PHIM 1
BUTTON
1 2
PHIM 4
BUTTON
1 2
PHIM 7
BUTTON
1 2
PHIM 16
0
1 2
PHIM 2
BUTTON
1 2
PHIM 5
BUTTON
1 2
PHIM 8
BUTTON
1 2
PHIM 15
SAVE
1 2
PHIM 3
BUTTON
1 2
PHIM 6
BUTTON
1 2
PHIM 9
BUTTON
1 2
PHIM 14
CLEAR
1 2
PHIM 10
FW
1 2
PHIM 11
RV
1 2
PHIM 12
STOP
1 2
PHIM 13
ENTER
1
2
3
4
5
6
7
8
J1
SIL-100-08
1
2
3
J2
SIL-100-03
R1
10k
R2
10k
R3
10k
R4
10k
Hình 31: Khối mạch bàn phím
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
49
4/Khối mạch công suất:
 Mạch công suất sử dụng IC cầu H L298, với 2 kênh A và B,mỗi kênh với điện áp
định mức 50V và dòng định mức cho tải là 2A.Khi đấu song song 2 kênh ta được
dòng cấp cho tải lên đến 4A (gấp đôi).Điện áp điểu khiển 5V.
IN1
5
IN2
7
ENA
6
OUT1
2
OUT2
3
ENB
11
OUT3
13
OUT4
14
IN3
10
IN4
12
SENSA
1
SENSB
15
GND
8
VS
4
VCC
9 U1
L298
+12V
+88.8
R1
0.5
R2
0.5
D1
1N4007
D2
1N4007
D3
1N4007
D4
1N4007
+12V
1
2
3
J1
Encoder
M1
M2
M1 M2
1
2
J2
Motor
M1
M2
CLK
CLK
1
2
J4
Motor
+12V
1
2
3
4
5
J3
SIL-100-05
Hình 33: Khối mạch công suất sử sụng IC L298
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
50
 Cầu Diode dùng để chống dòng điện ngược, do tải động cơ có tính chất cảm
kháng.Nguồn cấp cho động cơ 12V
 Sử dung IC cầu H này, không những dùng để đảo chiều động cơ mà còn điểu khiển
tốc độ động cơ bằng phương pháp băm xung (PWM).
5/ Khối mạch điểu khiển:
Vi điều khiển trung tâm là PIC 16F877A.Với chức năng của các port như sau:
 Port A (từ A0 đến A3) được set là ngõ vào để nhận tính hiệu từ 4 cột của bàm
phím.
 Port B (từ B3 đến B7) là ngõ ra xuất tính hiệu ra 4 hàng của khối bàn phím,
chân RB0 nhận tính hiệu xung từ Encoder (vì ngắt ngoài xảy ra khi tính hiệu
thay đổi trên chân RB0);
 Ta sử dung 2 chân RC1(CCP2) và RC2 (CCP1) của Port C để xuất tính hiệu
PWM điều khiển động cơ.
 Port D (trừ chân RD3) gởi tính hiệu đến khối hiển thị LCD.Ba chân từ RD0 đến
RD2 nối với 3 chân điểu khiển của LCD.Bốn chân từ RD4 đến RD7 nối với 4
bít cao của các chân nhận dữ liệu của LCD.
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RE0/AN5/RD
8
RE1/AN6/WR
9
RE2/AN7/CS
10
OSC1/CLKIN
13
OSC2/CLKOUT
14
RC1/T1OSI/CCP2
16
RC2/CCP1
17
RC3/SCK/SCL
18
RD0/PSP0
19
RD1/PSP1
20
RB7/PGD
40
RB6/PGC
39
RB5
38
RB4
37
RB3/PGM
36
RB2
35
RB1
34
RB0/INT
33
RD7/PSP7
30
RD6/PSP6
29
RD5/PSP5
28
RD4/PSP4
27
RD3/PSP3
22
RD2/PSP2
21
RC7/RX/DT
26
RC6/TX/CK
25
RC5/SDO
24
RC4/SDI/SDA
23
RA3/AN3/VREF+
5
RC0/T1OSO/T1CKI
15
MCLR/Vpp/THV
1
U1
PIC16F877A
RS
RW
E
D7
D6
D5
D4
1
2
3
4
5
J3
SIL-100-05
X1
20M
C2
33
C1
33
1
2
3
4
5
6
7
8
J4
SIL-100-08
R1
R2
R3
R4
C1
C2
C3
C4
C1
C2
C3
C4
R4
R3
R2
R1
C3
10uF
R1
10k
SW1
BUTTON
D1
1N4148
1
2
3
4
5
6
7
8
J6
SIL-100-08
1
2
3
4
5
6
7
8
J7
SIL-100-08
1
2
3
4
5
6
7
8
J8
SIL-100-08
1
2
3
J9
SIL-100-03
1
2
3
4
5
6
J10
SIL-100-06
R10
10k
Hình 34: Khối mạch điều khiển PIC 16F877A
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
51
Thạch anh dùng trong mạch ó giá trị 20MHz, với 2 tụ C1,C2 là tụ giấy với điện dung
33uF. Pic reset khi chân số 1 MCLR nối mass.Tụ C3 có tác dụng chống nhiễu ở chân
số 1.
II/ Giới thiệu về chương trình viết code và biên dịch:
Trong đồ án này nhóm chúng em sử dụng chương trình viết code CCS, chương trình
cho phép lập trình ngôn ngữ C cho vi điều khiển PIC của Microchip.
Chương trình này có các câu lệnh đơn giản, dễ hiểu, hổ trợ biên dịch với chức năng
hiển thị lỗi và cảnh báo chương trình không khả dụng. Ngoài ra nó còn có thể biên
dịch từ code C ra file.hex và cả code Assemble.
Cấu trúc 1 chương trình trong CCS:
- Đầu tiên là các chỉ thị tiền xử lý : ( # . . . ) có nhiệm vụ báo cho CCS cần sử
dụng những gì trong chương trình C như dùng vi xử lí gì , có dùng giao tiếp PC
không , ADC không , DELAY không , có sử dụng ngắt hay không…
- Các khai báo biến.
- Các hàm con.
- Các hàm phục vụ ngắt theo sau bởi 1 chỉ thị tiền xử lý cho biết dùng ngắt nào.
- Chương trình chính.
Ví dụ về cấu trúc 1 chương trình trong CCS:
//------khai báo tiền xử lí-------
#include<16F877.h>
#device PIC16F877 *=16 ADC=10
#use delay (clock=20000000)
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
52
……
// khai báo them nếu có
//------khai báo biến-------
Int a,b;
Int16 x,y;
………..
//----------các chương trình con-------
Void xu_ly_ADC ()
{……
………}
Int cai_dat_PWM ()
{…….
Return(biến);}
//------hàm ngắt-------
#INT_TIMER1
Void xu_ly_ngăt()
{……
………}
//-------chương trình chính--------
Void main()
{………
………..}
III/ Lưu đồ giải thuật:
Lưu đồ giải thuật gồm: lưu đồ chương trình chính, chương trình quét phím, chương
trình ngắt của timer1.
 Chương trình chính là 1 vòng lập vô hạn có những chương trình con như:
quét phím, check phím, chọn chế độ, tính PWM, nhập dữ liệu tốc độ, nhập
dữ liệu thời gian, save vào epprom.
 Chương trình quét phím thể hiện giải thuật nhận phím nhấn và nhận biết giá
trị của phím (phím nhấn là phím nào) .
 Chương trình ngắt timer 1 có tác dụng cập nhật giá trị tốc độ, tính toán giá
trị PWM, và xuất tính hiệu đến khối hiển thị.
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
53
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
55
CODE CHƯƠNG TRÌNH
#include"E:/TL/DOAN2cauHMACH15main.h"
#include <LCD.C>
//#include <math.h> //dung cac ham toan hoc
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
//==================khai bao ham con=============
int quetphim();
int checkphim(b);
void pwm();
void ghi_tocdo();
void ghi_thoigian();
void clear();
void read_rom();
//==================khai bao bien================
int8 i,t,a,b,c,d,sttphim,duty,ct,l,m;
int16 s_xung,s_vong,setpoint,error,luu,tg,tg1,dem;
//================ bien luu eeprom==============
int8 e0,e1,e2,e3,j,k;
int16 e;
//================chuong trinh quet phim==========
//quet phim so
int quetphim()
{
output_b(0xe0);// B4=0
a=0;
b=1;
checkphim(b);
if (a!=0)
{delay_ms(200);
return (sttphim);}
output_b(0xd0);// B5=0
a=0;
b=2;
checkphim(b);
if (a!=0)
{delay_ms(200);
return (sttphim);}
output_b(0xb0);// B6=0
a=0;
b=3;
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
56
checkphim(b);
if (a!=0)
{delay_ms(200);
return (sttphim);}
output_b(0x70);// B6=0
a=0;
b=4;
checkphim(b);
if (a!=0)
{delay_ms(200);
return (sttphim);}}
//============chuong trinh check phim=============
int checkphim(b)
{
switch (b)
{
case 1:
if(!input(pin_a0))
{sttphim=1;
a=1;}
else if(!input(pin_a1))
{sttphim=2;
a=1;}
else if(!input(pin_a2))
{sttphim=3;
a=1;}
else if(!input(pin_a3))
{ sttphim=10;//thuan
a=1;}
else {}
break;
case 2:
if(!input(pin_a0))
{sttphim=4;
a=1;}
else if(!input(pin_a1))
{sttphim=5;
a=1;}
else if(!input(pin_a2))
{sttphim=6;
a=1;}
else if(!input(pin_a3))
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
57
{sttphim=11;//nghich
a=1;}
else {}
break;
case 3:
if(!input(pin_a0))
{sttphim=7;
a=1;}
else if(!input(pin_a1))
{sttphim=8;
a=1;}
else if(!input(pin_a2))
{sttphim=9;
a=1;}
else if(!input(pin_a3))
{sttphim=12;//stop
a=1;}
else {}
break;
case 4:
if(!input(pin_a0))
{sttphim=0;//0
a=1;}
else if(!input(pin_a1))
{sttphim=15;//save
a=1;}
else if(!input(pin_a2))
{sttphim=14;//clear
a=1;}
else if(!input(pin_a3))
{sttphim=13;//set
a=1;}
else {}
break;}
return (sttphim);
}
// chuong trinh nhan xung tu encoder
//ngat ngoai, nhan xung tu encoder
#int_ext
void RB0_isr()
{
s_xung++;//dem so xung o chan RB0
}
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
58
//ngat timer1, tinh toan pwm va hien thi
#int_timer1
void timer1_isr()
{
set_timer1(-62500);
if (t==5){
S_vong=s_xung*2;//xung tren phut
//ht
lcd_gotoxy(1,1);
printf(lcd_putc," ");
if(ct==1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=%lu v/p",luu);}
else {
lcd_gotoxy(1,1);
printf(lcd_putc,"TG_dat=%lu s",tg);}
lcd_gotoxy(1,2);
printf(lcd_putc," ");
if (d==2)
{lcd_gotoxy(1,2);
printf(lcd_putc,"TD_tt=-%luv/p",s_vong);}
if (d==1)
{lcd_gotoxy(1,2);
printf(lcd_putc,"TD_tt= %luv/p",s_vong);}
//=========================
//xuat pwm
pwm();
//========================
s_xung=0;
s_vong=0;
t=0;
set_timer1(-62500);
}
else
t++;
set_timer1(-62500);
}
//ngat timer0, dat thoi gian
#int_timer0
void time0_irs()
{
set_timer0(-235);
if (dem>=tg1)
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
59
{
output_high(pin_e0);
delay_us(100);
output_low(pin_e0);
dem=0;
if (d==1)
{d=2;}
else if (d==2)
{d=1;}
else{}
set_timer0(-235);
}
else {
dem++;
set_timer0(-235);}
}
//chuong trinh chinh
void main()
{
i=0;
sttphim=0;
setpoint=0;tg=0;
duty=0;
c=0;
d=0;
ct=0;l=0;m=0;
e0=0;e1=0;e2=0;e3=0;e=0;k=0;
//================================================
============
//1:ngo vao;0: la ngo ra
set_tris_b(0b00001111);//4 chan RB4-RB7 xuat du lieu ra ban phim
set_tris_a(0b00001111);//4 chan RA0-RA3 nhan du lieu tu ban phim
set_tris_c(0b00000000);//2 chan RC0 va RC1 xuat PWM
set_tris_D(0b00000000);//port D la port xuat du lieu ra LCD
//================================================
============
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
/* timer1 la bo dinh thoi su dung xung noi,bo chia 1:8 thay doi moi
1600ns
Dung timer1 de ngat moi 0.1s do vay ta dat gia tri cho timer1 la :
0.1s/1600ns=62500(D)=F424(H) =>gia tri nap la FFFF-F424=BDB*/
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
enable_interrupts(int_ext);//khoi dong ngat ngoai
ext_int_edge(H_TO_L); // xung tu cao xuong thap
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
60
enable_interrupts(global);// khoi dong bit ngat GIE
setup_timer_2(T2_DIV_BY_4,249,1);
/*timer2 dung dinh thoi cho bo PWM
mode: bo chia thoi gian (prescale) cua timer2 1:4
period: gia tri nap chi thanh ghi PR2
postscale : bo chi ra,chon 1:1 PWM khong dung
Thach anh 20MHz, PWM fre: 10000Hz, thay doi duty cycle(%) de
thay doi toc do*/
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(0);
set_pwm2_duty(0);
//================================================
===========
lcd_init()
lcd_send_byte(0,0x01);
lcd_gotoxy(1,1);
printf(lcd_putc,"CHUONG TRINH DK ");
lcd_gotoxy(1,2);
printf(lcd_putc," TD DONG CO DC ");
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," ");
read_rom();
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_ ");
while (true)
{
while (c==0)
{
quetphim();
if (a!=0)
{
if (sttphim==1)
{ ct=1;
c=1;
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_%u",ct);}
if (sttphim==2)
{ ct=2;
c=1;
lcd_gotoxy(1,1);
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
61
printf(lcd_putc,"CHON CHE DO :_%u",ct);}
}
}
if (ct==1)
{lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_ v/p");
lcd_gotoxy(1,2);
printf(lcd_putc,"TD_luu=%lu v/p",e);}
else {
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_ v/p");
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=_ s");}
While (c==1)
{
quetphim();
if (a!=0)
{
if (sttphim>=0 && sttphim<=9)//ban phim tu 0--->9
{
if (m==0)
{ghi_tocdo();}
if((ct==2)&&(m==1))
{ghi_thoigian();}
}
if (sttphim==14)
{clear();}
if ((sttphim==13)&&(i==0)&&(e==0))
{
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"Phai nhap TD_dat");
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_");
}
if ((sttphim==15)&&(i!=0)) //luu vao eeprom
{
write_eeprom(0,e0);
delay_ms(100);
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
62
write_eeprom(1,e1);
delay_ms(100);
write_eeprom(2,e2);
delay_ms(100);
write_eeprom(3,e3);
delay_ms(100);
write_eeprom(4,i);
delay_ms(100);
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," LUU THANH CONG ");
}
if ((sttphim==13)&&((i!=0)||(e!=0)))
{
if (ct==1)
{
c=2;
if (e!=0 && i==0)
luu=e;}
if ((ct==2)&&(l>=2))
{
c=2;}
m=1;
}}}
while (c==2)
{
quetphim();
if(a!=0)
{
if(sttphim==10)
{
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," QUAY THUAN ");
if (ct==2)
{enable_interrupts(int_timer0);
set_timer1(-235);}
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(-62500);
set_pwm1_duty(duty);
d=1;
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
63
}
if (sttphim==11)
{
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," QUAY NGHICH ");
if (ct==2)
{enable_interrupts(int_timer0);
set_timer1(-235);}
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(-62500);
set_pwm2_duty(duty);
d=2;
}
if (sttphim==12)//stop
{
disable_interrupts(int_timer0);
set_timer0(0);
disable_interrupts(int_timer1);
set_pwm1_duty(0);
set_pwm2_duty(0);
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," STOP ");
duty=0;
d=0;
}
if (sttphim==14)
{
clear();
c=0;
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_ ");
}}}}}
void pwm()
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
64
{
if ((luu>s_vong)&& duty<250)
{error=luu-s_vong;
if (error>1000)
duty=duty+50;
else if (error>100)
duty=duty+20;
else if (error>30)
{duty=duty+5;}
else if (error>20)
duty=duty+1.5;
else if (error>10)
duty=duty+(0.05*error);
else {duty=duty+(0.025*error);}
}
if (luu<(s_vong-2)&& (duty>0))
{error=s_vong-luu;
if (error>=10)
duty=duty-(0.05*error);
else (duty=duty-(0.02*error));
}
if(luu==s_vong)
duty=duty;
if((duty>=250)&&(luu>s_vong))
{ lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc," TD_tt=MAX ");}
if (d==0)
{set_pwm1_duty(0);
set_pwm2_duty(0);}
else if (d==1)
{set_pwm1_duty(duty);
set_pwm2_duty(0);}
else
{set_pwm1_duty(0);
set_pwm2_duty(duty);}
}
//========chuong trinh con nhap toc do=======
void ghi_tocdo()
{
if(i>=0&&i<=3)
{
// giai thuat luu eeprom
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
65
if (i==0)
e0=sttphim;
else if (i==1)
e1=sttphim;
else if (i==2)
e2=sttphim;
else {e3=sttphim;}
//===============================
setpoint*=10;
setpoint+=sttphim;
i++;
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=%lu v/p",setpoint);
luu=setpoint;
}
else {
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"0<TD_dat<=9999");
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=%lu s",setpoint);
}}
//=========chuong trình con nhap thoi gian=========
void ghi_thoigian()
{
if(l>=0&&l<=3)
{
tg*=10;
tg+=sttphim;
l++;
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=%lu s",tg);
tg1=tg/0.12;
}
else {
lcd_gotoxy(1,2);
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
66
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," 0<TG_dat<=999 ");
delay_ms(1000);
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=%lu s",tg);
}}
//============chuong trinh con clear=========
void clear()
{
setpoint=0;
tg=0;
i=0;l=0;m=0;
e0=0;e1=0;e2=0;e3=0;
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_");
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=_");
}
//=======chuong trinh con luu toc do vao epprom======
void read_rom()
{
k=read_eeprom(4);
for (j=0;j<k;j++)
{
e=e*10;
e=e+read_eeprom(j);
}}
//==========THE END========
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
SVTH: Trần Tường Băng
Võ Văn Chính
DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620
67

More Related Content

PDF
Đề tài: Thiết kế và thi công mô hình xe thăm dò môi trường, 9đ
PDF
Đề tài: Ứng dụng xử lý ảnh phát hiện ngủ gật dùng Kit Raspberry
PDF
Đề tài: Chương trình quản lý nhân sự tiền lương tại doanh nghiệp
PDF
Lập trình C cơ bản cho vi điều khiển
PPTX
Laplace Transformation & Its Application
PDF
Tài liệu thiết kế mạch in altium
PDF
Hướng dẫn giải bài tập chuỗi - Toán cao cấp
PDF
Đồ án Thiết kế máy tiện vạn năng 1K62
Đề tài: Thiết kế và thi công mô hình xe thăm dò môi trường, 9đ
Đề tài: Ứng dụng xử lý ảnh phát hiện ngủ gật dùng Kit Raspberry
Đề tài: Chương trình quản lý nhân sự tiền lương tại doanh nghiệp
Lập trình C cơ bản cho vi điều khiển
Laplace Transformation & Its Application
Tài liệu thiết kế mạch in altium
Hướng dẫn giải bài tập chuỗi - Toán cao cấp
Đồ án Thiết kế máy tiện vạn năng 1K62

What's hot (20)

DOCX
Các phương pháp thiết kế bộ điều khiển PID.docx
PDF
đIều khiển logic và plc ts. nguyễn như hiền
PDF
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
PDF
Cau truc phan cung pic16 f8xx
PDF
Lập trình PLC S7 1200 tiếng Việt-Chuong 5 tập lệnh lập trình
PDF
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
PDF
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
PDF
Đề tài: Mô hình điều khiển, giám sát bãi giữ xe ô tô tự động, 9đ
PDF
Điều khiển và ổn định mức nước ứng dụng bộ điều chỉnh pid và logic mờ
PDF
Đề tài: Xây dựng bộ PID điều khiển mức nước trong bể chứa, HAY
PDF
Đồ án Điều khiển và giám sát dây chuyền chiết rót sử dụng PLC s7 - 1200
DOCX
Đề tài: Thiết kế hệ thống điều khiển bơm nước sử dụng PLC, HOT
DOC
Đề tài: Nghiên cứu thiết kế mô hình trạm cấp phôi tự động, HAY
PDF
Đề tài: Ứng dụng PLC S7 – 1200 điều khiển, giám sát lò đốt bã mía
PDF
NGHỊCH LƯU VÀ BIẾN TẦN.pdf
DOC
ĐỒ ÁN - Thiết kế và xây dựng bộ PID để điều khiển mức nước trong bể chứa công...
PDF
Dieu khien so
PDF
Thiết kế hệ thống điều khiển tốc độ động cơ dc sử dụng bộ điều khiển pid và p...
PDF
Đề tài: Bộ điều khiển trượt cho tay máy Robot 2 bậc tự do, HAY
PDF
Bcvt.cơ sở điều khiển tự động ths.đặng hoài bắc, 152 trang
Các phương pháp thiết kế bộ điều khiển PID.docx
đIều khiển logic và plc ts. nguyễn như hiền
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
Cau truc phan cung pic16 f8xx
Lập trình PLC S7 1200 tiếng Việt-Chuong 5 tập lệnh lập trình
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
Đề tài: Mô hình điều khiển, giám sát bãi giữ xe ô tô tự động, 9đ
Điều khiển và ổn định mức nước ứng dụng bộ điều chỉnh pid và logic mờ
Đề tài: Xây dựng bộ PID điều khiển mức nước trong bể chứa, HAY
Đồ án Điều khiển và giám sát dây chuyền chiết rót sử dụng PLC s7 - 1200
Đề tài: Thiết kế hệ thống điều khiển bơm nước sử dụng PLC, HOT
Đề tài: Nghiên cứu thiết kế mô hình trạm cấp phôi tự động, HAY
Đề tài: Ứng dụng PLC S7 – 1200 điều khiển, giám sát lò đốt bã mía
NGHỊCH LƯU VÀ BIẾN TẦN.pdf
ĐỒ ÁN - Thiết kế và xây dựng bộ PID để điều khiển mức nước trong bể chứa công...
Dieu khien so
Thiết kế hệ thống điều khiển tốc độ động cơ dc sử dụng bộ điều khiển pid và p...
Đề tài: Bộ điều khiển trượt cho tay máy Robot 2 bậc tự do, HAY
Bcvt.cơ sở điều khiển tự động ths.đặng hoài bắc, 152 trang
Ad

Similar to ĐỒ ÁN - Lập trình PIC16F877A điều khiển tốc độ động cơ DC.doc (20)

DOCX
Đề tài: Đo và điều khiển tốc độ động cơ dùng 8051, HAY
PDF
Điều khiển động cơ sử dụng IC MCP4921
PDF
Đồ án Đo và điều khiển tốc độ động cơ dùng 8051
DOC
ĐỒ ÁN - Điều khiển tốc độ động cơ sử dụng giải thuật Fuzzy (mờ) và PID.doc
PDF
Mitsubishi
PDF
PLC mitsubishi
PDF
Acs 550 tiếng việt
PDF
LUẬN VĂN - Tìm hiểu về PLC - S7 1200.pdf
PDF
Hướng dẫn sử dụng tủ trung tâm Ecapro.pdf
PDF
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
DOC
Đề tài: Đo tốc độ động cơ dùng 8051, HAY, 9đ
PPTX
thiết kế và lập trình scada cho hệ thống đóng gói.pptx
PDF
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
DOCX
Điều khiển động cơ sử dụng atmega16
PDF
Đề tài Lập trình C cho họ vi điều khiển 8051
PDF
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
PDF
Quy trinh vận hành máy cắt Recloser Schneider
DOC
Đề tài: Dòng PLC hoạt động vô cùng hiệu quả công việc, HOT
PDF
dđiều khiển giám sát và thu thập dữ liệu cho hệ thống băng tải.pdf
PDF
Điều khiển, giám sát và thu thập dữ liệu cho hệ thống băng tải .pdf
Đề tài: Đo và điều khiển tốc độ động cơ dùng 8051, HAY
Điều khiển động cơ sử dụng IC MCP4921
Đồ án Đo và điều khiển tốc độ động cơ dùng 8051
ĐỒ ÁN - Điều khiển tốc độ động cơ sử dụng giải thuật Fuzzy (mờ) và PID.doc
Mitsubishi
PLC mitsubishi
Acs 550 tiếng việt
LUẬN VĂN - Tìm hiểu về PLC - S7 1200.pdf
Hướng dẫn sử dụng tủ trung tâm Ecapro.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
Đề tài: Đo tốc độ động cơ dùng 8051, HAY, 9đ
thiết kế và lập trình scada cho hệ thống đóng gói.pptx
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Điều khiển động cơ sử dụng atmega16
Đề tài Lập trình C cho họ vi điều khiển 8051
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Quy trinh vận hành máy cắt Recloser Schneider
Đề tài: Dòng PLC hoạt động vô cùng hiệu quả công việc, HOT
dđiều khiển giám sát và thu thập dữ liệu cho hệ thống băng tải.pdf
Điều khiển, giám sát và thu thập dữ liệu cho hệ thống băng tải .pdf
Ad

More from Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864 (20)

DOC
Yếu Tố Tự Truyện Trong Truyện Ngắn Thạch Lam Và Thanh Tịnh.doc
DOC
Từ Ngữ Biểu Thị Tâm Lí – Tình Cảm Trong Ca Dao Người Việt.doc
DOC
Quản Lý Hoạt Động Dạy Học Các Môn Khoa Học Tự Nhiên Theo Chuẩn Kiến Thức Và K...
DOC
Quản Lý Thu Thuế Giá Trị Gia Tăng Đối Với Doanh Nghiệp Ngoài Quốc Doanh Trên ...
DOC
Thu Hút Nguồn Nhân Lực Trình Độ Cao Vào Các Cơ Quan Hành Chính Nhà Nước Tỉnh ...
DOC
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Doanh Nghiệp Tại Ngân Hàng Thương Mại ...
DOC
Vaporisation Of Single And Binary Component Droplets In Heated Flowing Gas St...
DOC
Quản Lý Hoạt Động Dạy Học Các Trường Thpt Trên Địa Bàn Huyện Sơn Hà Tỉnh Quản...
DOC
Tác Giả Hàm Ẩn Trong Tiểu Thuyết Nguyễn Việt Hà.doc
DOC
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Ngắn Hạn Tại Ngân Hàng Công Thƣơng Chi...
DOC
Quản Lý Nhà Nước Về Nuôi Trồng Thủy Sản Nước Ngọt Trên Địa Bàn Thành Phố Hải ...
DOC
Song Song Hóa Các Thuật Toán Trên Mạng Đồ Thị.doc
DOC
Ứng Dụng Số Phức Trong Các Bài Toán Sơ Cấp.doc
DOC
Vai Trò Của Cái Bi Trong Giáo Dục Thẩm Mỹ.doc
DOC
Quản Lý Hoạt Động Giáo Dục Ngoài Giờ Lên Lớp Ở Các Trường Thcs Huyện Chư Păh ...
DOC
Thu Hút Vốn Đầu Tư Vào Lĩnh Vực Nông Nghiệp Trên Địa Bàn Tỉnh Gia Lai.doc
DOC
Quản Lý Hoạt Động Dạy Học Ngoại Ngữ Tại Các Trung Tâm Ngoại Ngữ - Tin Học Trê...
DOC
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Doanh Nghiệp Tại Ngân Hàng Thƣơng Mại ...
DOC
Tạo Việc Làm Cho Thanh Niên Trên Địa Bàn Quận Thanh Khê, Thành Phố Đà Nẵng.doc
DOC
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Trung Và Dài Hạn Tại Ngân Hàng Thương ...
Yếu Tố Tự Truyện Trong Truyện Ngắn Thạch Lam Và Thanh Tịnh.doc
Từ Ngữ Biểu Thị Tâm Lí – Tình Cảm Trong Ca Dao Người Việt.doc
Quản Lý Hoạt Động Dạy Học Các Môn Khoa Học Tự Nhiên Theo Chuẩn Kiến Thức Và K...
Quản Lý Thu Thuế Giá Trị Gia Tăng Đối Với Doanh Nghiệp Ngoài Quốc Doanh Trên ...
Thu Hút Nguồn Nhân Lực Trình Độ Cao Vào Các Cơ Quan Hành Chính Nhà Nước Tỉnh ...
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Doanh Nghiệp Tại Ngân Hàng Thương Mại ...
Vaporisation Of Single And Binary Component Droplets In Heated Flowing Gas St...
Quản Lý Hoạt Động Dạy Học Các Trường Thpt Trên Địa Bàn Huyện Sơn Hà Tỉnh Quản...
Tác Giả Hàm Ẩn Trong Tiểu Thuyết Nguyễn Việt Hà.doc
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Ngắn Hạn Tại Ngân Hàng Công Thƣơng Chi...
Quản Lý Nhà Nước Về Nuôi Trồng Thủy Sản Nước Ngọt Trên Địa Bàn Thành Phố Hải ...
Song Song Hóa Các Thuật Toán Trên Mạng Đồ Thị.doc
Ứng Dụng Số Phức Trong Các Bài Toán Sơ Cấp.doc
Vai Trò Của Cái Bi Trong Giáo Dục Thẩm Mỹ.doc
Quản Lý Hoạt Động Giáo Dục Ngoài Giờ Lên Lớp Ở Các Trường Thcs Huyện Chư Păh ...
Thu Hút Vốn Đầu Tư Vào Lĩnh Vực Nông Nghiệp Trên Địa Bàn Tỉnh Gia Lai.doc
Quản Lý Hoạt Động Dạy Học Ngoại Ngữ Tại Các Trung Tâm Ngoại Ngữ - Tin Học Trê...
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Doanh Nghiệp Tại Ngân Hàng Thƣơng Mại ...
Tạo Việc Làm Cho Thanh Niên Trên Địa Bàn Quận Thanh Khê, Thành Phố Đà Nẵng.doc
Quản Trị Rủi Ro Tín Dụng Trong Cho Vay Trung Và Dài Hạn Tại Ngân Hàng Thương ...

Recently uploaded (20)

PDF
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 8 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
DOCX
6.CQ_KT_Ke toan tai chinh 2_Pham Thi Phuong Thao.docx
PPTX
Flashcard giải pháp đơn giản – trực quan – hiệu quả, giúp học từ vựng theo t...
PDF
BÁO CÁO THỰC TẬP KỸ SƯ 2 ĐỀ TÀI TÌM HIỂU QUY TRÌNH CÔNG NGHỆ SẢN XUẤT BÁNH SN...
DOC
Chương 1 Tính tương đổi của chuyển động.doc
PPTX
17. ĐẠI CƯƠNG GÃY XƯƠNG bệnh học ngoại.pptx
PPTX
Bài 9.4 TUYẾN SINH DỤC NAM VÀ NU CẤU TẠO VÀ CHỨC NĂNG
PDF
Vision - Language - Model-- - Ebook.pdf
PPTX
14. thoát vị bẹn nghẹt bệnh học ngoại khoa.pptx
PPTX
Direct Marketing- chieu thi truyen thong
PPTX
White and Purple Modern Artificial Intelligence Presentation.pptx
PDF
TeétOrganicChemistryFromVietNamVeryHardd
PPTX
TIẾT 8, 9, 10. BÀI 32. DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
PPTX
Triết học: Vận dụng nguyên tắc phát triển trong nhận thức và hoạt động thực...
PDF
Dao tao va Phat trien NỘI DUNG ÔN THI CHO SINH VIÊN
PPTX
1 CHƯƠNG MÔT- KHÁI LUẬN VỀ TRIẾT HỌC (1) [Read-Only].pptx
PDF
12894-44864-1-CE-1037-1038_Văn bản của bài báo.pdf
DOCX
Chủ nghĩa xã hội khoa học - Đề Cương Cuối Kỳ.docx
PPTX
24. 9cqbq2reu57m5igbsz-signature-40d40b8bd600bcde0d0584523c684ec4933c280de74a...
PPTX
CHƯƠNG I excel,,,,,,,,,,,,,,,,,,,,,,,,,,
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 8 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
6.CQ_KT_Ke toan tai chinh 2_Pham Thi Phuong Thao.docx
Flashcard giải pháp đơn giản – trực quan – hiệu quả, giúp học từ vựng theo t...
BÁO CÁO THỰC TẬP KỸ SƯ 2 ĐỀ TÀI TÌM HIỂU QUY TRÌNH CÔNG NGHỆ SẢN XUẤT BÁNH SN...
Chương 1 Tính tương đổi của chuyển động.doc
17. ĐẠI CƯƠNG GÃY XƯƠNG bệnh học ngoại.pptx
Bài 9.4 TUYẾN SINH DỤC NAM VÀ NU CẤU TẠO VÀ CHỨC NĂNG
Vision - Language - Model-- - Ebook.pdf
14. thoát vị bẹn nghẹt bệnh học ngoại khoa.pptx
Direct Marketing- chieu thi truyen thong
White and Purple Modern Artificial Intelligence Presentation.pptx
TeétOrganicChemistryFromVietNamVeryHardd
TIẾT 8, 9, 10. BÀI 32. DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
Triết học: Vận dụng nguyên tắc phát triển trong nhận thức và hoạt động thực...
Dao tao va Phat trien NỘI DUNG ÔN THI CHO SINH VIÊN
1 CHƯƠNG MÔT- KHÁI LUẬN VỀ TRIẾT HỌC (1) [Read-Only].pptx
12894-44864-1-CE-1037-1038_Văn bản của bài báo.pdf
Chủ nghĩa xã hội khoa học - Đề Cương Cuối Kỳ.docx
24. 9cqbq2reu57m5igbsz-signature-40d40b8bd600bcde0d0584523c684ec4933c280de74a...
CHƯƠNG I excel,,,,,,,,,,,,,,,,,,,,,,,,,,

ĐỒ ÁN - Lập trình PIC16F877A điều khiển tốc độ động cơ DC.doc

  • 1. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 LUẬN VĂN TỐT NGHIỆP ĐỀ TÀI Lập trình PIC16F877A điều khiển tốc độ động cơ DC
  • 2. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 2 MỤC LỤC Chương I: KHÁI QUÁT ĐỀ TÀI............................................................................................3 I/ Tóm tắt đề tài:.......................................................................................................................3 Nếu là chế độ 2 thì ta phải nhập them thời gian, sau đó nhấn phím ENTER.............................5 CHƯƠNG II:..............................................................................................................................6 GIỚI THIỆU VỀ CÁC LINH KIỆN PHẦN TỬ SỬ DỤNG TRONG MẠCH...................6 I.Vi điều khiển PIC16F877A ...................................................................................................6 1. Khái quát về vi điều khiển PIC16F877A............................................................................6 Sơ đồ chân ................................................................................................................................9 Sơ đồ nguyên lý.........................................................................................................................10 2. Tổ chức bộ nhớ:..................................................................................................................11 2.1. Bộ nhớ chương trình:......................................................................................................11 2.2. Bộ nhớ dữ liệu:.................................................................................................................11 2.3. Stack..................................................................................................................................14 3. Khái quát về chức năng của các port trong vi điều khiển PIC16F877A .......................15 4. Các vấn đề về Timer...........................................................................................................17 4.1. Timer0 ..............................................................................................................................17 4.2.TIMER1.............................................................................................................................20 5. NGẮT (INTERRUPT):......................................................................................................24 6. Phương pháp điều chế xung PWM:..................................................................................29 6.2. Nguyên lí của PWM: .......................................................................................................29 Ud = Umax . (t0/T) hay Ud = Umax.D.........................................................................................30 6.3. Cách thiết lập chế độ PWM cho PIC16F877A..............................................................31 II. Mạch cầu H ( H-Bridge Circuit ). ....................................................................................32 Hình 18: Mạch cầu H...............................................................................................................33 Khảo sát hoạt động của mạch cầu H ........................................................................................33 Hình19: Nguyên lý hoạt động của mạch cầu H .......................................................................34 III/LCD....................................................................................................................................35 VD: Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), … .................................38 IV. Đối tượng điều khiển: Động cơ DC ................................................................................42 Mô hình thứ 1 ...........................................................................................................................43 Mô hình thứ 2 ...........................................................................................................................45 CHƯƠNG 3:.............................................................................................................................46 I/ THIẾT KẾ MẠCH PHẦN CỨNG:...................................................................................47 II/ Giới thiệu về chương trình viết code và biên dịch: ........................................................51 Return(biến);}...........................................................................................................................52 III/ Lưu đồ giải thuật: ............................................................................................................52 CODE CHƯƠNG TRÌNH .....................................................................................................55
  • 3. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 3 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 độ và đ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 là động cơ DC 12V có gắn Encoder.
  • 4. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 4  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.  Để 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: 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Ế ĐỘ:” b2 a7 b0 b1 a4 a5 a6 p0 p1 p2 p3 p0 p3 p1 p2 a7 a4 a5 a6 b0 b2 b1 CCP2 CCP1 RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4 RA4/T0CKI/C1OUT 6 RA5/AN4/SS/C2OUT 7 RE0/AN5/RD 8 RE1/AN6/WR 9 RE2/AN7/CS 10 OSC1/CLKIN 13 OSC2/CLKOUT 14 RC1/T1OSI/CCP2 16 RC2/CCP1 17 RC3/SCK/SCL 18 RD0/PSP0 19 RD1/PSP1 20 RB7/PGD 40 RB6/PGC 39 RB5 38 RB4 37 RB3/PGM 36 RB2 35 RB1 34 RB0/INT 33 RD7/PSP7 30 RD6/PSP6 29 RD5/PSP5 28 RD4/PSP4 27 RD3/PSP3 22 RD2/PSP2 21 RC7/RX/DT 26 RC6/TX/CK 25 RC5/SDO 24 RC4/SDI/SDA 23 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 15 MCLR/Vpp/THV 1 U1 PIC16F877A C1 30pF C2 30pF X1 CRYSTAL R9 10k R1 5k R2 5k R3 5k R4 5k VCC VCC C3 10uF R5 2k2 CCP1 CCP2 CLK 1 2 3 4 5 6 7 8 9 0 (10) FW(16) RV(15) STOP (14) CLEAR (11) set (12) 13 D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 16_X_2_LCD RV1 1K VI 1 VO 3 GND 2 U2 7805 3 2 1 J1 JACK C4 100uF C5 100nF C6 100uF C7 100nF D8 LED R26 1k +12V +5V 1 2 J2 TERMINAL2 IN1 5 IN2 7 ENA 6 OUT1 2 OUT2 3 ENB 11 OUT3 13 OUT4 14 IN3 10 IN4 12 SENSA 1 SENSB 15 GND 8 VS 4 VCC 9 U1 L298 +12V R1 0.5 R2 0.5 M1 M2 CLK 1 2 3 4 5 J3 SIL-100-05 +88.8 D1 1N4007 D2 1N4007 D3 1N4007 D4 1N4007 +12V M1 M2 CLK RESET Hình 1: Sơ đồ nguyên lí mạch
  • 5. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 5 Chương trính có 2 chế độ làm việc: chế độ1 là bám tốc độ đặt, có lưu tốc độ vào epprom; chế độ 2 là bám tốc độ có định thời gian để thay đổi chiều quay.  Bước 2: 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 là 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 cơ 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 để có 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.
  • 6. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 6 CHƯƠNG II: GIỚI THIỆU VỀ CÁ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 và 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 có độ 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.
  • 7. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 7  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).  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 và 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 và 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à I2 C (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.
  • 8. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 8 - Đị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.
  • 9. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 9 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
  • 10. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 10 Sơ đồ nguyên lý 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 Hình 4: Sơ đồ nguyên lí các Port của PIC 16F877A
  • 11. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 11 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: 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) và đượ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 được chia thành 4 bank. Mỗi 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 ô Hình 5: Cấu trúc bộ nhớ chương trình PIC 16F877A
  • 12. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 12 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. 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ớ có đị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ớ có đị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.
  • 13. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 13 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 và đ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. Có 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 và đ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.
  • 14. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 14  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) 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 có 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. 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. Hình 7: Cấu trúc thanh ghi chức năng chung của PIC 16F877A
  • 15. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 15 - Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa chỉ và 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 có 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 và 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à 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) : chứa giá trị các pin trong PORTA. TRISA (địa chỉ 85h) : điều khiển xuất nhập. CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh.
  • 16. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 16 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) : chứa giá trị các pin trong PORTB TRISB (địa chỉ 86h, 186h) : đ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: 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à 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 là 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:
  • 17. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 17 -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 có những ưu điểm sau:  8 bit cho bộ định thời hoặc bộ đếm.  Có khả năng đọc và viết.  Có thể dùng đồng bên trong hoặc bên ngoài.  Có thể chọn cạnh xung của xung đồng hồ.  Có 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 có 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 nó đượ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 để có thể hoạt động đó là phải bảo đảm xung clock bên ngoài có thể đồng bộ với xung clock bên trong (TOSC).
  • 18. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 18  Hệ số chia dùng cho Timer 0 hoặc bộ WDT. Các hệ số nay không có khả năng đọc và 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, có 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 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ử lý ở 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  bit 5 TOCS lựa chọn nguồn clock Hình 8: Cấu trúc thanh ghi OPTION_REG REGISTER điều khiển hoạt động của Timer0
  • 19. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 19 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 Timer0 WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 - Thanh ghi TMR0 đại chỉ 01h và 101h : chứa giá trị của bộ định thời Timer0 - 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.  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. Hình 9: Cấu trúc thanh ghi INTCON cho phép ngắt Timer0 hoạt động
  • 20. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 20 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 RBIF = 1 ít nhất có 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 là 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 :
  • 21. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 21  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. 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 - bit 7,6 không sử dụng - bit 5,4 T1CKPS1: T1CKPS0 lựa chọn hệ số chia xung vào. Hình 10: Cấu trúc thanh ghi T1CON điều khiển hoạt động của Timer1
  • 22. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 22 T1CKPS1 T1CKPS0 00 1:1 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 4.3.Timer 2 a/ Timer2: là 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.
  • 23. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 23 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 và 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 và khả năng viết. c/ Thanh ghi T2CON: điều khiển hoạt động của Timer2 - 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 … Hình 12: Cấu trúc thanh ghi T2CON điều khiển hoạt động của Timer2
  • 24. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 24 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 và 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ỉ có 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 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
  • 25. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 25 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ử lí 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.
  • 26. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 26 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, vì 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 có thể là cạnh lên hay cạnh xuống và đượ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ó 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 Hình 13: Sơ đồ hoạt động ngắt của PIC 16F877A
  • 27. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 27 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.  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 Các bit này cho phép thiết lập tỉ số chia tần số của Prescaler. Hình 14: Cấu trúc thanh ghi OPTION_REG cho phép ngắt ngoại và ngắt timer0
  • 28. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 28 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 có 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 1:1 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 ngoài =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
  • 29. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 29 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 đó có một phương pháp hết sức quan trọng và thông dụng là 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 6.2. Nguyên lí của PWM: Đây là phương pháp được thực hiện theo nguyên tắc dóng ngắt nguồn có 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. Hình 15: Đồ thị dạng xung điều chế PWM
  • 30. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 30 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 và sườn âm. D = t0/T: hệ số điều chỉnh hay PWM được tính bằng % Ví dụ: điện áp nguồn là 12V. Q1 NPN Q1(B) PWM xung vuông TAI NGUON 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 và đầu ra (phải)
  • 31. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 31 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ì 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: - Ñoä roäng cuûa xung ñieàu cheá (duty cycle) ñöôïc tính theo coâng thöùc: PWM period = [(PR2) +1]*4*TOSC*(giaù trò boä chia taàn soá cuûa TMR2). PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(giaù trò boä chia taàn soá TMR2)
  • 32. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 32 - Khi giaù trò thanh ghi PR2 baèng vôùi giaù trò thanh ghi TMR2 thì quaù trình sau xaûy ra:  Thanh ghi TMR2 tự động được xóa.  Pin của khối CCP được set.  Giá trị thanh ghi CCPR1L (chứa giá trị ấn định độ rộng xung điều chế duty cycle) được đưa vào thanh ghi CCPRxH. II. Mạch cầu H ( H-Bridge Circuit ). 1/ Công dụng và nguyên lí hoạt động: Hình 17: Sơ đồ khối CCP (PWMmode)(trái) Các tham số của PWM (phải)
  • 33. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 33 Mạch cầu H là một mạch điện giúp đảo chiều dòng điện qua một đối tượng .Đối tượng là động cơ DC mà chúng ta cần điều khiển .Mục đích điều khiển là cho phép dòng điện qua đối tượng theo chiều A đến B hoặc B đến A .Từ đó giúp đổi chiều quay của động cơ. Hiện nay, ngoài loại mạch cầu H được thiết kế từ các linh kiện rời như: BJT công suất, Mosfet, … Còn có các loại mạch cầu H được tích hợp thành các IC như: L293D và L298D. Do đối tượng điều khiển trong đề tài này là động cơ DC có điện áp 12V và công suât nhỏ nên chúng em dùng mạch cầu H đảo chiều động cơ là IC L298. Hình 18: Mạch cầu H Khảo sát hoạt động của mạch cầu H
  • 34. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 34 Hình19: Nguyên lý hoạt động của mạch cầu H 2/ Mạch cầu H L298D: L298D là một chip toch1 hợp 2 mạch trong gói 15 chân. L298D có điện áp danh nghĩa cao (lớn hơn 50V) và dòng điện danh nghĩa lớn hơn 2A nên rất thích hợp cho các ứng dụng công suất nhỏ như các động cơ DC loại vừa và nhỏ. Hình 20: Sơ đồ chân của IC L298D (phải) IC L298D (trái)
  • 35. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 35 Có 2 mạch cầu H trên mỗi chip L298D nên có thể điều khiển 2 đối tượng riêng với 1 chip này. Mỗi mạch cầu H bao gồm 1 đường nguồn Vs (thật ra là đường chung cho 2 mạch cầu), một chân current sensing (cảm biến dòng) ở phần cuối của mạch cầu H, chân này không được nối đất mà bỏ trống để cho người dùng nối 1 điện trở nhỏ gọi là sensing resistor.Bằng cacch1 đo điện áp rơi trên điện trở này chúng ta có thể tính được dòng qua điện trở, cũng là dòng qua động cơ, mục đích của việc này là để xác định dòng quá tải. Nếu việc đo lường là không cần thiết thì ta có thể nối chân này với GND. Động cơ sẽ được nối với 2 chân OUT1, OUT2 hoặc OUT3, OUT4.Chân EN (ENA và ENB) cho phép mạch cầu hoạt động, khi chân này được kéo lên mức cao. L298D không chỉ được dùng để đảo chiều động cơ mà còn điều khiển vận tốc động cơ bằng PWM.Trong thực tế, công suất thực ma L298D có thể tải nhỏ hơn giá trị danh nghĩa của nó (U =50V, I =2A). Để tăng dòng tải của chíp lên gấp đôi, chúng ta có thể nối hai mạch cầu H song song với nhau (các chân có chức năng như nhau của 2 mạch cầu được nối chung). III/LCD 1/Chức năng và hình dạng LCD. Hình 21: Sơ đồ nguyên lí của IC L298D
  • 36. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 36 Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong rất nhiều các ứng dụng của vi điều khiển.LCD có rất nhiều ưu điểm so với các dạng hiển thị khác: nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá thành rẽ … 2/ Chức năng các chân Chân số Tên Chức năng 1 VSS Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển 2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC=5V của mạch điều khiển 3 Vee Chân này dùng để điều chỉnh độ tương phản của LCD. 4 RS Chân chọn thanh ghi (Register select). Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi. + Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read) . + Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD 5 R/W Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0” Hình 22: LCD và sơ đồ chân
  • 37. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 37 Bảng Chức năng các chân của LCD * Ghi chú: Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các chân DBx. Còn khi ở chế độ “ghi”,nghĩa là MPU xuất thông tin điều khiển cho LCD thông qua các chân DBx. 3/Đặc tính điện của các chân giao tiếp: LCD sẽ bị hỏng nghiêm trọng, hoặc hoạt động sai lệch nếu bạn vi phạm khoảng đặc tính điện sau đây: Chân cấp nguồn (Vcc-GND) Min:-0.3V , Max+7V Các chân ngõ vào (DBx, E, …) Min:-0.3V , Max:(Vcc+0.3V) Nhiệt độ hoạt động Min:-30C , Max:+75C Nhiệt độ bảo quản Min:-55C , Max:+125C 4/ Tập lệnh của LCD: Các lệnh của LCD có thể chia thành 3 nhóm như sau: để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc. 6 E Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0- DB7, các lệnh chỉ được chấp nhận khi c 1 xung cho phép của chân E. + Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào (chấp nhận) thanh ghi bên trong khi phát hiện một xung (high-to-low transition) của tín hiệu chân E. + Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp. 7-14 DB0- DB7 Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này : + Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7. + Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7.
  • 38. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 38  Các lệnh về kiểu hiển thị. VD: Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), …  Chỉ định địa chỉ RAM nội.  Nhóm lệnh truyền dữ liệu trong RAM nội. Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này có thể khá lâu đối với tốc độ của MPU, nên ta cần kiểm tra cờ BF hoặc đợi (delay) cho LCD thực thi xong lệnh hiện hành mới c thể ra lệnh tiếp theo. Tên lệnh Hoạt động Texe (max) Clear Display Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 0 0 1 Lệnh Clear Display (x a hiển thị) sẽ ghi một khoảng trống- blank (mã hiển kí tự 20H) vào tất cả ô nhớ trong DDRAM, sau đ trả bộ đếm địa AC=0, trả lại kiểu hiện thị gốc nếu n bị thay đổi. Nghĩa là : Tắt hiển thị, con trỏ dời về g c trái (hàng đầu tiên), chế độ tăng AC. Return home Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 0 1 * Lệnh Return home trả bộ đếm địa chỉ AC về 0, trả lại kiểu hiển thị gốc nếu n bị thay đổi. Nội dung của DDRAM không thay đổi. 1.52 ms Entry mode set Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 1 [I/D] [S] I/D : Tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiển thị AC 1 đơn vị mỗi khi có hành động ghi hoặc đọc vùng 37 us
  • 39. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 39 DDRAM. Vị trí con trỏ cũng di chuyển theo sự tăng giảm này. S : Khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải (I/D=0) hoặc sang trái (I/D=1) mỗi khi c hành động ghi vùng DDRAM. Khi S=0: không dịch nội dung hiển thị. Nội dung hiển thị không dịch khi đọc DDRAM hoặc đọc/ghi vùng CGRAM. Display on/off control Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 1 [D] [C] [B] D: Hiển thị màn hình khi D=1 và ngược lại. Khi tắt hiển thị, nội dung DDRAM không thay đổi. C: Hiển thị con trỏ khi C=1 và ngược lại. Vị trí và hình dạng con trỏ, xem hình 8 B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại. Xem thêm hình 8 về kiểu nhấp nháy. Chu kì nhấp nháy khoảng 409,6ms khi mạch dao động nội LCD là 250kHz 37 us Cursor or display shift Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 1 [S/C] [R/L] * * Lệnh Cursor or display shift dịch chuyển con trỏ hay dữ liệu hiển thị sang trái mà không cần hành động ghi/đọc dữ liệu. Khi hiển thị kiểu 2 dòng, con trỏ sẽ nhảy xuống dòng dưới khi dịch qua vị trí thứ 40 của hàng đầu tiên. Dữ liệu hàng đầu và hàng 2 dịch cùng một lúc. 37 us Function set Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 37 us
  • 40. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 40 DBx = 0 0 1 [DL] [N] [F] * * DL: Khi DL=1, LCD giao tiếp với MPU bằng giao thức 8 bit (từ bit DB7 đến DB0). Ngược lại, giao thức giao tiếp là 4 bit (từ bit DB7 đến bit DB0). Khi chọn giao thức 4 bit, dữ liệu được truyền/nhận 2 lần liên tiếp. với 4 bit cao gởi/nhận trước, 4 bit thấp gởi/nhận sau. N: Thiết lập số hàng hiển thị. Khi N=0: hiển thị 1 hàng, N=1: hiển thị 2 hàng. F: Thiết lập kiểu kí tự. Khi F=0: kiểu kí tự 5x8 điểm ảnh, F=1: kiểu kí tự 5x10 điểm * Chú ý:  Chỉ thực hiện thay đổi Function set ở đầu chương trình. Và sau khi được thực thi 1 lần, lệnh thay đổi Function set không được LCD chấp nhận nữa ngoại trừ thiết lập chuyển đổi giao thức giao tiếp.  Không thể hiển thị kiểu kí tự 5x10 điểm ảnh ở kiểu hiển thị 2 hàng Set CGRAM address Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 1 [ACG][ACG][ACG][ACG][ACG][ACG] Lệnh này ghi vào AC địa chỉ của CGRAM. Kí hiệu [ACG] chỉ 1 bit của chuỗi dữ liệu 6 bit. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ CGRAM tại địa chỉ đã được chỉ định 37 us
  • 41. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 41 Set DDRAM address Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 1 [AD] [AD] [AD] [AD] [AD] [AD] [AD] Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cần thiết lập tọa độ hiển thị mong muốn. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ DDRAM tại địa chỉ đã được chỉ định. Khi ở chế độ hiển thị 1 hàng: địa chỉ c thể từ 00H đến 4FH. Khi ở chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H cho hàng thứ nhất, và từ 40h đến 67h cho hàng thứ 2. Xem chi tiết ở hình 4. 37 us Read BF and address Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = [BF] [AC] [AC] [AC] [AC] [AC] [AC] [AC] (RS=0, R/W=1) Như đã đề cập trước đây, khi cờ BF bật, LCD đang làm việc và lệnh tiếp theo (nếu có) sẽ bị bỏ qua nếu cờ BF chưa về mức thấp. Cho nên, khi lập trình điều khiển, bạn phải kiểm tra cờ BF trước khi ghi dữ liệu vào LCD. Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit [AC]. N là địa chỉ của CG hay DDRAM là tùy thuộc vào lệnh trước đọc 0 us Write data to CG or DDRAM Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = [Write data] (RS=1, R/W=0) 37 us
  • 42. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 42 Khi thiết lập RS=1, R/W=0, dữ liệu cần ghi được đưa vào các chân DBx từ mạch ngoài sẽ được LCD chuyển vào trong LCD tại địa chỉ được xác định từ lệnh ghi địa chỉ trước đ (lệnh ghi địa chỉ cũng xác định luôn vùng RAM cần ghi) Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy theo thiết lập Entry mode. Lưu ý là thời gian cập nhật AC không tính vào thời gian thực thi lệnh. Read data from CG Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = [Read data] (RS=1, R/W=1) 37 us IV. Đối tượng điều khiển: Động cơ DC - Đây là động cơ sử dụng trong đề tài:
  • 43. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 43 - Bên trong động cơ có gắn một encoder đồng trục với nó dùng để xác định tốc độ và vị trí của động cơ. - Các thông số của động cơ như sau: + Điện áp DC cấp cho động cơ: 12VDC + Tốc độ tối đa 2000 vòng/phút + Số xung của encoder 60xung/vòng + Điện cảm L=102mH - Động cơ có tất cả 5 dây ra: + 2 dây cung cấp nguồn 12 V cho đông cơ + 2 dây nguồn 5V cung cấp nguồn cho encoder + 1 dây tín hiệu đưa xung encoder ra ngoài - Phương pháp điều khiển: Thay đổi tốc độ động cơ bằng cách thay đổi áp cấp vào cho động cơ. - Nguyên lý hoạt động của cảm biến encoder: có nhiều loại encoder khác nhau. Mỗi loại lại có một nguyên lý hoạt động khác nhau, trong khuôn khổ báo cáo đồ án, em xin trình bày phần nguyên lý loại encoder trong đề tài mà em sử dụng: incremental encoder. - Mô hình thứ 1
  • 44. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 44 Incremental encoder về cơ bản là một đĩa tròn quay quanh một trục được đục lỗ như hình trên. Ở 2 bên mặt của cái đĩa tròn đó, sẽ có một bộ thu phát quang. Trong quá trình encoder quay quanh trục, nếu gặp lỗ rống thì ánh sáng chiếu qua được, nếu gặp mãnh chắn thì tia sáng không chiếu quá được. Do đó tín hiệu nhận được từ sensor quang là một chuổi xung.Mỗi encoder được chế tạo sẽ biết sẵn số xung trên một vòng. Do đó ta có thể dùng vi điều khiển đếm số xung đó trong một đơn vị thời gian và tính ra tốc độ động cơ. Encoder mà em sử dụng trong đồ án của mình, hoàn toàn giống với mô hình ở trên. Tuy nhiên, mô hình trên có nhược điểm lớn là: ta không thể xác định được động cơ quay trái hay quay phải, vì có quay theo chiều nào đi nữa thì chỉ có một dạng xung đưa ra. Ngoài ra điểm bắt đầu của động cơ, ta cũng không thể nào biết được. Bộ thu phát quang Đĩa khắc vạch Hình 25: Cấu tạo Encoder
  • 45. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 45 Cải tiến mô hình 1 bằng mô hình 2 như sau: Mô hình thứ 2 Trong mô hình này, người ta đục tất cả là 2 vòng lỗ. Vòng ngoài cùng giống như mô hình 1, vòng giữa lệch pha so với vòng ngoài là 90 độ. Khi đó, dạng xung ra từ 2 vòng trên như sau : Hai xung đưa ra từ 2 vòng lệch nhau 90 độ, nếu vòng ngoài nhanh pha hơn vòng trong thì chắc chắn động cơ quay từ trái sang phải và ngược lại. Hình 27: Đồ thị xung của encoder có 2 vòng vạch lệnh pha nhau 900 Hình 26: Đĩa khắc 2 còng vạch lệch pha nhau 900
  • 46. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 46 Lỗ ở vòng trong cùng dùng để phát hiện điểm bắt đầu của động cơ.Có thể viết chương trình cho vi điều khiển nhận biết: nếu có một xung phát ra từ vòng trong cùng này, tức là động cơ đã quay đúng một vòng. Với những đặc tính trên, encoder dùng rất phổ biến trong việc xác định vị trí góc của động cơ….. Một loại encoder thứ 2 cũng phổ biến hiện nay, đó là: absolute encoder. Mô hình đĩa quang của loại này như sau: CHƯƠNG 3: THIẾT KẾ MẠCH PHẦN CỨNG CODE CHƯƠNG TRÌNH VÀ LƯU ĐỒ GIẢI THUẬT Hình 28: Đĩa khắc nhiều vòng vạch khác nhau
  • 47. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 47 I/ THIẾT KẾ MẠCH PHẦN CỨNG: Mạch được thiết kế gồm có các khối như sau: khối nguồn, khối bàn phím, khối hiển thị, khối mạch công suất, khối điều khiển. 1/Khối nguồn: Mạch lấy nguồn xoay chiều qua adapter AC/DC 220VAC/12VDC, và được ổn áp nhờ IC 7805.Sơ đồ nguyên lí mạch: Chức năng của các phần tử trong mạch: - IC 7805: chức năng ổn áp điện áp 5V - C4 tụ hóa (có phân cực) ổn áp ngõ vào, điện dung của tụ này càng lớn thì điện áp vào IC 7805 càng phẳng. - C5 và C7 tụ giấy (không phân cực) là hai tụ lọc nhiễu tầng số cao ở ngõ vào và ngõ ra. - C6 tụ hóa có tác dụng dập dao động tự kích khi sử dụng IC ổn áp dòng 78xx. 2/ Khối mạch bàn phím: Mạch bàn phím gồm 16 phím, được bố trí thành 4 hàng và 4 cột như hình vẽ: VI 1 VO 3 GND 2 U2 7805 3 2 1 J1 JACK C4 100uF C5 100nF C6 100uF C7 100nF D8 LED R26 1k +12V +5V 1 2 J2 TERMINAL2 Hình 29: Khối mạch ổn áp Hình 30: IC7805
  • 48. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 48 Bốn hàng được nối với Port B (từ B4 đến B7) của vi xử lí, bốn cột được nối với Port A (từ A0 đến A3) của vi xử lí và được nối với nguồn VCC qua điện trở (nghĩa là các chân của Port A từ A0 đến A3 sẽ luôn nhận mức 1 khi không có phím nhấn), việc làm này nhằm phục vụ cho giải thuật quét phím sẽ được trình bày ở phần sau. Trong số 16 phím có 10 phím để nhập dữ liệu số từ 0 đến 9, 6 phím điều khiển (FW, RV, STOP, ENTER, CLEAR, SAVE). Nguồn VCC trong sơ đồ mạch bàn phím là 5V, được cấp từ khối mạch ỗn áp ở trên.Vì mạch bàn phím truyền nhận dữ liệu trực tiếp với PIC nên cần điện áp ỗn định. 3/Khối mạch hiển thị: Mạch hiển thị bao gồm màn hình LCD giao tiếp với PIC qua Port D với giao thức 4 bit, ngoài ra còn có biến trở để điều chỉnh độ sáng của LCD. Ngoài ra, còn có khối hiển thị gồm 8 led đơn được hạn dòng bằng điện trở 220Ω, có tác dụng để text chương trình,các khối khác và cũng được dùng để báo hiệu đảo chiều trong chế độ có cài đặt thời gian. D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 K 16 A 15 LCD1 RT1602C 48% RV1 B4 B5 B6 B7 A0 A1 A2 A3 1 2 PHIM 1 BUTTON 1 2 PHIM 4 BUTTON 1 2 PHIM 7 BUTTON 1 2 PHIM 16 0 1 2 PHIM 2 BUTTON 1 2 PHIM 5 BUTTON 1 2 PHIM 8 BUTTON 1 2 PHIM 15 SAVE 1 2 PHIM 3 BUTTON 1 2 PHIM 6 BUTTON 1 2 PHIM 9 BUTTON 1 2 PHIM 14 CLEAR 1 2 PHIM 10 FW 1 2 PHIM 11 RV 1 2 PHIM 12 STOP 1 2 PHIM 13 ENTER 1 2 3 4 5 6 7 8 J1 SIL-100-08 1 2 3 J2 SIL-100-03 R1 10k R2 10k R3 10k R4 10k Hình 31: Khối mạch bàn phím
  • 49. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 49 4/Khối mạch công suất:  Mạch công suất sử dụng IC cầu H L298, với 2 kênh A và B,mỗi kênh với điện áp định mức 50V và dòng định mức cho tải là 2A.Khi đấu song song 2 kênh ta được dòng cấp cho tải lên đến 4A (gấp đôi).Điện áp điểu khiển 5V. IN1 5 IN2 7 ENA 6 OUT1 2 OUT2 3 ENB 11 OUT3 13 OUT4 14 IN3 10 IN4 12 SENSA 1 SENSB 15 GND 8 VS 4 VCC 9 U1 L298 +12V +88.8 R1 0.5 R2 0.5 D1 1N4007 D2 1N4007 D3 1N4007 D4 1N4007 +12V 1 2 3 J1 Encoder M1 M2 M1 M2 1 2 J2 Motor M1 M2 CLK CLK 1 2 J4 Motor +12V 1 2 3 4 5 J3 SIL-100-05 Hình 33: Khối mạch công suất sử sụng IC L298
  • 50. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 50  Cầu Diode dùng để chống dòng điện ngược, do tải động cơ có tính chất cảm kháng.Nguồn cấp cho động cơ 12V  Sử dung IC cầu H này, không những dùng để đảo chiều động cơ mà còn điểu khiển tốc độ động cơ bằng phương pháp băm xung (PWM). 5/ Khối mạch điểu khiển: Vi điều khiển trung tâm là PIC 16F877A.Với chức năng của các port như sau:  Port A (từ A0 đến A3) được set là ngõ vào để nhận tính hiệu từ 4 cột của bàm phím.  Port B (từ B3 đến B7) là ngõ ra xuất tính hiệu ra 4 hàng của khối bàn phím, chân RB0 nhận tính hiệu xung từ Encoder (vì ngắt ngoài xảy ra khi tính hiệu thay đổi trên chân RB0);  Ta sử dung 2 chân RC1(CCP2) và RC2 (CCP1) của Port C để xuất tính hiệu PWM điều khiển động cơ.  Port D (trừ chân RD3) gởi tính hiệu đến khối hiển thị LCD.Ba chân từ RD0 đến RD2 nối với 3 chân điểu khiển của LCD.Bốn chân từ RD4 đến RD7 nối với 4 bít cao của các chân nhận dữ liệu của LCD. RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4 RA4/T0CKI/C1OUT 6 RA5/AN4/SS/C2OUT 7 RE0/AN5/RD 8 RE1/AN6/WR 9 RE2/AN7/CS 10 OSC1/CLKIN 13 OSC2/CLKOUT 14 RC1/T1OSI/CCP2 16 RC2/CCP1 17 RC3/SCK/SCL 18 RD0/PSP0 19 RD1/PSP1 20 RB7/PGD 40 RB6/PGC 39 RB5 38 RB4 37 RB3/PGM 36 RB2 35 RB1 34 RB0/INT 33 RD7/PSP7 30 RD6/PSP6 29 RD5/PSP5 28 RD4/PSP4 27 RD3/PSP3 22 RD2/PSP2 21 RC7/RX/DT 26 RC6/TX/CK 25 RC5/SDO 24 RC4/SDI/SDA 23 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 15 MCLR/Vpp/THV 1 U1 PIC16F877A RS RW E D7 D6 D5 D4 1 2 3 4 5 J3 SIL-100-05 X1 20M C2 33 C1 33 1 2 3 4 5 6 7 8 J4 SIL-100-08 R1 R2 R3 R4 C1 C2 C3 C4 C1 C2 C3 C4 R4 R3 R2 R1 C3 10uF R1 10k SW1 BUTTON D1 1N4148 1 2 3 4 5 6 7 8 J6 SIL-100-08 1 2 3 4 5 6 7 8 J7 SIL-100-08 1 2 3 4 5 6 7 8 J8 SIL-100-08 1 2 3 J9 SIL-100-03 1 2 3 4 5 6 J10 SIL-100-06 R10 10k Hình 34: Khối mạch điều khiển PIC 16F877A
  • 51. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 51 Thạch anh dùng trong mạch ó giá trị 20MHz, với 2 tụ C1,C2 là tụ giấy với điện dung 33uF. Pic reset khi chân số 1 MCLR nối mass.Tụ C3 có tác dụng chống nhiễu ở chân số 1. II/ Giới thiệu về chương trình viết code và biên dịch: Trong đồ án này nhóm chúng em sử dụng chương trình viết code CCS, chương trình cho phép lập trình ngôn ngữ C cho vi điều khiển PIC của Microchip. Chương trình này có các câu lệnh đơn giản, dễ hiểu, hổ trợ biên dịch với chức năng hiển thị lỗi và cảnh báo chương trình không khả dụng. Ngoài ra nó còn có thể biên dịch từ code C ra file.hex và cả code Assemble. Cấu trúc 1 chương trình trong CCS: - Đầu tiên là các chỉ thị tiền xử lý : ( # . . . ) có nhiệm vụ báo cho CCS cần sử dụng những gì trong chương trình C như dùng vi xử lí gì , có dùng giao tiếp PC không , ADC không , DELAY không , có sử dụng ngắt hay không… - Các khai báo biến. - Các hàm con. - Các hàm phục vụ ngắt theo sau bởi 1 chỉ thị tiền xử lý cho biết dùng ngắt nào. - Chương trình chính. Ví dụ về cấu trúc 1 chương trình trong CCS: //------khai báo tiền xử lí------- #include<16F877.h> #device PIC16F877 *=16 ADC=10 #use delay (clock=20000000)
  • 52. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 52 …… // khai báo them nếu có //------khai báo biến------- Int a,b; Int16 x,y; ……….. //----------các chương trình con------- Void xu_ly_ADC () {…… ………} Int cai_dat_PWM () {……. Return(biến);} //------hàm ngắt------- #INT_TIMER1 Void xu_ly_ngăt() {…… ………} //-------chương trình chính-------- Void main() {……… ………..} III/ Lưu đồ giải thuật: Lưu đồ giải thuật gồm: lưu đồ chương trình chính, chương trình quét phím, chương trình ngắt của timer1.  Chương trình chính là 1 vòng lập vô hạn có những chương trình con như: quét phím, check phím, chọn chế độ, tính PWM, nhập dữ liệu tốc độ, nhập dữ liệu thời gian, save vào epprom.  Chương trình quét phím thể hiện giải thuật nhận phím nhấn và nhận biết giá trị của phím (phím nhấn là phím nào) .  Chương trình ngắt timer 1 có tác dụng cập nhật giá trị tốc độ, tính toán giá trị PWM, và xuất tính hiệu đến khối hiển thị.
  • 53. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 53
  • 54. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 55 CODE CHƯƠNG TRÌNH #include"E:/TL/DOAN2cauHMACH15main.h" #include <LCD.C> //#include <math.h> //dung cac ham toan hoc #use delay(clock=20000000) #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d) //==================khai bao ham con============= int quetphim(); int checkphim(b); void pwm(); void ghi_tocdo(); void ghi_thoigian(); void clear(); void read_rom(); //==================khai bao bien================ int8 i,t,a,b,c,d,sttphim,duty,ct,l,m; int16 s_xung,s_vong,setpoint,error,luu,tg,tg1,dem; //================ bien luu eeprom============== int8 e0,e1,e2,e3,j,k; int16 e; //================chuong trinh quet phim========== //quet phim so int quetphim() { output_b(0xe0);// B4=0 a=0; b=1; checkphim(b); if (a!=0) {delay_ms(200); return (sttphim);} output_b(0xd0);// B5=0 a=0; b=2; checkphim(b); if (a!=0) {delay_ms(200); return (sttphim);} output_b(0xb0);// B6=0 a=0; b=3;
  • 55. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 56 checkphim(b); if (a!=0) {delay_ms(200); return (sttphim);} output_b(0x70);// B6=0 a=0; b=4; checkphim(b); if (a!=0) {delay_ms(200); return (sttphim);}} //============chuong trinh check phim============= int checkphim(b) { switch (b) { case 1: if(!input(pin_a0)) {sttphim=1; a=1;} else if(!input(pin_a1)) {sttphim=2; a=1;} else if(!input(pin_a2)) {sttphim=3; a=1;} else if(!input(pin_a3)) { sttphim=10;//thuan a=1;} else {} break; case 2: if(!input(pin_a0)) {sttphim=4; a=1;} else if(!input(pin_a1)) {sttphim=5; a=1;} else if(!input(pin_a2)) {sttphim=6; a=1;} else if(!input(pin_a3))
  • 56. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 57 {sttphim=11;//nghich a=1;} else {} break; case 3: if(!input(pin_a0)) {sttphim=7; a=1;} else if(!input(pin_a1)) {sttphim=8; a=1;} else if(!input(pin_a2)) {sttphim=9; a=1;} else if(!input(pin_a3)) {sttphim=12;//stop a=1;} else {} break; case 4: if(!input(pin_a0)) {sttphim=0;//0 a=1;} else if(!input(pin_a1)) {sttphim=15;//save a=1;} else if(!input(pin_a2)) {sttphim=14;//clear a=1;} else if(!input(pin_a3)) {sttphim=13;//set a=1;} else {} break;} return (sttphim); } // chuong trinh nhan xung tu encoder //ngat ngoai, nhan xung tu encoder #int_ext void RB0_isr() { s_xung++;//dem so xung o chan RB0 }
  • 57. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 58 //ngat timer1, tinh toan pwm va hien thi #int_timer1 void timer1_isr() { set_timer1(-62500); if (t==5){ S_vong=s_xung*2;//xung tren phut //ht lcd_gotoxy(1,1); printf(lcd_putc," "); if(ct==1) { lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=%lu v/p",luu);} else { lcd_gotoxy(1,1); printf(lcd_putc,"TG_dat=%lu s",tg);} lcd_gotoxy(1,2); printf(lcd_putc," "); if (d==2) {lcd_gotoxy(1,2); printf(lcd_putc,"TD_tt=-%luv/p",s_vong);} if (d==1) {lcd_gotoxy(1,2); printf(lcd_putc,"TD_tt= %luv/p",s_vong);} //========================= //xuat pwm pwm(); //======================== s_xung=0; s_vong=0; t=0; set_timer1(-62500); } else t++; set_timer1(-62500); } //ngat timer0, dat thoi gian #int_timer0 void time0_irs() { set_timer0(-235); if (dem>=tg1)
  • 58. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 59 { output_high(pin_e0); delay_us(100); output_low(pin_e0); dem=0; if (d==1) {d=2;} else if (d==2) {d=1;} else{} set_timer0(-235); } else { dem++; set_timer0(-235);} } //chuong trinh chinh void main() { i=0; sttphim=0; setpoint=0;tg=0; duty=0; c=0; d=0; ct=0;l=0;m=0; e0=0;e1=0;e2=0;e3=0;e=0;k=0; //================================================ ============ //1:ngo vao;0: la ngo ra set_tris_b(0b00001111);//4 chan RB4-RB7 xuat du lieu ra ban phim set_tris_a(0b00001111);//4 chan RA0-RA3 nhan du lieu tu ban phim set_tris_c(0b00000000);//2 chan RC0 va RC1 xuat PWM set_tris_D(0b00000000);//port D la port xuat du lieu ra LCD //================================================ ============ setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); /* timer1 la bo dinh thoi su dung xung noi,bo chia 1:8 thay doi moi 1600ns Dung timer1 de ngat moi 0.1s do vay ta dat gia tri cho timer1 la : 0.1s/1600ns=62500(D)=F424(H) =>gia tri nap la FFFF-F424=BDB*/ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); enable_interrupts(int_ext);//khoi dong ngat ngoai ext_int_edge(H_TO_L); // xung tu cao xuong thap
  • 59. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 60 enable_interrupts(global);// khoi dong bit ngat GIE setup_timer_2(T2_DIV_BY_4,249,1); /*timer2 dung dinh thoi cho bo PWM mode: bo chia thoi gian (prescale) cua timer2 1:4 period: gia tri nap chi thanh ghi PR2 postscale : bo chi ra,chon 1:1 PWM khong dung Thach anh 20MHz, PWM fre: 10000Hz, thay doi duty cycle(%) de thay doi toc do*/ setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_pwm1_duty(0); set_pwm2_duty(0); //================================================ =========== lcd_init() lcd_send_byte(0,0x01); lcd_gotoxy(1,1); printf(lcd_putc,"CHUONG TRINH DK "); lcd_gotoxy(1,2); printf(lcd_putc," TD DONG CO DC "); delay_ms(1000); lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," "); read_rom(); lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_ "); while (true) { while (c==0) { quetphim(); if (a!=0) { if (sttphim==1) { ct=1; c=1; lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_%u",ct);} if (sttphim==2) { ct=2; c=1; lcd_gotoxy(1,1);
  • 60. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 61 printf(lcd_putc,"CHON CHE DO :_%u",ct);} } } if (ct==1) {lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_ v/p"); lcd_gotoxy(1,2); printf(lcd_putc,"TD_luu=%lu v/p",e);} else { lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_ v/p"); lcd_gotoxy(1,2); printf(lcd_putc,"TG_dat=_ s");} While (c==1) { quetphim(); if (a!=0) { if (sttphim>=0 && sttphim<=9)//ban phim tu 0--->9 { if (m==0) {ghi_tocdo();} if((ct==2)&&(m==1)) {ghi_thoigian();} } if (sttphim==14) {clear();} if ((sttphim==13)&&(i==0)&&(e==0)) { lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"Phai nhap TD_dat"); delay_ms(1000); lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_"); } if ((sttphim==15)&&(i!=0)) //luu vao eeprom { write_eeprom(0,e0); delay_ms(100);
  • 61. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 62 write_eeprom(1,e1); delay_ms(100); write_eeprom(2,e2); delay_ms(100); write_eeprom(3,e3); delay_ms(100); write_eeprom(4,i); delay_ms(100); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," LUU THANH CONG "); } if ((sttphim==13)&&((i!=0)||(e!=0))) { if (ct==1) { c=2; if (e!=0 && i==0) luu=e;} if ((ct==2)&&(l>=2)) { c=2;} m=1; }}} while (c==2) { quetphim(); if(a!=0) { if(sttphim==10) { lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," QUAY THUAN "); if (ct==2) {enable_interrupts(int_timer0); set_timer1(-235);} enable_interrupts(int_timer1); enable_interrupts(global); set_timer1(-62500); set_pwm1_duty(duty); d=1;
  • 62. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 63 } if (sttphim==11) { lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," QUAY NGHICH "); if (ct==2) {enable_interrupts(int_timer0); set_timer1(-235);} enable_interrupts(int_timer1); enable_interrupts(global); set_timer1(-62500); set_pwm2_duty(duty); d=2; } if (sttphim==12)//stop { disable_interrupts(int_timer0); set_timer0(0); disable_interrupts(int_timer1); set_pwm1_duty(0); set_pwm2_duty(0); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," STOP "); duty=0; d=0; } if (sttphim==14) { clear(); c=0; lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_ "); }}}}} void pwm()
  • 63. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 64 { if ((luu>s_vong)&& duty<250) {error=luu-s_vong; if (error>1000) duty=duty+50; else if (error>100) duty=duty+20; else if (error>30) {duty=duty+5;} else if (error>20) duty=duty+1.5; else if (error>10) duty=duty+(0.05*error); else {duty=duty+(0.025*error);} } if (luu<(s_vong-2)&& (duty>0)) {error=s_vong-luu; if (error>=10) duty=duty-(0.05*error); else (duty=duty-(0.02*error)); } if(luu==s_vong) duty=duty; if((duty>=250)&&(luu>s_vong)) { lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc," TD_tt=MAX ");} if (d==0) {set_pwm1_duty(0); set_pwm2_duty(0);} else if (d==1) {set_pwm1_duty(duty); set_pwm2_duty(0);} else {set_pwm1_duty(0); set_pwm2_duty(duty);} } //========chuong trinh con nhap toc do======= void ghi_tocdo() { if(i>=0&&i<=3) { // giai thuat luu eeprom
  • 64. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 65 if (i==0) e0=sttphim; else if (i==1) e1=sttphim; else if (i==2) e2=sttphim; else {e3=sttphim;} //=============================== setpoint*=10; setpoint+=sttphim; i++; lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=%lu v/p",setpoint); luu=setpoint; } else { lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"0<TD_dat<=9999"); delay_ms(1000); lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=%lu s",setpoint); }} //=========chuong trình con nhap thoi gian========= void ghi_thoigian() { if(l>=0&&l<=3) { tg*=10; tg+=sttphim; l++; lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc,"TG_dat=%lu s",tg); tg1=tg/0.12; } else { lcd_gotoxy(1,2);
  • 65. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 66 printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," 0<TG_dat<=999 "); delay_ms(1000); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc,"TG_dat=%lu s",tg); }} //============chuong trinh con clear========= void clear() { setpoint=0; tg=0; i=0;l=0;m=0; e0=0;e1=0;e2=0;e3=0; lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_"); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc,"TG_dat=_"); } //=======chuong trinh con luu toc do vao epprom====== void read_rom() { k=read_eeprom(4); for (j=0;j<k;j++) { e=e*10; e=e+read_eeprom(j); }} //==========THE END========
  • 66. DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 SVTH: Trần Tường Băng Võ Văn Chính DỊCH VỤ VIẾT THUÊ ĐỀ TÀI TRỌN GÓI ZALO / TEL: 0909.232.620 67