Giới thiệu dự án

Trong ngành công nghiệp sản xuất ô tô hiện đại, sự gia tăng nhanh chóng của các hệ thống điều khiển điện tử (Electronic Control Unit - ECU) đã tạo ra bước đột phá về tiện nghi và an toàn. Theo thống kê của Hiệp hội Kỹ sư Ô tô Quốc tế (SAE), một chiếc ô tô du lịch cao cấp ngày nay trang bị từ 70 đến hơn 100 hộp ECU riêng biệt (như ECM, TCM, BCM, ABS/ESP, SRS). Nếu sử dụng phương pháp nối dây điểm - điểm truyền thống (point-to-point), tổng chiều dài dây dẫn trên một xe có thể vượt quá 4.000 mét với khối lượng hơn 50 kg, làm gia tăng đáng kể độ phức tạp lắp ráp, tiêu hao nhiên liệu và nguy cơ chập cháy điện.

Vấn đề cốt lõi đặt ra là nhu cầu cấp thiết về một môi trường truyền thông số tinh gọn, thời gian thực và tin cậy cao để liên kết toàn bộ các hệ thống điều khiển rời rạc. Tuy nhiên, tại các cơ sở đào tạo chuyên ngành Công nghệ Kỹ thuật Ô tô, sinh viên thường gặp khó khăn trong việc tiếp cận các mô hình thực nghiệm mạng truyền thông trực quan do thiết bị chẩn đoán chuyên dụng từ các hãng xe OEM có chi phí đầu tư rất lớn và cấu trúc phần mềm dạng "hộp đen" đóng kín.

Đề tài tốt nghiệp "Nghiên cứu, thiết kế, chế tạo mô hình mạng CAN trên ô tô" (thực hiện bởi nhóm tác giả Nguyễn Thị Mỹ Hồng, Thái Đức Thịnh; dưới sự hướng dẫn của PGS. TS. Đỗ Văn Dũng tại Trường Đại học Sư phạm Kỹ thuật TP.HCM) giải quyết trực tiếp rào cản này.

Mục tiêu cụ thể của dự án:

  1. Nghiên cứu toàn diện cơ sở lý thuyết chuẩn giao thức mạng CAN (Controller Area Network) theo tiêu chuẩn quốc tế ISO 11898.
  2. Thiết kế phần cứng mô hình mạng giao tiếp CAN phân tán sử dụng vi điều khiển 32-bit ARM Cortex-M3 (STM32F103C8T6) và vi điều khiển 8-bit AVR (Arduino Uno R3 kết hợp vi mạch điều khiển CAN độc lập MCP2515).
  3. Lập trình giải thuật truyền/nhận, lọc thông điệp (Message Acceptance Filter & Mask) và cơ chế phân xử đường truyền theo mức ưu tiên ID.
  4. Tích hợp giải mã giao thức và truyền dữ liệu điều khiển trực tiếp cụm đồng hồ táp-lô (Instrument Cluster) thực tế của dòng xe Hyundai Grand i10.
  5. Khai thác dữ liệu thời gian thực từ hộp ECU động cơ và phân tích cơ chế chẩn đoán On-Board Diagnostics II (OBD-II) qua bus CAN.

Mô hình thực nghiệm hoàn thiện đảm bảo khả năng truyền nhận dữ liệu ổn định ở các mức tốc độ từ 250 kbps đến 1 Mbps, độ suy hao tín hiệu bằng 0 trên chiều dài đường truyền mô phỏng và hỗ trợ 100% tính năng hiển thị trực quan các thông số vận hành của xe.

