Tải bản đầy đủ (.docx) (40 trang)

Thiết kế Mạch đo khoảng cách sử dụng PIC 16F877A và cảm biến SRF05 Hiển thị trên màn hìnhLCD

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.48 MB, 40 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HỒ CHÍ MINH
KHOA CÔNG NGHỆ CƠ KHÍ
------o0o------

ĐỒ ÁN CHUYÊN NGÀNH CƠ ĐIỆN TỬ 1

THIẾT KẾ MÁY ĐO KHOẢNG CÁCH SỬ DỤNG CẢM
BIẾN SIÊU ÂM SRF05
GVHD : NGUYỄN LÊ THÁI
SVTH : HỒ VĨNH NGUYÊN
Lớp

: 07DHCDT1

MSSV : 2025160109

Tp Hồ Chí Minh, ngày 25 Tháng 11 năm 2018


NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Nhận xét :
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................


.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
Điểm đánh giá:
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
Ngày.....tháng.....năm 2018
( ký tên, ghi rõ họ và tên)


LỜI MỞ ĐẦU
Ngày nay kỹ thuật vi điều khiển đã trở nên quen thuộc trong các ngành kỹ
thuật và trong dân dụng. Các bộ vi điều khiển có khả năng xử lý nhiều hoạt động
phức tạp mà chỉ cẩn một chíp vi mạch nhỏ, nó đã thay thế các tủ điều khiển lớn
và phức tạp bằng những mạch điện gọn nhẹ, dễ dàng thao tác thực hiện và sử
dụng.
Vi điều khiển không những góp phần vào kỹ thuật điều khiền mà còn góp
phần to lớn vào việc phát triển thông tin. Chính vì các lý do trên, việc tìm hiểu và
khảo sát là điều mà các sinh viên cơ điện tử hết sức phải quan tâm. Đó là một
nhu cầu hết sức cần thiết của sinh viên chuyên ngành tự động hóa nói chung và
sinh viên cơ điện tử nói riêng. Đề tài này nhằm đáp ứng việc tìm hiểu sâu về vi
điều khiển hơn.
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và

sử dụng lại được là một điều rất phức tạp. Phần xử lý chính vẫn phụ thuộc vào
con người, đó chính là chương trình hay phần mềm. Nếu không có sự tham gia
của con người thì hệ thống vi điều khiển cũng chỉ là mộ vật vô tri. Do vậy khi
nói đến vi điều khiển cũng giống như máy tính đều có hai phần: thứ nhất là phần
cứng và thứ hai là phần mềm.
Như vậy nhằm hiểu rõ hơn về vi điều khiển em đã quyết định chọn đề tài cho
đồ án cơ điện tử một là “Thiết kế máy đo khoảng cách sử dụng cảm biến SRF05”
do thầy Nguyễn Lê Thái hướng dẫn.
Trong quá trình thực hiện đề tài vẫn còn nhiều thiếu sót, mong được sự góp ý
từ quí thầy cô và các bạn. Em xin chân thành cảm ơn!


MỤC LỤC

4


DANH MỤC CÁC HÌNH ẢNH

5


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

ĐẶT VẤN ĐỀ VÀ NHIỆM VỤ THỬ
1.1. Đặt vấn đề
Ngày nay ứng dụng vi điều khiển đã đi sâu vào đời sống, sinh hoạt, sản xuất của con
người. Thực tế hiện nay hầu hết các thiết bị dân dụng đều có sự góp mặt của Vi Điều
Khiển. Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và
giảm giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị cũng như hệ

