Tải bản đầy đủ (.doc) (28 trang)

TỔNG QUAN VỀ VI ĐIỀU KHIỂN, NGHIÊN CỨU VI ĐIỀU KHIỂN DÒNG PIC VÀ THIẾT KẾ ỨNG DỤNG VỚI PIC

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 (983.83 KB, 28 trang )

TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆP HÀ NỘI
KHOA ĐIỆN TỬ

BÁO CÁO ĐỀ TÀI THỰC TẬP TỐT NGHIỆP

ĐỀ TÀI: TỔNG QUAN VỀ VI ĐIỀU KHIỂN, NGHIÊN CỨU VI ĐIỀU KHIỂN
DÒNG PIC VÀ THIẾT KẾ ỨNG DỤNG VỚI PIC

GV hướng dẫn
SV thực hiện
Lớp
Khoa
Trường

: Th.s Tống Văn Luyên
: Lương Mạnh Quyền
: Điện Tử 4 – K4
: Điện Tử
: Đại Học Công Nghiệp Hà Nội

1
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI


KHOA: ĐIỆN TỬ

BỘ CÔNG THƯƠNG
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐH CÔNG NGHIỆP HÀ NỘI
Độc lập - Tự do - Hạnh phúc

THỰC TẬP TỐT NGHIỆP ĐẠI HỌC

Họ và tên sinh viên: Lương Mạnh Quyền

Lớp: ĐH CNKT ĐT 4 – K4

Khoa: Điện tử
Tên đề tài: Thiết kế mạch ứng dụng dùng PIC
Giáo viên hướng dẫn: Tống Văn Luyên

NỘI DUNG YÊU CẦU
TT
Nội dung
1
Tổng quan về vi điều khiển
2
Nghiên cứu về vi điều khiển dòng PIC
3
Thiết kế ứng dụng với PIC

Ngày giao đề tài: 14/1/2013

Ngày hoàn thành: 16/3/2013


GIÁO VIÊN HƯỚNG DẪN

TRƯỞNG KHOA

Tống Văn Luyên

2
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ
MỤC LỤC

-

MỞ ĐẦU.
CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN
1.1. GIỚI THIỆU CHUNG
1.2. PHÂN LOẠI
1.3. CẤU TRÚC TỔNG QUAN VỀ VI ĐIỀU KHIỂN
CHƯƠNG 2: KHÁI QUÁT VỀ VI ĐIỀU KHIỂN PIC
2.1. PIC LÀ GÌ?.
2.2. KIẾN TRÚC PIC.
2.3. RISC VÀ CISC.
2.4. CÁC DÒNG PIC VÀ LỰA CHỌN VĐK PIC.
2.5. NGÔN NGỮ LẬP TRÌNH CHO PIC.
2.6. MẠCH NẠP CHO PIC.

2.7. HÌNH ẢNH MỘT SỐ LOẠI PIC.
CHƯƠNG 3: ỨNG DỤNG VỀ PIC
3.1. ĐẶT VẤN ĐỀ
3.2. CẤU TẠO VÀ NGUYÊN LÝ HOẠT ĐỘNG CỦA ROBOT.
3.3. KHỐI CẢM BIẾN.
3.4. ĐỘNG CƠ.
3.5. KHỐI ĐIỀU KHIỂN TRUNG TÂM.
3.6. CODE CHO PIC16F887 TRONG ĐỀ TÀI
3.7. CHỨC NĂNG CỦA PIC TRONG ĐỀ TÀI.
3.8. MẠCH ĐIỀU KHIỂN ĐỘNG CƠ.
3.9. MẠCH NGUYÊN LÍ VÀ MẠCH IN.
3.10. KẾT LUẬN.

3
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

Đánh giá và nhận xét của giáo viên hướng dẫn
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………

……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………

……………………………………………………………………………………………

4
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