+-----------------------------------------------------------------------------+
|                            KIẾN TRÚC TỔNG THỂ MÔ HÌNH                       |
+-----------------------------------------------------------------------------+
|                                                                             |
|   +-------------------+                     +-------------------+           |
|   |   Node 1: STM32   |                     |  Node 2: ARDUINO  |           |
|   |  (STM32F103C8T6)  |                     |  (ATmega328P +    |           |
|   |   ARM Cortex-M3   |                     |     MCP2515)      |           |
|   +---------+---------+                     +---------+---------+           |
|             | (Tx/Rx)                                 | (Tx/Rx)             |
|   +---------+---------+                     +---------+---------+           |
|   | Transceiver       |                     | Transceiver       |           |
|   |  (TJA1050)        |                     |  (TJA1050)        |           |
|   +---------+---------+                     +---------+---------+           |
|             |                                         |                     |
|  ===========+=========================================+============ CAN_H   |
|  [120Ω]              BUS CAN VI SAI (ISO 11898-2)            [120Ω] (2.5V - |
|  ===========+=========================================+============ CAN_L   |
|             |                                         |             3.5V)   |
|   +---------+---------+                     +---------+---------+           |
|   |  Cụm đồng hồ taplo|                     | Cổng chẩn đoán    |           |
|   |  Hyundai Grand i10|                     | OBD-II / Real ECU |           |
|   +-------------------+                     +-------------------+           |
+-----------------------------------------------------------------------------+

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trong kiến trúc mạng ô tô, các giao thức truyền thông được phân chia theo tiêu chuẩn SAE (Class A đến Class D) nhằm tối ưu hóa chi phí và băng thông theo từng cụm ứng dụng chuyên biệt.

Tiêu chuẩn / Giao thức Tốc độ truyền tối đa Loại dây dẫn / Cấu trúc Phạm vi ứng dụng chính Đánh giá ưu / nhược điểm
LIN (Local Interconnect) 20 kbps 1 dây đơn (Single wire) / Master-Slave Điều khiển thân xe: gạt nước, nâng hạ kính, chỉnh gương Ưu: Chi phí cực thấp, dễ lắp đặt.
Nhược: Băng thông hẹp, độ trễ cao.
CAN-B (Low-Speed CAN) 125 kbps 2 dây xoắn / Tuyến Bus (Fault-tolerant) Điện thân xe, tiện nghi (BCM, điều hòa, ghế điện) Ưu: Khả năng chịu lỗi cao (hoạt động khi đứt 1 dây).
Nhược: Tốc độ hạn chế.
CAN-C (High-Speed CAN) 1.0 Mbps 2 dây xoắn vi sai / Tuyến Bus (Linear) Hệ thống truyền lực, an toàn chủ động (ECM, TCM, ABS/ESP) Ưu: Thời gian thực, chống nhiễu vượt trội, phân xử CSMA/CA.
Nhược: Cần 2 trở đầu cuối 120Ω.
FlexRay 10 Mbps 2 dây xoắn hoặc cáp quang / Lai Star-Bus Hệ thống lái điện tử tử (Steer-by-wire), phanh Brake-by-wire Ưu: Băng thông lớn, cơ chế TDMA tiền định.
Nhược: Giá thành linh kiện rất đắt.
MOST 24.5 – 150 Mbps Cáp quang học (POF) / Dạng vòng (Ring) Hệ thống giải trí đa phương tiện (Infotainment, Camera 360) Ưu: Băng thông cực lớn, miễn nhiễm nhiễu điện từ.
Nhược: Lắp đặt cáp quang phức tạp.

Mô hình phân loại yêu cầu hệ thống theo phương pháp MoSCoW:

  • Must have (Bắt buộc): Hoạt động truyền nhận khung chuẩn (Standard Frame 11-bit ID) và mở rộng (Extended Frame 29-bit ID); tải điện trở đầu cuối 120Ω tại hai mút bus; khả năng gửi lệnh kích hoạt kim báo tua máy, tốc độ xe và đèn cảnh báo trên cụm đồng hồ Hyundai Grand i10.
  • Should have (Nên có): Tích hợp bộ thu phát vi sai TJA1050; cơ chế lọc thông điệp phần cứng để giảm tải ngắt cho CPU; hiển thị trực tiếp dữ liệu thô qua cổng USB-UART lên máy tính.
  • Could have (Có thể có): Kết nối trích xuất dữ liệu sống (Live Data PIDs) từ cổng OBD-II thực tế trên xe.
  • Won't have (Chưa thực hiện): Triển khai giao thức nâng cao CAN-FD (Flexible Data-Rate) hoặc lớp mạng bảo mật nâng cao SecOC (Secure Onboard Communication).

Thiết kế hệ thống

