Tải bản đầy đủ (.pdf) (39 trang)

ĐỒ ÁN TỐT NGHIỆP HỆ THỐNG QUẢN LÝ BÃI ĐỖ XE (CÓ KÈM FILE CODE)

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.23 MB, 39 trang )

BỘ THÔNG TIN & TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG
Khoa Kỹ Thuật Điện Tử 1
------------

BÁO CÁO ĐỒ ÁN
Môn học: Đồ án thiết kế hệ thống số
Đề tài:
Hệ thống quản lý bãi đỗ xe
Giảng viên hướng dẫn: Nguyễn Ngọc Minh

Hà Nội, 2022


Nhận xét của giáo viên hướng dẫn
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
Hà Nội, Ngày Tháng Năm 2022
Giáo Viên hướng dẫn


MỤC LỤC
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT ................................................................ 1


1.1 Khái niệm về Vi xử lý và Vi điều khiển ................................................... 1
1.1.1 Vi xử lý ................................................................................................ 1
1.1.2 Vi điều khiển(microcontroller) ............................................................ 3
1.1.3 Đặc điểm nổi bật của STM32 .............................................................. 4
1.2 Hệ điều hành thời gian thực (Real-time operating system) ...................... 6
1.3 Giao thức kết nối ....................................................................................... 8
1.3.1 Giao thức UART .................................................................................. 8
1.3.2 Giao thức I2C ..................................................................................... 14
CHƯƠNG 2. THIẾT KẾ HỆ THỐNG ......................................................... 18
2.1 Phần cứng vật lý ...................................................................................... 18
2.1.1 Khối nguồn ......................................................................................... 18
2.1.2 Khối đầu vào ...................................................................................... 18
2.1.3 Khối đầu ra ......................................................................................... 22
2.1.4 Khối xử lý (vi điều khiển STM32F103C8T6) ................................... 24
2.2 Hệ điều hành µC/OS ............................................................................... 26
2.2.1 Quản lý miền găng ............................................................................. 26
2.2.2 Cấu trúc và các trạng thái của các tác vụ ........................................... 26
2.2.3 Lập lịch tác vụ .................................................................................... 28
2.2.4 Ngắt trong µC/OS .............................................................................. 28
2.2.5 Nhịp đồng hồ ...................................................................................... 29
2.2.6 Khởi động hệ thống µC/OS ............................................................... 29
CHƯƠNG 3. XÂY DỰNG HỆ THỐNG ....................................................... 30
3.1 Sơ đồ nguyên lý....................................................................................... 30
3.2 Mơ hình thực tế ....................................................................................... 33


DANH MỤC HÌNH ẢNH, SƠ ĐỒ…
Hình 1.1. Các loại cấu trúc ................................................................................... 2
Hình 1.2.Vi điều khiển .......................................................................................... 3
Hình 1.3. Sơ đồ kết nối UART.............................................................................. 9

Hình 1.4. Gói packet ........................................................................................... 11
Hình 1.5. Start bit ................................................................................................ 11
Hình 1.6. Data Frame .......................................................................................... 11
Hình 2.1. Hình thực tế esp8266 .......................................................................... 18
Hình 2.2. Cảm biến vật cản hồng ngoại LM393 ................................................. 20
Hình 2.3. Shematic LM393 ................................................................................. 20
Hình 2.4. Chip STM32F103C8TX...................................................................... 25
Sơ đồ 2.1. Sơ đồ khối .......................................................................................... 18
Sơ đồ 2.2. Sơ đồ chân esp8266 ........................................................................... 19
Sơ đồ 2.3. Sơ đồ cảm biến vật cản hồng ngoại ................................................... 21
Sơ đồ 2.4. Sơ đồ chân LCD................................................................................. 22
Sơ đồ 3.1. Sơ đồ ngun lý ................................................................................. 30
Mơ hình 3.1. Mơ hình thực tế TÀI LIỆU THAM KHẢO ................................ 33


LỜI MỞ ĐẦU
Ngành điện tử ngày càng phát triển, đã dần thay thế các thiết bị thô sơ,bằng
các thiết bị điện tử có độ tự động rất cao,tiết kiệm cơng sức cho con người. Hiện
nay với sự phát triển của vi điều khiển thì chỉ cần động tác nhẹ nhàng các thiết bị
đã được điều khiển một cách nhanh chống
Người ta thường nói : “Học đi đơi với hành” , vì thế để tạo nền tảng , tăng
thêm hiểu biết cũng như đi vào thực tế em đã lựa chọn đề tài “Quản lý bãi đỗ xe
thơng minh”.
Trong q trình thực hiện đề tài này , Chúng em đã rất cố gắng , nhưng có
lẽ do vốn kiến thức cũng như những nguyên nhân chủ quan khác mà đề tài chắc
chắn sẽ khơng tránh khỏi thiếu sót . Chúng em rất mong sự đóng góp ý kiến, phê
bình và hướng dẫn thêm của thầy cô và các bạn đọc.

Sinh viên thực hiện



CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1 Khái niệm về Vi xử lý và Vi điều khiển
1.1.1 Vi xử lý
Bộ vi xử lý (microprocessor) là một máy tính nhỏ hoặc CPU (đơn vị xử lý
trung tâm) được sử dụng để tính toán, thực hiện phép toán logic, kiểm soát hệ
thống và lưu trữ dữ liệu vv. Vi xử lý sẽ xử lý các dữ liệu đầu vào / đầu ra
(input/output) thiết bị ngoại vi và đưa ra kết quả trở lại để chúng hoạt động.
Dòng vi xử lý 4 bit đầu tiên được Intel sản xuất vào tháng 11/1971 với tên gọi là
4004.

Các loại cấu trúc:

1


Hình 1.1. Các loại cấu trúc

+ Các vi xử lý đầu tiên sử dụng cấu trúc Von-Neumann. Trong cấu trúc
Von Neumann bộ nhớ dữ liệu và bộ nhớ chương trình được đặt trong một
bộ nhớ. Để xử lý một lệnh từ bộ nhớ hoặc yêu cầu từ I / O, nó nhận được
lệnh thơng qua bus từ bộ nhớ hoặc I / O, và đặt vào thanh ghi, xử lý nó
trong các thanh ghi. Bộ xử lý có thể lưu kết quả trong bộ nhớ thông qua
các bus. Nhưng kiến trúc này có một số nhược điểm như chậm và q
trình truyền dữ liệu khơng đồng thời xảy ra cùng một lúc bởi vì chia sẻ
cùng một bus chung.
+ Sau này cấu trúc Harvard (Atmega328, Atmega168,... Arduino đang
dùng) được phát triển. Trong cấu trúc Harvard bộ nhớ dữ liệu và bộ nhớ
chương trình và các bus được tách biệt với nhau. Ngồi ra cịn có hai loại
CPU micro programming và hardwired programming. Microprogramming

còn chậm khi so sánh với hardwired programming.
+ Kiến trúc tập lệnh Complex Instruction Set Computer:
2


Complex instruction set computer (CISC) là tập lệnh phức tạp nên sẽ tốn nhiều
thời gian để thực hiện; tập lệnh phức tạp có thể bao gồm q trình xử lý
opcode và các toán hạng …vv tốc độ thực hiện lệnh sẽ chậm. Cấu trúc
X86 là một ví dụ.
+ Reduced Instruction Set Computer: Reduced Instruction Set Computer
(RISC) là tập lệnh thu gọn và tốc độ thực hiện nhanh. Việc thực hiện rất
đơn giản và không yêu cầu cấu trúc phức tạp. RISC được sử dụng rộng rãi
trong -các ứng dụng hệ thống nhúng. SHARC và PowerPC sử dụng RISC.
Bộ vi xử lý thường được dùng trong các ứng dụng nhỏ. Tùy theo các ứng
dụng và thiết bị ngoại vi bạn đang sử dụng mà có thể chọn bộ vi xử lý cần thiết
để thực hiện.
1.1.2 Vi điều khiển(microcontroller)
Nó cũng là một máy tính nhỏ, trong đó CPU, bộ nhớ (RAM, ROM), I / O
thiết bị ngoại vi, timers, counters, được nhúng vào trong một mạch tích hợp (IC)
nơi mà các bộ vi xử lý và tất cả các khối này được kết hợp vào trong một board
thông qua hệ thống bus. Vi điều khiển có thể dễ dàng giao tiếp với thiết bị ngoại
vi bên ngoài như cổng nối tiếp, ADC, DAC, Bluetooth, Wi-Fi, …vv quá trình
giao tiếp nhanh hơn khi so sánh với các bộ vi xử lý. Hầu hết các vi điều khiển sử
dụng cấu trúc RISC. Ngoài ra cịn có một số vi điều khiển sử dụng cấu trúc
CISC như 8051, motorolla, vv

Hình 1.2.Vi điều khiển

3



1.1.3 Đặc điểm nổi bật của STM32
Những đặc điểm nổi trội của dòng ARM Cortex đã thu hút các nhà sản xuất
IC, hơn 240 dòng vi điều khiển dựa vào nhân Cortex đã được giới thiệu. Khơng
nằm ngồi xu hướng đó, hãng sản xuất chip ST Microelectronic đã nhanh chóng
đưa ra dòng STM32F1. STM32F1 là vi điều khiển dựa trên nền tảng lõi ARM
Cortex-M3 do hãng ARM thiết kế. Lõi ARM Cortex-M3 là sự cải
tiến từ lõi ARM7 truyền thống từng mang lại thành công vang dội cho công ty
ARM.
STM đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9,
nhưng STM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất
(price/performance), giá chỉ gần 1 Euro với số lượng lớn, STM32 là sự thách
thức thật sự với các vi điều khiển 8 và 16-bit truyền thống. STM32 đầu tiên gồm
14 biến thể khác nhau, được phân thành hai dòng: dòng Performance có tần số
hoạt động của CPU lên tới 72Mhz và dịng Access có tần số hoạt động lên tới
36Mhz. Các biến thể STM32 trong hai nhóm này tương thích hồn tồn về cách
bố trí chân (pin) và phần mềm, đồng thời kích thước bộ nhớ FLASH ROM có
thể lên tới 512K và 64K SRAM.
-