Lời Nói Đầu
Ngày nay kĩ thuật vi điều khiển đã trở nên quen thuộc trong các nghành kĩ thuật và
trong dân dụng. Các bộ vi điều khiển có khả năng sử lý các 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 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ì lí do trên, việc tìm hiểu, khảo sát vi điều khiển là
điều mà các sinh viên nghành điện tử phải hết sức quan tâm. Đó chính là một nhu cầu
cần thiết và cấp bách đối với mỗi sinh viê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
được lại là một điều rất phước tạp. phần công việc 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à 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 bao gồm 2 phần là phần cứng và phần mềm.
Mặc dù vi điều khiển đã đi được những bước dài như vậy nhưng để tiếp cận được với kĩ
thuật này không phải là việc có được trong một sớm một chiều. Để tìm hiểu một bộ vi
điều khiển một cách khoa học và mang lại hiệu quả cao làm nền tảng cho việc xâm
nhập vào những hệ thống tối tân hơn. Việc trang bị kiến thức về vi điều khiển cho sinh
viên là rất cần thiết. Xuất phát từ thực tiễn này em đã đi đến quyết định Tìm hiểu vi
điều khiển nghiên cứu về vi điều khiển dòng PIC và làm ứng dụng về PIC nhằm

đáp ứng nhu cầu ham muốn học hỏi của bản thân và giúp các bạn sinh viên dễ tiếp cận
và hiểu sâu hơn về vi điều khiển PIC.
Trong quá trình thực hiện đề tài vẫn còn nhiều sai sót, mong nhận được nhiều ý kiến
đóng góp từ thầy, cô và các bạn.
Em chân thành cảm ơn!

5
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN
1.1

GIỚI THIỆU CHUNG
Bộ vi sử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tính toán, xử
lý, và thay đổi chương trình linh hoạt theo mục đích người sử dụng, đặc biệt hiệu quả
với các bài toán và hệ thống lớn. Tuy nhiên đối với các ứng dụng nhỏ, tầm tính toán
không đòi hỏi khả năng tính toán lớn thì việc sử dụng vi xử lý cần cân nhắc. Bởi vì hệ
thống dù lớn hay nhỏ, nếu dùng vi xử lý cũng đòi hỏi các khối mạch điện giao tiếp
phước tạp như nhau. Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình
thực hiện, các mạch điện giao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối
này cùng liên kết với vi xử lý thì mới thực hiện được công việc. Để kết nối các khối này
đòi hỏi người thiết kế phải hiểu biết tường minh về các thành phần xử lý, bộ nhớ, thiết
bị ngoại vi. Hệ thống được tạo ra khá phước tạp, chiếm nhiều không gian, mạch in
phước tạp và vấn đề chính là trình độ người thiết kế. Kết quả là giá thành sản phẩm
cuối cùng rất cao, không phù hợp để áp dụng cho các hệ thống nhỏ.

Vì một số nhược điểm trên nên các nhà chế tạo tích hợp một ít bộ nhớ và một số mạch
giao tiếp ngoại vi cùng với vi xử lý vào một IC duy nhất gọi là Mictrcontroller – Vi
điều khiển.
Một số điểm khác nhau giữa vi xử lý và vi điều khiển:
Về phần cứng: Vi xử lý cần được gép thêm các thiết bị ngoại vi bên ngoài như
bộ nhớ, và các thiế bị ngoại vi khác,… để có thể tạo thành một bản mạch hoàn chỉnh.
Đối với vi điều khiển thì bản thân nó đã là một hệ thống máy tính hoàn chỉnh với CPU,
bộ nhớ, các mạch giao tiếp, các bộ định thời và mạch điều khiển ngắt được tích hợp bên
trong mạch.
Về đặc trưng của tập lệnh: do ứng dụng khác nhau nên các bộ vi xử lý và vi điều
khiển cũng có những yêu cầu khác nhau đối với tập lệnh của chúng. Tập lệnh của vi xử
lý thường mạnh về các kiểu định địa chỉ với các lệnh cung cấp các hoạt động trên các
lượng dữ liệu lớn như 1byte, word, double word,… ở các bộ vi điều hiển, các tập lệnh
rất mạnh trong việc xử lý các kiểu dữ liệu như bit hoặc một vài bit.
Do vi điều khiển cấu tạo về phần cứng và khả năng xử lý thấp hơn nhiều so với
vi xử lý nên gia thành của vi điều khiển cũng rẻ hơn nhiều. Tuy nhiên nó vẫn đủ khả
năng đáp ứng được tất cả các yêu cầu của người dùng.
Vi điều khiển được ứng dụng trong các dây chuyền tự động loại nhỏ, các robot có chức
năng đơn giản, trong máy giặt, ôtô v.v…
1.2