Hệ thống mạng CAN trong đồ án được xây dựng dựa trên cấu trúc bus tuyến tính vi sai (Differential Bus Topology) tuân thủ tiêu chuẩn ISO 11898-2.

+-----------------------------------------------------------------------------------+
|                        SƠ ĐỒ KHỐI CHI TIẾT MỘT NÚT MẠNG CAN                       |
+-----------------------------------------------------------------------------------+
|                                                                                   |
|  +-----------------------------------------------------------------------------+  |
|  |                             VI ĐIỀU KHIỂN XỬ LÝ                             |  |
|  |                                                                             |  |
|  |   [Ứng dụng điều khiển] <---> [CAN Controller Logic]                        |  |
|  |   - Xử lý PID/DTC             - Đóng gói Frame (SOF, CRC, ACK, EOF)         |  |
|  |   - Giao diện I/O             - Bộ lọc Acceptance Filter & Mask             |  |
|  +----------------------------------------+------------------------------------+  |
|                                           | (Tx/Rx TTL: 0V - 3.3V/5V)             |
|  +----------------------------------------+------------------------------------+  |
|  |                          TRANSCEIVER (TJA1050)                              |  |
|  |                                                                             |  |
|  |   Bộ phát vi sai (Driver): Chuyển TTL -> Trạng thái Dominant/Recessive      |  |
|  |   Bộ thu vi sai (Receiver): So sánh điện áp Vdiff = (CAN_H - CAN_L)         |  |
|  +----------------------------------------+------------------------------------+  |
|                                           |                                       |
|                                           | (Tín hiệu vi sai)                     |
|                     +---------------------+---------------------+                 |
|                     |                                           |                 |
|            [CAN_H: 2.5V - 3.5V]                        [CAN_L: 2.5V - 1.5V]       |
|                     |                                           |                 |
|  ===================+===========================================+==== BUS CAN     |
|                                                                                   |
+-----------------------------------------------------------------------------------+

Công nghệ và linh kiện phần cứng

  • Nút điều khiển 1 (Master Node): Vi điều khiển STM32F103C8T6 (Core 32-bit ARM Cortex-M3, tần số 72 MHz, 64 KB Flash, 20 KB SRAM), tích hợp sẵn phần cứng bxCAN (Basic Extended CAN) hỗ trợ CAN 2.0A/B Active.
  • Nút điều khiển 2 (Sensor/Emulation Node): Board Arduino Uno R3 (Vi điều khiển 8-bit ATmega328P, tần số 16 MHz, 32 KB Flash) kết hợp Module mở rộng CAN MCP2515 (giao tiếp SPI với vi điều khiển) và IC chuyển đổi tín hiệu TJA1050.
  • Bộ thu phát vật lý (CAN Transceiver): NXP TJA1050 chuyển đổi mức logic số từ CAN Controller (Tx/Rx) sang mức điện áp vi sai trên 2 dây bus:
    • Trạng thái lặn (Recessive - Logic 1): $V_{CAN_H} = 2.5V$, $V_{CAN_L} = 2.5V \Rightarrow V_{diff} = 0V$.
    • Trạng thái trội (Dominant - Logic 0): $V_{CAN_H} = 3.5V$, $V_{CAN_L} = 1.5V \Rightarrow V_{diff} = 2.0V$.
  • Trở phối hợp trở kháng: Điện trở $120,\Omega \pm 1%$ bố trí tại 2 đầu bus, tạo điện trở tương đương toàn tuyến là $60,\Omega$, giúp triệt tiêu hiện tượng phản xạ sóng tín hiệu tần số cao.

Phân bổ địa chỉ và lọc thông điệp (Filter & Mask)

Cơ chế Acceptance Filter trên phần cứng MCP2515 và STM32 được cấu hình theo bảng bitmask:

  • Mask Register: 0x1FFFFFF8 (Kiểm tra chính xác 29 bit, bỏ qua 3 bit cuối).
  • Filter Register: 0x00001560 (Chấp nhận tất cả gói tin có ID nằm trong dải 0x00001560 đến 0x00001567).
  • ID chẩn đoán OBD-II:
    • 0x7DF: Broadcast Functional Request (Yêu cầu chung cho toàn bộ ECU).
    • 0x7E0: Physical Request gửi riêng tới ECM.
    • 0x7E8: Response Data từ ECM trả về thiết bị quét.