thống. Trên thị trường có rất nhiều họ vi điều khiển như 8051 của hãng Intell, PIC của
hãng Microchip,...
Việc phát triển ứng dụng các hệ thống vi điều khiển đòi hỏi sự hiểu biết về phần cứng
lẫn phần mềm, cũng chính vì vậy hệ thống vi xử lý được sử dụng để giải quyết các bài
toán khác nhau. Tính đa dạng của các ứng dụng phụ thuộc vào sự lựa chọn các hệ
thống vi xử lý cụ thể cũng như vào kỹ thuật lập trình.
Ngày nay các hệ thống vi xử lý đều có mặt trong các thiết bị điện tử hiện đại như
máy ghi hình, dàn âm thanh, các bộ điều khiển cho lò sưởi, hệ thống điều hòa công
nghiệp...chúng ta có thể sử dụng nhiều ngôn ngữ để lập trình như ngôn ngữ C, C++,
Visual...
1.2. Nhiệm vụ thử
Tìm tài liệu nghiên cứu, đưa ra các phương pháp tối ưu nhất để thiết kế sản phẩm
thực tế.
Thiết kế board mạch gồm các khối như : khối xử lý trung tâm dùng họ vi xử lý
Pic16f877a, khối cảm biến siêu âm SRF05 để đo khoảng cách, khối hiện thị sử dụng
LCD 16x2.
Thiết kế khối nguồn cung cấp điện áp và dòng điện ổn định để board mạch hoạt động
tốt.
Viết chương trình và mô phỏng trên phần mềm proteus.

GVHD: Nguyễn Lê Thái

6


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

CHƯƠNG 1.

TỔNG QUAN VỀ PIC VÀ CÁC PHƯƠNG PHÁP ĐO

KHOẢNG CÁCH VÀ CẢM BIẾN

2.1. Giới thiệu về PIC16F877A
- Sơ lược về vi điều khiển PIC16F877A.
- Khảo sát vi điều khiển PIC16F877A của hãng Microchip.
+ Sơ đồ, chân linh kiện.
+ Sơ đồ khối.
+ Các ứng dụng của PIC.
2.2. Sơ lược về vi điều khiển PIC16F877A
PIC16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng, 40 chân, bộ
nhớ đủ cho hầu hết các ứng dụng thông thường). Cấu trúc tổng quát của PIC16F877A
như sau:
-

8K Flash ROM.
368 bytes RAM.
257 bytes EEPROM.
5 ports (A, B, C, D, E) vào ra với tính hiệu điều khiển độc lập.
2 bộ nhớ định thời 8bits (Timer 0 và Timer 2).
Một bộ định thời 16bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm năng
lượng (SLEEP MODE) với nguồn xung Clock ngoài.
2 bộ CCP( Capture/Compare/PWM).
1 bộ biến đổi AD 10 bits, 8 ngõ vào.
2 bộ so sánh tương tự (Compartor).
1 bộ thời giám sát (WatchDog Timer).
1 cổng song song 8bits với các tín hiệu điều khiển.
1 cổng nối tiếp.
15 nguồn ngắt.
Có chế độ tiết kiệm năng lượng.
Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Progamming).

Được chế tạo bằng Công nghệ CMOS.
38 tập lệnh có độ dài 14bits.

Tần số hoạt động tối đa 20MHz.

2.2.1 Khảo sát vi điều khiển PIC16F877A của hãng Microchip

GVHD: Nguyễn Lê Thái

7


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
2.2.1.1. Sơ đồ chân của PIC16F877A

Hình 1.1. Sơ đồ chân PIC16F877A

2.2.1.2. Chức năng chân của vi điều khiển PIC16F877A
PORTA: (RA0-RA5) có số chân từ chân số 2 đến chân số 7.
-

PORTA bao gồm 6 I/O pin. Đây là các chân “hai chiều” (bidirectional pin), nghĩa
là có thể xuất, nhập được. Chức năng I/O này được điều khiển bởi thanh ghi
TRISA.
PORTB: (RB0-RB7) có số chân từ chân số 33 đến chân số 40.

-

PORTB là cổng I/O hai chiều. PORTB có thể phần mềm được lập trình cho nội
bộ yếu pull-up trên tất cả đầu vào.

PORTC: (RC0-RC7) có số chân từ số 15 đến chân số 18 và chân số 23 đến chân số
26.