PHÂN LOẠI

-

Độ dài thanh ghi
Dựa vào độ dài của các thanh ghi và các lệnh của vi điều khiển mà người ta chia
ra các loại vi điều khiển 8bit, 16bit, hay 32bit…

6

BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

Các loại vi điều khiển 16bit do có độ dài lệnh lớn hơn nên các tập lệnh cũng nhiều hơn,
phong phú hơn. Tuy nhiên bất cứ chương trình nào viết bằng vi điều khiển 16bit chúng
ta đều có thể viết trên vi điều khiển 8bit với chương trình thích hợp.
-

Kiến trúc CISC và RISC
Vi xử lý hoặc vi điều khiển CISC là vi điều khiển có tập lệnh phước tạp. Các vi điều
khiển này có một số lượng lớn các lệnh nên giúp người lập trình có thể linh hoạt và dễ
dàng hơn khi viết chương trình. Vi điều khiển RISC là vi điều khiển có tập lệnh đơn
giản. Chúng có một số lượng nhỏ các lệnh đơn giản. Do đó, chúng đòi hỏi phần cứng ít
hơn, giá thành thấp hơn, và hoạt động nhanh hơn so với CISC. Tuy nhiên nó đòi hỏi
người lập trình phải viết các chương trình phước tạp hơn, nhiều lệnh hơn.
-

Kiến trúc Harvard và kiến trúc Von - neumann
Kiến trúc harvard sử dụng bộ nhớ riêng biệt cho chương trình và dữ liệu. bus địa chỉ
và bus dữ liệu độc lập với nhau nên quá trình chuyền nhận dữ liệu đơn giản hơn kiến
trúc Vonneumann sử dụng chung bộ nhớ cho chương trình và dữ liệu, điều này làm cho
vi điều khiển gọn nhẹ hơn, giá thành thấp hơn.
1.3
-

CẤU TRÚC TỔNG QUAN CỦA VI ĐIỀU KHIỂN

CPU
CPU là trái tim của hệ thống. Là nơi quản lí tất cả các hoạt động của vi điều khiển.
Bên trong CPU gồm:

ALU là bộ phận thao tác trên các dữ liệu.

Bộ giải mã lệnh và điều khiển, xác định các thao tác mà CPU cần thực hiện.

Thanh gi lệnh IR, lưu giữ opcpde của lệnh được thực thi.

Thanh ghi PC, lưu giữ địa chỉ của lệnh kế tiếp cần thực thi.

Một tập lệnh các thanh ghi dùng để lưu thông tin tạm thời.
-

ROM
ROM là bộ nhớ dùng để lưu giữ chương trình. ROM còn được dùng để chứa số
liệu các bảng, các tham số hệ thống, các số liệu cố định của hệ thống. Trong quá trình
hoạt động nội dung ROM là cố định, không thể thay đổi, nội dung ROM chỉ thay đổi
khi ROM ở chế độ xóa hoặc nạp chương trình.
-

RAM
RAM là bộ nhớ dữ liệu. Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ
các kết quả trung gian và kết quả cuối cùng của các phép toán, xử lý thông tin. Nó cũng
dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác thu phát và chuyển đổi dữ
liệu.
-

BUS

BUS là các đường dẫn dùng để di chuyển dữ liệu. Bao gồm : bus địa chỉ, bus dữ
liệu, và bus điều khiển.

7
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

BỘ ĐỊNH THỜI
Được sử dụng cho các mục đích chung về thời gian.
-

WATCHDOG
Bộ phận dùng để reset lại hệ thống khi hệ thống gặp ‘ bất thường ’.

ADC
Bộ phận chuyển tín hiệu analog sang tín hiệu digital. Các tín hiệu bên ngoài đi vào vi
điều khiển thường ở dạng analog. ADC sẽ chuyển tín hiệu này về dạng tín hiệu digital
mà vi điều khiển có thể hiểu được.
TẬP LỆNH
Tập lệnh ở đây được coi là tập mã lệnh nhị phân. Bản chất của tập lệnh là một tập hợp
các mã nhị phân, mà từ đó các đơn vị xử lý trung tâm (CPU) nhận biết và thực hiện. Dữ
liệu mà CPU xử lý là các số nhị phân. Chính vì vậy, tập lệnh dù thế nào đi nữa cũng
thực hiện những công việc chính sau đây :