Methodology

Dự án áp dụng quy trình phát triển kết hợp chữ V (V-Model) rút gọn, chia làm 4 giai đoạn rõ ràng:

[02/04/2019]                                                       [22/07/2019]
+-----------------------------------------------------------------------------+
|                              TIẾN TRÌNH THỰC HIỆN ĐỀ TÀI                    |
+-----------------------------------------------------------------------------+
|                                                                             |
|  1. Nghiên cứu & Thiết kế               4. Tích hợp & Nghiệm thu            |
|  +---------------------------+          +---------------------------+       |
|  | - Khảo sát chuẩn ISO11898 |          | - Đọc Live Data ECU thực  |       |
|  | - Thiết kế 3D CAD CATIA   |          | - Kích hoạt Taplo i10     |       |
|  +-------------+-------------+          +-------------^-------------+       |
|                |                                      |                     |
|                v                                      |                     |
|  2. Gia công Phần cứng                  3. Lập trình & Đo kiểm      |       |
|  +---------------------------+          +---------------------------+       |
|  | - Hàn mạch nút CAN        | -------->| - Code Keil C (STM32)     |       |
|  | - Lắp ráp khung gá mica   |          | - Code Arduino IDE (C++)  |       |
|  | - Kết nối giắc OBD-II     |          | - Đo xung Hantek 6022BE   |       |
|  +---------------------------+          +---------------------------+       |
|                                                                             |
+-----------------------------------------------------------------------------+

Implementation và kết quả

Development process

Quá trình lập trình được triển khai độc lập trên hai môi trường phát triển: Keil C uVision 5 (dành cho STM32F103C8T6 sử dụng thư viện SPL - Standard Peripheral Libraries) và Arduino IDE (dành cho ATmega328P sử dụng thư viện mcp_can.h).

1. Cấu hình phần cứng bxCAN trên STM32F103C8T6 (Keil C)

#include "stm32f10x.h"
#include "stm32f10x_can.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

void CAN_Config_Initialization(void) {
    CAN_InitTypeDef        CAN_InitStructure;
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    GPIO_InitTypeDef       GPIO_InitStructure;

    /* 1. Cấp xung nhịp cho AFIO, GPIOB và bxCAN1 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

    /* 2. Remap chân CAN1 sang PB8 (RX) và PB9 (TX) */
    GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

    /* PB8: CAN_RX mode Input Floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* PB9: CAN_TX mode Alternate Function Push-Pull 50MHz */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* 3. Cấu hình tham số mạng CAN (Tốc độ: 500 kbps với PCLK1 = 36 MHz) */
    CAN_DeInit(CAN1);
    CAN_StructInit(&CAN_InitStructure);
    CAN_InitStructure.CAN_TTCM = DISABLE;
    CAN_InitStructure.CAN_ABOM = ENABLE;  /* Tự động thoát khỏi trạng thái Bus-Off */
    CAN_InitStructure.CAN_AWUM = DISABLE;
    CAN_InitStructure.CAN_NART = DISABLE; /* Tự động truyền lại nếu lỗi */
    CAN_InitStructure.CAN_RFLM = DISABLE;
    CAN_InitStructure.CAN_TXFP = DISABLE;
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;

    /* Baudrate = 36MHz / (Prescaler * (SJW + BS1 + BS2)) = 36M / (4 * (1 + 12 + 5)) = 500kbps */
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
    CAN_InitStructure.CAN_Prescaler = 4;
    CAN_Init(CAN1, &CAN_InitStructure);

    /* 4. Thiết lập bộ lọc thông điệp Filter Bank 0 */
    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; /* Nhận tất cả các ID */
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}

2. Lập trình phát xung điều khiển cụm đồng hồ táp-lô Grand i10 trên Arduino Uno

#include <SPI.h>
#include <mcp_can.h>

const int SPI_CS_PIN = 10;
MCP_CAN CAN_Node(SPI_CS_PIN);