-

PORTC gồm 8 I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Bên
cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ
PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART.
PORTD: (RD0-RD7) có số chân từ chân số 19 đến chân số 22 và chân số 27 đến
chân số 30.

-

PORTD gồm 8 I/O hai chiều, Parallel Slave cổng giao tiếp với bộ vi xử lý. Dữ
liệu cổng song song.

GVHD: Nguyễn Lê Thái

8


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
PORTE: (RE0-RE2) có số chân từ chân số 8 đến chân số 10.
-

PORTE gồm 3 I/O hai chiều, đọc điều khiển cho cổng song song.
Chân 11, 12, 31, 32 là các chân cấp nguồn cho vi điều khiển.
Chân 13 14 là chân được đấu nối thạch anh với bộ dao động khích xung clock bên
ngoài cung cấp xung clock cho chip hoạt động.
Chân 1 là chân RET: Là tín hiệu cho phép thiết lập lại trạng thái ban đầu cho hệ

thống, và là tín hiệu nhập là mức tích cực cao.

2.2.2. Sơ đồ khối
2.2.2.1 Sơ đồ

Hình 2.1. Sơ đồ khối PIC16F877A

2.2.2.2 Tổ chức các bộ nhớ
Cấu trúc của bộ nhớ vi điều khiển PIC16F877A bao gồm hai bộ nhớ:
+ Bộ nhớ chương trình (Programmemory).
+ Bộ nhớ dữ liệu (Data memory).

GVHD: Nguyễn Lê Thái

9


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

a. Bộ nhớ chương trình (Programmemory).
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng
bộ nhớ là 8k word ( word=14bit ) và được phân thành nhiều trang (từ page 0 đế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ỗi lệnh sau khi mã hóa có dung lượng là 1word=14bit [3].
Để mã hóa được địa chỉ của 8k bộ nhớ chương trình thì bộ đếm chương trình thì
bộ đếm chương trình có dung lượng là 13 bit (PC<12:0>).
Khi vi điều khiển được reset thì bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h
(Reset vector). Khi có ngắt xảy ra thì bộ đếm chương trình sẽ chỉ đếm đị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. Bộ nhớ Stack được đề cập cụ thể trong phần sau.

Hình 2.3. Bộ nhớ Stack

b. Bộ nhớ dữ liệu (Data memory)

GVHD: Nguyễn Lê Thái

10


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia thành nhiều bank. Với
PIC16F877A bộ nhớ dữ liệu được chia thành 4 bank. Mỗi bank có dung lượng là
128byte, bao gồm các thanh ghi có chức năng đặc biệt SFR (Special Function
Rigister) nằm ở vùng địa chỉ thấp và các thanh ghi có mục đích chung
GPR( General Purpose Register) nằm ở vùng địa chỉ còn lại của bank. Các thanh
ghi SFR thường xuyên sử dụng (ví dụ thanh ghi STATUS) sẽ được đặt ở tất cả các
bank trong bộ nhớ dữ liệu giúp thuận tiện cho qua quá trình truy xuất và giảm bớt
lệnh chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu của PIC16F877A.

Hình

2.4. Bộ nhớ
dữ liệu

2.2.2.3. Các thanh ghi có chức năng đặc biệt SFR
Đây là các thanh ghi 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 SRF
thành hai loại: thanh ghi SRF liên quan đến chức năng bên trong (CPU) và thanh ghi

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...)
GVHD: Nguyễn Lê Thái

11


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

-

a. Các thanh ghi liên quan đến bên trong:
Thanh ghi STATUS (03h, 83h, 103h, 183h) : thanh ghi chứa kết quả thực hiện các

R/W-0
IRP

R/W0
RP1

R/W-0

R-1

R-1

R/W-x

R/W-x


R/W-x

RP0

TO

PD

Z

DC

C

Bit7

Bit0