Tính toán các con số nhị phân.


Các lệnh để chuyển các giá trị ra thành tín hiệu điện tử ở chân linh kiện.

Các lệnh di chuyển các giá trị ở các thanh ghi.

Các lệnh điều khiển con trỏ chương trình.
Tập lệnh hiện nay được phân làm hai loại, tập lệnh RISC và tập lệnh CISC như đã nêu
ở trên.

8
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

CHƯƠNG 2 : KHÁI QUÁT VỀ VI ĐIỀU KHIỂN PIC
2.1.

PIC LÀ GÌ ?
PIC là viết tắt của Programable Intelligent Computer, có thể tạm dịch là máy tính
thông minh khả trình, do hãng Genenral Instrument đặt tên cho vi điều khiển đầu tiên
của họ là PIC1650. Vi điều khiển này sau đó được nghiên cứu và phát triển thêm và từ
đó hình thành nên dòng vi điều khiển PIC ngày nay.
2.2. KIẾN TRÚC PIC
Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kến trúc : kiến
trúc Von Neuman và kiến trúc Havard.

Harvad


Data
memory

CPU

Von - Newman

Program
memory

CPU

Program
memory

Hình 1 : kiến trúc Havar và kiến trúc Von-Neuman.
Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Đặc điểm khác
biệt giữa kiến trúc Havard và kiến trúc Von-Neuman là cấu trúc bộ nhớ dữ liệu và bộ
nhớ chương trình.
Đối với kiến trúc Von – Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung
trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương
trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lý của CPU pải
rất cao. Vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể tương tác với bộ
nhớ dữ liệu hoặc bộ nhớ chương trình. Như vậy có thể nói kiến trúc Von – Neuman
không thích hợp với kiến trúc của một vi điều khiển.
Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành hai
bộ nhớ riêng biệt. Do vậy trong cùng một thời điểm CPU có thể tương tác với cả hai bộ
nhớ, như vậy tốc độ xử lý của vi điều khiển được cải thiện đáng kể.
Một điểm cần chú ý nữa là tập lệnh trong kiến trúc havard có thể được tối ưu tùy theo
yêu cầu kiến trúc của vi điều khiển mà không cần phụ thuộc vào cấu trúc dữ liệu. ví dụ :

đối với vi điều khiển dòng 16F, độ dài lệnh luôn là 14bit( trong khi dữ liệu được tổ

9
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

chức thành từng byte), còn đối với kiến trúc Von – Neuman, độ dài luôn luôn là bộ số
của 1byte( do dữ liệu được tổ chức thành từng byte).
2.3.

RISC VÀ CISC
Như đã trình bày ở trên, kiến trúc Havard là khái niệm mới hơn so với kiến trúc
Von – Neuman khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của một vi
điều khiển.
Qua việc tách rời bộ nhớ dữ liệu và bộ nhớ chương trình, bus dữ liệu và bus trương
trình, CPU có thể cùng một lúc truy xuất cả bộ nhớ chương trình và bộ nhớ dữ liệu,
giúp tăng tốc độ xử lí của vi điều khiển lên gấp đôi. Đồng thời cấu trúc lệnh không còn
phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh động điều chỉnh tùy theo khả năng và
tốc độ của từng vi điều khiển. Và để tiếp tục cải tiến tốc độ thực thi lệnh, tập lệnh của
họ vi điều khiển PIC được thiết kế sao cho chiều dài mã lệnh luôn cố định ( ví dụ đối
với họ 16Fxxxx chiều dài mã lệnh luôn là 14bit) và cho phép thực thi lệnh trong một
chu kì của xung clock (ngoại trừ một số trường hợp đắc biệt như lệnh nhảy, lệnh gọi
chương trình con… cần hai chu kì xung đồng hồ). Điều này có nghĩa tập lệnh của vi
điều khiển thuộc cấu trúc Havard sẽ ít lệnh hơn, ngắn hơn, đơn giản hơn để đáp ứng
yêu cầu mã hóa lệnh bằng số lượng bit nhất định.
Vi điều khiển được tổ chức theo kiến trúc Havard còn được gọi là vi điều khiển

RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn. Vi
điều khiển được thiết kế theo kiến trúc Von – Neuman còn được gọi là vi điều khiển
CISC ( Complex Instruction Set Computer ) hay vi điều khiển có tập lệnh phước tạp vì
mã lệnh của nó không phải là một số cố định mầ luôn là bội số của 1byte (8bit).
2.4. CÁC DÒNG PIC VÀ LỰA CHỌN VI ĐIỀU KHIỂN PIC
Các kí hiệu của vi điều khiển PIC :
- PIC12xxxx : Độ dài lệnh 12bit
- PIC16xxxx : Độ dài lệnh 14bit
- PIC18xxxx : Độ dài lệnh 16 bit
C : PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
F : PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: Tương tự như LF, đây là kí hiệu cũ
Bên cạnh đó một số vi điều khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm chữ A ở
cuối là flash( ví dụ PIC 16F877 là EEPROM, còn PIC 16F877A là flash).
Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC.
Ở việt nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất.
Cách lựa chọn một vi điều khiển PIC phù hợp:
- Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng. Có nhiều
vi điều khiển PIC với số lượng chân khác nhau, thậm chí chỉ có vi điều khiển chỉ có
8 chân, ngoài ra còn có các vi điều khiển 28,40,44… chân.
- Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được
nhiều lần hơn. Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong
vi điều khiển, các chuẩn giao tiếp bên trong.
- Sau cùng cần chú ý đến bộ nhớ chương trình mà bộ nhớ vi điều khiển cho phép.

10
BÁO CÁO ĐỀ TÀI THỰC TẬP



TRƯỜNG ĐHCN HÀ NỘI
-

KHOA: ĐIỆN TỬ

Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thế được tìm thấy
trong cuốn sách Select PIC guide do nhà sản xuất Microchip cung cấp.

2.5.

NGÔN NGỮ LẬP TRÌNH CHO PIC

-

PIPELINING Đây chính là cơ chế xử lý lệnh của các vi điều khiển PIC. Một chu kì
lệnh của vi điều khiển sẽ bao gồm 4 xung clock. Ví dụ ta sử dụng oscillator có tần
số 4MHz, thì xung lệnh sẽ có tần số 1MHz ( chu kì lệnh xẽ là 1us).

-

Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình cấp thấp có MPLAB
(được cung cấp miễn phí bởi nhà sản xuất Microchip), các ngôn ngữ lập trình bậc
cao hơn gồm C, Basic, Pascal,… Ngoài ra còn một số ngôn ngữ lập trình được phát
triển dành riêng cho PIC như PICbasic, MikroBasic,…

2.6.

MẠCH NẠP CHO PIC
Đây cũng là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC. Có thể
sử dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng Microchip như:

PICSTART plus, MPLAB ICD 2, MPLAB PM3, PRO MATE II. Có thể dùng các sản
phẩm này để nạp cho vi điều khiển khác thông qua chương trình MPLAB. Dòng sản
phẩm chính thống này có ưu thế là nạp được cho tất cả các vi điều khiển PIC, tuy nhiên
giá thành rất cao và thường gặp rất nhiều khó khăn trong quá trình mua sản phẩm.
Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều mạch nạp
được thiết kế dành cho vi điều khiển PIC. Có thể sơ lược một số mạch nạp cho PIC như
sau:
- JDM programmer: mạch nạp này dành cho chương trình nạp Icprog cho phép nạp
các vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp thấp ICSP (In
Circuit Serial Programming). Hầu hết các mạch nạp đều hỗ trợ tính năng nạp
chương trình này.
- WARR-13A và MCP-USB: hai mạch nạp này giống mạch nạp PICSTART plus do
nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch MPLAB, nghĩa là
ta có thể trực tiếp dùng chương trình MPLAB để nạp cho vi điều khiển PIC mà
không cần một chương trình nạp khác, chẳng hạn như Icprog.
- P16PRO40: Mạch nạp này do Nigel thiết kế, và cũng khá nổi tiếng, ông còn thiết kế
cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương trình nạp Icprog.
- Mạch nạp Universal của Williem: Đây không phải là mạch nạp chuyên dụng dành
cho PIC như P16PRO40.
Các mạch nạp trên có ưu điểm rất lớn là khá đơn giản, rẻ tiền, hoàn toàn có thể tự
lắp một cách rễ ràng, và mọi thông tin về sơ đồ mạch nạp, cách thiết kế, thi công, kiểm
tra và chương trình mạch nạp đề dễ dàng tìm được và download miễn phí thông qua
mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế về số vi điều
khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử dụng với một chương trình
nạp thích hợp.