Sự tinh vi

Thoạt nhìn thì các ngoại vi của STM32 cũng giống như những vi điều
khiển khác, như hai bộ chuyển đổi ADC, timer, I2C, SPI, CAN, USB và RTC.
Tuy nhiên mỗi ngoại vi trên đều có rất nhiều đặc điểm thú vị. Ví dụ như bộ
ADC 12-bit có tích hợp một cảm biến nhiệt độ để tự động hiệu chỉnh khi nhiệt
độ thay đổi và hỗ trợ nhiều chế độ chuyển đổi. Mỗi bộ định thời có 4 khối
capture compare (dùng để bắt sự kiện với tính năng input capture và tạo dạng
sóng ở ngõ ra với output compare), mỗi khối định thời có thể liên kết với các
khối định thời khác để tạo ra một mảng các định thời tinh vi hơn. Một bộ định

thời cao cấp chuyên hỗ trợ điều khiển động cơ, với 6 đầu ra PWM với dead time
(khoảng thời gian được chèn vào giữa hai đầu tín hiệu xuất PWM bù nhau trong
điều khiển mạch cầu H) lập trình được và một đường break input (khi phát hiện
điều kiện dừng khẩn cấp) sẽ buộc tín hiệu PWM sang một trạng thái an toàn đã
được cài sẵn. Ngoại vi nối tiếp SPI có một khối kiểm tổng (CRC) bằng phần
cứng cho 8 và 16 word hỗ trợ tích cực cho giao tiếp thẻ nhớ SD hoặc MMC.
4


STM32 có hỗ trợ thêm tối đa 12 kênh DMA (Direct Memory Access). Mỗi
kênh có thể được dùng để truyền dữ liệu đến các thanh ghi ngoại vi hoặc từ các
thanh ghi ngoại vi đi với kích thước từ (word) dữ liệu truyền đi có thể là 8/16
hoặc 32-bit. Mỗi ngoại vi có thể có một bộ điều khiển DMA (DMA controller)
đi kèm dùng để gửi hoặc đòi hỏi dữ liệu như yêu cầu. Một bộ phân xử bus nội
(bus arbiter) và ma trận bus (bus matrix) tối thiểu hoá sự tranh chấp bus giữa
truy cập dữ liệu thông qua CPU (CPU data access) và các kênh DMA. Điều đó
cho phép các đơn vị DMA hoạt động linh hoạt, dễ dùng và tự động điều khiển
các luồng dữ liệu bên trong vi điều khiển.
STM32 là một vi điều khiển tiêu thụ năng lượng thấp và đạt hiệu suất cao.
Nó có thể hoạt động ở điện áp 2V, chạy ở tần số 72MHz và dịng tiêu thụ chỉ có
36mA với tất cả các khối bên trong vi điều khiển đều được hoạt động. Kết hợp
với các chế độ tiết kiệm năng lượng của Cortex, STM32 chỉ tiêu thụ 2μA khi ở
chế độ Standby. Một bộ dao động nội RC 8MHz cho phép chip nhanh chóng
thốt khỏi chế độ tiết kiệm năng lượng trong khi bộ dao động ngoài đang khởi
động. Khả năng nhanh đi vào và thoát khỏi các chế độ tiết kiệm năng lượng làm
giảm nhiều sự tiêu thụ năng lượng tổng thể.
-

Sự an toàn


Ngày nay các ứng dụng hiện đại thường phải hoạt động trong mơi trường
khắc khe, địi hỏi tính an tồn cao, cũng như địi hỏi sức mạnh xử lý và càng
nhiều thiết bị ngoại vi tinh vi. Để đáp ứng các yêu cầu khắc khe đó, STM32
cung cấp một số tính năng phần cứng hỗ trợ các ứng dụng một cách tốt nhất.
Chúng bao gồm một bộ phát hiện điện áp thấp, một hệ thống bảo vệ xung Clock
và hai bộ Watchdogs. Bộ đầu tiên là một Watchdog cửa sổ (windowed
watchdog). Watchdog này phải được làm tươi trong một khung thời gian xác
định. Nếu nhấn nó q sớm, hoặc q muộn, thì Watchdog sẽ kích hoạt. Bộ thứ
hai là một Watchdog độc lập (independent watchdog), có bộ dao động bên ngoài
tách biệt với xung nhịp hệ thống chính. Hệ thống bảo vệ xung nhịp có thể phát
hiện lỗi của bộ dao động chính bên ngồi (thường là thạch anh) và tự động
chuyển sang dùng bộ dao động nội RC 8MHz.
-

Tính bảo mật

5


Một trong những yêu cầu khắc khe khác của thiết kế hiện đại là nhu cầu
bảo mật mã chương trình để ngăn chặn sao chép trái phép phần mềm. Bộ nhớ
Flash của STM32 có thể được khóa để chống truy cập đọc Flash thơng qua cổng
Debug. Khi tính năng bảo vệ đọc được kích hoạt, bộ nhớ Flash cũng được bảo
vệ chống ghi để ngăn chặn mã không tin cậy được chèn vào bảng vector ngắt.
Hơn nữa bảo vệ ghi có thể được cho phép trong phần cịn lại của bộ nhớ Flash.
STM32 cũng có một đồng hồ thời gian thực và một khu vực nhỏ dữ liệu trên
SRAM được ni nhờ nguồn pin. Khu vực này có một đầu vào chống giả mạo
(anti-tamper input), có thể kích hoạt một sự kiện ngắt khi có sự thay đổi trạng
thái ở đầu vào này. Ngoài ra một sự kiện chống giả mạo sẽ tự động xóa dữ liệu
được lưu trữ trên SRAM được nuôi bằng nguồn pin.

