Khi một ngõ vào báo cháy bị đứt dây, thiết bị phải biết ngay đó là "hở mạch" — không phải "bình thường" hay "im lặng". Bài này dành cho kỹ sư phần cứng/firmware thiết kế mạch giám sát đường dây (line supervision) cho contact khô, cảm biến báo cháy, và cần phân biệt rõ mạch nào giám sát được, mạch nào không.
#Tại sao cần giám sát mạch (line supervision)
Mục đích của giám sát mạch là phát hiện hở mạch hoặc chập mạch trên đường tín hiệu trước khi có sự cố thật xảy ra — ví dụ dây cảm biến báo cháy bị đứt do chuột cắn, hoặc bị chập do ẩm, phải được báo lỗi ngay, không chờ đến khi có cháy thật mà tín hiệu không truyền được. Đây là tinh thần giám sát đường dây được đề cập trong các tiêu chuẩn về hệ thống báo cháy (theo tiêu chuẩn cụ thể mà thiết bị của bạn tuân thủ, cần tra điều khoản tương ứng).
Cần phân biệt hai cách tiếp cận:
| Tiêu chí | Giám sát liên tục | Kiểm tra định kỳ (polling) |
|---|---|---|
| Nguyên lý | Đo điện áp/dòng nền liên tục, phát hiện thay đổi ngay | Gửi tín hiệu hỏi và chờ phản hồi theo chu kỳ |
| Thời gian phát hiện lỗi | Gần thời gian thực (giới hạn bởi tần số lấy mẫu ADC) | Trễ theo chu kỳ polling, có thể vài giây |
| Áp dụng | Mạch tương tự có EOL (contact khô, cảm biến 2 dây) | Mạch số có giao tiếp hai chiều (RS-485, bus địa chỉ) |
| Chi phí phần cứng | Thấp — chỉ cần điện trở + ADC | Cao hơn — cần vi xử lý ở đầu cuối, giao thức |
Bài này tập trung vào giám sát liên tục bằng chia áp ADC, phù hợp với các ngõ vào/ra tương tự dạng contact khô.
#Nguyên lý điện trở cuối đường dây (EOL)
Điện trở cuối đường dây (End-Of-Line, EOL) là điện trở đặt ở đầu xa của mạch giám sát, tạo ra một dòng điện nền cố định khi mạch ở trạng thái bình thường (không kích hoạt, không lỗi). Nhờ dòng nền này, mạch đo phía thiết bị có thể phân biệt được:
- Hở mạch: điện trở đo được tăng vô hạn (dòng gần 0)
- Bình thường: điện trở đo được ≈ giá trị EOL danh định
- Kích hoạt (activation): điện trở giảm xuống một giá trị trung gian (do thêm điện trở song song khi cảm biến tác động)
- Chập mạch: điện trở đo được gần 0 Ω
Topology phổ biến dùng hai điện trở: một điện trở nối tiếp (R_series) đặt gần đầu đo để giới hạn dòng khi chập, và điện trở EOL (R_EOL) đặt cuối đường dây. Khi cảm biến tác động, thường có thêm một điện trở song song với EOL để tạo mức điện trở tổng thấp hơn, phân biệt được với trạng thái bình thường.
Đầu đo (ADC) ---[R_series]---+----[dây tín hiệu]----+---[R_EOL]---+--- GND | | (điểm đo áp) [R_activation] (song song, đóng khi cảm biến tác động) Giá trị điện trở minh họa mang tính định tính: R_EOL thường trong khoảng vài kΩ, R_series thường nhỏ hơn R_EOL một khoảng đủ để giới hạn dòng khi chập. Giá trị cụ thể phụ thuộc vào điện áp nguồn, độ nhạy ADC và dải điện trở cảm biến kích hoạt.
#Chia áp ADC và ánh xạ ngưỡng điện áp
Mạch chia áp chuyển điện trở mạch (thay đổi theo trạng thái hở/bình thường/kích hoạt/chập) thành điện áp mà ADC đọc được. Công thức chia áp cơ bản:
V_ADC = V_ref × R_mạch / (R_mạch + R_pullup)Trong đó R_mạch là điện trở tổng của đường dây (bao gồm EOL, dây, và điện trở kích hoạt nếu có), R_pullup là điện trở kéo lên phía mạch đo, V_ref là điện áp tham chiếu.
Bốn vùng ngưỡng được xác định bằng cách tính V_ADC tương ứng với từng giá trị R_mạch biên:
| Trạng thái | R_mạch (minh họa) | V_ADC (minh họa, V_ref = 3.3 V) | Nguồn |
|---|---|---|---|
| Hở mạch | → ∞ | tiến gần V_ref (giá trị cụ thể phụ thuộc R_pullup thực tế) | Tính theo công thức chia áp ở trên |
| Bình thường | ≈ giá trị EOL danh định | mức trung gian giữa hở và kích hoạt (tùy thiết kế) | Cần xác định qua bảng ngưỡng thiết kế thực tế |
| Kích hoạt | thấp hơn giá trị EOL (do điện trở song song) | thấp hơn mức bình thường, cao hơn mức chập | Cần xác định qua đo thực tế trên mẫu phần cứng |
| Chập mạch | → 0 | tiến gần 0 V | Theo nguyên lý chia áp, không cần nguồn riêng |
Sai số ảnh hưởng đến ngưỡng gồm ba nguồn chính:
- Dung sai điện trở: điện trở EOL thường có dung sai vài phần trăm (theo datasheet của linh kiện bạn dùng), cần cộng vào biên ngưỡng
- Nhiễu ADC: nhiễu lượng tử hóa và nhiễu điện áp tham chiếu làm dao động giá trị đọc, cần lọc/trung bình mẫu
- Trôi nhiệt: điện trở màng carbon có hệ số nhiệt điện trở lớn hơn điện trở màng kim loại, cần tham khảo hệ số nhiệt cụ thể theo datasheet của linh kiện dùng trong thiết kế, đặc biệt khi vận hành ngoài trời
Ngưỡng phân biệt giữa hai vùng liền kề phải có biên an toàn đủ lớn hơn tổng sai số này, nếu không sẽ xảy ra dao động trạng thái giả ở vùng biên.
#Trạng thái "chưa kiểm chứng" khi không có EOL
Với ngõ ra relay khô (dry contact output) hoặc ngõ vào không lắp điện trở cuối đường dây, mạch đo chỉ nhận được hai mức: đóng (0 Ω lý tưởng) hoặc hở (∞ lý tưởng). Không có cách nào phân biệt "hở do thiết kế" (relay đang mở) với "hở do đứt dây" hay "chập do lỗi". Vì vậy hệ thống không được suy diễn trạng thái "bình thường" cho các mạch này — mà phải khai báo một trạng thái riêng, tạm gọi là "chưa kiểm chứng" (unsupervised/unverified).
| Đặc điểm | DO có EOL | DO không có EOL (relay khô) |
|---|---|---|
| Phân biệt hở mạch thật | Có | Không |
| Phân biệt chập mạch thật | Có | Không |
| Trạng thái khả dụng | Hở / Bình thường / Kích hoạt / Chập | Đóng / Mở (không rõ nguyên nhân) |
| Trạng thái hiển thị đề xuất | 4 mức theo ngưỡng | "CHƯA KIỂM CHỨNG" khi không có phản hồi xác nhận |
#Chúng tôi đã gặp gì trên thiết bị thật
Hậu quả trực tiếp lên thiết kế: nhóm phải bổ sung trạng thái "CHƯA KIỂM CHỨNG" riêng cho DO5–DO8 trong cả tài liệu kỹ thuật và giao diện giám sát, để tránh trường hợp người vận hành hiểu nhầm các ngõ này "không báo lỗi" nghĩa là "mạch đang tốt". Đây là khác biệt quan trọng cần nêu rõ ngay từ giai đoạn viết đặc tả, không để đến lúc kiểm thử mới phát hiện thiếu trạng thái.
#Ảnh hưởng lên logic phần mềm và cảnh báo
Firmware cần xử lý tối thiểu 4 trạng thái cho các ngõ có EOL, và thêm trạng thái thứ 5 ("chưa kiểm chứng") cho các ngõ không có EOL. Tần số lấy mẫu ADC nên đủ nhanh để phát hiện chuyển trạng thái trong thời gian yêu cầu của ứng dụng cụ thể (xác định theo yêu cầu thiết kế, không có giá trị chung cho mọi trường hợp), nhưng cần có debounce để tránh báo giả khi tín hiệu dao động ở vùng biên giữa hai ngưỡng.
// Minh hoạ, chưa biên dịch — xử lý ngưỡng 4 trạng thái + debounce đơn giản
typedef enum {
LINE_OPEN,
LINE_NORMAL,
LINE_ACTIVATED,
LINE_SHORT,
LINE_UNVERIFIED // không có EOL
} line_state_t;
line_state_t classify_voltage(uint16_t adc_mv, bool has_eol) {
if (!has_eol) return LINE_UNVERIFIED;
if (adc_mv > V_OPEN_MIN_MV) return LINE_OPEN;
if (adc_mv > V_NORMAL_MIN_MV) return LINE_NORMAL;
if (adc_mv > V_ACTIVATED_MIN_MV) return LINE_ACTIVATED;
return LINE_SHORT;
}
// Debounce: chỉ chấp nhận trạng thái mới sau N mẫu liên tiếp giống nhau
line_state_t debounce_state(line_state_t new_state) {
static line_state_t last_state = LINE_NORMAL;
static uint8_t count = 0;
static line_state_t confirmed_state = LINE_NORMAL;
if (new_state == last_state) {
if (count < DEBOUNCE_SAMPLES) count++;
if (count == DEBOUNCE_SAMPLES) confirmed_state = new_state;
} else {
last_state = new_state;
count = 0;
}
return confirmed_state;
}DEBOUNCE_SAMPLES và các ngưỡng V_*_MIN_MV là hằng số cần xác định qua đo thực tế trên mẫu phần cứng, không lấy trực tiếp từ ví dụ minh họa trên.
#Checklist khi thiết kế
- Xác định rõ từng ngõ vào/ra có lắp EOL hay không, ghi vào bảng đặc tả trước khi code firmware
- Khai báo trạng thái "CHƯA KIỂM CHỨNG" cho mọi ngõ không có khả năng giám sát, không mặc định là "bình thường"
- Tính biên an toàn giữa các ngưỡng ADC dựa trên dung sai điện trở EOL + nhiễu ADC + trôi nhiệt
- Đo thực tế 4 trạng thái (hở/bình thường/kích hoạt/chập) trên mẫu phần cứng trước khi chốt ngưỡng trong firmware
- Thêm debounce/lọc mẫu để tránh báo giả khi trạng thái dao động ở vùng biên
- Ghi rõ trong tài liệu người dùng ngõ ra nào có giám sát, ngõ ra nào "chưa kiểm chứng"
- Kiểm tra lại toàn bộ bảng ngưỡng khi đổi nguồn điện áp tham chiếu hoặc đổi giá trị điện trở EOL
#Đọc tiếp
Bài kế tiếp trong series "Truyền thông & đo lường trên thiết bị": đo dòng điện bằng IC chuyên dụng (shunt + amplifier) — so sánh với chia áp ADC khi cần độ chính xác cao hơn cho giám sát tải.