phép toán của khối ALU, trạng thái reset và các bit chọn bank để 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 các chức năng pull-up của các chân PORTB, xác lập các thông
số về các xung dao động, cách tác động của ngắt ngoại vi và bộ đếm timer0.
R/W-1
RBPU

R/W-1
INTED

G

R/W-1
T0CS

R/W-1
T0SE

R/W-1
PSA

R/W-1
PS2

R/W-1
PS1

BIT7
-

BIT0

Thanh ghi INTON (0Bh, 8Bh, 10Bh, 18Bh): thanh ghi cho phép đọc và ghi, chứa
các bit điều khiển và các bit cờ hiệu khi Timer0 tràn và ngắt ngoại vi RB0/INT và
ngắt interrput-on-change tại các chân của PORTB.
R/W-0

R/W-0

R/W-0


R/W-0

R/W-0

R/W-0

R/W-0

GIE

PEIE

TMROI
E

INTE

RBIE

TMRI0
F

INTF

BIT7

-

R/W-1

PS0

R/Wx
RBIF
BIT0

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
năng ngoại vi.

R/W-0
PSPIE

R/W-0
ADIE

R/W-0
RCIE

R/W-0
R/W-0
TMR2IE TMR1I
E
BIT7
BIT0
- 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.
GVHD: Nguyễn Lê Thái

R/W-0
TXIE


R/W-0
SSPIE

12

R/W-0
CCP1IE


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
R/W-0 R/W-0
R-0
R-0
R/W-0
R/W-0
R/W-0
R/W-0
PSPIF ADIF
RCIF
TXIF
SSPIF CCP1IF TMR2IF TMR1IF
BIT7
BIT0
- 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, SSPbus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM.
U-0
____

R/W-0

CMIE

U-0
____

R/W-0
EEIE

R/W-0
BCLIE

U/0
____

U-0
____

BIT7

R/W-0
CCP2I
E
BIT0

U-0
R/W-0
U-0
R/W-0
R/W-0
U-0

U-0
R/W-0
___
CMIF
____
EEIF
BCLIF
____
____
CCP2IF
BIT7
BIT0
- Thanh ghi PIR2 (0Dh): chứa các 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 PIE2.
-

Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái của chế độ reset của
vi điều khiển.

U-0
____
BIT7

U-0
____

U-0
_____

U-0

____

U-0
____

U-0
____

R/W-0
POR

R/W-1
BOR
BIT0

b. Thanh ghi mục đích chung GPR
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 Rigister). Đâ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 tham số phục vụ cho chương trình.
2.2.2.4. Các cổng nhập xuất của PIC (I/O)
Cổng xuất nhập (i=I/O) chính là phương tiện mà vi điều khiển dùng để tương tác
với thế giới bên ngoài. Sự tương tác này rất đa dạng và thông qua quá trình tương
tác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng.
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân I/O pin, tùy theo cách
bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng
chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển được tích sẵn
bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập
thông thường thì một số chân xuất nhập có các chức năng khác để thực hiện sự tác
GVHD: Nguyễn Lê Thái


13


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
dộng của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài. Chức năng của
từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển
thông qua thanh ghi SFR liên quan đến các chân xuất nhập đó.
Vi điều khiển PIC16F877A có 5 cổng xuất nhập là PORTA, PORTB, PORTC,
PORTD, PORTE.
2.2.2.5. Các bộ định thời của PIC16F877A
Bộ điều khiển PIC16F877A có 3 bộ định thời gian là TIMER0, TIMER1, TIMER2.
a. Bộ TIMER0
TIMER0 là bộ đếm 8bit được kết nối với bộ chia tần (prescaler). Cấu trúc cảu
Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock.
Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn. Bit TMR0IE (INTCON<5>) là bit
điều khiển của Timer0. TMR0IE=1 cho phép ngắt Timer0 tác động, TMR0IE=0
không cho phép Timer0 tác động. Sơ đồ khối của Timer0 như sau:

