1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Đồ án tốt nghiệp Hệ thống kiểm soát người ra vào phòng tự động + code

27 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hệ thống kiểm soát người ra vào phòng tự động
Tác giả Nhóm 8
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Hệ thống nhúng
Thể loại Đồ án
Định dạng
Số trang 27
Dung lượng 1,44 MB
File đính kèm Hệ thống kiểm soát người ra vào phòng tự động.zip (23 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ngày nay, các hệ thống nhúng trở nên phổ biến và đóng vai trò quan trọng trong đời sống con người. Ví dụ quanh ta có rất nhiều sản phẩm nhúng như lò vi sóng, nồi cơm điện, điều hòa, điện thoại di động, ô tô, xe máy, máy bay, tàu thủy, các đầu đo, cơ cấu chấp hành thông minh, robot v.v… Ta có thể thấy hiện nay hệ thống nhúng có mặt ở mọi nơi trong cuộc sống quanh chúng ta.

Trang 1

BỘ THÔNG TIN VÀ TRUYỀN THÔNG

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

Trang 2

LỜI MỞ ĐẦU 3

I, Tổng quan về RTOS: 4

1.1 Khái niệm về RTOS: 4

1.2 Các thành phần trong RTOS và phương thức hoạt động: 4

II, FreeRTOS 9

2.1 Tổng quan về FreeRTOS 9

2.2 Các Task trong FreeRTOS 12

III, STM32F103C8T6 14

3.1 Giới thiệu sơ lược: 14

3.2 Cấu hình chi tiết của STM32F103C8T6: 15

3.3 Thông số kỹ thuật: 18

IV, Màn hình LCD 16x2 20

V, Cảm biến vật cản hồng ngoại 23

VI, Giao tiếp STM32F103C8T6 với LCD 16×2 thông qua moudle I2C 23

6.1 Kết nối MCU STM32 với LCD 23

6.2 Địa chỉ của Module I2C PCF8574 24

VII, Mạch nguyên lý, PCB, mạch thực tế 25

Trang 3

LỜI MỞ ĐẦU

Ngày nay, các hệ thống nhúng trở nên phổ biến và đóng vai trò quan trọng trong đời sống con người Ví dụ quanh ta có rất nhiều sản phẩm nhúng như lò vi sóng, nồi cơm điện, điều hòa, điện thoại di động, ô tô, xe máy, máy bay, tàu thủy, các đầu đo, cơ cấu chấp hành thông minh, robot v.v… Ta có thể thấy hiện nay hệ thống nhúng có mặt ở mọi nơi trong cuộc sống quanh chúng ta

Qua môn học hệ thống nhúng, chúng em đã hiểu thêm về các hệ thống nhúng trong thực tế, về đặc điểm, tính ưu việt cũng như tính ứng dụng của chúng đối với con người Với mong muốn làm rõ các kiến thức đã học và giới thiệu các ứng dụng cơ bản của hệ thống nhúng, nhóm chúng em đưa ra mô hình mạch đếm số người ra vào phòng tự động – một sản phẩm rất quen thuộc và có tính ứng dụng cao trong thực tế

Do thời tian thực hiện và kiến thức còn hạn chế nên còn nhiều sai sót trong quá trình thực hiện đề tài, nhóm chúng em rất mong nhận được sự bổ sung đóng góp của thầy và các bạn để đề tài hoàn thiện hơn

Chúng em xin chân thành cảm ơn thầy đã tận tình hướng dẫn, giảng dạy và giúp đỡ chúng em thực hiện đề tài này!

Sinh viên thực hiện đề tài

Nhóm 8

Trang 4

I, Tổng quan về RTOS:

1.1 Khái niệm về RTOS:

+ RTOS là viết tắt của cụm từ Real-time operating system hay hệ điều hành thời gian thực

thường được nhúng trong các dòng vi điều khiển dùng để điều khiển thiết bị một cách nhanh chóng và đa nhiệm (multi tasking)

+ Hệ điều hành thời gian thực (realtime): sinh ra cho các tác vụ cần sự phản hồi nhanh của

hệ thống, thường được nhúng trong các loại vi điều khiển và không có giao diện (GUI) tương tác với người dùng Chúng cần phản hồi nhanh bởi vì đa số các tác vụ tương tác với thiết bị, máy móc khác chứ không phải con người Các tài nguyên bên trong rất hữu hạn nên chỉ một sự chậm trễ cũng có thể làm hệ thống làm việc hoàn toàn sai lệch

1.2 Các thành phần trong RTOS và phương thức hoạt động:

+ Kernel hay còn gọi là Nhân có nhiệm vụ quản lý và điều phối các Task Mọi sự kiện

(Even) như ngắt, Timer, data truyền tới… đều qua Kernel xử lý để quyết định xem nên làm

gì tiếp theo Thời gian xử lý của Kernel thường rất nhanh nên độ trễ rất thấp

+ Task là một đoạn chương trình thực thi một hoặc nhiều vấn đề gì đó, được Kernel quản

lý Kernel sẽ quản lý việc chuyển đổi giữa các task, nó sẽ lưu lại ngữ cảnh của task sắp bị hủy và khôi phục lại ngữ cảnh của task tiếp theo bằng cách:

• Kiểm tra thời gian thực thi đã được định nghĩa trước (time slice được tạo ra bởi ngắt systick)

• Khi có các sự kiện unblocking một task có quyền cao hơn xảy ra (signal, queue, semaphore,…)

• Khi task gọi hàm Yield() để ép Kernel chuyển sang các task khác mà không phải chờ cho hết time slice

Trang 5

• Khi khởi động thì kernel sẽ tạo ra một task mặc định gọi là Idle Task

Một task trong RTOS thường có các trạng thái như sau:

• RUNNING: đang thực thi

• READY: sẵn sàng để thực hiện

• WAITING: chờ sự kiện

• INACTIVE: không được kích hoạt

+ Scheduler – Lập lịch: Đây là 1 thành phần của kernel quyết định task nào được thực thi

Có một số luật cho scheduling như:

Cooperative: giống với lập trình thông thường, mỗi task chỉ có thể thực thi khi task

đang chạy dừng lại, nhược điểm của nó là task này có thể dùng hết tất cả tài nguyên của CPU

Round-robin: mỗi task được thực hiện trong thời gian định trước (time slice) và

không có ưu tiên

Priority base: Task được phân quyền cao nhất sẽ được thực hiện trước, nếu các task

có cùng quyền như nhau thì sẽ giống với round-robin, các task có mức ưu tiên thấp hơn sẽ được thực hiện cho đến cuối time slice

Priority-based pre-emptive: Các task có mức ưu tiên cao nhất luôn nhường các task

có mức ưu tiên thấp hơn thực thi trước

+ Kết nối Inter-task & Chia sẻ tài nguyên: để hệ thống hoạt động ổn định các task cần

phải kết nối và trao đổi dữ liệu với nhau để có thể chia sẻ tài nguyên, một số khái niệm cần lưu ý:

Trang 6

Với Inter-task Communication:

• Signal Events – Đồng bộ các task

• Message queue – Trao đổi tin nhắn giữa các task trong hoạt động giống như FIFO

• Mail queue – Trao đổi dữ liệu giữa các task sử dụng hằng đợi của khối bộ nhớ Với Resource Sharing:

• Semaphores – Truy xuất tài nguyên liên tục từ các task khác nhau

• Mutex – Đồng bộ hóa truy cập tài nguyên sử dụng Mutual Exclusion

+ Signal event được dùng để đồng bộ các task, ví dụ như bắt task phải thực thi tại một sự

kiện nào đó được định sẵn Mỗi task có thể được gán tối đa là 32 signal event

+ Message queue – Hàng đợi tin nhắn là cơ chế cho phép các task có thể kết nối với nhau,

nó là một FIFO ( First In First Out) buffer được định nghĩa bởi độ dài (số phần tử mà buffer

có thể lưu trữ) và kích thước dữ liệu (kích thước của các thành phần trong buffer)

Task có thể ghi vào hằng đợi (queue)

• Task sẽ bị khóa (block) khi gửi dữ liệu tới một message queue đầy đủ

• Task sẽ hết bị khóa (unblock) khi bộ nhớ trong message queue trống

• Trường hợp nhiều task mà bị block thì task với mức ưu tiên cao nhất sẽ được unblock trước

Task có thể đọc từ hằng đợi (queue)

• Task sẽ bị block nếu message queue trống

• Task sẽ được unblock nếu có dữ liệu trong message queue

• Tương tự ghi thì task được unblock dựa trên mức độ ưu tiên

Trang 7

+ Mail queue truyền dữ liệu sẽ được truyền dưới dạng khối(memory block) thay vì dạng

đơn Mỗi memory block thì cần phải cấp phát trước khi đưa dữ liệu vào và giải phóng sau khi đưa dữ liệu ra

Thao tác gửi dữ liệu với mail queue

1 Cấp phát bộ nhớ từ mail queue cho dữ liệu được đặt trong mail queue

2 Lưu dữ liệu cần gửi vào bộ nhớ đã được cấp phát

3 Đưa dữ liệu vào mail queue

Thao tác nhận dữ liệu trong mail queue bởi task khác

1 Lấy dữ liệu từ mail queue, sẽ có một hàm để trả lại cấu trúc/ đối tượng

2 Lấy con trỏ chứa dữ liệu

3 Giải phóng bộ nhớ sau khi sử dụng dữ liệu

Trang 8

+ Semaphore Được sử dụng để đồng bộ task với các sự kiện khác trong hệ thống Có 2

loại:

Binary semaphore: Semaphore là một mã thông báo giống như một mã thông báo cho phép

một tác vụ thực hiện việc thực thi nếu tác vụ nhận được semaphore Nếu không, tác vụ vẫn

ở trạng thái khối và không thể thực thi trừ khi nó có được semaphore nhị phân

• Có duy nhất 1 token

• Chỉ có 1 hoạt động đồng bộ

Counting semaphore: đưa ra các Token cho các Task sử dụng tài nguyên, nếu tài nguyên

được sử dụng hết thì các Task còn lại sẽ phải chờ đến khi Tài nguyên được giải phóng trở lại Couting semaphore được dùng để:

• Count value là khác nhau giữa số sự kiện xảy ra và số sự kiện được thực thi

• Trong trường hợp counting event thì semaphore được khởi tạo giá trị đếm bằng 0 Resource management

• Count value sẽ chỉ ra số resource sẵn có

Trang 9

• Để điều khiển và kiểm soát được resource của task dựa trên count value của semaphore(giá trị giảm), nếu count value giảm xuống bằng 0 nghĩa là không có resource nào free

• Khi một task finish với resource thì nó sẽ give semaphore trở lại để tăng count value của semaphore

• Trong trường hợp resouce management thì count value sẽ bằng với giá trị max của count value khi semaphore được tạo

+ Mutex: Sử dụng cho việc loại trừ (mutial exclution), hoạt động như là một token để bảo

vệ tài nguyên được chia sẻ Một task nếu muốn truy cập vào tài nguyên chia sẻ

• Cần yêu cầu (đợi) mutex trước khi truy cập vào tài nguyên chia sẻ (Sharing Resourse)

• Đưa ra token khi kết thúc với tài nguyên

Tại mỗi một thời điểm thì chỉ có 1 task có được mutex Những task khác muốn cùng mutex thì phải block cho đến khi task cũ thả mutex ra Về cơ bản thì Mutex giống như binary semaphore nhưng được sử dụng cho việc loại trừ chứ không phải đồng bộ

II, FreeRTOS

2.1 Tổng quan về FreeRTOS

- Để sử dụng được FreeRTOS, cách cơ bản nhất là bạn phải biết sử dụng các API(nói dễ

hiểu là các hàm được cung cấp sẵn) của nó, dưới đây là bảng tổng quan về các API của

FreeRTOS và mô tả cụ thể

Phân loại API FreeRTOS API Mô tả

Control task vTaskDelay Delay task

Trang 10

Phân loại API FreeRTOS API Mô tả

vTaskPrioritySet Set quyền cho task

vTaskSuspend Suspend task

vTaskResume Tiếp tục task

Control kernel vTaskStartScheduler Start kernel scheduler

vTaskSuspendAll Suspend taats cả task

xTaskResumeAll Tiếp tục taất cả task

taskYIELD Foce chuyển đổi context

taskENTER_CRITICAL Vào critical section(dùng context switching)

taskEXIT_CRITICAL Thoát khỏi critical section

Messagequeues xQueueCreate Tạo một queue

xQueueSend Gửi data vào queue

xQueueReceive Nhận data từ queue

Semaphores xSemaphoreCreateBinary Tạo một binary semaphore

xSemaphoreCreateCounting Tạo một counting semaphore

xSemaphoreCreateMutex Tạo một mutex semaphore

xSemaphoreTake Take semaphore

xSemaphoreGive Give semaphore

Trang 11

Phân loại API FreeRTOS API Mô tả

xTimerStart Start timer

Download thư viện FreeRTOS tại đây: https://freertos.org/

Link hướng dẫn cài đặt và cấu hình cơ bản kèm ví dụ:

https://laubugs.wordpress.com/2019/06/09/su-dung-rtos-phan-2/

- Một số cấu hình quan trọng:

Config option Mô tả

configUSE_PREEMPTION Enable Preemption

configTICK_RATE_HZ Tick rate (Hz)

configMAX_PRIORITIES Số lượng priority task tối đa

configTOTAL_HEAP_SIZE Tổng heap size cho dynamic allocation

Trang 12

Thẻ Config parameters cho phép ta có thể cấu hình cài đặt ban đầu những thứ liên

quan tới kernel và memory

Thẻ Include parameters cho phép bật/tắt một số define về Task,Queue,

Semaphore,…

Thẻ Tasks and Queue giúp ta có thể tạo/ thêm các task và queue

Thẻ Timers and semaphores cho phép thêm Timers, Mutexes, Semaphore, có

Mutex và Binary Semaphore mặc định là có thể add thêm mới, với Recursive Mutexes cũng như Binary Semaphore để hiện được nút add thì cần phải enable các define ở thẻ Include parameters

Thẻ User Constants để có thể thêm các constant của user có thể tự định nghĩa vào

- Khái niệm pre-emptive scheduling và co-operatieve scheduling: đây là 2 thuật toán dùng

để lập lịch, với các hệ thống hiện đại thì đều phụ thuộc vào các thuật toán lập lịch để thực hiện các tác vụ đa nhiệm hoặc ghép kênh(multiplexing) hiệu quả Những thuật toán này sẽ thực hiện thỏa hiệp để hoàn thành các mục tiêu cụ thể trong thời gian hạn hẹp

Với pre-emptive scheduling khi start hệ thống thì task sẽ tiếp tục chạy cho tới khi nó từ bỏ quyền kiểm soát, thường là ở thời điểm đồng bộ hóa của nó

Với co-operatieve scheduling thì sẽ giữ lại các thuộc tính như task, trạng thái của tas/ queue

và mức ưu tiên, task sẽ tiếp tục cho tới khi nó hoàn toàn từ bỏ quyền kiểm soát CPU, tuy nhiên task có thể bị ép phải dừng (suspend) bằng cách dùng ngắt của CPU

2.2 Các Task trong FreeRTOS

Kernel sẽ quản lý việc chuyển đổi giữa các task, nó sẽ lưu lại ngữ cảnh của task sắp bị hủy

và khôi phục lại ngữ cảnh của task tiếp theo bằng cách:

• Kiểm tra thời gian thực thi đã được định nghĩa trước (time slice được tạo ra bởi ngắt systick)

• Khi có các sự kiện unblocking một task có quyền cao hơn xảy ra (signal, queue, semaphore,…)

• Khi task gọi hàm Yield() để ép Kernel chuyển sang các task khác mà không phải chờ cho hết time slice

Khi khởi động thì kernel sẽ tạo ra một task mặc định gọi là Idle Task

- Task Switch: Kernel sẽ đảm nhiệm nhiệm vụ switch task, nó sẽ lưu lại context(trạng thái) hiện tại của task bị suspend và khôi phục lại context của task đang được tiếp tục Kernel

Trang 13

• Sau khi có định nghĩa trước về thời gian thực thi (execution time), thời gian time slide được lấy bởi systick interrupt

• Khi có event unblock quyền ưu tiên cao hơn (higher priority) xảy ra như signal,queue, semaphore,

• Khi task gọi hàm osThreadYield () để thông báo kernel chuyển sang task khác mà không đợi tới kết thúc của time slice

- FreeRTOS OS interrupt: Với các core Cortex đã implement một số tính năng giúp hỗ trợ can thiệp trực tiếp vào os hệ thống, 2 ngắt chuyên dụng cho os là

+ PendSV interrupt:

• Trong interrupt này là một scheduler

• Quyền ngắt NVIC sẽ ở mức thấp nhất

• Không bị trigger bởi bất kì ngoại vi nào

• Trạng thái chờ xử lý từ các ngắt khác hoặc từ các task muốn kết thúc sớm(non MPU version)

+ SVC interrupt

• Interrupt sẽ được gọi bởi các tập lệnh SVC

• Được gọi nếu task muốn kết thúc sớm (MPU version)

• Trong ngắt này sẽ set pending state (MPU version)

- Stack pointer: 2 stack pointer là

+ Process stack pointer

• Được sử dụng trong các interrupt

• Cấp phát bởi linker trong quá trình compile

+ Main stack pointer

• Mỗi task sẽ có stack pointer của chính nó

• Trong quá trình switch context thì stack pointer sẽ khởi tạo task chính xác

- Mức độ ưu tiên của task có thể được thay đổi bằng cách dùng hàm osThreadSetPriority() Với CMSIS-RTOS thì sẽ có một số priority level như sau:

Trang 14

3.1 Giới thiệu sơ lược:

- STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0,F1,F2,F3,F4… Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3 STM32F103 là

vi điều khiển 32 bit, tốc độ tối đa là 72Mhz

- Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, máy tính và thiết bị ngoại vi chơi game, GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…

- Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR Embedded Workbench, Keil C…

- Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như: STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries, Mbed core

- Mạch nạp: có khá nhiều loại mạch nạp như : ULINK, J-LINK , CMSIS-DAP, STLINK…

- Sơ lược về Board trên:

• 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug

Trang 15

• 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình

• Có chân Output riêng cho các chân mạch nạp trên MCU1

• Có chân Output đầy đủ cho các chân MCU2

• Chân cấp nguồn ngoài riêng cho MCU2 nếu không sử dụng nguồn từ USB

• Thạch anh 32,768khz dùng cho RTC và Backup

• Chân nạp dùng cho chế độ nạp boot loader

• Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2

3.2 Cấu hình chi tiết của STM32F103C8T6:

Minh họa các chân nối quanh các cạnh của PCB, bao gồm cả nguồn

Trang 16

Nguồn có thể được cấp vào các chân +5V, +3.3V hoặc cổng USB, với điện áp phù hợp

Chân được đánh dấu là “5V” (không có dấu cộng) là các chân input chịu được áp 5V Chân được đánh dấu bằng dấu cộng là chân input nguồn

Bốn chân ở đầu trên cùng của board (màu xanh đậm) được dùng để lập trình thiết bị Lưu

ý rằng chân lập trình DIO cũng có khả năng là một chân GPIO PA13 Tương tự như vậy, DCLK có khả năng trở thành một chân GPIO PA14 Xuyên suốt quyển sách này, bạn sẽ học cách cấu hình cho chip STM32

Ở chân lập trình, lưu ý rằng điện áp cấp vào là +3.3V Về mặt điện, chân này tương tự như các chân khác có nhãn “+3.3V” Trong hình trên, chúng có màu cam nhạt

Power USB/+5V khi được cấp nguồn bằng cáp USB, nguồn sẽ đến bằng đầu nối

Micro-USB B Nguồn cấp 5V này được điều chỉnh thành +3.3V mà MCU cần Tương tự, một chân có nhãn “+5V” (với dấu cộng), có thể được sử dụng như một chân nguồn vào Dòng này cũng đến cùng bộ điều áp như dòng được cấp qua cổng USB

Nếu có Nguồn cấp +3.3V, có thể để ngỏ các chân input +5V Nối trực tiếp nguồn cấp +3.3V với chân input +3.3V (đảm bảo rằng không cắm cáp USB) Cách này dùng được vì bộ điều

áp tự vô hiệu hóa khi không có gì cấp vào chân input 5V

Khi cấp nguồn cho vào chân input +3.3V, chính là đang nối nguồn với đầu VOUT của bộ điều áp Trong trường hợp này, không có nguồn 5V nào chạy vào VIN của bộ điều áp Chân CE cũng được nối với VIN, nhưng khi VIN để hở, chân CE sẽ được nối đất qua một

tụ điện Mức áp thấp trên CE làm cho bộ điều áp tắt các hệ thống con bên trong nó

Sơ đồ khối của bộ điều áp 5V sang 3.3V

Tuy nhiên, có một dòng điện nhỏ đi vào bộ chiết áp của bộ điều áp Dòng điện này sẽ đi từ +3.3V của bạn xuống đất, thông qua các điện trở nội R1 và R2 của bộ điều áp Các điện

Ngày đăng: 03/10/2023, 17:09

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w