- Phát triển phần mềm
Nếu bạn đã sử dụng một vi điều khiển dựa trên lõi ARM, thì các cơng cụ
phát triển cho ARM hiện có đã được hỗ trợ tập lệnh Thumb-2 và dịng Cortex.
Ngoài ra ST cũng cung cấp một thư viện điều khiển thiết bị ngoại vi, một bộ thư
viện phát triển USB như là một thư viện ANSI C và mã nguồn đó là tương thích
với các thư viện trước đó được công bố cho vi điều khiển STR7 và STR9. Có rất
nhiều RTOS mã nguồn mở và thương mại và middleware (TCP/IP, hệ thống tập
tin, v.v.) hỗ trợ cho họ Cortex. Dòng Cortex-M3 cũng đi kèm với một hệ thống
gỡ lỗi hoàn toàn mới gọi là CoreSight. Truy cập vào hệ thống CoreSight thông
qua cổng truy cập Debug (Debug Access Port), cổng này hỗ trợ kết nối chuẩn
JTAG hoặc giao diện 2 dây (serial wire-2 Pin), cũng như cung cấp trình điều
khiển chạy gỡ lỗi, hệ thống CoreSight trên STM32 cung cấp hệ thống điểm truy
cập(data watchpoint) và một công cụ theo dõi (instrumentation trace). Cơng cụ
này có thể gửi thông tin về ứng dụng được lựa chọn đến công cụ gỡ lỗi. Điều
này có thể cung cấp thêm các thơng tin gỡ lỗi và cũng có thể được sử dụng trong
quá trình thử nghiệm phần mềm.
1.2 Hệ điều hành thời gian thực (Real-time operating system)
Thời gian thực là một khái niệm rất khó định nghĩa. Theo nghĩa đen, hệ thống
phải phản ứng tức thì, thích hợp theo u cầu. Theo đúng ý nghĩa, thời gian thực
của một sự kiện nghĩa là nó xảy ra ngay lập tức. Một ví dụ khi ta chuyển khoản
tiền giữa các tài khoản, đối với một hệ thống thời gian thực, chúng ta sẽ được cập
nhật tài khoản ngay lập tức.Tuy nhiên, đối với một hệ thống không phải thời gian
6


thực, việc xử lý sẽ được thực hiện vào cuối mỗi ngày, do đó việc cập nhật có thể
phải đợi đến ngày hơm sau.Một ví dụ khác là một hệ thống đa phương tiện, khi
chơi các file media, hệ thống này phải đủ khả năng xử lý video, audio đúng theo
thời gian của chuẩn dữ liệu, nếu không, sẽ xảy ra hiện tượng giật hình, trễ tiếng,
trễ hình hoặc các lỗi khác.

Ngoài việc phản ứng đủ nhanh, hệ thống thời gian thực cần phải tin cậy và
chính
xác. Đối với các hệ thống điều khiển như trong ô tô, trong dây chuyển sản xuất,
độ chính xác rất quan trọng.
Tùy theo mức độ của yêu cầu về thời gian, hệ thống thời gian thực có thể phân
thành thời gian thực cứng (hard real-time) hay thời gian thực mềm (soft real-time):
Thời gian thực cứng (hard real-time): Một hệ thống thời gian thực
cứng cần một sự đảm bảo về thời gian đáp ứng trong trường hợp xấu nhất.
Cả hệ thống bao gồm hệ điều hành, ứng dụng, phần cứng, …. phải được
thiết kế đảm bảo các yêu cầu vềthời gian đáp ứng. Thời gian đáp ứng có
thể là ms, ns nhưng chúng phải ln được đảm bảo. Nếu khơng có thể sẽ
có những hậu quả nghiêm trọng đối với hệ thống. Vídụ như các hệ thống
quốc phòng, các hệ thống điều khiển xe cộ hoặc máy bay, các hệ thống
thu thập dữ liệu, các thiết bị y tế…
Thời gian thực mềm (soft real-time): Đối với hệ thống thời gian thực
mềm,việc đáp ứng yêu cầu về thời gian khơng phải lúc nào cũng cần
thiết.Ví dụ như hệ thốngxem phim, thỉnh thoảng có thể hệ thống bị treo,
hoặc giật hình. Những sự cố này khơng có hậu quả lớn. Tuy nhiên nếu hệ
thống không phản ứng đúng thời gian quá nhiều lần, hệ thống có thể coi
như khơng đạt u cầu. Ví dụ như thoạiVoIP, hệ thống audio, video…
POSIX 1003.1b định nghĩa thời gian thực cho hệ điều hành là khả
năng của hệ điều hành để cung cấp mức độ của dịch vụ trong một thời
gian giới hạn. Các đặc tính sau có thể được gắn với hệ thống thời gian
thực:
+ Đa nhiệm/Đa luồng (Multitasking/multithreading): Một hệ điều hành
thời gian thực phải có khả năng xử lý đa nhiệm và đa luồng.