Hình 2.4: Sơ đồ khối Timer0
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>), khi
đó giá trị thanh TMR0 sẽ tăng theo chu kỳ xung đồng hồ ( tầng số vào timer0 bằng tần
số oscillator). Khi giá trị thanh ghi TMR0 từ FFh xuống 00h thì ngắt Timer0 sẽ xuất
hiện 1 cách linh động.

GVHD: Nguyễn Lê Thái

14



Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>), khi
đó xung tác động lên bộ đếm sẽ được lấy từ chân RA4/TOCK1. Bit TOSE
(OPTION_REG<4>) cho phép lựa chọn tác động vào bộ đếm. Cạnh tác động sẽ là
cạnh trên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1. Khi thanh ghi
TMR0 bị tràn bit TMR0IF (INCON<2>) sẽ được set. Đây chính là cờ ngắt của
Timer0. Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thực
hiện lại quá trình đếm. Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độ
sleep.
Bộ chia tần số (presccaler) được chia sẽ giữa Timer0 và WDT (Watchdog Timer).
Điều đó có nghĩa là nếu presccaler được sử dụng cho Timer0 thì WDT sẽ được hổ trợ
của presccaler và ngược lại. Presccaler được điều khiển bởi thanh ghi OPTION_REG.
Bit PSA(OPTION_REG<3>) xác định đối tượng tác động của presccaler. Các bit
PS2:PS0 (OPTION_REG<2:0>) xác định tỉ số chia tần số của prescaller. Xem lại
thanh ghi OPTION_REG để xác định lại một cách chi tiết về các bit điều khiển trên.
Các thanh ghi liên quan tới TIMER0 bao gồm:
TMR0 (địa chỉ 01h, 101h): chứa giá trị đếm của timer0.
INCON( địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)
OPTION_REG( địa chỉ 81h, 181h): điều khiển prescaller.
a. Bộ TIMER1
Timer1 là bộ định thời 16bit, giá trị của Timer1 sẽ được lưu lại trong 2 thanh ghi ( TMR1H:
TMR1L). Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>). Bit điều khiển của Timer1 là TMR1IE
(PIE<0>).
Tương tự như Timer0, Timer1 cũng có 2 chế độ hoạt động: chế độ định thời (time) với xung kích
là xung clock của oscillator ( tần số Timer bằng ¼ tần số của oscillaor) và chế độ đếm (Counter) với
xung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoài thông qua chân
RC0/T1OSO/T1CKI (cạnh tác động là cạnh trên). Việc lựa chọn xung tác động ( tương ứng với việc
lựa chọn chế độ hoạt động hay Timer hoặc Counter) được điều khiển bởi TMR1CS ( T1CON<1>).

GVHD: Nguyễn Lê Thái


15


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

Hình 2.5: Sơ đồ khối của Timer1
Ngoài ra Timer1 còn có 2 chức năng reset input bên trong điều khiển bởi 1 trong 2
khối CCP (Capture/compare/PWM).
Khi bit T1OSCEN (T1CON<3>) được set, Timer1 sẽ lấy xung clock từ hai chân
RC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung đếm. Timer1 sẽ bắt đầu đếm sau
cạnh xuống đầu tiên của xung ngõ vào. Khi đó PORTC sẽ bỏ qua sự tác động của 2 bit
TRISC<1:0> và PORTC<2:1> được gán vào giá trị 0. Khi clear bit T1OSCEN Timer1
sẽ lấy xung từ oscillator hoặc từ chân RC0/T1OSO/T1CKI.
Timer1 có 2 chế độ đếm là đồng bộ và bất đồng bộ. Chế độ đếm được quyết định bởi
PIC điều khiển T1SYNC (T1CON<2>).
Khi T1SYNC=1 xung đếm vào Timer1 sẽ không được đồng bộ hóa với xung clock
bên trong. Timer1 sẽ tiếp tục quá trình đếm khi vi điều khiển đang ở chế độ sleep và
ngắt do Timer1 tạo ra khi bị tràn có khả năng đánh thưc vi điều khiển.
Khi T1SYNC=0 xung đếm vào Timer1 sẽ được đồng bộ hóa với xung clock bên
trong. Ở chế độ này Timer1 sẽ không hoạt động khi vi điều khiển đang ở chế độ sleep.
Các thanh ghi liên quan đến Timer1 bao gồm:
INCON (0bh, 8bh, 10bh, 18bh): cho phép ngắt hoạt động (GIE và PEIE).
PIR1 (0ch): chứa cờ ngắt Timer1 (TMR1IF).
PIE1 (8ch): cho phép ngắt Timer1 (TMR1IE).
TMR1H (0Eh): chứa giá trị 8bit thấp của bộ đếm Timer1.
TMR1L (0Eh): chứa giá trị 8bit cao của bộ đếm Timer1.
T1CON (10h): xác lập các thông số cho Timer1.
b. Bộ TIMER2
GVHD: Nguyễn Lê Thái