void setup() {
    Serial.begin(115200);
    // Khởi tạo MCP2515 với thạch anh 8MHz và tốc độ mạng 500kbps
    while (CAN_Node.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("Lỗi khởi tạo Module MCP2515, thử lại...");
        delay(100);
    }
    CAN_Node.setMode(MCP_NORMAL);
    Serial.println("MCP2515 khởi tạo thành công ở chế độ Normal!");
}

void loop() {
    // Frame ID 0x545: Bật đèn Check Engine (MIL), báo nhiệt độ nước làm mát
    unsigned char stClusterCmd[8] = {0x00, 0x40, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00};
    CAN_Node.sendMsgBuf(0x545, 0, 8, stClusterCmd);

    // Frame ID 0x18F: Điều khiển kim vòng tua động cơ (Tachometer ~ 2500 RPM)
    unsigned char stRpmCmd[8] = {0xFE, 0x5C, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00};
    CAN_Node.sendMsgBuf(0x18F, 0, 8, stRpmCmd);

    delay(20); // Chu kỳ truyền 20ms tiêu chuẩn ô tô
}

Testing và validation

Hệ thống được kiểm tra, đo kiểm và thu thập tín hiệu vi sai bằng máy hiện sóng số Hantek 6022BE kết hợp phần mềm phân tích tín hiệu logic.

+-----------------------------------------------------------------------------+
|                   DẠNG SÓNG ĐO KIỂM VI SAI TRÊN MÁY HIỆN SÓNG               |
+-----------------------------------------------------------------------------+
|  Điện áp (V)                                                                |
|   4.0V +                                                                    |
|   3.5V +---------------+               +---------------+    <-- CAN_H (3.5V)|
|   3.0V |               |               |               |                    |
|   2.5V +---------------+---------------+---------------+--  <-- V_rec (2.5V)|
|   2.0V |               |               |               |                    |
|   1.5V +---------------+               +---------------+    <-- CAN_L (1.5V)|
|   1.0V +                                                                    |
|        |<- Dominant -> |<- Recessive ->|<- Dominant -> |                    |
|        |  (Bit logic 0)|  (Bit logic 1)|  (Bit logic 0)|                    |
+-----------------------------------------------------------------------------+
  • Kiểm tra tính toàn vẹn tín hiệu: Dạng sóng vi sai thu được giữa hai dây $V_{diff} = (CAN_H - CAN_L)$ tại mức Dominant đạt chuẩn xấp xỉ $2.02,V$, biên dạng sườn xung vuông vắn, không xuất hiện hiện tượng dao động ký sinh (ringing) nhờ phối hợp chính xác trở đầu cuối $120,\Omega$.
  • Kiểm thử cơ chế Bit Stuffing: Tạo chuỗi dữ liệu 6 bit 1 liên tiếp; phân tích khung đo thực tế chứng minh phần cứng tự động chèn thêm 1 bit 0 (Stuff bit) sau 5 bit 1 liên tiếp và node nhận tự động loại bỏ bit này trước khi đưa vào bộ nhớ đệm, đảm bảo khả năng tái đồng bộ xung nhịp (Resynchronization).
  • Kiểm thử phân xử đường truyền (Non-destructive Arbitration): Cho 2 node STM32 và Arduino cùng phát đồng thời ở thời điểm $t_0$. Node gửi Frame 0x18F (ID có trọng số nhị phân nhỏ hơn, nhiều bit 0 hơn) đã giành quyền truyền trọn vẹn mà không gây lỗi khung (Frame Error), node gửi Frame 0x545 tự động chuyển sang chế độ nhận mà không làm mất mát thông tin.

Kết quả đạt được

Tiêu chí đánh giá Kế hoạch ban đầu Kết quả thực tế Mức độ hoàn thành
Giao tiếp liên nút MCU Truyền nhận chuỗi ký tự mẫu giữa STM32 và Arduino Truyền và nhận thành công 100% gói tin dữ liệu chuẩn 8-byte ở tốc độ 500 kbps 100%
Điều khiển táp-lô Grand i10 Bật sáng đèn nền táp-lô Điều khiển mượt mà kim vòng tua (0-6000 RPM), kim tốc độ, bật/tắt chính xác đèn Check Engine, ABS, phanh tay 100%
Trích xuất dữ liệu ECU Đọc một số mã lỗi đơn giản Gửi thành công truy vấn OBD-II Functional Request 0x7DF, giải mã chính xác các PID: 0x0C (RPM), 0x0D (Speed), 0x05 (Coolant Temp) 100%
Mô hình kết cấu 3D Khung gỗ gắn linh kiện thủ công Thiết kế hoàn chỉnh trên CATIA V5-R26, cắt CNC mica trong suốt, bố trí giắc chẩn đoán OBD-II 16 chân tiêu chuẩn SAE J1962 100%

