Functional Safety trong Hệ Thống Nhúng: Vai Trò và Triển Khai Phần Cứng
Sau bài viết trước về Functional Safety mong rằng bạn đọc đã hiểu về tầm quan trọng và khái niệm Function Safety.
> Functional Safety là gì? Tìm hiểu về Functional Safety và tầm quan trọng của nó
Bài viết này sẽ chia sẻ chi tiết hơn về một số triển khai phần cứng tuân thủ Functional Safety trong một số dòng Vi điều khiển mà mình đã từng làm việc (và đã public trên thị trường) - Lưu ý, đây là cách thiết kế của các hãng sản xuất, và họ đã làm, mọi người đọc là để có cái nhìn tổng quan hơn về hiểu biết về các module Safety.
Mục lục
- Redundancy (Dự phòng phần cứng)
- Safe State Design (Thiết kế chế độ an toàn)
- Diagnostic and Self-Test Mechanisms (Cơ chế chẩn đoán và tự kiểm tra)
- Fault Tolerant Design (Thiết kế chịu lỗi)
- Isolation and Segmentation (Cách ly và phân đoạn)
- Electromagnetic Compatibility (EMC)
- Temperature Management (Quản lý nhiệt độ)
➤ Redundancy (Dự phòng phần cứng)
Redundancy là việc bổ sung các thành phần dự phòng để tăng cường tính tin cậy của hệ thống. Các thành phần quan trọng như cảm biến, bộ vi xử lý hoặc bộ điều khiển thường được nhân đôi để đảm bảo rằng nếu một thành phần bị lỗi, thành phần còn lại vẫn có thể hoạt động và đảm bảo hệ thống tiếp tục hoạt động an toàn.
- Dual-core processors: Một số dòng chip sử dụng thiết kế Dual Core không chỉ để tăng hiệu suất mà còn để giám sát lẫn nhau, khi một core bị lỗi, core còn lại có thể phát hiện và đưa ra các biện pháp an toàn.
- Cảm biến dự phòng: Trong các hệ thống như phanh ô tô, nhiều cảm biến được sử dụng để đo lực phanh. Nếu một cảm biến gặp lỗi hoặc cho kết quả không chính xác, cảm biến dự phòng sẽ tiếp tục cung cấp dữ liệu đúng để đảm bảo hệ thống không bị ngừng hoạt động.
- Nhỏ hơn so với các thiết bị trên là một số cơ chế nội bộ trong vi điều khiển, ví dụ một số chip sử dụng bộ CMU (Clock Monitoring Unit) với cơ chế dự phòng clock, tức sử dụng một clock dự phòng khi có lỗi với nguồn clock chính.
Ví dụ, trong hệ thống điều khiển bay của máy bay, có nhiều bộ điều khiển dự phòng để đảm bảo rằng hệ thống vẫn hoạt động ngay cả khi một bộ điều khiển bị lỗi <Wiki>
➤ Safe State Design (Thiết kế chế độ an toàn)
❓Nếu lỗi xảy ra thì hệ thống sẽ làm gì?
➥ Một số hệ thống cần phải có khả năng chuyển về chế độ an toàn (safe state) khi phát hiện ra lỗi nghiêm trọng hoặc các sự cố bất thường. Chế độ này giống như một setting mặc định, có thể nó sẽ tắt nguồn hệ thống, hoặc ví dụ như tín hiệu một số chân IO sẽ luôn OFF để đảm bảo thiết bị tắt (chẳng hạn cái bếp từ khi quá tải hoặc không phát hiện nồi được đặt lên nó sẽ tự ngắt). Một ví dụ khác, trong trường hợp hệ thống phanh điện tử của ô tô gặp lỗi, hệ thống có thể kích hoạt phanh cơ học để đảm bảo xe dừng lại an toàn.
⇒ Thiết kế trên là thiết kế theo kiểu Fail-Safe, tức là đảm bảo an toàn khi lỗi xảy ra.
Hoạt động Safe State |
Một kiểu thiết kế khác là Fail-operational (Hoạt động tiếp tục sau lỗi). Đối với các hệ thống quan trọng như xe tự lái hoặc máy bay, hệ thống nhúng phải có khả năng tiếp tục hoạt động một cách an toàn ngay cả khi một số lỗi xảy ra. Điều này có thể đạt được thông qua việc sử dụng các bộ vi xử lý dự phòng.
➤ Diagnostic and Self-Test Mechanisms (Cơ chế chẩn đoán và tự kiểm tra)
Phần cứng nhúng tuân thủ Functional Safety cần phải có khả năng tự kiểm tra và chẩn đoán các lỗi trong quá trình hoạt động. Điều này giúp phát hiện các lỗi sớm và ngăn chặn chúng trước khi gây ra sự cố nghiêm trọng. Các cơ chế này được sử dụng cực kỳ phổ biến trong các dòng vi điều khiển.
- Built-in Self Test (BIST): cơ chế cho phép phần cứng tự kiểm tra chức năng của nó trong thời gian thực. Ví dụ, trong bộ vi điều khiển của một hệ thống điều khiển động cơ, BIST có thể kiểm tra tính toàn vẹn của bộ nhớ hoặc các đường truyền dữ liệu giữa các thành phần để phát hiện sớm các hỏng hóc trước khi đi vào hoạt động.
- Watchdog Timers: module Timer với hoạt động giám sát hệ thống, tránh việc chương trình bị treo, hoặc không hoàn thành trong khoảng thời gian cho phép.
- CMU (Clock Monitoring Unit): CMU theo dõi tín hiệu đồng hồ của hệ thống và đảm bảo rằng nó duy trì tần số và độ chính xác trong giới hạn cho phép.
➤ Fault Tolerant Design (Thiết kế chịu lỗi)
Thiết kế chịu lỗi giúp phần cứng có khả năng tiếp tục hoạt động một cách ổn định dù một phần của hệ thống bị lỗi. Một số phương pháp phổ biến bao gồm:
- Error Correction Codes (ECC - Mã sửa lỗi): ECC là phương pháp phổ biến được sử dụng trong các bộ nhớ để phát hiện và sửa các lỗi bit đơn lẻ, đảm bảo tính toàn vẹn dữ liệu.
- Triple Modular Redundancy (TMR): Kỹ thuật này sử dụng ba bản sao của cùng một thành phần hoặc hệ thống, sau đó so sánh kết quả từ cả ba để phát hiện lỗi. Nếu một bản sao gặp lỗi, hệ thống vẫn có thể tiếp tục hoạt động với hai bản sao còn lại.
- Dual-Core LockStep: Thường gặp ở các chip ARMv8 như ARM Cortex M33, ARM Cortex R52, ... về cơ bản sử dụng 2 core được thiết kế để thực hiện cùng một tác vụ. Hai lõi này chạy đồng thời và thực hiện cùng một tập lệnh, từ đó đối chiếu kết quả và phát hiện lỗi.
➤ Isolation and Segmentation (Cách ly và phân đoạn)
Việc tách biệt các thành phần quan trọng của hệ thống là một cách hiệu quả để ngăn chặn lỗi lan rộng và ảnh hưởng đến toàn bộ hệ thống. Việc mà chúng ta dễ gặp nhất đó là cách ly nguồn điện - Power Supply Isolation để tránh nhiễu từ các mạch lực lớn ảnh hưởng đến các mạch điều khiển.
Ví dụ về mạch nguồn cách ly cho hệ thống nhúng |
Ngoài việc cách ly về nguồn thì việc phân tách theo từng chức năng cũng rất quan trọng. Các tác vụ quan trọng cần được phân vùng tách biệt về cả mặt phần cứng và phần mềm để không ảnh hưởng lẫn nhau. Ví dụ, hệ thống điều khiển phanh và hệ thống điều khiển động cơ có thể được cách ly với nhau để đảm bảo rằng lỗi ở một hệ thống sẽ không gây ảnh hưởng đến hệ thống khác.
➤ Electromagnetic Compatibility (EMC)
Nhiễu điện từ - EMI là một yếu tố cực kỳ quan trọng cần được xử lý trong thiết kế phần cứng. Đặc biệt khi số lượng các thiết bị điện - điện tử ngày càng tăng lên, các thiết bị điện tử, nguồn điện, động cơ, hệ thống truyền thông không dây và các mạch điện đều có thể phát ra sóng điện từ và gây ảnh hưởng đến hiệu suất cũng như độ chính xác của các thiết bị khác.
Trong mạch điện tử, các thành phần "nhạy cảm" như vi điều khiển, cảm biến, các đường truyền dữ liệu, ... sẽ cần được bảo vệ khỏi nhiễu điện từ. Một trong các phương án khá thông dụng đó là Shielding (Che chắn) - có thể sử dụng vỏ kim loại cho các linh kiện, tấm chắn giữa mạch điều khiển và các mạch công suất lớn, hoặc vỏ bọc chống nhiễu cho các dây tín hiệu.
Một phương pháp khác để chống nhiễu là Filtering (Lọc) - ở đây có rất nhiều thứ cần "lọc". Nguồn điện đầu vào có thể bị nhiễu thì chúng ta cần lọc nguồn - Power Filtering, các mạch như LC, RC Filter có thể được sử dụng. Tín hiệu đầu ra của các cảm biến có thể bị nhiễu, cần mạch lọc tín hiệu đầu ra Digital Filtering - các phương pháp như FIR, IIR, Moving Average Filter có thể được sử dụng. Các hệ thống đo và truyền thông có thể bị nhiễu, cần mạch lọc tín hiệu Analog Filtering - các phương pháp như lọc thông thấp, lọc thông cao, lọc thông dải, ... sẽ được áp dụng
Phần mạch lọc này khá thú vị và nhiều thông tin nên mình sẽ có một bài viết khác giới thiệu chi tiết hơn!
➤ Temperature Management (Quản lý nhiệt độ)
Một số thiết bị nhúng hoạt động trong môi trường khá khắc nghiệt (nhiều nhiễu và nhiệt độ cao), quản lý nhiệt độ là một yếu tố quan trọng để thiết bị hoạt động ổn định.
Chúng ta có thể dễ dàng bắt gặp các thanh tản nhiệt hoặc quạt tản nhiệt được đặt ngay trên vi điều khiển để giúp giảm nhiệt độ. Trong một số trường hợp khi nhiệt độ quá cao, thì vi điều khiển cần phát hiện được và đưa ra những phương án như tắt bớt chức năng không cần thiết, hoặc nghiêm trọng hơn thì cần tự ngắt mạch để đảm bảo an toàn cho chip.
Vì vậy trong các vi điều khiển hiện này thường tích hợp cảm biến nhiệt độ nội để có thể giám sát nhiệt độ của chip.
👉 Nhìn chung, các cách thiết kế trên đều tuân thủ theo các tiêu chuẩn về Functional Safety như ISO 26262 và IEC 61508. Đối với mảng nhúng thì việc hiểu về phần cứng cũng là một yếu tố quan trọng để thiết kế và triển khai một phần mềm tốt. Vì vậy nếu có những phương pháp khác mà mình chưa đề cập đến hoặc bổ sung góp ý thì mọi người comment bên dưới bài viết nha!
>>= Follow ngay =<<<