11
BÁO CÁO ĐỀ TÀI THỰC TẬP



TRƯỜNG ĐHCN HÀ NỘI
2.7.

KHOA: ĐIỆN TỬ

HÌNH ẢNH MỘT SỐ LOẠI PIC

PIC 16F877A

PIC 18F4550
Hình 2: hình ảnh một số loại pic

12
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

CHƯƠNG 3: ỨNG DỤNG VỀ PIC

Ứng Dụng: Thiết Kế Robot Mini Tự Hành Dò Đường.
3.1. Đặt vấn đề
Robot tự hành (Mobile Robot) là một thành phần có vai trò quan trọng trong ngành
Robot học, cùng với sự phát triển của các hệ thống tự động hóa, Robot tự hành ngày
càng được hoàn thiện và càng cho thấy lợi ích của nó trong công nghiệp và sinh hoạt.
Một vấn đề rất được quan tâm khi nghiên cứu về Robot tự hành là làm thế nào để Robot
biết được vị trí nó đang đứng và có thể di chuyển tới một vị trí xác định, đồng thời có
thể tự động tránh được chướng ngại vật trên đường đi. Vì vậy, việc chế tạo thành công

ứng dụng này xẽ mở ra một hướng tiếp cận mới và góp phần thúc đẩy việc ứng dụng
của Robot ngày càng nhiều vào đời sống hàng ngày và trong nghiên cứu chế tạo. Qua
đó cho thấy được ứng dụng và tầm quan trọng của hệ thống vi điều khiển, trong ứng
dụng này là vi điều khiển PIC 16F887.
3.2. Cấu tạo và nguyên lý hoạt động của robot
3.2.1 Sơ đồ thuật toán

12V

5V

Hình 3. Sơ đồ khối của toàn bộ robot

13
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

3.3. Khối Cảm biến
3.3.1
Sơ đồ mạch nguyên lí

Hình 4. Sơ đồ nguyên lý mạch đọc cảm biến
Nguyên lý hoạt động
Cảm biến quang có tác dụng cảm nhận đường đi, ánh sáng từ môi trường truyền đến
cảm biến, làm thay đổi tính chất vật lí trong cảm biến, sinh ra tín hiệu điện, tín hiệu này
xẽ đi qua mạch so sánh để đưa ra bộ vi điều khiển xử lí

3.4.
Động cơ
- Giới thiệu động cơ
Động cơ bước là một loại động cơ điện có nguyên lý và ứng dụng khác biệt với đa
số các động cơ điện thông thường. Chúng thực chất là một động cơ đồng bộ dùng để
biến đổi các tín hiệu điều khiển dưới dạng các xung điện rời rạc kế tiếp nhau thành
chuyển động góc quay hoặc chuyển động của rôto có khả năng cố định rôto vào các vị
trí cần thiết.
-

Nguyên tắc hoạt động
Động cơ bước không quay theo cơ chế thông thường mà nó quay theo từng bước
nên có độ chính xác rất về mặt điều khiển học. Chúng ta làm việc nhờ các bộ chuyển
mạch điện tử đưa ra các tín hiệu điêu khiển vào stato theo thứ tự và một tần số nhất
định. Tổng số góc quay của rôto tương ứng với một số lần chuyển mạch, cũng như
chiều quay và tốc độ quay của rôto phụ thuộc vào thứ tự chuyển đổi và tần số chuyển
đổi.

VCC

14
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI
3.5.

KHOA: ĐIỆN TỬ

Khối điều khiển trung tâm (PIC 16F887)


Khối điều khiển trung tâm gồm có PIC16F887 và một số linh kiện phụ trợ. PIC
16F887 là dòng PIC phổ biến nhất hiện nay, nó đủ 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.

Hình 5: Vi điều khiển PIC 16F887
3.6.