Đổi mới và đóng góp

  1. Thiết kế kiến trúc phần cứng lai (Hybrid Dual-MCU Architecture): Kết hợp giữa ARM Cortex-M3 32-bit (đại diện cho cấu trúc ECU công nghiệp hiện đại) và AVR 8-bit ATmega328P (đại diện cho các mạch nhúng thông dụng, giá rẻ). Giải pháp này giúp người học so sánh trực tiếp hiệu năng giữa phần cứng tích hợp CAN Controller trên chip (bxCAN) và CAN Controller độc lập giao tiếp qua bus SPI (MCP2515).

  2. Phương pháp giải mã tín hiệu ngược (Reverse Engineering) mạng CAN thân xe: Dự án đã giải mã và công bố các khung ID thực tế trên dòng xe thương mại phổ biến Hyundai Grand i10:

    • ID 0x18F: Chuỗi Byte [D1, D2] mang dữ liệu vòng tua máy: $\text{RPM} = (D2 \times 256 + D1) / 4$.
    • ID 0x545: Quản lý các cờ trạng thái cảnh báo hệ thống động cơ (MIL, Overheat).
  3. Tối ưu hóa chi phí chế tạo mô hình đào tạo: Tổng kinh phí linh kiện phần cứng để hoàn thiện mô hình thực nghiệm chỉ khoảng 1.200.000 VNĐ, thấp hơn 95% so với các bộ thực hành mạng truyền thông nhập khẩu chuyên dụng (thường có giá từ 30 - 50 triệu VNĐ), tạo điều kiện tối ưu để nhân rộng phục vụ đào tạo tại các trường kỹ thuật.


Ứng dụng thực tế và triển khai

+-----------------------------------------------------------------------------+
|                   MÔ HÌNH HÓA VẬT LÝ VÀ BỐ TRÍ KHUNG GÁ 3D                  |
+-----------------------------------------------------------------------------+
|                                                                             |
|   +---------------------------------------------------------------------+   |
|   |             MẶT TRƯỚC: MÔ HÌNH THỰC HÀNH MẠNG CAN Ô TÔ              |   |
|   |                                                                     |   |
|   |  +-----------------------------+  +------------------------------+  |   |
|   |  |   CỤM ĐỒNG HỒ TÁP-LÔ        |  |  CỔNG GIAO TIẾP & HIỂN THỊ   |  |   |
|   |  |   (HYUNDAI GRAND I10)       |  |  - Màn hình LCD / LED Status |  |   |
|   |  |   - Speedometer / Tachometer|  |  - Cổng chẩn đoán OBD-II 16P |  |   |
|   |  |   - Đèn báo: MIL, ABS, SRS  |  |  - Cổng USB-UART Debugger    |  |   |
|   |  +-----------------------------+  +------------------------------+  |   |
|   |                                                                     |   |
|   |  +-----------------------------+  +------------------------------+  |   |
|   |  |   KHỐI XỬ LÝ STM32F103      |  |  KHỐI ARDUINO + MCP2515      |  |   |
|   |  |   - Vi điều khiển Cortex-M3 |  |  - Vi điều khiển ATmega328P  |  |   |
|   |  |   - Nút nhấn giả lập tải    |  |  - Biến trở giả lập cảm biến |  |   |
|   |  +-----------------------------+  +------------------------------+  |   |
|   |                                                                     |   |
|   +---------------------------------------------------------------------+   |
|                                                                             |
+-----------------------------------------------------------------------------+
  • Phục vụ giảng dạy chuyên ngành: Mô hình trực tiếp làm giáo cụ trực quan cho học phần Mạng truyền thông trên ô tôHệ thống điều khiển tự động ô tô tại Khoa Cơ khí Động lực - Trường Đại học Sư phạm Kỹ thuật TP.HCM.
  • Hỗ trợ nghiên cứu thiết bị phụ trợ (Aftermarket Telematics): Cung cấp nền tảng phần cứng để phát triển các thiết bị HUD (Head-Up Display), hộp đen giám sát hành trình (Fleet Management Tracker), hoặc thiết bị chẩn đoán mã lỗi cầm tay giao tiếp chuẩn ISO 15765-4 CAN.
  • Lộ trình phát triển và mở rộng:
    • Giai đoạn 1 (Hiện tại): Đã hoàn thiện mô hình 2 nút vi điều khiển + 1 táp-lô + 1 cổng quét OBD-II.
    • Giai đoạn 2 (Mở rộng): Thiết kế thêm Gateway ECU trung tâm, tích hợp mạng LIN tốc độ thấp điều khiển hệ thống nâng hạ kính và gương chiếu hậu.
    • Giai đoạn 3 (Nâng cao): Nâng cấp vi điều khiển lên dòng STM32G4 / ESP32-S3 để hỗ trợ chuẩn CAN-FD (tốc độ dữ liệu 5 Mbps) và truyền dữ liệu chẩn đoán từ xa qua Wi-Fi/4G (OTA Diagnostics).

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Mô hình mới tập trung trên chuẩn CAN 2.0A/B truyền thống với kích thước vùng dữ liệu tối đa 8 byte mỗi frame, chưa hỗ trợ cấu trúc dữ liệu mở rộng 64 byte của chuẩn CAN-FD hiện đại.
  • Nguồn cấp mô hình hiện sử dụng nguồn tổ ong 12V-5A rời, chưa tích hợp các mạch lọc nguồn xung Transient Voltage Suppressor (TVS) để hấp thụ triệt để xung điện áp cao áp (Load Dump) phát sinh khi khởi động động cơ thực tế.

