Trong phần này, tác giảkhông đi sâu vào phương pháp tính toán, tìm các tham số P,I,D tối ưu cho hệ thống, mà chỉ chỉnh định các tham số sao cho hệ thống hoạt động tốt một cách tương đối , đủ kể kiểm nghiệm tính thực nghiệm của hệ thống . Sau khi việc kết nối các modul tạo thành hệ thống điều khiển, tác giả tiến hành chỉnh định bằng thực nghiệm chọn bộ tham sốP,I,D theo phương pháp Ziegler-Nichols :
kp=0.11 ,Ti = 0.00001 và TD =0.0001
Tốc độ của động cơ được đặt bằng giao diện trên máy tính qua truyền thông RS232. Tốc độ thực đo được được hiện thị bằng biểu đồ mức bên cạnh giúp quan sát rất dễdàng để đánh giá chất lượng điều khiển. Ngoài ra ,khi ngắt truyền thông thì tốc độ của động cơ cũng có thể được đặt bằng phím bấm tăng, giảm tốc độ (hình 3.1a). Tốc độ thực của động cơ đo được hiển thị trên màn hình LCD của hệ thống Kit.
3.3 Kết luận
Hệ thống điều khiển PID số xây dựng từ các modul của hệ thống Kit thí nghiệm đã hoạt động tốt với các chức năng sau :
- Màn hình LCD hiển thị tốc độ đặt và tốc độ thực đo được, báo kết nối UART.
- Giao diện Labview thể hiển một cách trực quan chất lượng điều khiển của hệ thống. Việc đặt tốc độ cho động cơ thông qua giao diện được thực hiện một cách dễ dàng.
- Khối công suất PWM và cảm biến quang đo tốc độ hoạt động ổn định , hiệu quả.
Khối phím bấm đã thực hiện tốt một số chức năng như : - Tăng /giảm tốc độđộng cơ
- Điều khiển đảo chiều cho động cơ
- Điều khiển ngắt hoặc kết nối truyền thông UART của hệ thống với máy tính.
Như vậy hệ thống Kit đã đáp ứng được yêu cầu thực nghiệm cho những bài thực hành, thí nghiệm của sinh viên ngành tự động hóa trong quá trình học tập nghiên cứu. Qua khảo sát chất lượng điều khiển của hệ thống , sinh viên sẽ nắm vững hơn những kiến thức lý thuyết đã được học về sựảnh hưởng của các tham số bộđiều khiển PID, từđó nghiên cứu, xây dựng những thuật toán điều khiển, tìm ra những bộ tham số tối ưu nhất đưa vào thử nghiệm cho hệ thống.
CHƯƠNG 4
NÂNG CAO CHẤT LƯỢNG HỆ THỐNG ĐIỀU KHIỂN VỚI RTOS 4.1 Tại sao cần có RTOS ?
4.1.1 Thời gian thực (Real - Time) là gì?
Ý tưởng cơ bản của thời gian thực thể hiện ở chỗ: một hệ thống phải có những phản ứng thích hợp, đúng thời điểm với môi trường của nó. Việc hiểu thời gian thực có nghĩa là thực sự nhanh, càng nhanh càng tốt, điều này là sai lầm. Thời gian thực có nghĩa “đủ nhanh” (fast enough) trong một ngữ cảnh, một môi trường mà hệ thống đang hoạt động. Khi chúng ta đề cập đến máy tính điều khiển động cơ ô tô, chúng ta cần nó chạy càng nhanh càng tốt.
Một ví dụ khác, khi chúng ta đề cập đến một nhà máy lọc dầu hoá học chẳng hạn, nhà máy được điều khiển bởi một hoặc một hệ thống máy tính. Các máy tính này có trách nhiệm điều khiển quá trình hoá học đồng thời phải phát hiện ra được các sự cố có thể xảy ra. Tuy nhiên, các phản ứng hay các quá trình hoá học thường có hằng số thời gian khá lớn từ hàng giây cho tới hàng phút. Chính vì thế mày chúng ta có thể giả thiết rằng máy tính hoàn toàn có khả năng phản ứng lại các sự cố nghiêm trọng. Tuy nhiên, đặt vấn đề là nếu hệ thống máy tính đó đang trong quá trình in một bản báo cáo dài về các thông số sản lượng của tuần trước thì đột nhiên trục trặc xảy ra. Vậy thì nó mất bao nhiêu thời gian để có thể phản ứng lại các sự cốnhư thế?
Thực chất của việc tính toán thời gian thực không chỉ ở việc phản ứng đủ nhanh mà còn phải đáng tin cậy và chính xác. Máy tính điều khiển động cơ trong ô tô phải có thểđiều chỉnh luồng nhiên liệu và thời gian đánh lửa một cách hợp lý trong mỗi vòng quay. Nếu không, động cơ sẽ không làm việc theo mong muốn. Máy tính trong nhà máy lọc dầu phải có thể phát hiện và phản ứng lại các
Như vậy, mục tiêu của lập trình thời gian thực chính là việc thiết kế hệ thống sao cho nó có thể tiếp nhận một cách chính xác các ràng buộc về mặt thời gian trong suốt quá trình các sự kiện ngẫu nhiên và không đồng bộ xảy ra.
4.1.2. Các dạng thời gian thực
Về cơ bản, chương trình có tính thời gian thực phải có khả năng phản ứng lại các sự kiện trong môi trường mà hệ thống làm việc trong khoảng thời gian nhất định cho trước. Những hệ thống như vậy được gọi là hệ thống “điều khiển sự kiện” (hay hệ thống lái sự kiện – event-driven) và có thể được mô tả bằng thời gian trễ từ khi mà sự kiện xảy ra cho tới khi hệ thống có hoạt động phản ứng lại với sự kiện đó.
Thời gian thực, mặt khác, đòi hỏi một giới hạn cao hơn về thời gian trễ, được gọi là “thời hạn lập danh mục” (scheduling deadline). Một hệ thống thời gian thực có thể được chia làm 2 loại: “thời gian thực cứng” (hard real-time) và “thờigian thực mềm” (soft real-time). Trong hệ thống hard real-time, hệ thống phải tiếp nhận và nắm bắt được scheduling deadline của nó tại mỗi và mọi thời điểm. Sự sai sót trong việc tiếp nhận deadline có thể dẫn đến hậu quả nghiêm trọng thậm chí chết người. Lấy ví dụ: máy hỗ trợ nhịp tim cho bệnh nhân khi phẫu thuật. Thuật toán điều khiển phụ thuộc vào thời gian nhịp tim của người bệnh, nếu thời gian này bị trễ, tính mạng của người bệnh sẽ bịảnh hưởng.
Chúng ta mong muốn hệ thống phản ứng lại các sự kiện trong thời gian cho phép nhưng không có gì thực sự nghiêm trọng xảy ra nếu hệ thống thỉnh thoảng bị trễ. Lỗi về mặt thời gian có thể chỉ đơn giản là dẫn đến hậu quả giảm độ tin cậy của đối tượng đối với hệ thống mà không có hậu quả thê thảm nào khác xảy ra. Mạng lưới thu ngân tự động của ngân hàng là ví dụ rõ nhất cho soft
real-time. Mạng rút tiền tự động ATM là hệ thống thời gian thực? Khi ta đưa thẻ ATM vào máy, máy sẽ phản ứng lại trong vòng 1 hay 2 giây, nhưng nếu nó lâu hơn thế một chút thì cũng không gây ra hậu quả gì nghiêm trọng.
4.1.3. Sự cần thiết RTOS trong các hệ thống nhúng
Hệ điều hành thời gian thực – RealTime Operating Systems(RTOS), là phần mềm điều khiển chuyên dụng thường được dùng trong những ứng dụng điện toán nhúng có tài nguyên bộ nhớ hạn chế và yêu cầu ngặt nghèo về thời gian đáp ứng tức thời, tính sẵn sàng cao và khả năng tự kiểm soát một cách chính xác.
Một thuộc tính quan trọng của RTOS là khả năng tách biệt với ứng dụng, vì vậy nếu có một chương trình bị "chết" hay hoạt động không hợp lệ, RTOS có thể nhanh chóng cô lập chương trình này, kích hoạt cơ chế phục hồi và bảo vệ các chương trình khác hay chính bản thân hệđiều hành khỏi các hậu quả của các lệnh sai. Cơ chế bảo vệ tương tự cũng được áp dụng để tránh tình trạng tràn bộ nhớ do bất kỳ chương trình nào gây ra. RTOS xuất hiện ở hai dạng: cứng và mềm. Nếu tính năng xử lý ứng với một sự kiện nào đó không xảy ra hay xảy ra không đủ nhanh, RTOS cứng sẽ chấm dứt hoạt động này và giữ không gây ảnh hưởng đến độ tin cậy và tính sẵn sàng của phần còn lại của hệ thống.
Vì RTOS và máy tính nhúng trở nên phổ biến trong các ứng dụng quan trọng, các nhà phát triển thương mại đang tạo nên những RTOS mới với tính sẵn sàng cao. Những sản phẩm này có một thành phần phần mềm chuyên dụng làm chức năng cảnh báo, chạy các chương trình chẩn đoán hệ thống đểgiúp xác định chính xác vấn đề trục trặc hay tựđộng chuyển đổi sang hệ thống dự phòng. Hiện thời RTOS sẵn sàng cao hỗ trợ bus Compact PCI của tổ chức PCI Industrial Computer Manufacturers Group, bus này dùng cho phần cứng có thể trao đổi nóng. Trong nhiều năm, ứng dụng dựa trên RTOS chủ yếu là trong các hệ thống nhúng và mới gần đây thì chúng đã có mặt khắp nơi, từ thiết bị y tế được điều khiển bằng máy ảnh cho đến máy pha cà phê, những ứng dụng tính toán phân tán đang thúc đẩy các nhà phát triển hệ điều hành thực hiện nghiên cứu và phát
4.2. Các phần tửcơ bản RTOS
Một RTOS được cài đặt cho một nền vi xử lí thường phải bao gồm 3 phần sau:
•Kernel RTOS: nhân của hệ điều hành, còn gọi là nhân, trong đó thực thi các nhiệm vụcơ bản của RTOS. Nhân dùng chung cho tất cả các platform.
•Port: là các định nghĩa phần cứng của vi xử lí, bào gồm các thanh ghi, timer…Port có thể hiều là phần cài đặt sao cho FreeRtos có thể chạy được trên một nền vi điều khiển thông qua tập lệnh, thanh ghi của vi điều khiển đó.
•BSP (Board Support Package): chứa các hàm chức năng truy xuất đến các ngoại vi, thực chất đây chính là Driver cho các ngoại vi của MCU.
4.3. Giới thiệu hệđiều hành thời gian thực FreeRTOS
4.3.1 Tổng quan về FreeRTOS
4.3.1.1 Khái niệm FreeRTOS
FreeRTOS là lõi của hệ điều hành thời gian thực miễn phí. Hệ điều hành này được Richard Barry công bố rộng rãi từ năm 2003, phát triển mạnh đến nay và được cộng đồng mạng mã nguồn mở ủng hộ. FreeRTOS có tính khả chuyển, mã nguồn mở, lõi có thể down miễn phí và nó có thể dùng cho các ứng dụng thương mại. Nó phù hợp với những hệ nhúng thời gian thực nhỏ. Hầu hết các code được viết bằng ngôn ngữ C nên nó có tính phù hợp cao với nhiều nền khác nhau.
Ưu điểm của nó là dung lượng nhỏ và có thể chạy trên những nền mà nhiều hệ không chạy được. Có thể port cho nhiều kiến trúc vi điều khiển và những công cụ phát triển khác nhau. Mỗi port chính thức bao gồm những ứng dụng ví dụ tiền cấu hình biểu hiện sự riêng biệt của lõi, kiến thức mới và hướng phát triển. Những hỗ trợ miễn phí được cung cấp bởi cộng đồng mạng. Hỗ trợ thương mại với những dịch vụ phát triển đầy đủ cũng được cung cấp.
4.3.1.2 Các chức năng được cung cấp trong FreeRTOS
FreeRTOS.org là lõi của hệ điều hành thời gian thực được thiết kế cho các hệ thống nhúng nhỏ, với các chức năng chính sau:
•Lõi FreeRTOS hỗ trợ cả preemptive, cooperative và các lựa chọn cấu hình lai giữa hai phần.
• SafeRTOS là sản phẩm dẫn xuất, cung cấp mã nguồn riêng ở mức độ cao. •Được thiết kế nhỏ, đơn giản và dễ sử dụng.
•Cấu trúc mã nguồn rất linh động được viết bằng ngôn ngữ C. •Hỗ trợ cả task và co-routine
•Mạnh về hàm theo vết.
•Có lựa chọn nhận biết tràn ngăn xếp.
•Không giới hạn số task có thể tạo ra, phụ thuộc vào tài nguyên của chip. •Không giới hạn số mức ưu tiên được sử dụng.
•Không giới hạn số task cùng một mức ưu tiên.
•Hỗ trợ truyền thông và đồng bộ giữa các task hoặc giữa task và ngắt: queues, binary semaphores, counting semaphores and recursive mutexes.
•Mutexes với ưu tiên kế thừa.
•Các công cụ phát triển miễn phí, port cho Cortex-M3, ARM7, PIC, MSP430, H8/S, AMD, AVR, x86 và 8051.
•Miễn phí mã nguồn phần mềm nhúng. •Miễn phí trong ứng dụng thương mại.
•Tiền cấu hình cho các ứng dụng demo, từ đó dễ dàng tìm hiểu và phát triển.
4.3.2. Các file chính trong kernel
Trong kernel của FreeRTOS có năm file chính, tất cảcác chương trình port buộc phải có:
•FreeRTOS.h: kiểm tra xem FreeRTOSconfig,h đã định nghĩa các ứng dụng macro phụ thuộc vào từng chương trình một cách rõ ràng hay chưa.
•list.h: tạo ra các hàm và các macro liên quan đến việc tạo và xoá danh sách trạng thái các task như các danh sách ready, running, block, suppend, waiting.
•croutine.h: tạo ra các hàm và các macro liên quan đến task và queue nhưng chủ yếu dùng cho coorporative.
•portable.h: tạo tính linh động cho lớp API. Với mỗi chương trình port cho mỗi vi điều khiển và mỗi trình dịch khác nhau đều cần thay đổi file này để phù hợp các API
4.4. Giải quyết các vấn đềkhi đưa RTOS vào vi điều khiển
4.4.1 Quản lý và sử dụng RAM
Do quản lý sự kiện được xây dựng thành chức năng hàng đợi. Có nghĩa là cấu trúc dữ liệu hàng đợi bao gồm toàn bộ RAM mà những hệ thống thời gian thực khác thường phân phối tách biệt. Phụ thuộc vào trình biên dịch và kiến trúc từng chương trình. Riêng kernel sẽ sử dụng khoảng 4KBytes ROM khi sử dụng cùng một cấu hình trạng thái. Để giảm lượng RAM sử dụng ta làm như sau:
•Đặt configMAX_PRIORITIES và configMINIMAL_STACK_SIZE (nằm trong portmacro.h) đến giá trị nhỏ nhất chấp nhận được trong ứng dụng.
•Nếu được hỗ trợ bởi trình dịch – định nghĩa tác vụ chức năng và main() bằng “naked”. Nó ngăn không cho trình dịch nhớ những thanh ghi vào ngăn xếp khi chương trình chạy. Vì chương trình không bao giờ kết thúc, các thanh ghi sẽ không bao giờ được phục hồi và không bị yêu cầu.
•Lấy lại ngăn xếp được sử dụng bởi main(). Ngăn xếp sử dụng ở trên lúc chương trình bắt đầu không được yêu cầu lần nào khi bộ lịch trình khởi động ( trừ khi ứng dụng có gọi vTaskEndScheduler() mà chỉ được hỗ trợ trực tiếp trong sự sắp xếp cho PC và Flashlite port). Mọi tác vụđều có ngăn xếp cấp phát riêng nhưng ngăn xếp phân phối cho main() tồn tại để sử dụng một lần khi bộ lịch trình bắt đầu.
•Giảm ngăn xếp sử dụng bởi main() xuống mức nhỏ nhất. Idle task tự động được tạo ra khi task ứng dụng đầu tiên được tạo ra. Ngăn xếp sử dụng cho
chương trình khi bắt đầu (trước khi bộ lịch trình bắt đầu) phải đủ lớn cho lệnh gọi lồng đến xTaskCreate(). Tạo idle task thủ công có thể chỉ cần một nửa ngăn xếp yêu cầu. Tạo idle task bằng tay như sau:
- Xác định vị trí chức năng prvInitialiseTaskList() trong Source/task.c. - Idle task được tạo ra ở dưới cùng của chức năng gọi bởi xTaskCreate(). Cắt dòng này và paste lại vào main()
•Sốtask đưa ra đều có ý nghĩa. Idle task không cần thiết nếu: - Ứng dụng có task không bao giờ bị khóa
- Ứng dụng không bao giờ gọi vTaskDelete()
•Giảm dung lượng dữ liệu bằng cách định nghĩa portBASE_TYPE (điều này có thểtăng thời gian thực hiện)
•Có những ngắt không quan trọng khác có thể được thực hiện (ví dụ như hàng đợi mức ưu tiên tác vụ không phụ thuộc vào quản lý sự kiện), nhưng nếu giảm cấp xuống thì sẽ cần nhiều RAM hơn.
Để tạo task thì kernel có 2 lệnh gọi đến pvPortMalloc(). Thứ nhất để chỉ định khối điều khiển task, thứ hai là chỉđịnh ngăn xếp task.
Để tạo hàng đợi, kernel có hai lệnh gọi đến pvPortMalloc(). Thứ nhất để chỉ định cấu trúc hàng đợi, thứ hai là vùng cất giữ của hàng đợi (dung lượng của nó là thông sốđến xQueueCreate()).
4.4.2. Tick và Idle Hooks
•Idle task được thực hiện trong Source/task.c (tìm prvIdleTask). Ta có thể thêm những gì cần vào, code thêm vào sẽ không làm idle task bị khóa.
•Có thể sử dụng idle task hook bằng cách đặt config USE_IDLE_HOOK lên 1 trong FreeRTOSconfig.h.
•Có thể sử dụng tick hoặc context switch hook bằng cách đặt configUSE_TICK_HOOK lên 1 trong FreeRTOSconfig.h.
4.4.3. Bộ lập lịch
Với các task có mức ưu tiên ngang nhau trong bộ lập lịch thì sẽ có được mức ưu tiên quay vòng. Nghĩa là mỗi tác vụ sẽ được chia sẻ thời gian bằng nhau trong bộ xử lý.
4.4.4. Các thanh ghi phục vụ ngắt (ISR’s)
Chuyển đổi ngữ cảnh có thể được thực hiện trong ISR: mỗi port chứa ngắt đơn giản drive cổng nối tiếp mà được sử dụng như một ví dụ cho kiến trúc vi