Controller Area Network (CAN) hay CAN Bus là một giao thức truyền thông nối tiếp được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau. Bài viết này sẽ cung cấp một cái nhìn tổng quan về giao thức CAN, từ lịch sử phát triển, ưu điểm, cách thức hoạt động đến các ứng dụng thực tế.
Mục Lục
Lịch Sử Phát Triển Của Giao Thức CAN
Giao thức CAN được phát triển lần đầu tiên vào năm 1986 bởi Robert Bosch GmbH (Đức) theo yêu cầu của Mercedes-Benz. Mục tiêu ban đầu là tạo ra một hệ thống liên lạc giữa các bộ điều khiển điện tử (ECU) trên xe hơi. Vào thời điểm đó, giao tiếp UART điểm-điểm không còn đáp ứng được nhu cầu kết nối đa chủ. Mạng CAN đầu tiên được Intel sản xuất vào năm 1987.
Sơ đồ mạng CAN trong xe hơi
Về mặt lý thuyết, CAN có thể kết nối tới 2032 thiết bị trên một mạng duy nhất, với tốc độ truyền dữ liệu lên đến 1 Mbit/giây, đáp ứng nhu cầu điều khiển thời gian thực. Giao thức này còn có khả năng hạn chế và phát hiện lỗi, tăng độ tin cậy trong môi trường nhiễu.
Thông số kỹ thuật CAN 2.0, được Bosch phát hành, chia thành hai phiên bản:
- CAN tiêu chuẩn (2.0A): Sử dụng ID 11 bit.
- CAN mở rộng (2.0B): Sử dụng ID 29 bit.
Sự khác biệt chính giữa hai phiên bản nằm ở độ dài của mã ID.
Có hai tiêu chuẩn ISO cho CAN, khác nhau ở lớp vật lý:
- ISO 11898: Dành cho các ứng dụng tốc độ cao lên đến 1 Mbit/giây.
- ISO 11519: Giới hạn tốc độ tối đa 125 kbit/giây.
Dưới đây là tóm tắt các mốc quan trọng trong lịch sử phát triển của giao thức CAN:
- 1983: Bosch bắt đầu dự án phát triển mạng trong xe hơi.
- 1986: Giao thức CAN chính thức ra mắt.
- 1987: Intel và Philips sản xuất chip điều khiển CAN đầu tiên.
- 1991: Bosch công bố thông số kỹ thuật CAN 2.0.
- 1992: Thành lập tổ chức CiA (CAN in Automation). Mercedes-Benz trang bị CAN trên xe hơi.
- 1993: Xuất bản tiêu chuẩn ISO 11898.
- 1994: Hội nghị CAN quốc tế (iCC) lần thứ nhất. Allen-Bradley giới thiệu giao thức DeviceNet.
- 1995: Xuất bản tiêu chuẩn ISO 11898 sửa đổi (định dạng khung mở rộng). CiA xuất bản giao thức CANopen.
CiA (CAN in Automation): Là một tổ chức phi lợi nhuận, được thành lập từ năm 1992, tập hợp các nhà sản xuất và người sử dụng trên toàn thế giới để phát triển và hỗ trợ CANopen và các giao thức CAN lớp cao hơn.
DeviceNet và CANopen: Là hai chuẩn quy định hoạt động của CAN ở lớp ứng dụng (Application Layer), dựa trên chuẩn CAN ở lớp liên kết dữ liệu (Data Link Layer) và lớp vật lý (Physical Layer).
Tổng Quan Về CAN/CAN Bus
Controller Area Network (CAN hoặc CAN Bus) là một công nghệ mạng nối tiếp tốc độ cao, bán song công, sử dụng hai dây để truyền dữ liệu. Ban đầu, CAN được thiết kế cho ngành công nghiệp ô tô, nhưng hiện nay đã trở thành một tiêu chuẩn phổ biến trong tự động hóa công nghiệp và nhiều lĩnh vực khác.
Mô hình mạng CAN đơn giản
Ưu Điểm Của Giao Thức CAN
CAN sở hữu nhiều ưu điểm nổi bật, khiến nó trở thành lựa chọn hàng đầu trong nhiều ứng dụng:
- Đơn giản và chi phí thấp: Kết nối chỉ với 2 dây, giúp việc lắp đặt, sửa chữa và bảo trì trở nên dễ dàng hơn.
- Giao thức chung: Cho phép các nhà cung cấp khác nhau phát triển các module điều khiển tương thích.
- Ưu tiên thông điệp: Mỗi thông điệp có một mức độ ưu tiên, đảm bảo thông điệp quan trọng nhất được truyền trước.
- Cấu hình linh hoạt: Cho phép thiết lập các thông số như thời gian bit, thời gian đồng bộ, độ dài dữ liệu.
- Nhận dữ liệu đa điểm: Một thông điệp có thể được nhận bởi nhiều node cùng lúc.
- Nhiều master (multimaster): Không có node trung tâm, tăng tính linh hoạt và khả năng chịu lỗi.
- Phát hiện và báo hiệu lỗi: Sử dụng mã CRC để kiểm tra lỗi và tự động truyền lại thông điệp bị lỗi.
- Tự động truyền lại: Các thông điệp bị lỗi sẽ được tự động truyền lại khi bus rảnh.
Cách Thức Hoạt Động Của CAN
CAN sử dụng phương thức CSMA/CD + AMP (Carrier Sense Multiple Access / Collision Detection with Arbitration on Message Priority). Các node CAN kiểm tra xem bus có bận không trước khi gửi thông điệp và sử dụng cơ chế phân xử ưu tiên để giải quyết xung đột.
Nguyên Tắc Hoạt Động
Thông điệp dữ liệu truyền trên bus CAN không chứa địa chỉ của nút gửi hoặc nhận. Thay vào đó, nội dung thông điệp được gắn nhãn bằng một số nhận dạng (ID) duy nhất trên toàn mạng. Tất cả các nút nhận được thông điệp và kiểm tra ID để xác định xem thông điệp có liên quan đến nút đó hay không.
ID và Trường Xác Định Quyền Ưu Tiên (Arbitration Field)
ID là duy nhất và xác định mức độ ưu tiên của thông điệp. Giá trị số của ID càng thấp, mức độ ưu tiên càng cao. Điều này cho phép phân xử khi có nhiều nút cùng truy cập bus.
Mỗi thông điệp CAN có ID 11 bit (CAN tiêu chuẩn) hoặc 29 bit (CAN mở rộng), nằm ở đầu mỗi thông điệp. Các bit trong thông điệp CAN được gửi ở dạng cao hoặc thấp, bit thấp luôn chiếm ưu thế. Nếu một nút cố gắng gửi mức thấp và nút khác cố gửi mức cao, kết quả trên bus sẽ là mức thấp.
Hai nút không được phép gửi thông điệp có cùng ID. Nếu điều này xảy ra, trường xử lý lỗi của CAN sẽ được sử dụng, dẫn đến việc một trong các nút truyền bị tắt.
Các Loại CAN Frame (Khung CAN)
Dữ liệu CAN được truyền dưới dạng các Frame (khung). Có 4 loại Frame khác nhau:
- Data Frame (khung dữ liệu): Chứa dữ liệu từ bộ truyền đến bộ nhận.
- Remote Frame (khung yêu cầu): Yêu cầu dữ liệu từ một node khác.
- Error Frame (khung lỗi): Báo hiệu lỗi trên bus.
- Overload Frame (khung báo tràn): Thông báo node đang quá tải và không thể xử lý thêm dữ liệu.
Data Frame và Remote Frame sử dụng cơ chế phân xử quyền ưu tiên và có hai định dạng: chuẩn (ID 11 bit) và mở rộng (ID 29 bit).
CAN 2.0
Chuẩn CAN 2.0 được Bosch công bố năm 1991, với tốc độ truyền tối đa 1 Mbps và lượng dữ liệu tối đa 8 byte.
Data Frame (Khung Dữ Liệu)
Data Frame mang dữ liệu từ một nút truyền đến một hoặc nhiều nút nhận và có hai định dạng:
- CAN tiêu chuẩn (CAN 2.0A): Standard Data Frame
- CAN mở rộng (CAN 2.0B): Extended Data Frame
Cấu trúc khung dữ liệu CAN 2.0
CAN 2.0A
Data Frame CAN 2.0A tiêu chuẩn bao gồm bảy trường bit khác nhau:
- Trường bắt đầu khung (Start Of Frame Field – SOF): Bit đầu tiên (Dominant Bit) đánh dấu sự bắt đầu của Data Frame.
- Trường xác định quyền ưu tiên (Arbitration Field): 12 bit (11 bit ID và 1 bit RTR).
- Trường điều khiển (Control Field): Chứa IDE, r0 và DLC (Data Length Code).
- Trường dữ liệu (Data Field): Từ 0 đến 8 byte, tùy thuộc vào giá trị của DLC.
- Trường kiểm tra (Cyclic Redundancy Check Field – CRC): 16 bit, chia thành CRC Sequence (15 bit) và CRC Delimiter (1 bit).
- Trường báo nhận (Acknowledge Field – ACK): 2 bit, gồm ACK Slot và ACK Delimiter.
- Trường kết thúc (End Of Frame Field – EOF): 7 Recessive Bit.
CAN 2.0B
Định dạng CAN 2.0B cung cấp mã ID 29 bit, tương thích với các giao thức truyền thông nối tiếp khác.
Sự khác biệt giữa CAN 2.0A & CAN 2.0B:
- Arbitration Field chứa hai trường bit ID (11 bit và 18 bit).
- Sử dụng bit ID Mở rộng (IDE) để phân biệt hai định dạng.
- Bit Substitute Remote Request (SRR) luôn được truyền dưới dạng Recessive Bit.
Khả Năng Tương Thích 2.0A và 2.0B
CAN 2.0B hoàn toàn tương thích ngược với CAN 2.0A. Tuy nhiên, có hai loại CAN 2.0A:
- Loại chỉ truyền và nhận thông điệp ở định dạng 2.0A.
- Loại (2.0B Passive) cũng có thể nhận thông điệp 2.0B và sau đó bỏ qua chúng.
Remote Frame (Khung Yêu Cầu)
Remote Frame được sử dụng để yêu cầu dữ liệu từ một Node khác.
Remote Frame giống như Data Frame, nhưng có hai điểm khác biệt quan trọng:
- Được đánh dấu rõ ràng là Remote Frame (bit RTR là Recessive Bit).
- Không có trường dữ liệu.
Phát Hiện Lỗi và Hạn Chế Lỗi
CAN có cơ chế phát hiện, cảnh báo và hạn chế lỗi, đảm bảo tính tin cậy của dữ liệu.
Quy Trình Xử Lý Lỗi
- Lỗi được phát hiện bởi bộ điều khiển CAN.
- Error Frame được truyền ngay lập tức.
- Thông điệp bị hủy ở tất cả các nút.
- Trạng thái của bộ điều khiển CAN được cập nhật.
- Thông điệp được truyền lại.
Các Loại Lỗi Được Phát Hiện
- Lỗi bit: Lỗi nhồi bit, Lỗi bit.
- Lỗi thông điệp: Lỗi tổng kiểm tra, Lỗi khung, Lỗi xác nhận.
Các Chế Độ Xử Lý Lỗi
- Lỗi hoạt động (Error Active): Chế độ hoạt động bình thường.
- Lỗi bị động (Error Passive): Kích hoạt khi bộ điều khiển gặp sự cố thường xuyên.
- Tắt Bus (Bus Off): Kích hoạt khi bộ điều khiển gặp sự cố nghiêm trọng.
Cảnh Báo Lỗi
Khi một nút phát hiện lỗi, nó sẽ gửi một cờ báo lỗi trên bus.
Error Frame (Khung Lỗi)
Error Frame bao gồm Error Flag (6 bit cùng giá trị) và Error Delimiter (8 Recessive Bit).
Overload Frame (Khung Báo Tràn)
Overload Frame được truyền khi một Node quá bận rộn, nhưng không được sử dụng thường xuyên.
Bit Timing (Định Thời Bit)
Việc lựa chọn định thời bit là rất quan trọng vì nó quyết định tốc độ bit, điểm mẫu và khả năng tái đồng bộ hóa.
Sơ đồ phân đoạn bit
Lớp Vật Lý CAN
Lớp vật lý không phải là một phần của tiêu chuẩn Bosch CAN, nhưng tiêu chuẩn ISO được sử dụng cho các quá trình thu phát. CAN truyền tín hiệu trên bus CAN bằng hai dây, CAN-High và CAN-Low, hoạt động ở chế độ vi sai.
Phương Thức Triển Khai Mạng CAN
Có hai phương thức triển khai chính:
BasicCAN
BasicCAN thường được sử dụng trong các bộ điều khiển CAN độc lập rẻ hơn hoặc trong các bộ vi điều khiển nhỏ hơn với bộ điều khiển CAN tích hợp.
FullCAN
FullCAN được sử dụng trong các bộ điều khiển CAN và vi điều khiển hiệu suất cao, đắt tiền hơn.
CAN FD
CAN FD (CAN Flexible Data Rates) là một sự cải tiến của CAN 2.0, được Bosch phát hành vào năm 2012.
Những khác biệt chính giữa CAN 2.0 và CAN FD:
| Tính năng | CAN 2.0 | CAN FD |
|---|---|---|
| Tốc độ bit tối đa | 1 Mbps | 12 Mbps |
| Lượng dữ liệu tối đa | 8 byte | 64 byte |
| Thay đổi tốc độ | Không | Có |
| Trường CRC | 15 bit | 17/21 bit |
Ứng Dụng Của CAN
CAN được ứng dụng rộng rãi trong nhiều lĩnh vực:
- Ô tô: Hệ thống điều khiển động cơ, phanh, túi khí, v.v.
- Công nghiệp: Tự động hóa nhà máy, điều khiển máy móc.
- Y tế: Thiết bị y tế, máy móc chẩn đoán.
- Hàng không: Hệ thống điện tử hàng không.
- Giao thông vận tải: Tàu hỏa, tàu thủy.
- Tự động hóa tòa nhà: Điều khiển hệ thống chiếu sáng, HVAC.
Hy vọng bài viết này đã cung cấp cho bạn những thông tin hữu ích về giao thức CAN.