Hướng phát triển đề tài

  1. Thiết kế mạch chuyển đổi Gateway đa giao thức (CAN - LIN - FlexRay - Ethernet) ứng dụng trên các dòng xe Hybrid / Electric Vehicle (EV).
  2. Xây dựng phần mềm giao diện máy tính chuyên nghiệp trên nền tảng C# / Python (thay thế cho Terminal cơ bản) để tự động vẽ đồ thị tín hiệu cảm biến thời gian thực và tự động tạo mã chẩn đoán lỗi DTC.
  3. Tích hợp các bài thí nghiệm mô phỏng lỗi phần cứng vật lý (cắt rời 1 dây CAN_H, chập mạch CAN_L xuống Mass, mất trở đầu cuối $120,\Omega$) giúp sinh viên thực hành kỹ năng khoanh vùng hư hỏng mạng truyền thông.

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Ô tô / Cơ điện tử: Nắm vững bản chất xung điện áp vi sai trên bus, cơ chế đóng gói dữ liệu, giải thuật phân xử và thao tác thực hành trực tiếp trên cụm táp-lô ô tô thực.
  • Kỹ sư lập trình nhúng (Embedded Software Engineers): Nắm bắt phương pháp cấu hình thanh ghi phần cứng CAN Controller trên chip ARM Cortex-M3 (Keil C) và module ngoài MCP2515 qua SPI.
  • Kỹ thuật viên sửa chữa ô tô (Automotive Technicians): Hiểu sâu cơ chế truyền nhận dữ liệu của thiết bị chẩn đoán qua cổng OBD-II, giúp nâng cao năng lực khoanh vùng và xử lý sự cố đứt gãy đường bus trên xe du lịch đời mới.

Câu hỏi thường gặp

1. Tại sao bus CAN bắt buộc phải có hai điện trở 120Ω ở hai đầu đường truyền?

Trong đường truyền tín hiệu tần số cao (lên đến 1 Mbps), khi xung điện áp truyền đến điểm cuối của dây dẫn nếu gặp mạch hở sẽ bị phản xạ ngược trở lại (hiện tượng sóng phản xạ). Tín hiệu phản xạ này giao thoa và làm biến dạng các bit dữ liệu tiếp theo, gây ra lỗi bit (Bit Error) hoặc lỗi khung (Frame Error). Hai điện trở $120,\Omega$ đấu song song tạo ra trở kháng tương đương $60,\Omega$, bằng đúng trở kháng đặc tính của cặp dây xoắn vi sai, giúp hấp thụ hoàn toàn sóng tới và triệt tiêu phản xạ.