Một vài chi tiết chính của vi điều khiển PIC16F887
PIC16F887 là vi điều khiển 8bit có kiến trúc Harvard của Microchip. Có những
thông số kĩ thuật sau:
• Xung clock hoạt động tối đa là 20MHz.
• Chu kì máy bằng 4 lần chu kì xung clock.
• Chip có nhiều dạng vở khác nhau, loại chip được sử dụng trong đề tài là loại 40
chân PDIP.
• Điện áp hoạt động rộng từ 2V đến 5.5V.
• Bộ nhớ dữ liệu và bộ nhớ chương trình tác biệt nhau, bus địa chỉ cũng như bus dữ
liệu là tách biệt. bộ nhớ chương trình Flash 8K ô nhớ cho phép ghi 100,000 lần. Mỗi ô
nhớ có 14 bits. Bộ nhớ dữ liệu RAM có 512 Byte gồm các thanh ghi chức năng đặc
biệt và các thanh ghi đa mục đích, ngoài ra PIC16F887 được tích hợp 256 byte
EEPROM cho phép ghi đến 1,000,000 lần.
• 35 chân I/O của 5 port điều khiển là Port A, Port B, Port C, Port D, Port E.
• Bộ chuyển đổi ADC 10-bit với 14 kênh.
• 3 bộ timer. Bộ timer 0 và timer 2 là 8 bit, còn timer 1 là 16 bit.
• Module Enhanced USART hỗ trợ RS-485, RS-232.

15
BÁO CÁO ĐỀ TÀI THỰC TẬP



TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

Hình 6: Cấu trúc của PIC16F887

16
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

3.7.

KHOA: ĐIỆN TỬ

Code cho 16F887 trong đề tài

#include <16f887.h>
#include <stdio.h>
#include <math.h>
#FUSES NOWDT

#FUSES HS
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOCPD
#FUSES BROWNOUT
#FUSES IESO
#FUSES FCMEN