7



+ Cơ chế ưu tiên (Priorities): Hệ điều thành thời gian thực phải có cơ
chế ưu tiên cho các tác vụ. Các chức năng có yêu cầu giới hạn về thời
gian cao cần được ưu tiên xử lý.
+ Thừa kế ưu tiên (Priority inheritance): Hệ điều thành thời gian thực
phải có cơ chế thừa kế ưu tiên.
+ Chiếm quyền (Preemption): Hệ điều hành thời gian thực cần có tính
năng chiếm quyền, có nghĩa là khi một tác vụ có mức ưu tiên cao hơn
sẵn sàng chạy, nó có thể chiếm quyền của một tác vụ có mức ưu tiên
thấp hơn.
+ Trễ ngắt (Interrupt latency): Thời gian trễ ngắt là thời gian từ khi một
ngắt từ phần cứng xảy ra đến khi hàm xử lý ngắt chạy. Một hệ điều hành
thời gian thực cần có trễ ngắt có thể đốn được và thường càng nhỏ
càng tốt.
+ Trễ lập lịch (Scheduler latency): Đây là thời gian bắt đầu từ khi tác
vụ có khả năng chạy đến khi tác vụ thực sự chạy. Một hệ điều hành thời
gian thực cần có trễ lập lịch có thể xác định được.
+ Đồng bộ và thơng tin giữa các process (Interprocess communication
and synchronization): Kiểu thông tin phổ biến nhất giữa các tác vụ trong
một hệ thống nhúng là gửi các bản tin. Một hệ điều hành thời gian thực
cần có một cơ chế xử lý bản tin ở thời gian không đổi.
+ Phân phối bộ nhớ động (Dynamic memory allocation): Một hệ điều
hành thờigian thực cần cung cấp các hàm cung cấp bộ nhớ với thời gian
cố định.
1.3 Giao thức kết nối
Giao thức truyền thơng đóng một vai trò quan trọng trong việc tổ chức giao
tiếp giữa các thiết bị. Nó được thiết kế theo nhiều cách khác nhau dựa trên các
yêu cầu của hệ thống và các giao thức này có một quy tắc cụ thể được thống nhất
giữa các thiết bị để việc truyền dữ liệu được thực hiện thành công.
1.3.1 Giao thức UART
Các hệ thống nhúng, vi điều khiển và máy tính hầu hết sử dụng UART như

một dạng giao thức giao tiếp phần cứng giữa thiết bị và thiết bị. Trong số các giao
thức truyền thơng hiện có, UART chỉ sử dụng hai dây cho bên truyền và bên nhận.
8


Mặc dù là một phương pháp giao thức truyền thông phần cứng được sử dụng
rộng rãi, nhưng nó khơng phải lúc nào cũng được tối ưu hóa hồn tồn. Việc thực
hiện đúng giao thức khung truyền thường bị bỏ qua khi sử dụng module UART
bên trong bộ vi điều khiển.
Theo định nghĩa, UART là một giao thức truyền thông phần cứng sử dụng giao
tiếp nối tiếp không đồng bộ với tốc độ có thể định cấu hình. Khơng đồng bộ có
nghĩa là khơng có tín hiệu đồng hồ để đồng bộ hóa các bit đầu ra từ thiết bị truyền
đi đến bên nhận.
Trong giao tiếp UART, hai UART giao tiếp trực tiếp với nhau. UART truyền
chuyển đổi dữ liệu song song từ một thiết bị điều khiển như CPU thành dạng nối
tiếp, truyền nó nối tiếp đến UART nhận, sau đó chuyển đổi dữ liệu nối tiếp trở lại
thành dữ liệu song song cho thiết bị nhận.

Hình 1.3. Sơ đồ kết nối UART

Hai đường dây mà mỗi thiết bị UART sử dụng để truyền dữ liệu đó là:


Transmitter (Tx)



Receiver (Rx)

UART truyền dữ liệu khơng đồng bộ, có nghĩa là khơng có tín hiệu đồng hồ

để đồng bộ hóa đầu ra của các bit từ UART truyền đến việc lấy mẫu các bit bởi
UART nhận. Thay vì tín hiệu đồng hồ, UART truyền thêm các bit start và stop
vào gói dữ liệu được chuyển. Các bit này xác định điểm bắt đầu và điểm kết thúc
của gói dữ liệu để UART nhận biết khi nào bắt đầu đọc các bit.
Khi UART nhận phát hiện một bit start, nó bắt đầu đọc các bit đến ở một tần
số cụ thể được gọi là tốc độ truyền (baud rate). Tốc độ truyền là thước đo tốc độ
truyền dữ liệu, được biểu thị bằng bit trên giây (bps – bit per second). Cả hai
9


