#4_Chuẩn giao tiếp CAN
Nắm rõ lý thuyết về chuẩn giao tiếp CAN sẽ giúp chúng ta hiểu rõ bản chất và thuận lợi cho thực hiện các dự án sau này…
Chào bạn, có phải bạn đang muốn tìm hiểu về giao tiếp can trên xe ô tô, trong vi điều khiển hay trên bất kì thiết bị nào khác? Để trả lời cho câu hỏi giao tiếp can là gì? Giao tiếp can hoạt động thế nào? Tại sao ô tô lại dùng giao tiếp CAN? Bài viết hôm nay sẽ giúp bạn trả lời được các câu hỏi này.
Phần cơ bản
Giới thiệu về chuẩn giao tiếp CAN
CAN được phát triển lần đầu tiên bởi Robert Bosch GmbH, Đức vào năm 1986 khi họ được Mercedes yêu cầu phát triển một hệ thống liên lạc giữa các bộ điều khiển trên xe.
Khi đó hầu hết các bộ điều khiển kết nối với nhau thông qua giao tiếp nối tiếp như I2C, UART,…Điều này dẫn đến việc kiểm soát hoạt động và việc liên kết chúng với nhau trở nên rất phức tạp. Ngoài ra còn có kết cấu cồng kềnh và chi phí nối dây cũng không hề nhỏ.
Sản xuất phải có lãi thì mới sản xuất, vì vậy mà giao tiếp CAN ra đời năm 1987 bởi Intel. Đánh dấu sự đột phá về cải tiến trong sản xuất ô tô, nâng cao độ chính xác, nhỏ gọn…
1 Hệ thống CAN bao gồm các phần chính
- Vi điều khiển – Trong vi điều khiển có tích hợp bộ điều khiển giao thức CAN
- Bộ thu phát CAN – Đầu ra TX – RX từ bộ điều khiển bên trên sẽ là đầu vào của bộ thu phát này
- 2 đường dây CAN_High và CAN_Low – đầu ra của Bộ thu phát CAN sẽ là CAN_H và CAN_L, giúp kết nối các Node với nhau
Vi điều khiển và bộ thu phát CAN sẽ là 1 Node. Các Node sẽ kết nối với nhau thông qua đường dây CAN_H và CAN_L tạo thành mạng lưới CAN.
Khái quát về truyền dữ liệu
Trong một mạng lưới, ví dụ trên ô tô, khi 1 thiết bị muốn gửi tín hiệu, nó sẽ đưa 1 mã số ra để so sánh, mã số được ưu tiên hơn sẽ được thực hiện trước. Cả hệ thống sẽ chờ cho mã số này truyền xong, sau đó mới lần lượt đến các mã số khác.
Ngoài ra quá trình truyền rất chính xác do có thể phải so sánh đến 15 bit (ví dụ 101…11) giống nhau thì mới coi là truyền OK.
Đó là khái quát cơ bản về đặc điểm cao cấp của giao tiếp CAN. Để tìm hiểu sâu hơn ta sẽ cùng đi tiếp các phần ở bên dưới.
Phần nâng cao
Từ các bài viết tham khảo trên Wikipedia, và 1 số bài viết khác như Medidas, ta đã tiếp thu được rất nhiều kiến thức. Tuy nhiên các bài viết dài, hơi khó hiểu, không áp dụng được khi sử dụng trong vi điều khiển. Vì vậy phần này sẽ tóm gọn lại tất cả các kiến thức cốt lõi của chuẩn giao tiếp CAN.
Các thành phần trong chuẩn giao tiếp CAN
Chuẩn giao tiếp CAN
Controller Area Network (CAN Bus) là giao thức truyền thông nối tiếp, tốc độ cao. Gồm có hai dây (CAN-High và CAN-Low). Ban đầu CAN được thiết kế dành cho ngành công nghiệp ô tô. Tuy nhiên hiện nay CAN cũng đã trở thành một tiêu chuẩn phổ biến trong tự động hóa công nghiệp và các ngành khác.
Một điểm siêu mạnh của CAN so với giao tiếp khác đó là có thể truyền xa. Có thể lên đến 6km, một con số khổng lồ so với I2C và UART. Thông số cơ bản:
Kích thước dữ liệu | Tối đa 8 Byte/ Khung dữ liệu |
Tốc độ truyền | Max 1Mbps ~ phạm vi 40m |
Phạm vi tối đa | 6km ~ Tốc độ 10Kbps |
Các thành phần trong chuẩn giao tiếp CAN
Hình ảnh dưới đây là toàn bộ các thành phần trong 1 quá trình truyền dữ liệu của chuẩn giao tiếp CAN (còn có 3 chế độ khác tương tự). Giao tiếp CAN 4 chế độ bao gồm:
- Data Frame – Truyền dữ liệu trên hệ thống các Node
- Remote Frame – Yêu cầu dữ liệu (Data Frame) từ bất kỳ Node nào trên hệ thống
- Error Frame – Khung lỗi, truyền đi từ 1 Node khi nó phát hiện lỗi, giúp các Node khác cũng phát hiện ra lỗi tương tự
- Overflow Frame – Khung báo tràn, truyền khi từ 1 Node khi nó đang bận.
Trong cả 4 chế độ đều có 2 kiểu truyền cơ bản là CAN 2.0A và CAN 2.0B
Dưới đây là phần phân tích 7 phần cụ thể từ khung truyền này.
Start Of Frame Field (SOF) – Trường bắt đầu khung
Đây là vị trí của bit đầu tiên trong khung, chiếm 1 bit dữ liệu ở mức thấp (0). Bit này đánh dấu sự bắt đầu mới của một Data Frame.
Arbitration Field (AF) – Trường xác định quyền ưu tiên
Như hình ảnh phía trên, ta thấy ngay 2 chế độ này khác nhau ở thành phần AF này. Ta xét phần chung trước là 11 bit Identifer (ID) và bit RTR, chế độ CAN 2.0A chỉ gồm 12 bit này.
- 11 bit Identifer (ID) – Chứa địa chỉ của Node (nghĩa là địa chỉ dài 11 bit đó) ~ 211 địa chỉ :)))
- 1 bit RTR – Dùng để phân biệt khung là Data Frame (mức 0) hay Remote Frame (mức 1)
Phần khác nhau của CAN 2.0A và CAN 2.0B, cụ thể hơn là phần thêm vào ở CAN 2.0B
- Bit SRR – Bit này ở mức 1 – so về vị trí thì ở CAN 2.0A ở mức 0
- Bit IDE – Bit này cũng mức 1 – Để xác nhận là phần địa chỉ sẽ mở rộng từ 11bit -> 29 bit
- 18 bit ID – Theo ngay sau IDE là 18 bit tiếp theo của địa chỉ (trước đó có 11 bit địa chỉ). Nghĩa là địa chỉ bây giờ dài 29bit đó
Control Field (CF) – Trường điều khiển
Ở trường này ta thấy được sự khác biết về bit IDE và 3 bit r, r0, r1
- bit IDE – tương tự ở phần AF, ở CAN 2.0A nó sẽ là mức 0 để tắt phần 18 bit địa chỉ mở rộng
- Các bit r, r0, r1 – Đều là bit dự trữ, bộ nhận không quan tâm đến các bit này
- bit DLC – Có độ dài 4 bit, quy định số byte của dữ liệu sẽ truyền
Bit DLC chỉ được mang giá trị từ 0 -> 8 ( 0000 -> 0100), tương ứng dữ liệu truyền sẽ từ 0 -> 8 byte.
Data Field (DF) – Trường dữ liệu
Trường này có độ dài từ 0 đến 8 byte tùy vào giá trị của DLC ở trường điều khiển.
Cyclic Redundancy Check Field (CRC) – Trường kiểm tra
Trường kiểm tra hay trường CRC gồm 16 bit và được chia làm hai phần là:
- CRC Sequence – gồm 15 bit CRC tuần tự để bảo vệ thông tin trong Data Frame và Remote Frame
- CRC Delimiter (DEL) – Luôn ở mức 1, làm nhiệm vụ phân cách trường CRC với trường ACK phía sau
15 bit CRC Sequence này có ở Node truyền và Node nhận. Khi nhận dữ liệu sẽ có thành phần CRC của Node truyền, và tại đây sẽ so sánh CRC của 2 Node với nhau. Nếu không giống -> Quá trình truyền có lỗi.
Acknowledge Field (ACK) – Trường xác nhận
Trường báo nhận hay trường ACK có độ dài 2 bit và bao gồm hai phần là ACK Slot và ACK Delimiter.
- ACK Slot (ACK)- có độ dài 1 bit, khi không có lỗi và CRC Sequence trùng khớp -> ACK Slot = 00
- CRC Delimiter (DEL) – Luôn ở mức 1, để phân cách ACK SLot với trường kết thúc phía sau
Ta có thể thấy bit ACK Slot luôn năm giữa 2 bit phân cách DEL có mức điện áp cao (1).
End Of Frame Field (EOF) – Trường kết thúc
Trường EOF là trường thông báo kết thúc một Data Frame hay Remote Frame. Trường này gồm 7 bit luôn ở mức cao (1111111).
Cách truyền dữ liệu trên chuẩn giao tiếp CAN
Cách truyền dữ liệu
Chọn chế độ trong 4 chế độ Data Frame, Remote Frame, Error Frame và Overflow Frame. Các chế độ đều có cách truyền dữ liệu giống nhau, ta xét chế độ Data Frame (bit RTR = 0)
Khi thiết lập CAN, đầu tiên ta chọn cách truyền:
- chế độ CAN 2.0A – RTR= 0, IDE = 0
- chế độ CAN 2.0B – RTR= 0, SRR = 1, IDE = 1, cấu hình thêm ID mở rộng (18 bit)
Sau khi thiết lập, cấu hình ID cho từng Node, cấu hình các bit DLC để chọn số dữ liệu sẽ truyền trong 1 nhịp.
Ta chọn chế độ Data Frame, CAN 2.0A và truyền 8 byte dữ liệu (~DLC = 0100).
Khi truyền dữ liệu, bit SOF sẽ bắt đầu, sau đó dựa trên các thông số thiết lập sẽ nhảy vào chế độ cụ thể.
Ở đây ta nhảy vào chế độ truyền Data Frame với CAN 2.0A, ở các Node trên mạng lưới sẽ so sánh địa chỉ ID của chúng. Nếu ID giống sẽ bắt đầu nhận dừ liệu từ Node phát.
Khi nhận xong dữ liệu (8 byte) sẽ tiến hành kiểm tra (so sánh trường CRC ở Node thu và Node phát). Nếu đúng thì cho bit ACK về 0, rồi kết thúc nhịp truyền bằng bit kết thúc EOF. Quá trình truyền hoàn tất.
Độ chính xác của chuẩn giao tiếp CAN
2 đường dây CAN_H và CAN_L đều để truyền dữ liệu. Ở đầu ra của bộ thu phát CAN, hình ảnh bên dưới, sẽ điều chế tín hiệu TX thành 2 dạng, đưa ra CAN_H và CAN_L
Trên CAN_H và CAN_L tín hiệu sẽ có dạng đối xứng với nhau. Vậy đối xứng để làm gì?
Đó chính là lý do khiến chuẩn giao tiếp CAN có thể truyền cực xa từ 40m -> 6km mà vẫn đảm bảo độ chính xác. Các bit ở trường CRC (15bit so sánh) và ACK (bit xác nhận) giúp tăng độ chính xác của dữ liệu.
Mức độ ưu tiên của các địa chỉ của Node trong hệ thống
Ví dụ: ID1 – 101.0101.0001 ~ 1361
ID2 – 100.0101.0011 ~ 1107
ID3 – 100.0101.1111 ~ 1119
ID2 sẽ được ưu tiên trước khi có tranh chấp giữa các Node.
Thông điệp có mức độ ưu tiên cao hơn (ID2) được đảm bảo được giao tiếp trước. Các thông điệp có mức ưu tiên thấp hơn (ID1) sẽ tự động được truyền lại trong chu kỳ bus tiếp theo hoặc trong một chu kỳ bus tiếp theo nữa nếu vẫn còn các thông điệp khác mà có mức ưu tiên cao hơn (ID3) đang chờ được gửi.
Ưu, nhược điểm của chuẩn giao tiếp CAN.
Ưu điểm
- Đơn giản, chi phí thấp. Giao tiếp CAN chỉ sử dụng 2 dây giúp kết nối các module điều khiển với nhau dễ dàng hơn
- Nhiều lợi ích về việc dễ lắp đặt và dễ sửa chữa, bảo trì khi có sự cố.
- Độ chính xác cực cao, được sử dụng trong các lĩnh vực quan trọng như ô tô, nhà máy,…
Nhược điểm
- Khó tiếp cận hơn, phức tạp hơn các chuẩn giao tiếp khác như I2C, SPI, UART,…
Phần tổng kết
Ta đã cùng nhau tìm hiểu cơ bản về lý thuyết của giao tiếp CAN. Đây là 1 khởi đầu tốt đẹp trước khi bắt đầu thực hành. Kiến thức về CAN được tóm tắt lại như sau:
- Giao tiếp CAN là giao tiếp có độ chính xác cực cao. Thích hợp trong các dự án lớn đòi hỏi độ chính xác tương ứng.
- Node là tên gọi của các thành phần trong hệ thống (vừa là master, vừa là slave)
- Có 2 dây bus là CAN_H và CAN_L, 2 dây này kết nối các Node trong hệ thống lại với nhau
- Quy trình truyền dữ liệu rất nghiêm ngặt. Trong 1 khung truyền có 7 thành phần: SOF, AF, CF, DF (hoặc RF, EF, OF tương ứng 4 chế độ), CRC, ACK, EOF.
Việc tìm hiểu các chuẩn giao tiếp thường gặp khác lúc này sẽ trở nên rất dễ dàng. Bạn có thể đọc thêm các chuẩn giao tiếp khác:
Bạn có thắc mắc gì trong bài viết không?
Đánh giá và để lại bình luận bên dưới nhá.
Sửa chỗ ưu nhược điểm kìa anh ơi. (Còn đang để SPI)
Okee