Các kiểu lỗi: Có 5 kiểu lỗi cơ bản, đó là
2.3.8.1. Lỗi bit
Một lỗi về bit phải được phát hiện trong thời gian truyền 1 bit đó, khi mà giá trị của bit được giám sát khác với giá trị bit đã gửi, tức là một bộ truyền gửi đi một bit trội lên nhưng lại phát hiện một bit lặn , hay nó gửi đi một bit lặn nhưng lại phát hiện ra một bit trội trên dây bus.
65
Hình 2. 57 Các dạng lỗi
2.3.8.2. Lỗi chèn/ nhồi bit
Hai trường bit còn lại của khung dữ liệu và khung yêu cầu dữ liệu (là gờ phân cách CRC, rãnh ACK và EOF) là các dạng cố định và không được chèn bit ở đây. Khung lỗi và khung quá tải cũng là các dạng cố định và không được mã hóa bằng việc nhồi bit. Một lỗi nhồi bit phải được phát hiện tại thời gian truyền 1 bit của bit thứ 6 trong 6 bit đồng cấp liên tiếp trong vùng nhồi bit của khung và nó sẽ tạo ra một khung lỗi ở lần truyền bit kế tiếp. Sáu bit này có thể được mã hóa theo phương pháp nhồi (hay chèn) bit.
2.3.8.3. Lỗi CRC
Chuỗi CRC chứa kết quả tính toán chuỗi bit CRC của bộ truyền (kiểm tra tổng). Các bộ tiếp nhận cũng tính toán chuỗi CRC giống như cách bộ truyền đã làm. Theo đó một lỗi CRC phải được phát hiện nếu kết quả tính toán không giống với kết quả nhận được trong dãy CRC, hay nói cách khác là kết quả tính toán trong bộ truyền và bộ tiếp nhận không giống nhau. Trong trường hợp này, bộ truyền sẽ loại bỏ/ thải hồi thông báo đó và truyền một khung lỗi ở bit kế tiếp gờ phân cách CRC. Sự kiểm tra tổng CRC sẽ chỉ được dùng để phát hiện lỗi, nó không được dùng để khắc phục lỗi.
2.3.8.4. Lỗi khung
Lỗi này phải được phát hiện khi một dạng cố định của trường bit chứa một hoặc nhiều bit không hợp lệ. Tức là bộ truyền phát hiện ra một bit trội trong phần có định dạng cố định trong gờ phân cách CRC, rãnh ACK và EOF. CHÚ Ý: Trong bộ tiếp nhận,
66 một bit trội xuất hiện trong bit cuối cùng của phần kết thúc khung EOF thì không bị xem là lỗi.
2.3.8.5. Lỗi xác nhận
Với việc kiểm tra lỗi ACK thì bộ truyền sẽ kiểm tra vùng rãnh xác nhận (ACK SLOT). Nếu khung không bị lỗi thì nó là bit trội. Các lỗi được phát hiện sẽ được thông báo bằng cách truyền đi một cờ báo lỗi ở ngay tại lần truyền bit kế tiếp.
Ngoài các lỗi cơ bản kể trên, phải kể đến các lỗi cục bộ xảy ra trong phần kết thúc của khung (EOF). Cụ thể như sau:
Nếu một trong các bít trong phần kết thúc của khung (EOF) từ bit 1 đến bit 6 bị phát hiện là các bit trội thì nút đó sẽ gửi đi một cờ lỗi để toàn cục hóa lỗi đó.
2.3.9. C sở lý thuyết của việc phát hiện lỗi
Để phát hiện lỗi trong các khung dữ liệu của một thông điệp thì giao thức CAN kết hợp các cách tiếp cận sau:
-Kiểm tra vòng lặp thừa: Nó đánh giá thông tin trong khung và chèn một dòng bit kiểm tra sự dư thừa vào lúc kết thúc của quá trình truyền, và được kiểm tra lại ở cuối quá trình nhận.
-Kiểm tra khung: Kiểm tra định dạng của khung và các trường bit riêng của nó để phát hiện các lỗi về định dạng có thể xảy ra.
-Kiểm tra sự xác nhận: Nó xác minh rằng một thông báo ACK theo sau một quá trình truyền thành công.
67
Hình 2. 58 Lớp giao thức trong CAN
Hình 2. 59 Chức năng lớp giao thức trong CAN
ISO 11898 nói chung định nghĩa 02 lớp Lớp vật lý và Lớp dữ liệu – liên kết trong mô hình 07 tầng OSI, trong đó:
68 -Lớp vật lý định nghĩa cách biểu diễn cũng như cách thu nhận bit 0 và 1, cách định thời và cách đồng bộ hóa. Là cấp thấp nhất trong bộ giao vận. Bao gồm các thành phần vật lý như: đường dây, và điện áp dùng để gửi thông tin.
-Lớp dữ liệu – liên kết: được chia làm 02 lớp con nhỏ hơn là Điều khiển liên kết logic và Điều khiển truy cập trung gian (MAC) nhằm định nghĩa khung truyền và những nguyên tắc về quyền ưu tiên.
Ngoài ra, ISO 11898 còn định nghĩa một số cơ chế khác có liên quan như kiểm tra lỗi, xử lí lỗi. Cơ chế kiểm tra và xử lý lỗi được chia thành 05 loại là: lỗi bit, lỗi nhồi bit, lỗi CRC, lỗi định dạng khung và lỗi ACK.
2.3.11. Bộ lọc và tiêu chuẩn so sánh cho việc chấp nhận khung dữ liệu đến
Bộ lọc và tiêu chuẩn so sánh được sử dụng để xác định bit nào trong mã ID của khung nhận được so sánh với bộ lọc.
Hình 2. 60 Ví dụ minh họa cho bộ lọc tiêu chuẩn so sánh chấp nhận tin nhắn
-Nếu tiêu chuẩn so sánh được thiết lập là 0, thì sẽ tự động chấp nhận các khung có ID tương ứng, không quan tâm đến giá trị bit của bộ lọc.
-Nếu tiêu chuẩn so sánh được thiết lập là 1, bit ID tương ứng sẽ so sánh giá trị với bit của bộ lọc.
Ví dụ 1: Chúng ta mong muốn chỉ nhận duy nhấn khung có chứa ID là 00001567 (giá trị hexa) thì ta:
-Thiết lập bit của bộ lọc là 00001567.
-Thiết lập bit tiêu chuẩn so sánh là 1FFFFFF.
-Khi có một khung đến thì ID của nó sẽ so sánh với bit của bộ lọc mà ta đã thiết lập nó sẽ so sánh tất cả các bit, khung không đúng với ID mong muốn sẽ bị loại.
69 Ví dụ 2: Khi chúng ta muốn nhận tất cả các khung.
-Thiết lập bit của bộ lọc là 0.
-Thiết lập bit tiêu chuẩn so sánh là 0.
Ví dụ 3: Muốn nhận khung có ID 00001560 đến 00001567. -Thiết lập bit của bộ lọc 00001560.
70
Chư ng 3. MÔ HÌNH MẠNG CAN 3.1. Giới thiệu về phần cứng
Hình . 1 Sơ đồ mạch điện hệ thống
3.1.1. Tìm về Board Arm STM32F103T8C6
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0, F1, F2, F3, F4… STM32F103 thuộc họ F1 với lõi là ARM COTEX M3. STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như công cụ lập trình khá đa dạng và dễ sử dụng.
71 Sơ lược về Board trên:
-ARM 32-bit Cortex M3 với xung tối đa là 72Mhz. -Bộ nhớ:
+ 64 kbytes bộ nhớ Flash (bộ nhớ lập trình). + 20kbytes SRAM.
- ung, khởi động lại và quản lý nguồn. -Điện áp hoạt động 2.0V -> 3.6V.
-Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz.
-Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz. -Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC. -Trong trường hợp điện áp thấp:
+ Có các chế độ: ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
+ Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data khi mất nguồn cấp chính.
+ 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ. + Khoảng giá trị chuyển đổi từ 0 – 3.6V. + Lấy mẫu nhiều kênh hoặc 1 kênh. + Có cảm biến nhiệt độ nội.
-DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của CP .
-7 kênh DMA.
-Hỗ trợ DMA cho ADC, I2C, SPI, ART. -7 Bộ định thời
-3 Bộ định thời 16 bit hỗ trợ các IC/OC/PWM.
-1 Bộ định thời 16 bit hỗ trợ để điều khiển động cơ với các chế độ bảo vệ như ngắt đầu vào, dead-time…
-1 Hệ thống định thời 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay…. -Hỗ trợ 9 kênh giao tiếp bao gồm:
+ 2 bộ I2C (SMBus / PMBus). + 3 bộ USART.
72 + 1 bộ giao diện CAN (2.0B Active).
+ USB 2.0.
+ Kiểm tra lỗi CRC và 96-bit ID.
3.1.2. Tìm hiểu về Board ARDUINO UNO R3
Mạch ARDUINO UNO là dòng mạch ARDUINO phổ biến, khi mới bắt đầu làm quen, lập trình với ARDUINO thì mạch ARD INO thường nói tới chính là dòng ARDUINO UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (mạch ARDUINO UNO R3). ARDUINO UNO thế hệ thứ 3, với khả năng lập trình cho các ứng dụng điều khiển phức tạp, phổ biến và dễ sử dụng nhất trong các dòng Arduino hiện nay cũng như tương thích với nhiều loại ARDUINO Shield nhất.
Hình 3.3 ARDUINO UNO R3
Sơ lược về board:
-Vi điều khiển ATmega328 họ 8 bit.
-Điện áp hoạt động 5V DC (chỉ được cấp qua cổng SB). -Tần số hoạt động16 MHz.
-Dòng tiêu thụ khoảng 30mA.
-Điện áp vào khuyên dùng 7-12V DC. -Điện áp vào giới hạn 6-20V DC. -Số chân Digital I/O14 (6 chân PWM).
73 ATmega328 (mặc định thì các điện trở này không được kết nối).
-Số chân Analog 6 (độ phân giải 10bit). -Dòng tối đa trên mỗi chân I/O30 mA. -Dòng ra tối đa (5V) 500 mA.
-Dòng ra tối đa (3.3V) 50 mA.
-Bộ nhớ flash32 KB (ATmega328) với 0.5KB dùng bởi bootloader.
3.1.3. Tìm hiểu về transceiver (TJA1050, MCP2551, SN65HVD2301-2)
Là bộ chuyển đổi tín hiệu giữa bộ điều khiển CAN và đường truyền vật lý, để giao tiếp với bus CAN và lấy dữ liệu từ nó.
Cách thức hoạt động là dây CAN_H và CAN_L được kết nối với các đầu vào của bộ so bên trong của chip. Các bộ so này đo các đầu vào và có thể cho chúng ta đầu ra điện áp khác nhau của 2 tín hiệu. Nếu đầu ra điện áp là 0V, thì được cho là trạng thái trội. Nếu điện áp lớn hơn 1V, thì gọi là trạng thái lặn.
Nhiều hệ thống con có thể kết nối với mạng CAN và mỗi hệ thống có thể giao tiếp với vi điều khiển hoặc chip CAN qua kết nối, mặc dù không phải cùng một lúc. Điều này cho phép vi điều khiển phân tích dữ liệu từ tất cả các đơn vị này và phản hồi phù hợp với dữ liệu và hệ thống con nào được ưu tiên. Đây là một hệ thống liên lạc dựa trên thông báo giữa vi điều khiển và tất cả các hệ thống con trên bus CAN.
Bảng 3. 1 Các dòng truyền nhận phổ biến
MCP2551 SN65HVD230(1,2) TJA1050
Tương thích với tiêu chuẩn ISO-11898. Hoạt động với tốc độ lên đến 1Mbit/s. Điện áp hoạt động từ 4.5 đến 5.5V. Lên đến 120 nút có thể kết nối vào mạng. Thích hợp cho các giao diện xe điện áp 12V hoặc 24V.
Khả năng chống nhiễu cao.
Tương thích với tiêu chuẩn ISO-11898.
Tốc độ cao lên đến 1Mbit/s.
Tương thích với thiết bị 3.3V và 5V. Ít nhất 110 nút được kết nối vào mạng. Phát xạ điện từ thấp. 1 nút không cấp nguồn không làm ảnh hướng đến các tuyến bus. Cách nhiệt tốt.
Tương thích với tiêu chuẩn ISO-11898-2.
Thiết kế với tốc độ dữ liệu lên đến 1Mbit/s.
Hoạt động với điện áp chỉ 3.3V.
Cho phép 120 nút kết nối đến mạng.
Cách nhiệt.
Thiết kế an toàn khi hở mạch xảy ra.
74
3.1. 4. Tìm hiểu về vi điều khiển CAN MCP2515 và Module MCP2515
Vi điều khiển MCP2515 trong bộ điều khiển CAN quản lý gói dữ liệu, mã hóa khung dữ liệu, giải mã bit, phát hiện lỗi, đồng bộ dữ liệu,..Hổ trợ CPU quản lí tin nhắn, tương thích với các đặc điểm kỹ thuật của CAN 2.0B.
Hình 3. 4 Module MCP2515 CAN
Module CAN dùng chip CAN Controller MCP2515 và bộ truyền nhận CAN TJA1050 là module mở rộng ngoại vi CAN.
Module còn tích hợp các Jump J1 J2, trong đó:
-J1 là jump chọn chế độ tốc độ giao tiếp, nếu Jump 1 được nối thì chip TJA1050 cho phép giao tiếp trên mạng CAN- B S với tốc độ cao nhất có thể, lên tới 1M. Nếu Jump 1 không được kết nối thì TJA1040 giao tiếp với B S CAN tốc độ thấp, < 10 kbps, ở chế độ này cho phép khoảng cách truyền xa hơn và nối được nhiều node mạng CAN trên bus vật lý hơn.
-J2 là jump nối điện trở liên kết. Mỗi B S CAN có 2 điện trở 120 Ohm ở hai đầu bus. Nếu J2 nối thì module sẽ là nốt mạng đầu hoặc node mạng cuối. J2 không nối khi sử dụng ở module giao tiếp với mạng CAN B S đã có sẵn điện trở ở 2 đầu. Thiết kế CMOS tiết
kiệm năng lượng.
Chống ngắn mạch đến ắc quy và GND.
75 Thông số kỹ thuật:
-Chuẩn giao tiếp SPI, có chân ngắt khi nhận được gói tin hợp lệ.
-Điện áp hoạt động: 4.75 5.25V. Tương thích đầy đủ với chuẩn ISO 11898 cho hệ thống hoạt động ổn định, chính xác.
3.1.5. ECU của xe
3.1.5.1. Tổng quan về ECU
Hình 3. 5 ECU trên xe
ECU là một thuật ngữ được viết tắt từ Electronic Control nit , nghĩa là Bộ phận điều khiển điện tử . Nhưng đôi khi EC còn được hiểu là Engine Control nit , tức chỉ nghĩa hẹp hơn so với nghĩa ban đầu nhưng trong khuôn khổ bài này thì ta sẽ hiểu theo nghĩa rộng, tức là Electronic Control nit .
EC được hiểu một cách đơn giản là bộ não điều khiển của một hệ thống nào đó trên ô tô. Và một chiếc ô tô hiện đại ngày nay có khoảng vài chục cái EC như vậy để điều khiển vận hành các hệ thống điện – điện tử trên xe.
Về phương diện nguyên lý hoạt động, ECU sẽ nhận các thông tin dữ liệu từ các input (các cảm biến, công tắc, tín hiệu điều khiển,..) để đưa vào bộ vi xử lý theo một chương trình đã được lập trình sẵn để cho ra tín hiệu output đến các bộ phận chấp hành.
Nhìn chung ECU có cấu tạo cơ bản gồm bộ vi xử lý, bộ nhớ và đường truyền dữ liệu vào/ra.
3.1.5.2. Kiến trúc ECU
76
Hình 3.6 Cấu tạo hệ thống ECU
Được cấu tạo từ 3 bộ phận chính đó là: Bộ nhớ trong của ECU, bộ vi xử lý và đường truyền – BUS.
3.1.5.2.2. Bộ nhớ trong ECU
Bao gồm 4 chi tiết đảm nhiệm 4 chức năng riêng biệt bao gồm: RAM, ROM, PROM, KAM.
RAM là viết tắt của cụm từ Random Access Memory, có nhiệm vụ truy xuất ngẫu nhiên và dùng để lưu trữ thông tin mới ghi trong bộ nhớ và được xác định bởi bộ vi xử lý. RAM sẽ đọc và ghi lại các số liệu theo từng địa chỉ bất kỳ.
ROM là viết tắt của cụm từ Read Only Memory, có nhiệm vụ lưu trữ các thông tin thường trực. ROM chỉ sử dụng để đọc những thông tin được lập trình có sẵn, mà không thể ghi vào được. Bởi vậy, ROM là nơi cung cấp những thông tin cho bộ vi xử lý.
KAM là viết tắt của cụm từ Keep Alive Memory, dùng để lưu trữ những thông tin mới tạm thời để cung cấp các thông tin này đến cho bộ vi xử lý. KAM vẫn sẽ duy trì bộ nhớ cho dù các chi tiết không hoạt động hoặc tắt công tắc máy. Tuy nhiên, nếu bị mất nguồn cung cấp từ acquy đến máy tính thì bộ nhớ KAM sẽ bị mất dữ liệu.
PROM là viết tắt của cụm từ Programmable Read Only Memory. PROM có cấu trúc cơ bản giống như ROM nhưng cho phép nạp dữ liệu nơi sử dụng chứ không phải nơi sản xuất giống ROM. Ở những đòi hỏi khác nhau, PROM sẽ cho phép sửa đổi chương trình điều khiển.
3.1.5.2.3. Bộ vi xử lý
Là bộ phận quan trọng nhất trong ECU, khi tiếp nhận các tín hiệu của cảm biến thông qua các bộ nhớ trong của ECU, những tín hiệu này ngay lập tức được gửi đến Bộ vi xử
77 lý. Lúc này, bộ vi xử lý sẽ tính toán và đưa ra mệnh lệnh cho bộ phận chấp hành để điều