UART đều phải hoạt động ở cùng một tốc độ truyền. Tốc độ truyền giữa UART
truyền và nhận chỉ có thể chênh lệch khoảng 10% trước khi thời gian của các bit
bị lệch quá xa.
Cả hai UART cũng phải được cấu hình để truyền và nhận cùng một cấu trúc
gói dữ liệu.
Số lượng dây sử dụng
Tốc độ truyền

2
9600, 19200, 38400, 57600, 115200, 230400,
460800, 921600, 1000000, 1500000

Phương pháp truyền

Bất đồng bộ

Truyền nối tiếp hay song song?

Nối tiếp


Số lượng thiết bị chủ tối đa

1

Số lượng thiết bị tớ tối đa

1

• Cách thức hoạt động của giao tiếp UART
UART sẽ truyền dữ liệu nhận được từ một bus dữ liệu (Data Bus). Bus dữ liệu
được sử dụng để gửi dữ liệu đến UART bởi một thiết bị khác như CPU, bộ nhớ
hoặc vi điều khiển. Dữ liệu được chuyển từ bus dữ liệu đến UART truyền ở dạng
song song. Sau khi UART truyền nhận dữ liệu song song từ bus dữ liệu, nó sẽ
thêm một bit start, một bit chẵn lẻ và một bit stop, tạo ra gói dữ liệu. Tiếp theo,
gói dữ liệu được xuất ra nối tiếp từng bit tại chân Tx. UART nhận đọc gói dữ liệu
từng bit tại chân Rx của nó. UART nhận sau đó chuyển đổi dữ liệu trở lại dạng
song song và loại bỏ bit start, bit chẵn lẻ và bit stop. Cuối cùng, UART nhận
chuyển gói dữ liệu song song với bus dữ liệu ở đầu nhận.

10


Dữ liệu truyền qua UART được tập hợp thành gói (packet). Mỗi gói chứa 1 bit
start, 5 đến 9 bit dữ liệu (tùy thuộc vào UART), một bit chẵn lẻ (parity bit) tùy
chọn và 1 hoặc 2 bit stop.

Hình 1.4. Gói

packet


Start bit (Bit bắt đầu)
Đường truyền dữ liệu UART thường được giữ ở mức điện áp cao khi nó khơng
truyền dữ liệu. Để bắt đầu truyền dữ liệu, UART truyền sẽ kéo đường truyền từ
mức cao xuống mức thấp trong một chu kỳ đồng hồ. Khi UART nhận phát hiện
sự chuyển đổi điện áp cao xuống thấp, nó bắt đầu đọc các bit trong khung dữ liệu
ở tần số của tốc độ truyền.

Hình 1.5. Start

bit

Data Frame (Khung dữ liệu)
Khung dữ liệu chứa dữ liệu thực tế đang được truyền. Nó có thể dài từ 5 bit đến
8 bit nếu sử dụng bit chẵn lẻ. Nếu không sử dụng bit chẵn lẻ, khung dữ liệu có thể
dài 9 bit. Trong hầu hết các trường hợp, dữ liệu được truyền với bit có trọng số bé
nhất (LSB – Least Significant Bit) trước tiên.

Hình 1.6. Data

Frame

Parity Bit (Bit chẵn lẻ)
11


Tính chẵn lẻ mơ tả tính chẵn hoặc lẻ của một số. Bit chẵn lẻ là một cách để UART
nhận cho biết liệu có bất kỳ dữ liệu nào đã thay đổi trong q trình truyền hay
khơng. Bit có thể bị thay đổi bởi bức xạ điện từ, tốc độ truyền không khớp hoặc
truyền dữ liệu đường dài.
Sau khi UART nhận đọc khung dữ liệu, nó sẽ đếm số bit có giá trị là 1 và kiểm

tra xem tổng số là số chẵn hay lẻ. Nếu bit parity là 0 (even parity – parity chẵn),
thì tổng số bit 1 trong khung dữ liệu phải luôn là một số chẵn. Nếu bit parity là 1
(odd parity – parity lẻ) thì số tổng bit 1 trong khung dữ liệu là một số lẻ.
Khi bit chẵn lẻ khớp với dữ liệu, UART biết rằng q trình truyền khơng có lỗi.
Nhưng nếu bit chẵn lẻ là 0 và tổng là số lẻ, hoặc bit chẵn lẻ là 1 và tổng số là chẵn,
thì UART biết rằng các bit trong khung dữ liệu đã thay đổi.

Stop Bit (Bit kết thúc)
Để báo hiệu sự kết thúc của gói dữ liệu, UART gửi sẽ điều khiển đường truyền
dữ liệu từ điện áp thấp đến điện áp cao trong ít nhất hai khoảng thời gian bit.



Các bước truyền UART

B1: UART truyền nhận dữ liệu song song từ bus dữ liệu.

12


B2: UART truyền thêm bit start, bit chẵn lẻ và bit dừng vào khung dữ liệu.

B3: Tồn bộ gói được gửi nối tiếp từ UART truyền đến UART nhận. UART nhận
lấy mẫu đường dữ liệu ở tốc độ truyền được định cấu hình trước.

B4: UART nhận loại bỏ bit start, bit chẵn lẻ và bit stop khỏi khung dữ liệu.