#FUSES NOLVP
#FUSES NODEBUG
#FUSES NOWRT
#FUSES BORV40
#FUSES MCLR
#use delay(clock=20000000)
#define tien 0
#define lui 1
int8 a,b,c,d,e,f,g,h;
int8 kq = 0;
int8 flag = 2;
void doc_adc()
{
kq = 0;
set_adc_channel(0);
delay_us(8);
a=read_adc();
set_adc_channel(0);
delay_us(2);
if(a>15)
{
kq = kq|0b1;
output_low(pin_D5);
}
else
{
output_high(pin_D5);
}
delay_us(8);


17
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

b=read_adc();
set_adc_channel(1);
delay_us(2);
if(b>15)
{
kq = kq|0b10;
output_low(pin_D4);
}
else
{
output_high(pin_D4);
}
delay_us(8);
c=read_adc();
set_adc_channel(2);
delay_us(2);
if(c>13)
{
kq = kq|0b100;
output_low(pin_C7);
}
else

{
output_high(pin_C7);
}
delay_us(8);
d=read_adc();
set_adc_channel(3);
delay_us(2);
if(d>13)
{
kq = kq|0b1000;
output_low(pin_C6);
}
else
{
output_high(pin_C6);
}
delay_us(8);
e=read_adc();
set_adc_channel(4);
delay_us(2);

18
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

if(e>10)

{
kq = kq|0b10000;
output_low(pin_C5);
}
else
{
output_high(pin_C5);
}
delay_us(8);
f=read_adc();
set_adc_channel(5);
delay_us(2);
if(f>13)
{
kq = kq|0b100000;
output_low(pin_C4);
}
else
{
output_high(pin_C4);
}
delay_us(8);
g=read_adc();
set_adc_channel(6);
delay_us(2);
if(g>12)
{
kq = kq|0b1000000;
output_low(pin_D3);
}

else
{
output_high(pin_D3);
}
delay_us(8);
h=read_adc();
set_adc_channel(7);
delay_us(2);
if(h>15)
{
kq = kq|0b10000000;

19
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

output_low(pin_D2);
}
else
{
output_high(pin_D2);
}
}
void dongco_phai(int toc_do,char chieu)
{
if(chieu == tien)

{
output_high(pin_C0);
output_low(pin_C3);
};
if(chieu == lui)
{
output_high(pin_C3);
output_low(pin_c0);
};
set_pwm1_duty(toc_do);
}
void dongco_trai(int toc_do,char chieu)
{
if(chieu == tien)
{
output_high(pin_D0);
output_low(pin_D1);
};
if(chieu == lui)
{
output_high(pin_D1);
output_low(pin_D0);
};
set_pwm2_duty(toc_do);
}
void dung_lai()
{
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
output_low(pin_C0);

output_low(pin_d0);
output_low(pin_C3);

20
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

output_low(pin_d1);
}
void lui_sau()
{
dongco_phai(250,lui);
dongco_trai(250,lui);
}
void giua()
{
dongco_phai(255,tien);
dongco_trai(255,tien);
}
void trai0()
{
dongco_phai(229,tien);
dongco_trai(255,tien);
}
void phai0()
{

dongco_phai(255,tien);
dongco_trai(229,tien);
}
void trai1()
{
dongco_phai(204,tien);
dongco_trai(255,tien);
}
void phai1()
{
dongco_phai(255,tien);
dongco_trai(204,tien);
}
void trai2()
{
dongco_phai(178,tien);
dongco_trai(255,tien);
}
void phai2()
{
dongco_phai(255,tien);
dongco_trai(178,tien);
}
void trai3()
{
dongco_phai(155,tien);

21
BÁO CÁO ĐỀ TÀI THỰC TẬP



TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

dongco_trai(255,tien);
}
void phai3()
{
dongco_phai(255,tien);
dongco_trai(155,tien);
}
void trai4()
{
dongco_phai(127,tien);
dongco_trai(255,tien);
}
void phai4()
{
dongco_phai(255,tien);
dongco_trai(127,tien);
}
void do_duong()
{
doc_adc();
if(kq==0b11111111)
{
dung_lai();
};
switch (kq)

{
case 0b00011000: giua();flag = 2;
break;
case 0b00001100&0b00001000&0b00001110: phai0(); flag = 0;
break;
case 0b00000110&0b00000100: phai1(); flag = 0;
break;
case 0b00000011&0b00000010: phai2(); flag = 0;
break;
case 0b00000001: phai3();flag = 0;
break;
case 0b00110000&0b00010000&0b01110000: trai0();flag = 1;
break;
case 0b01100000&0b00100000: trai1();flag = 1;
break;
case 0b11000000&0b01000000: trai2();flag = 1;
break;
case 0b10000000: trai3();flag = 1;
break;

22
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

case 0b00000000:
if(flag == 1)

{
phai4();
}
else if(flag ==0)
{
trai4();
}
else if(flag == 2 )
{
dung_lai();
}
break;
}
}
void main()
{
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|sAN7|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,255,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
while(true)
{
do_duong();
}
}


23
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ

3.8. Chức năng của PIC 16F887 sử dụng trong đề tài
 Nhận các tín hiệu từ cảm biến truyền về.
 Chứa các thông tin và xử lý mọi hoạt động của robot.
 Điều khiển động cơ thông qua IC L298
3.9.

Mạch điều khiển động cơ

Hình 7: Mạch điều khiển động cơ
Mạch sử dụng IC L298 và nguồn sử dụng là 5v.
- L298 là một IC tích hợp nguyên khối gồm 2 mạch cầu H bên trong. Với điện áp làm
tăng công suất đầu ra từ 5v – 47v, dòng lên đến 4A, L298 rất thích hợp trong những
ứng dụng công suất nhỏ như động cơ DC loại vừa…

24
BÁO CÁO ĐỀ TÀI THỰC TẬP


TRƯỜNG ĐHCN HÀ NỘI

KHOA: ĐIỆN TỬ


Hình 8: Sơ đồ IC L298
Chức năng của các chân của L298:
-

4 chân INPUT: IN1, IN2, IN3, IN4 được nối lần lượt với các chân 5, 7, 10, 12 của
L298. Đây là các chân nhận tín hiệu điều khiển.
4 chân OUTPUT: OUT1, OUT2, OUT3, OUT4 (tương ứng với các chân INPUT)
được nối với các chân 2, 3, 13, 14 của L298. Các chân này xẽ được nối với động cơ.
2 chân ENA và ENB dùng để điều khiển các mạch cầu H trong L298. Nếu ở mức
logic 1 thì cho phép mạch cầu H hoạt động, còn ở mức 0 thì mạch cầu không hoạt
động.

25
BÁO CÁO ĐỀ TÀI THỰC TẬP


×