16


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
Timer2 là bộ định thời 8bit và hổ trợ bởi 2 bộ chia tần preccaler và potscaler.
Thanh ghi chứa giá trị đếm của Timer2 là TMR2. Bit cho phép ngắt Timer2 tác
động là TMR2ON (T2CON<2>). Cờ ngắt của Timer2 là TMR2IF (PIR1<1>).
Xung gõ vào tầng số bằng ¼ tần số oscillator) được đưa qua bộ chia tần prescaler 4
bit (với các tỉ số chia tần là 1:1, 1:4, 1:16 và được điều khiển bởi các bit
T2CKPS1:T2CKPS0 (T2CON<1:0>).

Hình 2.6: Sơ đồ khối Timer2

Timer2 còn được hỗ trợ bởi thanh ghi PR2. Giá trị đếm trong thanh ghi TMR2 sẽ
tăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó reset về 00h. Khi reset thanh
ghi PR2 nhận giá trị mặc định FFh.
Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP do đó Timer2 còn đóng
vai trò tạo ra xung clock đồng bộ cho khối gi-ao tiếp SSP.
Các thanh ghi liên quan đến Timer2 bao gồm:
GVHD: Nguyễn Lê Thái

17


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
INTCON (0Bh, 8bh, 10bh, 18bh): cho phép hoạt động toàn bộ các ngắt (GIE và
PEIE).
PIR1 (0Ch): chứa cờ ngắt Timer 2( TMR2IF).
PIE1 (8Ch): chứa bit điều khiển Timer2(TMR2IE).

TMR2 (11H): chứa giá trị đếm Timer2.
T2CON (12H): xác lập các thông số Timer2.
PR2 (92H): thanh ghi hỗ trợ Timer2.
c. Bộ biến đổi ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu từ tương tự sang số.
PIC16F877A có 8 ngõ vào analog (RA4:RA0, RE2:RE0). Hiệu điện thế chuẩn
VREF có thể được lựa chọn và VDD, VSS hay hiệu điện thế chuẩn được xác lập
trên hai chân RA2, RA3. Kết quả chuyển đổi tín hiệu từ tương tự sang số là 10bit
số tương ứng và được lưu trong hai thanh ghi ADRESH, ADRESL. Khi không sử
dụng bộ chuyển đổi ADC các thanh ghi này có thể được sử dụng như các thanh ghi
thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai
thanh ghi ADRESH và ADRESL, bit ADCON0<2> được xóa về 0 và cờ ngắt ADIF
được set.
Quy trình chuyển đổi tín hiệu từ tương tự sang số bao gồm các bước sau:
-

Thiết lập các thông số cho bộ chuyển đổi ADC.
Chọn ngõ là ANALOG, chọn điện áp mẫu (dựa trên các thông số của thanh ghi
ADCON1).
Chọn kênh chuyển đổi AD (thanh ADCON0).
Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0).
Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0).

-