B5: UART nhận chuyển đổi dữ liệu nối tiếp trở lại thành song song và chuyển nó
đến bus dữ liệu ở đầu nhận.


13


1.3.2 Giao thức I2C
I²C, viết tắt của từ tiếng Anh “Inter-Integrated Circuit”, là một loại bus nối tiếp
được
phát triển bởi hãng sản xuất linh kiện điện tử Philips. Ban đầu, loại bus này chỉ
được
dùng trong các linh kiện điện tử của Philips. Sau đó, do tính ưu việt và đơn giản
của
nó, I²C đã được chuẩn hóa và được dùng rộng rãi trong các mô đun truyền thông
nối
tiếp của vi mạch tích hợp ngày nay.
-

Cấu tạo và nguyên lý hoạt động

I²C sử dụng hai đường truyền tín hiệu:
• Một đường xung nhịp đồng hồ(SCL) chỉ do Master phát đi ( thông thường ở
100kHz
và 400kHz. Mức cao nhất là 1Mhz và 3.4MHz).
• Một đường dữ liệu(SDA) theo 2 hướng.
• Sơ đồ kết nối như hình dưới.
Có một lưu ý nhỏ về xung clock. Bản chất của I2C là dữ liệu trên đường SDA chỉ
được ghi nhận ở sườn lên của chân CLK. Do vậy xung clock có thể khơng cần
chính xác tốc độ là 1MHz hay 3.4Mhz. Lợi dụng điểm này có thể sử dụng 2 chân

14



GPIO để làm chân giao tiếp I2C mềm mà không nhất thiết cần một chân CLK tạo
xung với tốc độ chính xác
SCL và SDA ln được kéo lên nguồn bằng một điện trở kéo lên có giá trị xấp xỉ
4,7
KOhm (tùy vào từng thiết bị và chuẩn giao tiếp, có thể dao động trong khoảng
1KOhm đến 4.7 Kohm. Chú ý rằng theo cấu hình này, một thiết bị có thể ở mức
logic
LOW hay cao trở nhưng ko thể ở dạng HIGH => Chính trở pull up tạo ra mức
logic
HIGH).

Lý do là các chân này có dạng opendrain để có thể hoạt động ở các mức điện áp
logic khác nhau.
-

Các chế độ hoạt động của I²C

Dựa vào tốc độ ta chia làm 2 loại
• Chế độ chuẩn (standard mode) hoạt động ở tốc độ 100 Kbit/s.
• Chế độ tốc độ thấp (low-speed mode) hoạt động ở tốc độ 10 Kbit/s.
Nếu chia theo quan hệ chủ tớ:
• Một chủ một tớ.
15


• Một chủ nhiều tớ.
• Nhiều chủ nhiều tớ.
-

Quá trình truyền dữ liệu


• Thiết bị A (chủ) xác định đúng địa chỉ của thiết bị B (Tớ), cùng với việc xác
định địa chỉ, thiết bị A sẽ quyếtđịnh đọc hay ghi vào thiết bị tớ.
• Thiết bị A gửi gữi liệu tới thiết bị B
• Thiết bị A kết thúc q trình truyền dữ liệu.
• Khi A muốn nhận dữ liệu từ B, quá trình diễn ra tương tự, chỉ khác A sẽ nhận
dữ
liệu từ B.
Tần số xung nhịp đồng hồ có thể xuống 0 Hz.
-

Cách đánh địa chỉ

I²C sử dụng 7 bit để định địa chỉ, do đó trên một bus có thể định địa chỉ tới 112
nút,
16
địa chỉ cịn lại được sử dụng vào mục đích riêng. Bit còn lại quy định việc đọc
hay ghi dữ liệu (1 là write, 0 là read)
Ví dụ:
– Địa chỉ của một thiết bị là 0x20. Khi cần đọc vào thiết bị này thì thanh ghi sẽ có
giá trị 0x40 (thêm bit 0) cịn khi ghi thì giá trị là 0x41 (thêm vào 0).
Điểm mạnh của I²C chính là hiệu suất và sự đơn giản của nó: một khối điều khiển
trung tâm có thể điều khiển cả một mạng thiết bị mà chỉ cần hai lối ra điều khiển.
-

Định dạng dữ liệu truyền

Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗi
sườn lên của xung clock trên SCKL , Quá trình thay đổi bit dữ liệu xảy ra khi
SCL ở mức thấp.

• Start = HIGH to LOW on SDA when SCL is HIGH
• Stop = LOW TO HIGH on SDA when SCL is HIGH
• Other when SCL low => Data!
Mỗi byte dữ liệu được truyền có độ dài là 8 bits. Số lượng byte có thể truyền trong
một lần là khơng hạn chế.
16