2. Sự khác biệt giữa ID 11-bit (CAN 2.0A) và ID 29-bit (CAN 2.0B) là gì?

Chuẩn CAN 2.0A (Standard Frame) sử dụng trường nhận dạng 11 bit, cho phép tạo ra tối đa $2^{11} = 2.048$ định danh thông điệp khác nhau. Chuẩn CAN 2.0B (Extended Frame) sử dụng trường nhận dạng mở rộng 29 bit (gồm 11 bit Base ID + 18 bit Extended ID), cung cấp hơn 536 triệu ($2^{29}$) định danh thông điệp, đáp ứng các hệ thống mạng phức tạp như giao thức SAE J1939 trên xe tải nặng và máy công trình.

3. Làm thế nào mạng CAN tránh được mất mát dữ liệu khi nhiều hộp ECU cùng phát tín hiệu?

Mạng CAN sử dụng cơ chế phân xử không phá hủy (Non-destructive Bitwise Arbitration) dựa trên phương thức CSMA/CA. Khi nhiều node phát đồng thời, các bit trong trường ID sẽ được so sánh từng bit một. Trạng thái Dominant (bit 0) có mức ưu tiên cao hơn và sẽ lấn át trạng thái Recessive (bit 1). Node nào phát bit 1 nhưng đọc lại thấy bit 0 trên đường truyền sẽ nhận biết có node khác ưu tiên hơn, ngay lập tức ngừng phát và chuyển sang chế độ nhận mà không làm hỏng dữ liệu của node có độ ưu tiên cao.

4. OBD-II giao tiếp trên mạng CAN hoạt động theo nguyên lý nào?

OBD-II là giao thức chẩn đoán lớp ứng dụng (HLP) chạy bên trên nền tảng vật lý của mạng CAN (tuân theo tiêu chuẩn ISO 15765-4). Khi thiết bị quét cắm vào cổng SAE J1962 (chân 6 là CAN_H, chân 14 là CAN_L), nó gửi thông điệp yêu cầu (Request ID 0x7DF hoặc 0x7E0) chứa mã Mode (ví dụ 01 - Live Data) và PID (ví dụ 0x0C - Tốc độ động cơ). Hộp ECM nhận lệnh, trích xuất dữ liệu cảm biến và phản hồi lại bằng thông điệp có ID 0x7E8.

5. Nút STM32 và Arduino trong mô hình có thể giao tiếp với nhau khi cài đặt khác Baudrate không?

Hoàn toàn không. Tất cả các node kết nối chung trên một tuyến bus CAN vật lý bắt buộc phải được cấu hình cùng một tốc độ Baudrate (ví dụ cùng $500\text{ kbps}$) và có tỷ lệ định thời bit (Bit Timing: SJW, Phase Seg 1, Phase Seg 2) tương thích nhau. Nếu một node lệch Baudrate, nó sẽ phát hiện lỗi bit/lỗi định dạng liên tục và phát cờ báo lỗi (Error Frame), gây tê liệt toàn bộ hoạt động giao tiếp trên tuyến bus.


Kết luận

Đề tài "Nghiên cứu, thiết kế, chế tạo mô hình mạng CAN trên ô tô" đã hiện thực hóa thành công một hệ thống mạng truyền thông số hoàn chỉnh, kết hợp hài hòa giữa cơ sở lý thuyết chuẩn hóa quốc tế ISO 11898 và khả năng ứng dụng thực nghiệm chuyên sâu. Với việc làm chủ công nghệ lập trình vi điều khiển ARM Cortex-M3/AVR, phân tích chính xác dạng sóng vi sai và điều khiển thành công cụm đồng hồ táp-lô Hyundai Grand i10 thực tế, công trình khẳng định giá trị thực tiễn cao trong công tác nghiên cứu, giảng dạy và phát triển các hệ thống điện tử nhúng ô tô thế hệ mới.