Thiết lập cờ ngắt cho bộ AD:
Clear bit ADIF.
Set bit ADIE.
Set bit PEIE.
Set bit GIE.


-

Đợi cho tới khi quá trình lấy mẫu hoàn tất.
Bắt đầu quá trình chuyển đổi (set bit GO/DONE).
Đợi cho quá trình chuyển đổi hoàn tất bằng cách:
Kiểm tra bit GO/DONE, nếu GO/DONE=0 thì quá trình chuyển đổi hoàn tất.
Kiểm tra cờ ngắt.

GVHD: Nguyễn Lê Thái

18


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
-

Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit GO/DONE (nếu cần tiếp tục
chuyển đổi).
Tiếp tục thực hiện các bước 1 2 cho các quá trình chuyển đổi tiếp theo.

Hình 2.7: Sơ đồ khối bộ chuyển đổi ADC

Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:
INTCON (0Bh, 8bh, 10bh, 18bh): cho phép ngắt các bit GIE, PEIE.
PIR1 (0Ch): chứa cờ ngắt AD.
GVHD: Nguyễn Lê Thái

19



Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
PIE1 (8Ch): chứa bit điều khiển AD.
ADRESH (1Eh) và ADRESL (9Eh): các thanh ghi chứa kết quả chuyển đổi AD.
ADCON0 (1Fh) và ADCON1 (9Fh): xác lập các thông số của bộ chuyển đổi AD.
PORTA (05h) TRISA (85h): liên quan đến các ngõ vào analog ở PORTA.
PORTE (09h) và TRISE (89h): liên quan đến các ngõ vào analog ở PORTE.
2.2.3. Các ứng dụng của PIC16F877A

2.2.3.1. Giao tiếp với led

GVHD: Nguyễn Lê Thái

20


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
Hình 2.8: Sơ đồ khối PIC16F877A giao tiếp với LED đơn
2.2.3.2.Giao tiếp với LM35 và LCD

Hình 2.9: Sơ đồ khối PIC16F877A giao tiếp với LM35 & LCD

GVHD: Nguyễn Lê Thái

21


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

CHƯƠNG 2.


CÁC PHƯƠNG PHÁP ĐO KHOẢNG CÁCH

Đo thủ công bằng các loại thước đo đơn giản, độ chính xác khá cao nhưng phải
phụ thuộc vào người đo.
Đo khoảng cách dựa trên nguyên lý điều biến pha.
Nguyên lý chung là đo độ khác biệt giữa pha của ánh sáng phát ra và ánh sáng
nhận được sau khi phản hồi từ vật. Tuy nhiên không có một loại photodetector nào
có thể đáp ứng được sự thay đổi của tần số trực tiếp của ánh sáng lên đến 100THz.
Vì thế phương pháp điều biến pha sử dụng tần số trực tiếp của ánh sáng không thể
tạo ra được. Do đó để có thể dễ dàng đo được ta phải điều biến tần số ánh sáng theo
một tần số khác thấp hơn mà các linh kiện thu quang học và mạch điện tử còn có
thể đáp ứng được. Vì thế tôi dùng phương pháp điều biến sóng sin để điều khiển
laser diot và sử dụng photodetector để thu ánh sang laser phản hồi.
3.1.Phương pháp đo khoảng cách bằng sóng siêu âm sử dụng cảm biến SRF05
Siêu âm là một dạng sóng âm được ứng dụng rộng rãi trong việc đo khoảng cách
và định vị vật thể. Báo cáo giới thiệu một phương pháp đo khoảng cách và xác định
vị trí vật thể bằng sóng siêu âm với sự kết hợp phương pháp Bayes để đánh giá khả
năng không gian bị chiếm bởi vật thể, và tỉ lệ chiếm giữa các ô lưới trên bản đồ
nhằm xác định vị trí xác suất cao nhất có vật thể.
Sóng siêu âm được truyền trong không khí với vận tốc khoảng 343m/s. Nếu một
cảm biến phát ra sóng siêu âm và thu về các sóng phản xạ đồng thời, đo được
khoảng thời gian từ lúc phát đi đến lúc thu về, máy tính có thể xác định được quảng
đường mà sóng đã di chuyển trong không gian. Quãng đường di chuyển của sóng
sẽ bằng hai lần khoảng cách từ cảm biến đến chướng ngại vật theo hướng phát của
sóng âm.
3.2.Cảm biến SRF05
SRF05 là bước phát triển từ SRF04, được thiết kế để làm tính năng linh hoạt, tăng
ngoại vi và giảm chi phí. SRF05 hoàn toàn tương thích với SRF04. Khoảng cách
tăng từ 3m-4m. Một chế độ hoạt động mới cho phép SRF05 sử dụng 1 chân duy

