- Thực hiện giao tiếp với phần cứng các module trong EKI LM3S8962: nhiệt độ, keypad, OLED hiển thị menu và ADC,… - Xây dựng hệ thống trên hệ điều hành FreeRTOS với các tác vụ quản lý tas
Trang 1BÁO CÁO LAB Môn: Lập trình hệ thống nhúng
THÁNG 1, 2014
DA NANG UNIVERSITY OF TECHNOLOGY
Sinh viên thực hiện:
1 Trương Thị Thu Diệu – 09DT1
2 Nguyễn Thị Thái Ngọc – 09DT1
Trang 2Chương 1: PHÂN TÍCH ĐỀ TÀI LAB
1.1 Mô tả tổng quát:
Đề tài của bài lab là xây dựng hệ thống thu thập dữ liệu từ các cảm biến bên ngoài môi trường, xử lý và thực hiện hiển thị hay cảnh báo khi dữ liệu thu được vượt ra khỏi vùng quy định Đồng thời gửi dữ liệu qua máy tính và thiết lập mạng kết nối để điều khiển, hiển thị khi cần thiết Cả hệ thống sẽ được xây dựng trên hệ điều hành thời gian thực FreeRTOS đơn giản
Hệ thống này sẽ được đặt tại bất kì đâu ngoài môi trường để kiểm tra những yếu tố cần thiết như nồng độ muối, ngồn độ CO2, tốc độ dòng chảy và nhiệt độ
- Mô tả cái nhìn tổng quan về hệ thống bằng phần mềm UML
- Thực hiện giao tiếp với phần cứng các module trong EKI LM3S8962: nhiệt độ, keypad, OLED hiển thị menu và ADC,…
- Xây dựng hệ thống trên hệ điều hành FreeRTOS với các tác vụ quản lý task ứng với từng chức năng cụ thể như hiển thị, tính toán, cảnh báo,… các thông số
- Xây dựng giải thuật HTTP cho webserver
- Lập trình một trang web có khả năng truy vấn dữ liệu liên tục, đồng thời cũng cập nhật các thông tin từ dữ liệu đó lên
- Viết phần mềm giao diện người dùng bằng LabView 2010…
1.4 Hướng giải quyết vấn đề:
- Về giải thuật HTTP cho web server: đề tài áp dụng một TCP/IP stack (một bộ giao thức TCP/IP viết trên nền C) là lwIP Stack này hỗ trợ rất mạnh các giao thức TCP, UDP và các giao thức trên nền của TCP và UDP trong đó có HTTP
- Các phần cứng tham khảo các sơ đồ mạch từ thiết kế đề nghị của nhà sản xuất vi điều khiển Texas Instrument cũng như các code sources
- Tìm hiểu cụ thể về các thao tác với hệ điều hành FreeRTOS để xây dựng các task ứng với từng chức năng cụ thể
- Giao diện phần mềm viết trên PC với LabView 2010, các tài liệu tham khảo được lấy từ trang web chính hãng,
1.5 Phạm vi đề tài:
Thực hiện hệ thống với các thiết bị:
- Module cảm biến nhiệt độ được tích hợp sẵn trên KIT EKI LM3S8962
Trang 3- Module ADC để xử lý số liệu analog lấy được từ các cảm biến
- Module giao tiếp người dùng có màn hình OLED trên KIT EKI LM3S8962 để hiển thị
- Module Keypad cho sự lựa chọn
- Thiết bị nhúng web server Tất cả các phần trên nếu sử dụng vi xử lý đều dùng ARM Cortex M3 LM3S8962 của hãng Texas Instrument
- Thực hiện lập trình một trang web đơn giản
- Thực hiện phần mềm lập trình trên LabView 2010 của hãng National Instrument giao tiếp với thiết bị giao tiếp người dùng trong một mode của menu
Trang 4Chương 2: Cơ sở lý thuyết
Chương này sẽ giới thiệu các lý thuyết liên quan, trình bày các phương pháp nghiên cứu và thực hành cụ thể Đồng thời phân tích, đánh giá, làm rõ và lý giải cho sự các lựa chọn đó
2.1 Vi xử lý ARM Cortex M3 LM3S8962 – Texas Instruments:
2.1.1 Giới thiệu về dòng vi xử lý ARM Cortex:
Dòng ARM Cortex là một bộ xử lí thế hệ mới đưa ra một kiến trúc chuẩn cho nhu cầu đa dạng về công nghệ Không giống nhu các chip ARM khác, dòng Cortex là một lõi
xử lí hoàn thiện, đưa ra một chuẩn CPU và kiến trúc hệ thống chung
Cortex-M3 đưa ra một lõi vi điều khiển chuẩn nhằm cung cấp phần tổng quát, quan trọng nhất của một vi điều khiển bao gồm:
- Hệ thống ngắt (interrupt system)
- SysTick timer (đuợc thiết kế cho hệ điều hành thời gian thực)
- Hệ thống kiểm lỗi (debug system)
Dòng Cortex duợc thiết kế hỗ trợ tập lệnh ARM Thumb-2, tập lệnh này duợc pha trộn giữa tập lệnh 16 và 32bit Tập lệnh Thumb-2 duợc thiết kế dặc biệt dành cho trình biên dịch C/C++, các ứng dụng dựa trên nền Cortex hoàn toàn có thể duợc viết bằng ngôn ngữ C mà không cần dến chương trình khởi dộng viết bằng assembler
Trang 5Kiến trúc vi xử lý dùng lõi ARM Cortex M3
Một số ưu điểm của ARM Cortex:
Hiệu suất cao: hỗ trợ kiến trúc tập lệnh Thumb-2, nên hiệu quả hơn 35% so với
bộ xử lý ARM7TDMI-S thực thi với tập lệnh ARM
Dễ sử dụng, phát triển ứng dụng nhanh chóng, hiệu quả: Bộ vi xử lý có mô hình lập trình dựa trên ngăn xếp đã được đơn giản hoá để tương thích với kiến trúc ARM Ngoài ra tập lệnh ARM được thiết kế đặc biệt dành cho trình biên dịch C/C++ nên ứng dụng được viết không cần thông qua bất cứ chương trình assembler nào (chương trình startup)
Hoạt động và sử dụng năng lượng hiệu quả hơn:
So sánh giữa dòng ARM7 cũ và lõi Cortex M3 mới
Đơn vị bảo vệ bộ nhớ (MPU): MPU là một thành phần tùy chọn của bộ vi xử lý Cortex-M3, có thể nâng cao độ tin cậy của hệ thống nhúng bằng cách bảo vệ các
dữ liệu quan trọng được hệ điều hành sử dụng khỏi các ứng dụng khác, tách biệt
Trang 6độc lập các tác vụ đang thực thi bằng cách không cho phép truy cập vào dữ liệu của nhau, vô hiệu hoá quyền truy cập vào một số vùng nhớ, cho phép các vùng nhớ được định nghĩa là chỉ đọc (read only) và phát hiện các truy cập bộ nhớ có thể phá vỡ hệ thống
Hỗ trợ lập trình Gỡ lỗi (Debug) và theo vết (Trace): Debug hệ thống dựa trên bộ
vi xử lý Cortex-M3 được thực hiện thông qua DAP (Debug Access Port), SWD (Serial Wire Debug) sử dụng 2 đường tín hiệu hoặc SWJ-D (Serial Wire JTAG Debug) sử dụng giao thức JTAG
2.1.2 Vi xử lý Stellaris ARM Cortext M3 LM3S8962 – Texas Instrument
Các dòng vi điều khiển Stellaris – ARM ® ™ Cortex-M3 đầu tiên - mang lại những ứng dụng vi điều khiển nhúng hiệu suất cao 32-bit nhưng với chi phí tương đương với các vi điều khiển kế thừa 8 bit và 16bit
Controller Area Network (CAN)
CAN giao thức phiên bản 2.0 A/B
Tốc độ bit lên đến 1 Mbps
32 bản tin với nhận dạng mask cá nhân
Trang 7 Ngắt mask
Vô hiệu hoá chế độ tự động gửi lại cho ứng dụng Time-Triggered CAN (TTCAN)
Lập trình kiểm tra ngược cho chế độ tự kiểm tra
Cho phép lập trình FIFO lưu trữ của nhiều đối tượng nhắn tin
Kèm theo một giao diện CAN bên ngoài thông qua các tín hiệu CAN Tx và CAN
Rx
10/100 Mbps Ethernet Controller
Phù hợp với các đặc điểm kỹ thuật IEEE 802,3-2002
Nhiều chế độ hoạt động
Song công và bán song công 100 Mbps
Song công và bán song công 10 Mbps
Chế độ tiết kiệm điện và giảm công suất xuống
Trang 8Sơ đồ khối vi xử lý LM3S8962
Sơ đồ khối vi xử lý LM3S8962
Trang 92.2 Module cảm biến nhiệt độ và ADC tích hợp trên KIT EKI LM3S8962:
Module ADC trong Stellaris có các đặc điểm sau:
- 4 kênh ngõ vào
- Có cả cấu hình cho ngõ vào analog khác nhau và ngõ vào analog đơn
- Có cảm biến nhiệt độ nội trong chip
- Tốc độ lấy mẫu có thể đạt đến 500.000 mẫu/ 1s
- Có 4 cách lấy mẫu: ss0 đến ss3
- Bộ chuyển đổi sử dụng nguồn điện áp 3V
Sơ đồ khối ADC:
Trang 10Sơ đồ lấy mẫu ADC:
Vậy sử dụng cảm biến nhiệt độ nội trong KIT EKI LM3S8962
Giá trị ngõ ra analog sẽ được đưa qua module ADC được tích hợp sẵn trong
module để hiển thị giá trị ra trên OLED của KIT
Sau khi qua ADC thì nhiệt độ ở độ C được tính: ulTemp_ValueC = ((1475 * 1023)
- (2250 * giá trị đo được ở ADC0)) / 10230;
Và độ F: ulTemp_ValueF = ((ulTemp_ValueC * 9) + 160) / 5;
Nhiệt độ này sẽ được hiển thị ra OLED để thông báo cho người dùng
2.3 Tìm hiểu về hệ điều hành FreeRTOS:
2.3.1Định nghĩa hệ điều hành thời gian thực RTOS:
Là hệ thống có:
- Lịch trình thực thi theo thời gian
- Quản lý tài nguyên hệ thống
- Cung cấp những nền tảng cơ bản để phát triển các ứng dụng trên nó
Trang 112.3.2 Các thành phần trong RTOS:
Các đối tượng trong RTOS
- Bộ lịch trình (Scheduler): Là một tập các thuật toán để xác định tác vụ ( Task) nào được thực thi
- Đối tượng (Object):Là những cấu trúc đặc biệt (Kernel) giúp người lập trình tạo ra các ứng dụng
- Dịch vụ (Service):Là những điều khiển mà Kernel ( lõi) thực thi trong đối tượng ( object): chia thời gian ( Timing), Ngắt( interrupt), Đáp ứng ( handling) và quản lý tài nguyên hệ thống ( resource management)
2.3.3 Các đối tượng (Objects) trong RTOS:
- Tasks: Là các luồng ( thread) thực thi cùng tồn tại và độc lập nhau có thể “ cạnh tranh” nhau để dành quyền thực thi
- Semaphores:Là đối tượng bắt sự kiện để đồng bộ giữa các tasks, có thể tăng hoặc giảm
- Message Queues:Là một kiểu cấu trúc dữ liệu được dùng để đồng bộ hóa hoặc trao đổi thông tin giữa các Tasks
- Real-time embedded applications:Là sự kết nối giữa các đối tượng của Kernel để giải quyết vấn đề thời gian thực như sự đồng thời, sự đồng bộ,và trao đổi dữ liệu
2.3.4 Giải thuật cho lịch trình theo chế độ ưu tiên:
Trang 12Giải thuật lịch trình theo độ ưu tiên
Hầu hết các Real – time Kernel sử dụng giải thuật lịch trình thay thế theo độ ưu tiên ( preemptive priority- based scheduling) làm mặc định
Các task sẽ được thực thi tại bất kì một thời điểm là task có độ ưu tiên cao nhất so với các task khác đang ở trạng thái sẵn sàng
Real –Time Kernel hỗ trợ 256 cấp độ ưu tiên, với 0 là độ ưu tiên cao nhất và 255
là độ ưu tiên thấp nhất Một số Kernel thì ngược lại với 255 là độ ưu tiên cao nhất và 0 là
độ ưu tiên thâp nhất
Với bộ chuyển đổi theo đọ ưu tiên, mỗi task phải có một độ ưu tiên, và task có độ
ưu tiên cao nhất chạy đầu tiên Nếu một Task có độ ưu tiên cao hơn task đang chạy trở nên sẵn sàng để chạy thì kernel sẽ ngay lập tức lưu lại trạng thái Task hiện tại và chuyển sang Task có độ ưu tiên cao hơn
Mặc dù việc phân chia độ ưu tiên của Task được thực hiện khi task đó được tạo nhưng độ ưu tiên của Task là có thể thay đổi một cách linh động sử dụng Lời gọi do kernel cung cấp (Kernel – provided calls) Khả năng này dùng để thay đổi một cách linh động cho phép một ứng dụng nhúng có độ linh hoạt để ứng xử với sự kiện bên ngoài khi chúng xuất hiện, tạo ra một hệ thống thời gian thực và đáp ứng tốt Lưu ý là việc sử dụng không đúng khả năng thay đổi độ ưu tiên này có thể dẫn đến đảo độ ưu tiên ( priority inversion), vùng chết ( deadlock), và có thể dẫn đến treo hệ thống ( system failure)
2.3.5 Quản lý task trong RTOS:
Định nghĩa task:
Trang 13Sơ đồ cấu trúc của một Task cơ bản Task là một luồng thực thi độc lập mà có thể cạnh tranh chiếm quyền thực thi Một ứng dụng được chia ra làm nhiều Tasks đồng thời ( Concurrent Task) để tối ưu khả năng đáp ứng vào ra trong luật thời gian
Một Task được định nghĩa thuần túy là một tập các tham số và cấu trúc dữ liệu Các thành phần của một Task:Khi được tạo ra, Task sẽ có tên, ID duy nhất, độ ưu tiên, một block điều khiển Task ( TCB), Stack, và Các thủ tục thực thi Task
Các trạng thái của một task
Hình Error! No text of specified style in document.-1: Các
trạng thái của một Task
Trang 14Tại bất kì một thời điểm, mỗi task tồn tại một trong số những trạng thái nhỏ bao gồm: Sẵn sàng ( Ready), Đang thực thi ( Running), hoặc Khóa ( Blocked) Khi một hệ thống nhúng thời gian thực chạy, mỗi task thay đổi từ trạng thái này đến trạng thái khác theo quy luật logic của một mấy trang thái hữu hạn đơn giản ( Finite state machine
(FSM))
2.3.6 Giới thiệu về FreeRTOS:
FreeRTOS được nghiên cứu bởi Richard Barry với tên ban đầu là FRTOS07 Mục đích của FreeRTOS là portable( khả năng linh động) , open source ( mã nguồn mở) , mini kernel (là một hệ điều hành thời gian thực nhỏ) mà có thể được thao tác trong chế độ ưu tiên (Pre-emptive) cũng như phối hợp (Cooperative)
FreeRTOS hiện tại hỗ trợ lên đến 27 kiến trúc vi điều khiển khác nhau khác nhau :
2.3.7 Các hàm quản lý task trong FreeRTOS:
Tạo và xóa Task:
xTaskCreate
portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const portCHAR * const pcName,
unsigned portSHORT usStackDepth,
Trang 15pcName: Tên mô tả cho Task đó ( chỉ dùng cho mục đích debug hệ
thống) Chiều dài tối đa của tên được định nghĩa bằng configMAX_TASK_NAME_LEN
usStackDepth: Là kích thước của Stack đặc trưng cho số lượng biến mà
Task có thể quản lý được
pvParameters: Pointer được sử dụng như là tham số của việc tạo Task
uxPriority: Độ ưu tiên của Task
pvCreatedTask: Pointer trỏ đến Task được tạo
Trị trả về: pdPASS nếu như Task được tạo thành công
vTaskDelete
void vTaskDelete( xTaskHandle pxTask );
Mô tả: Xóa một Task từ RTOS realtime management
Tham số:pxTask poiter đến Task cần xóa
Trị trả về: Không trị
Điều khiển Task:
vTaskDelay
void vTaskDelay( portTickType xTicksToDelay );
Mô tả: Delay ( block) Task một khoảng thời gian kể từ lần cuối hàm được gọi ( số ticks mà Task đó bị block)
pxPreviousWakeTime Pointer đến biến lưu giá trị lần cuối cùng Task được
unclocked Biến này phải được khởi tạo giá trị với giá trị hiện tại cho lần dùng đầu tiên
Trang 16xTimeIncrement : Là chu kì thời gian Task sẽ đươck uncloked sau mỗi thời
(*pxPreviousWakeTime + xTimeIncrement) Gọi hàm naỳ với mục đích thực thi một Task theo một chu kì nhất định
Trị trả về: Không trị
uxTaskPriorityGet
unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );
Mô tả:Đọc giá trị độ ưu tiên của Task
Tham số: pxTask : biến Handle của Task cần đọc
Trị trả về: Độ ưu tiên của Task cần gọi
void vTaskSuspend( xTaskHandle pxTaskToSuspend );
Mô tả: Suspend ( xem thêm chương 1) bất kì Task nào mà không quan tâm đến độ ưu tiên của Task đó
Tham số:
pxTaskToSuspend : Handle của Task sẽ bị suspend
Trị trả về: Không trị
vTaskResume
void vTaskResume( xTaskHandle pxTaskToResume );
Mô tả: Resume một Task, sẽ được dùng cùng với xTaskSuspend
Tham số:
pxTaskToResume : Task được Resume:
Trị trả về: Không trị
xTaskResumeFromISR
Trang 17portBASE_TYPE xTaskResumeFromISR( xTaskHandle pxTaskToResume );
Mô tả:Resume một Task từ ISR
Tham số:
pxTaskToResume: Handle Task được Resume
Trị tra về: pdTRUE nếu như trị việc resuming có tác dụng lên context switch, ngược lại là pdFALSE
Các tiện ích khác cho Tasks
xTaskGetCurrentTaskHandle()
xTaskGetStackHighWaterMark()
xTaskGetTickCount() xTaskGetTickCountFromISR() xTaskGetSchedulerState() xTaskGetNumberOfTasks() vTaskList()
vTaskStartTrace() ulTaskEndTrace() vTaskGetRunTimeStats() vTaskSetApplicationTag() xTaskCallApplicationTaskHook() uxTaskGetStackHighWaterMark()
Tham khảo thông tin về FreeRTOS:
Ngoài những hàm cơ bản đã nêu ra ở trên, người sử dụng có thể tìm các thông tin
cụ thể được hỗ trợ tại trang web chính thức của FreeRTOS là: freertos.org Các hàm kể trên đều có đường link đến thẻ API Reference trên trang chủ của FreeRTOS
Trang 18Chương 3: THỰC HÀNH LAB
3.1 Mô tả chung:
Mô hình này sẽ xây dựng các chuẩn của 1 hệ thống hiển thị và phân tích trạng thái môi trường Nó sẽ sử dụng kiến trúc ngôn ngữ bậc cao để module hóa các task để chúng thực hiện và chạy mãi mãi
- Tín hiệu ngõ vào của hệ thống như nồng độ muối, CO2, tốc độ dòng chảy sẽ lấy từ các giá trị random còn ngõ vào nhiệt độ sẽ lấy từ module cảm biến nhiệt độ nội trong chip Xem như tất cả dữ liệu này được thu thập từ 1 số vùng địa lý cụ thể có thể là trên mặt đất hoặc dưới đại dương Sau khi thu thập, giá trị tín hiệu ngõ vào
sẽ được xử lý như tính toán để so sánh và đưa ra các cảnh báo phù hợp nêu dữ liệu vượt ra khỏi vùng an toàn
- Sử dụng board ARM Cortex-M3 v7M để thực hiện hệ thống
- Xây dựng hệ thống thông qua việc quản lý các task:
1 Remote Communication Task: nó sẽ cung cấp giao tiếp với trình duyệt web dựa
trên ứng dụng của PC Ứng dụng này hỗ trợ cho việc truyền thông 2 chiều giữa hệ thống điều khiển và hệ thống hiển thị ngoài môi trường
Yêu cầu của task này: phải hỗ trợ việc hiển thị dữ liệu đo đạcv à tính toán trả về từ
hệ thống lên PC
2 Command Task: task này sẽ nhận và giải thích các câu lệnh từ communication
task sau đó đưa trực tiếp đến hệ thống phụ để thực hiện yêu cầu cảu task Đồng thời nó cũng định dạng dữ liệu được yêu cầu để gửi bằng communication task thông qua mạng đến hệ thống điều khiển
3 Thermal Image Capture Task: task này sẽ vẽ ra ngõ ra analog từ hình ảnh thu
thập được từ môi trường Hệ thống sau đó sẽ chuyển về dạng digital, thực hiện FFT trên dữ liệu digital và gửi giá trị tần số đến hệ thống thu thập dữ liệu điều khiển Dữ liệu thu thập được sẽ có thể dùng để chặn các nguy cơ gây ô nhiễm
4 Portable Generator Control Subsystem: task này sẽ cung cấp tín hiệu để điều
khiên nguồn tạo Nếu điện áp giảm, nguồn tạo sẽ bị chuyển và sau đó hoạt động tại tốc độ quay tăng lên để giảm điện áp pin
5 Measure Task: task này có nhiệm vụ thu thập dữ liệu đầu vào từ các cảm biến,
trong trường hợp này ta lấy các giá trị random của nồng độ CO2, muối, tốc độ dòng chảy và lấy giá trị từ cảm biến nhiệt độ nội trong chip