Giới thiệu chung

Một phần của tài liệu BÁO CÁO BÀI TẬP LỚN HỌC PHẦN: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG Đề tài: Bể thủy sinh thông minh (Trang 26)

µC/OS là một hệ điều hành thời gian thực được áp dụng cho rất nhiều dự án có yêu cầu cao về đáp ứng thời gian (hàng không, y tế...). µC/OS không phải là một hệ điều hành hoàn chỉnh mà chỉ là nhân thời gian thực dùng để cung cấp cho các ứng dụng. Và hệ điều hành µC/OS hỗ trợ các tính năng sau:

 Quản lý truy cập tới miền găng của µC/OS

 Cấu trúc và trạng thái của các tác vụ

 Hàm xử lý ngắt

 Quản lý nhịp đồng hồ

 Khởi động hệ thống µC/OS, hệ thống đa nhiệm

µC/OS có thể quản lý tối đa 64 tác vụ: trong đó có 2 tác vụ hệ thống có độ ưu tiên OS_LOWEST_PRIO-0 tới OS_LOWEST_PRIO-3 => Người dùng chỉ quản lý được 56 tác vụ với mỗi tác vụ có 1 độ ưu tiên duy nhất từ OS_LOWEST_PRIO-0 tới OS_LOWEST_PRIO-2 và µC/OS luôn chạy tác vụ có độ ưu tiên cao nhất trước.

OSTaskCreate() và OSTaskCreateEx() là 2 hàm trong µC/OS dùng để tạo các tác vụ.

Mỗi tác vụ trong µC/OS có thể ở trong các trạng thái sau:

 DORMANT: Tác vụ nằm trong bộ nhớ (ROM hoặc RAM) nhưng chưa

được khởi tạo.

 READY: Đây là trạng thái khi tác vụ được tạo ra.

 RUNNING: Là trạng thái khi tác vụ đó được thực thi.

 WAITING (WAITING FOR AN EVENT): Đang chờ sự kiện nào đó.

 INTERRUPTED: Ngắt xuất hiện khi đang thực thi tác vụ và CPU đang

thực thi thủ tục ngắt.

Trạng thái DORMANT tương ứng với tác vụ đã nằm trong chương trình nhưng chưa nằm trong sự quản lý của µC/OS. Khi µC/OS gọi hàm tạo (OSTaskCreate() hoặc OSTaskCreateEx()) thì tác vụ trên mới được quản lý bởi hệ điều hành, và nó được chuyển sang trạng thái READY. Khi tác vụ đó bị

xóa khỏi µC/OS bằng lệnh OSTaskDel() thì tác vụ đó bị chuyển về trạng thái DORMANT. Các tác vụ có thể được tạo ra bất cứ lúc nào, khi tạo mới mà được gán quyền cao hơn thì nó lập tức chiếm quyền điều khiển của CPU.

Quá trình đa nhiệm được bắt đầu khi gọi OSStart(). Sau đó OSStart() sẽ chọn tác vụ có trạng thái READY và có độ ưu tiên cao nhất để chuyển sang trạng thái RUNNING.

Một tác vụ đang chạy có thể tự trì hoãn chính nó bằng cách gọi OSTimeDly(). Trong khi đó thì các tác vụ khác có quyền ưu tiên cao hơn vẫn có thể chiếm quyền CPU. OSTimeTick() sẽ khôi phục lại trạng thái RUNNING cho tác vụ khi thời gian trì hoãn kết thúc. OSTaskIdle()

Tác vụ đang chạy cũng có thể đợi sự xuất hiện của các sự kiện khác bằng việc gọi OSMboxPend(), OSSemPend() hoặc OSQPend(), khi gọi các hàm này thì tác vụ sẽ chuyển sang trạng thái WAITTING. Khi tác vụ này đang ở trạng WAITTING thì tác vụ có độ ưu tiên cao nhất tiếp theo được quyền sử dụng CPU. Khi sự kiện xuất hiện thì tác vụ lại được chuyển sang trạng thái READY và được báo bới một tác vụ khác hoặc bằng ISR. Tác vụ đang chạy luôn có thể bị ngắt trừ khi µC/OS vô hiệu hóa các ngắt (thường là khi trong miền găng) và tác vụ được chuyển sang trạng thái INTERRUPTED. Khi ngắt xuất hiện, tác vụ bị tạm dừng, ISR chiếm quyền điều khiển CPU. Khi tất cả các tác vụ đều đợi sự kiện thì µC/OS sẽ thực hiện tác vụ OSTaskIdle(). b. Sử dụng µc-RTOS trong dự án

Trong hệ thống bể thủy sinh thông minh này, chúng em sử dụng bảy task:

 Task 1 – start_task: Khởi động các task;

 Task 2 – read_temperature_task: Thực hiện đọc nhiệt độ từ cảm

biến DS18B20;

 Task 3 – servo_task: Điều khiển động cơ servo;

 Task 4 – show_task: Hiển thị các thông số lên màn hình LCD 16x2

thông qua modunle chuyển đổi I2C;

 Task 5 – Ligh_CTR_task: Điều khiển đèn thủy sinh theo thời gian

cài đặt trước;

 Task 6 – Temperature_CTR_task: Điều khiển quạt và sưởi dựa vào

dữ liệu nhiệt độ thu được;

 Task 7 – RTC_task: Thực hiện nhận dữ liệu từ ESP32 qua giao

PHẦN 4: HOÀN THIỆN HỆ THỐNG 1. Thử nghiệm hệ thống trên bo test

Hình 14: Thử nghiệm hệ thống

Tự đánh giá kết quả:

 Đã hiển thị được thời gian, nhiệt độ trong bể;

 Lấy được thời gian trên Internet để nạp cho hệ thống;  Chức năng hẹn giờ cho động cơ servo hoạt động tốt;  Chức năng hẹn giờ bật/tắt đèn hoạt động tốt;

 Các chức năng tự động bật quạt và sưởi theo nhiệt độ hoạt động tốt. Nhược điểm: Nhiệt độ đo từ cảm biến DS18B20 đôi khi là sai. Nguyên nhân là do các chân cắm trên bo test bị lỏng, dẫn đến việc đọc dữ liệu bị sai. Lỗi này sẽ được khắc phục khi lắp các linh kiện trên pcb.

2. Vẽ sơ đồ nguyên lý và PCB cho mạch

Hình 15: Sơ đồ nguyên lý mạch

 Mạch PCB

Một phần của tài liệu BÁO CÁO BÀI TẬP LỚN HỌC PHẦN: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG Đề tài: Bể thủy sinh thông minh (Trang 26)

Tải bản đầy đủ (PDF)

(31 trang)