Mỗi byte được truyền sẽ chờ tín hiệu phản hồi là một bit ACK để báo hiệu đã
nhận dữ liệu. => Mỗi lần I2C sẽ truyền 8 bit và nhận 1 bit
Bit có trọng số cao nhất (MSB) sẽ được truyền đi đầu tiên, các bít sẽ được truyền
đi lần l ượt. Sau 8 xung clock trên dây SCL, 8 bit dữ liệu đã được truyền đi. Lúc
này thiết bị nhận, sau khi đã nhận đủ 8 bít dữ liệu sẽ kéo SDA xuống mức thấp
tạo một xung ACK ứng với xung clock thứ 9 trên dây SDA để báo hiệu đã nhận
đủ 8 bit. Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình
truyền hoặc kết thúc.
Thuật toán truyền nhận dữ liệu:
B1: Host xác định thiết bị cần giao tiếp và chế độ giao tiếp là read hay là write.
việc này được thực hiện bằng cách gửi 7bit địa chỉ thiết bị và thêm bit cuối cùng,
0 nếuread và 1 nếu write.
B2: Reset chế độ bằng cách thực hiện liên tiếp việc start và stop.
B3: Gửi địa chỉ thanh ghi cần truy nhập của thiết bị c ng như chế độ read hay
write.
B4: Gửi hoặc nhận 1byte dữ liệu. Sau khi truyền 1byte dữ liệu, bên nhận đc dữ
liệu
sẽ
gửi lại 1bit ACK để xác nhận đã nhận được dữ liệu và tiếp tục truyền hoặc bit
NACK để báo nhận đc dữ liệu nhưng kết thúc quá trình truyên.
Chú ý: ASK là bit do slave truyền chứ ko phải do master truyền
Một byte truyền đi có kèm theo bit ACK là điều kiên bắt buộc, nhằm đảm bảo cho

quá trình truyền nhận được diễn ra chính xác. Khi khơng nhận được đúng địa chỉ
hay khi muốn kết thúc quá trình giao tiếp, thiết bị nhận sẽ gửi một xung Not‐ACK
(SDA ở mức cao) để báo cho thiết bị chủ biết, thiết bị chủ sẽ tạo xung STOP để
kết thúc hay lặp lại một xung START để bắt đầu quá trình mới.

17


CHƯƠNG 2. THIẾT KẾ HỆ THỐNG
2.1 Phần cứng vật lý

Sơ đồ 2.1. Sơ đồ khối

2.1.1 Khối nguồn
Cung cấp nguồn nuôi tất cả linh kiện trong mạch
2.1.2 Khối đầu vào
a. ESP8266
ESP8266 là một mạch vi điều khiển có thể giúp chúng ta điều khiển các thiết bị
điện tử.Thêm vào đó nó được tích hợp wi-fi 2.4GHz có thể dùng cho lập trình.

Hình 2.1. Hình thực tế esp8266

Thơng số kỹ thuật
18


Sơ đồ 2.2. Sơ đồ chân esp8266

-


WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n

-

Điện áp hoạt động: 3.3V

-

Điện áp vào: 5V thông qua cổng USB

Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire,
trừ chân D0)
Số chân Analog Input: 1 (điện áp vào tối đa 3.3V)
Bộ nhớ Flash: 4MB
Giao tiếp: Cable Micro USB ( tương đương cáp sạc điện thoại )
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
Lập trình trên các ngơn ngữ: C/C++, Micropython,…
b. Cảm biến vật cản hồng ngoại
Module cảm biến phát hiện vật cản hồng ngoại ln thích nghi với mơi trường
xung quanh, nó có một cặp mắt phát hiện tia hồng ngoại với một tần số nhất định,
khi phát hiện ra tia hồng ngoại của một vật cản bề mặt phản xạ sẽ nhận tín hiệu
và sử lý đèn báo màu xanh lá cây sẽ sáng đồng thời đầu cho tín hiệu ra ở mức
thấp. Hiệu quả phạm vi hoạt động từ 2 – 30cm, điệp áp làm việc 3,3v – 5v. Phạm
vi phát hiện của cảm biến có thể được điều chỉnh từ núm chiết áp thông qua một
Potentiometer, dễ lắp ráp, dễ dàng để sử dụng các tính năng, nó có thể được sử
dụng rộng rãi trong việc làm Robot tránh vật trở ngại,…

19



Hình 2.2. Cảm biến vật cản hồng ngoại LM393

Nguyên lý hoạt động

Hình 2.3. Shematic LM393

Cảm biến hồng ngoại có nhiều ứng dụng khác nhau từ robot đến tự động hóa.
Nguyên lí làm việc của cảm biến hồng ngoại như sau :
- Led hồng ngoại ln song ánh sang có bước song hồng ngoại, led thu bình
thường có nội trở rất lớn ( khoảng vài tram kohm), khi led thu nhận tia hồng
ngoại chiếu vào đủ lớn thì nội trở của nó giảm xuống, khoảng vài chục ohm.
- Khi có vật cản phía trước, những chum hồng ngoại sẽ đập vào vật cản và
phản xạ lại led thu thay đổi giá trị nội trở dẫn đến thay đổi mức điện áp ở đầu
vào không đảo ở Op amp. Khoảng cách càng gần sự thay dổi càng lớn. Khi
đó điện áp đầu vào không đảo được so sánh với giá trị điện áp không đổi được
ghim ở R3, nếu giá trị điệp áp đầu vào không đảo lớn hơn đầu đảo , op amp
sẽ xuất mức 1 (+Vcc), ngược lại thì xuất mức 0 (GND). Điện trở R1 , R2, R4
20


×