nhất cho cả kích hoạt và phản hồi, do đó sẽ tiết kiệm có giá trị trên chân điều khiển.
Khi chân chế độ không kết nối, SRF05 hoạt động riêng biệt chân kích hoạt và chân
hồi tiếp. SRF05 bao gồm 1 thời gian trễ trước khi xung phản hồi.

GVHD: Nguyễn Lê Thái

22


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí

Hình 3.1: Cảm biến siêu âm SRF05

Cảm biến SRF05 thiết lập 2 mode hoạt động khác nhau thông qua các chân điều
khiển MODE, nối hoặc không nối MODE xuống MASS cho phép cảm biến thông qua
giao tiếp dùng 1 hay 2 chân I/O.
-

Mode1: Tách chân TRIGGER & ECHO dùng riêng:
Trong mode này SRF05 sử dụng cả hai chân TRIGGER & ECHO cho việc giao
tiếp với CPU. Để sử dụng mode này ta chỉ cần để trống chân mode của module,
điện trở bên trong module sẽ kéo chân pin lên mức 1.

GVHD: Nguyễn Lê Thái

23


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí


Hình 3.2: Chức năng chân của Mode1

Để điều khiển SRF05, ta chỉ cần cấp cho chân TRIGGER 1 xung điều khiển với độ
rộng tối thiểu là 10Us. Sau 1 khoảng thời gian, đầu phát sóng siêu âm sẽ phát sóng
siêu âm, vi xử lý tích hợp trên module sẽ xác định thời điểm phát sóng siêu âm và thu
sóng siêu âm. Vi xử lí tích hợp này sẽ đưa kết quả thu được vào chân ECHO. Độ rộng
xung xung vuông tại chân ECHO tỉ lệ với khoảng cách từ cảm biến đến vật thể.

Hình 3.3: nguyên lý hoạt động ở chế độ Mode1

-

Mode2 chân TRIGGER & ECHO dùng chung.

GVHD: Nguyễn Lê Thái

24


Trường Đại Học Công Nghiệp Thực Phẩm - Khoa Công Nghệ Cơ Khí
Được thiết kế nhằm cho mục đích tiết kiệm chân pin cho MCU nên trong mode
này, SRF05 chỉ sử dụng chân pin cho 2 chức năng TRIGGER và ECHO. Để sử
dụng mode này, ta nối chân MODE xuống MASS. Đây cũng chính là mode sẽ được
sử dụng trong demo.

Hình 3.4: Chức năng các chân ở chế độ Mode2
Để điều khiển SRF05, đầu tiên xuất 1 xung với độ xung tối thiểu 10uS vào chân
TRIGGER-ECHO của cảm biến. Sau đó vi xử lý tích hợp trên cảm biến sẽ phát ra tín
hiệu điều khiển phát siêu âm. Sau 700us kể từ lúc kết thúc tín hiệu điều khiển chân
TRIGGER-ECHO có thể đọc ra 1 xung mà độ rộng tỉ lệ với khoảng cách từ cảm biến

tới vật thể

Hình 3.5: Nguyên lý hoạt động ở chế độ Mode2

3.3.Tính toán khoảng cách
GVHD: Nguyễn Lê Thái

25


×