Trang chủ Liên hệ

CAN/CAN Bus là gì? Tổng quan về “Controller Area Network”

CÔNG TY TNHH THIẾT BỊ ĐO LƯỜNG VÀ ĐIỀU KHIỂN 20/01/2023

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 ba ECU (bộ điều khiển điện tử) trên xe. Họ nhận thấy rằng UART không còn phù hợp trong tình huống này vì nó được sử dụng trong giao tiếp điểm – điểm. Nhu cầu về một hệ thống liên lạc đa chủ trở nên cấp thiết. Bởi vậy, mạng CAN đầu tiên đã xuất hiện vào năm 1987 bởi Intel chế tạo.

Về mặt lý thuyết, CAN có thể liên kết tới 2032 thiết bị (giả sử một nút với một mã ID) trên một mạng duy nhất. Nó cung cấp tốc độ truyền thông tốc độ cao lên đến 1 Mbits / giây do đó cho phép điều khiển thời gian thực. Ngoài ra, tính năng hạn chế lỗi và phát hiện lỗi làm cho nó đáng tin cậy hơn trong môi trường nhiễu nghiêm trọng.

Dựa trên đặc điểm thông số kỹ thuật của Bosch. Phiên bản 2.0 của CAN được chia thành hai phần:

Hai phần được định nghĩa bởi các ID khác nhau của thông điệp, với sự khác biệt chính là độ dài mã ID.

Có hai tiêu chuẩn ISO cho CAN. Sự khác biệt là ở lớp vật lý: ISO 11898 xử lý các ứng dụng tốc độ cao lên đến 1Mbit / giây và ISO 11519 có giới hạn trên là 125kbit / giây.

Tóm tắt lịch sử phát triển giao thức CAN

Trong đó:

CiA (CAN in Automation): Là nhóm các nhà sản xuất và sử dụng trên thế giới phát triển và hỗ trợ CANopen và các giao thức CAN cơ bản lớp cao hơn khác. Đây là tổ chức phi lợi nhuận được thành lập từ năm 1992 để cung cấp thông tin về công nghệ CAN cơ bản, sản xuất và tiếp thị. Có khoảng 500 công ty là thành viên của tổ chức phi lợi nhuận này và có trụ sở chính đặt tại Nuremberg, Đức.

DeviceNet và CANopen: là hai chuẩn quy định hoạt động của CAN ở lớp cao hơn (Application Layer) dựa trên chuẩn CAN (Chuẩn CAN quy định việc thực thi giao thức ở lớp Liên kết dữ liệu (Data Link Layer) và lớp vật lý (Physical Layer))

CAN/CANbus là gì?

Controller Area Network (CAN hoặc CAN Bus) là công nghệ mạng nối tiếp, tốc độ cao, bán song công, hai dây. 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.

Ưu điểm của CAN

Những đặc điểm trên, bạn đọc có thể thấy rõ khi đi sâu vào nghiên cứu chuẩn này thông qua thông tin chia sẻ bên dưới:

CAN hoạt động như thế nào?

CAN sử dụng CSMA / CD + AMP (Carrier Sense Multiple Access / Collision Detection with Arbitration on Message Priority). Trước khi gửi thông điệp, nút CAN sẽ kiểm tra xem bus có bận không. Nó cũng sử dụng để phát hiện khả năng trùng lặp. Những phương thức này cũng tương tự như Ethernet. Tuy nhiên, khi một mạng Ethernet phát hiện xung đột, cả hai nút gửi sẽ ngừng truyền. Sau đó, nó đợi một khoảng thời gian trễ ngẫu nhiên trước khi thử gửi lại. Điều này làm cho mạng Ethernet rất nhạy cảm với tải bus cao. Có thể giải quyết vấn đề này với nguyên tắc xác định quyền ưu tiên rất thông minh trong mạng CAN.

Nguyên tắc

Thông điệp dữ liệu được truyền từ bất kỳ nút nào trên bus CAN không chứa địa chỉ của nút truyền hoặc của bất kỳ nút nhận dự kiến ​​nào.

Thay vào đó, nội dung của thông điệp được gắn nhãn bởi một số nhận dạng (ID) là duy nhất trên toàn mạng. Tất cả các nút khác trên mạng đều nhận được thông điệp và mỗi nút thực hiện kiểm tra sự chấp nhận trên mã ID để xác định xem thông điệp có liên quan đến nút đó hay không. Nếu thông điệp có liên quan, nó sẽ được xử lý; nếu không thì nó bị bỏ qua.

ID & Trường xác định quyền ưu tiên (Arbitration Field)

ID là duy nhất và cũng để xác định mức độ ưu tiên của thông điệp. Giá trị số của mã ID càng thấp thì mức độ ưu tiên càng cao. Điều này cho phép phân xử nếu hai (hoặc nhiều) nút cạnh tranh để truy cập vào bus cùng một lúc.

Thông điệp có mức độ ưu tiên cao hơn được đảm bảo có được quyền truy cập bus như thể nó là thông điệp duy nhất được truyền đi. Các thông điệp có mức ưu tiên thấp hơn 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ếu vẫn còn các thông điệp khác mà có mức ưu tiên cao hơn đang chờ được gửi.

Mỗi thông điệp trong CAN có một mã ID là 11 bit (A) hoặc 29 bit (B). ID này là phần nguyên tắc của Arbitration Field trong CAN, trường này nằm ở đầu mỗi thông điệp CAN. ID xác định loại thông điệp, nhưng cũng là mức độ ưu tiên của thông điệp.

Các bit trong thông điệp mạng CAN có thể được gửi ở dạng cao hoặc thấp. Các bit thấp luôn chiếm ưu thế, có nghĩa là 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 các bus sẽ là mức thấp. Một nút truyền luôn lắng nghe trên bus trong khi truyền. Một nút gửi mức cao trong Arbitration Field và phát hiện mức thấp biết rằng nó đã mất quyền ưu tiên. Nó ngừng truyền, để cho nút khác, với một thông điệp có mức độ ưu tiên cao hơn, tiếp tục mà không bị gián đoạn.

Hai nút trên mạng không được phép gửi thông điệp có cùng ID. Nếu hai nút cố gắng gửi một thông điệp với cùng một ID tại cùng một thời điểm, trường xác định quyền ưu tiên sẽ không hoạt động. Thay vào đó, một trong các nút truyền sẽ phát hiện ra rằng thông điệp của nó bị bóp méo bên ngoài Arbitration Field. Sau đó, các nút sẽ sử dụng trường xử lý lỗi của CAN, trong trường hợp này, cuối cùng sẽ dẫn đến việc một trong các nút truyền bị tắt (chế độ tắt bus).

Các loại CAN Frame

Dữ liệu CAN được truyền dưới dạng các Frame (khung). Có 4 loại Frame khác nhau, đó là:

  1. Data Frame (khung dữ liệu): là khung mang dữ liệu từ một bộ truyền dữ liệu đến các bộ nhận dữ liệu. Khung này có vùng để mang các byte dữ liệu.
  2. Remote Frame (khung yêu cầu hay điều khiển): là khung được truyền từ một Node bất kỳ để yêu cầu dữ liệu từ Node khác. Khi Node khác đó nhận được yêu cầu sẽ  truyền lại dữ liệu có ID (Identifier) trùng với ID được gửi trong Remote Frame.
  3. Error Frame (khung lỗi): là khung được truyền bởi bất kỳ Node nào khi Node đó phát hiện lỗi từ Bus.
  4. Overflow Frame (khung báo tràn): mỗi Node trong CAN Bus có thể truyền bất kỳ khi nào nếu phát hiện Bus rảnh. Hoặc nếu một Node nhận quá nhiều dữ liệu và không xử lý kịp, nó sẽ gửi Frame này để các Node khác không gửi thêm dữ liệu cho nó.

Data Frame và Remote Frame làm việc theo cơ chế phân xử quyền ưu tiên của tín hiệu vì thế cấu trúc của chúng có vùng phân xử quyền ưu tiên, nơi chứa ID của khung. Và chúng có hai định dạng khác nhau là định dạng chuẩn (Standard) và định dạng mở rộng (Extended):

Các loại giao thức CAN

Giao thức CAN hiện có: CAN 2.0, CAN FD. Sự khác biệt giữa các loại giao thức CAN nằm trong cấu trúc của các loại khung (Frame). Chúng ta sẽ tìm hiểu về cấu trúc các loại khung của các chuẩn giao thức trên.

CAN 2.0

Chuẩn giao thức CAN 2.0 được Bosch công bố lần đầu vào năm 1991. Tốc độ truyền tối đa của chuẩn này là 1 Mbps, lượng dữ liệu truyền tối đa là 8 byte.

Trong hệ thống mạng CAN, dữ liệu được truyền và nhận bằng Data Frame. Data Frame mang dữ liệu từ một nút truyền đến một hoặc nhiều nút nhận.

Giao thức CAN hỗ trợ hai định dạng Data Frame:

Hầu hết các CAN 2.0A chỉ truyền và nhận các thông điệp định dạng chuẩn, mặc dù một số (2.0B Passive) sẽ nhận các thông điệp định dạng mở rộng nhưng sau đó bỏ qua chúng. CAN 2.0B có thể gửi và nhận thông điệp ở cả hai định dạng.

Data Frame (khung dữ liệu)

CAN 2.0A

Data Frame CAN (Phiên bản 2.0A) tiêu chuẩn bao gồm bảy trường bit khác nhau:

  1. Trường bắt đầu khung (Start Of Frame Field – SOF)

Với cả 2 định dạng của chuẩn CAN 2.0 thì trường bắt đầu là vị trí của bit đầu tiên trong khung. Trường này chiếm 1 bit dữ liệu. Bit đầu tiên này là một Dominant Bit (mức logic 0) đánh dấu sự bắt đầu của một Data Frame.

  1. Trường xác định quyền ưu tiên (Arbitration Field)

Định dạng vùng xác định quyền ưu tiên là khác nhau đối với dạng khung chuẩn và khung mở rộng.

Trong đó:

Bit RTR (Remote Transmission Request)

Trường hợp nếu Data Frame và Remote Frame có cùng ID được gửi đi đồng thời thì Data Frame sẽ được ưu tiên hơn.

Bit SRR (Substitute Remote Request)

Giả sử có hai Node cùng truyền, một Node truyền Data Frame chuẩn, một Node truyền Data Frame mở rộng có ID giống nhau thì Node truyền khung chuẩn sẽ thắng phân xử quyền ưu tiên vì đến vị trí sau ID, khung chuẩn là bit RTR = 0, còn khung mở rộng là bit SRR = 1. Như vậy, khung chuẩn chiếm ưu thế hơn so với khung mở rộng khi có ID như nhau.

Bit IDE (Identifier Extension)

  1. Trường điều khiển (Control Field)

Khung chuẩn và khung mở rộng có định dạng khác nhau ở trường này:

Trong đó:

Bit IDE

Dùng phân biệt loại khung (đã được trình bày ở trên).

Bit r0, r1 (hai bit dự trữ)

Tuy hai bit này phải được truyền là Recessive Bit bởi bộ truyền nhưng bộ nhận không quan tâm đến giá trị 2 bit này. Bộ nhận có thể nhận được các tổ hợp 00, 01, 10 hoặc 11 của r1 và r0 nhưng không coi đó là lỗi mà bỏ qua và nhận thông điệp bình thường.

DLC (Data Length Code)

  1. Trường dữ liệu (Data Field)

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.

  1. Trường kiểm tra (Cyclic Redundancy Check Field – CRC)

Trường kiểm tra hay trường CRC gồm 16 bit và được chia làm hai phần là:

=> Trường CRC bảo vệ thông tin trong Data Frame và Remote Frame bằng cách thêm các bit kiểm tra dự phòng ở đầu khung truyền. Ở đầu khung nhận, cũng sẽ tính toán CRC như bộ truyền khi đã nhận dữ liệu và so sánh kết quả đó với CRC Sequence mà nó đã nhận được, nếu khác nhau tức là đã có lỗi, nếu giống nhau tức là đã nhận đúng từ trường SOF đến trường dữ liệu.

  1. Trường báo nhận (Acknowledge Field – ACK)

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.

  1. Trường kết thúc (End Of Frame Field – EOF)

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 Recessive Bit.

CAN 2.0B

Định dạng CAN 2.0B cung cấp mã ID 29 bit so với mã ID 11 bit trong 2.0A.

Phiên bản 2.0B được phát triển để cung cấp khả năng tương thích với các giao thức truyền thông nối tiếp khác được sử dụng trong các ứng dụng ô tô ở Hoa Kỳ. Để phục vụ cho việc này và vẫn cung cấp khả năng tương thích với định dạng 2.0A, Data Frame phiên bản 2.0B có định dạng mở rộng.

Sự khác biệt giữa CAN 2.0A & CAN 2.0B:

Tất cả các trường khác trong Data Frame 2.0B giống hệt với các trường ở Standard Data Frame.

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 và có thể truyền và nhận thông điệp ở một trong hai định dạng.

Tuy nhiên, lưu ý rằng có hai loại CAN 2.0A:

Do đó, trong các hạn chế được đề cập ở trên, có thể sử dụng cả CAN 2.0A (với 2.0B Passive) và CAN 2.0B trên một mạng duy nhất.

Tuy nhiên, do thiếu khả năng tương thích hoàn toàn của thiết bị 2.0A với thiết bị 2.0B nên chỉ có các thông điệp ở định dạng chuẩn là có ý nghĩa trong các hệ thống sử dụng cả hai loại.

Số lượng ID duy nhất có sẵn cho người dùng, trên một mạng 2.0A, là 2.032 (2 cho nguồn 11 – 2 cho nguồn 4).

Số lượng ID duy nhất có sẵn trên mạng 2.0B là > 500 triệu!

Remote Frame (khung yêu cầu hay điều khiển)

Bên cạnh Data Frame được sử dụng để vận chuyển dữ liệu, còn có Remote Frame – loại khung này được sử dụng để yêu cầu dữ liệu, tức là Data Frame, từ bất kỳ Node nào trên cùng Bus. Tuy nhiên, các khung này hầu như không được sử dụng trong các ứng dụng ô tô, vì việc truyền dữ liệu không dựa trên yêu cầu, mà chủ yếu dựa trên sự chủ động của thông tin từ thông số kỹ thuật của ô tô đó.

Remote Frame giống như Data Frame, nó có hai điểm khác biệt quan trọng:

Remote Frame có thể được truyền ở cả 2 định dạng tiêu chuẩn và định dạng mở rộng. Và có cấu trúc gồm 6 trường bit như Data Frame (chỉ không có trường dữ liệu – Data Field).

Tùy thuộc vào việc triển khai mạng CAN, phản hồi có thể được gửi tự động. Bộ điều khiển CAN đơn giản (BasicCAN) không thể phản hồi tự động. Trong trường hợp này, bộ vi điều khiển Master nhận biết được yêu cầu từ xa và phải gửi dữ liệu chủ động.

Phát hiện lỗi và hạn chế lỗi

Việc phát hiện lỗi, cảnh báo và hạn chế lỗi được xác định trong tiêu chuẩn CAN làm cho CAN Bus rất đáng được tin cậy. Tính năng phát hiện lỗi và cảnh báo lỗi cùng được tích hợp vào bộ điều khiển đảm bảo rằng thông tin truyền nhận là chính xác và nhất quán. Các nút bị lỗi sẽ chuyển sang chế độ mà không làm phiền đến truyền tải trên bus.

Quy trình xử lý lỗi trong CAN

  1. Lỗi được phát hiện bởi bộ điều khiển CAN (bộ phát hoặc bộ thu).
  2. Một Error Frame được truyền ngay lập tức.
  3. Thông điệp bị hủy ở tất cả các nút (tồn tại ngoại lệ).
  4. Trạng thái của bộ điều khiển CAN được cập nhật.
  5. Thông điệp được truyền lại. Nếu một số bộ điều khiển cùng gửi thông điệp, trường xác định quyền ưu tiên sẽ được sử dụng như bình thường.

Phát hiện lỗi

Bộ điều khiển CAN có khả năng phát hiện lỗi tự động. Các lỗi được phát hiện là:

Lỗi bit:
  1. Lỗi nhồi bit – thông thường một nút truyền sẽ chèn mức cao sau năm bit thấp liên tiếp (và mức thấp sau năm mức cao liên tiếp). Điều này được gọi là nhồi bit. Một nút nhận phát hiện vi phạm (hơn năm bit liên tiếp) sẽ thấy cảnh báo lỗi vi phạm nhồi nhét bit.
  2. Lỗi bit: Một nút truyền luôn đọc lại thông điệp khi nó đang gửi. Nếu nó phát hiện một giá trị bit trên bus khác với giá trị mà nó đã gửi và bit đó không phải là một phần của Arbitration Field hoặc trong trường xác nhận thì cảnh báo phát hiện lỗi xuất hiện.
Lỗi thông điệp:
  1. Lỗi tổng kiểm tra – mỗi nút nhận kiểm tra thông điệp CAN để tìm lỗi tổng kiểm tra.
  2. Lỗi khung – có một số giá trị bit được xác định trước phải được truyền tại các điểm nhất định trong bất kỳ Khung thông điệp CAN nào. Nếu khi nhận phát hiện một bit không hợp lệ ở một trong những vị trí này, lỗi biểu mẫu (hay lỗi định dạng) sẽ được gắn cờ.
  3. Lỗi xác nhận – nếu máy phát xác định rằng thông điệp không được xác nhận ACK thì lỗi ACK được gắn cờ.

Các chế độ xử lý lỗi

Bộ điều khiển CAN có thể ở một trong ba trạng thái:

Chế độ của bộ điều khiển được điều khiển bởi hai bộ đếm lỗi – bộ đếm lỗi truyền (tx_count) và bộ đếm lỗi nhận (rx_count). Các quy tắc sau được áp dụng:

Sau khi bộ điều khiển CAN đã chuyển sang trạng thái tắt bus, nó phải được đặt lại bởi bộ vi điều khiển hoặc bộ xử lý master để có thể tiếp tục hoạt động. Ngoài ra, chế độ này chỉ được phép kích hoạt khi nhận được 128 lần xuất hiện của 11 Recessive Bit liên tiếp.

Các bộ đếm được cập nhật như sau:

  1. Khi bên nhận phát hiện ra lỗi, số lượng rx_count sẽ tăng lên 1, ngoại trừ khi lỗi được phát hiện là lỗi bit trong quá trình gửi cờ lỗi hoạt động hoặc cờ quá tải.
  2. Khi bộ thu phát hiện một bit chi phối là bit đầu tiên sau khi gửi cờ lỗi, số rx_count sẽ tăng lên 8.
  3. Khi máy phát gửi một cờ lỗi, tx_count sẽ tăng lên 8.
    • Ngoại lệ 1: Nếu máy phát bị lỗi thụ động và phát hiện ra lỗi ack do không phát hiện dominant ack và không phát hiện dominant bit trong khi gửi cờ lỗi thụ động của nó.
    • Ngoại lệ 2: Nếu máy phát gửi một cờ lỗi vì lỗi nội dung xảy ra trong quá trình phân xử, theo đó bit nội dung nằm trước bit RTR và lẽ ra phải là recessive bit, và đã được gửi dưới dạng recessive nhưng được gửi là dominant.
  4. Nếu máy phát phát hiện lỗi bit trong khi gửi cờ lỗi hoạt động hoặc cờ quá tải, thì tx_count sẽ tăng 8.
  5. Nếu máy thu phát hiện lỗi bit trong khi gửi cờ lỗi hoạt động hoặc cờ quá tải, số rx_count sẽ tăng lên 8.
  6. Bất kỳ nút nào chỉ chấp nhận tối đa 7 dominant bit liên tiếp sau khi gửi cờ lỗi tích cực hoặc thụ động hoặc cờ quá tải. Sau khi phát hiện dominant bit liên tiếp thứ 14 (trong trường hợp cờ lỗi hoạt động hoặc cờ quá tải), hoặc sau khi phát hiện dominant bit thứ 8 liên tiếp theo sau cờ lỗi thụ động và sau mỗi chuỗi 8 dominant bit liên tiếp, mỗi bộ phát sẽ tăng tx_count lên 8 và mọi bên nhận tăng rx_count của nó lên 8.
  7. Sau khi truyền thông điệp thành công (nhận được ack và không có lỗi cho đến khi kết thúc khung) tx_count giảm đi 1 trừ khi nó đã là 0.
  8. Sau khi nhận thành công một thông điệp (tiếp nhận mà không có lỗi cho đến ack slot và gửi thành công ack bit), rx_count sẽ giảm đi 1 nếu nó nằm trong khoảng từ 1 đến 127. Nếu rx_count là 0, nó vẫn là 0 và nếu nó lớn hơn 127, nó sẽ được đặt thành giá trị từ 119 đến 127.

Lưu ý: Nếu một nút là nút duy nhất trên bus (hoặc trong khi khởi động nút duy nhất đã hoạt động) và nó truyền một thông điệp, nó sẽ gặp lỗi xác nhận và sẽ truyền lại thông điệp. Điều này có thể dẫn đến việc nút đó chuyển sang chế độ thụ động lỗi, nhưng không dẫn đến việc nó bị tắt bus (ngoại lệ 1).

Cảnh báo lỗi

Khi một nút được phát hiện lỗi, nó sẽ gửi một cờ báo lỗi trên bus. Điều này ngăn không cho bất kỳ nút nào khác chấp nhận thông điệp và đảm bảo tính nhất quán của dữ liệu trong toàn mạng.

Cờ lỗi hoạt động bao gồm sáu bit thấp và được sử dụng nếu nút truyền khung lỗi ở trạng thái lỗi hoạt động. Vì mức thấp chiếm ưu thế, tất cả các nút khác sẽ phát hiện vi phạm nhồi nhét bit và gửi cờ lỗi của riêng chúng. Sau đó, các nút muốn truyền (bao gồm cả nút gửi thông điệp bị gián đoạn) sẽ bắt đầu thực hiện. Như thường lệ, nút có thông điệp có mức ưu tiên cao nhất sẽ chiếm được quyền ưu tiên và gửi thông điệp của nó.

Nếu bộ điều khiển CAN ở chế độ lỗi thụ động, khung lỗi sẽ bao gồm sáu bit thụ động (cao). Vì cờ lỗi chỉ bao gồm các bit thụ động nên bus không bị ảnh hưởng. Nếu không có nút nào khác phát hiện ra lỗi, thông điệp sẽ được gửi không bị gián đoạn. Điều này đảm bảo rằng một nút gặp vấn đề với việc nhận không thể chặn bus.

Tất cả việc xử lý lỗi nâng cao này được thực hiện tự động bởi bộ điều khiển CAN mà không cần bộ vi điều khiển master làm bất cứ điều gì. Đây là một trong những lợi thế lớn của CAN.

Trong đó:

Error Frame (khung lỗi)

Error Frame là một loại khung đặc biệt khác biệt với các quy tắc định khung của tin nhắn CAN. Nó được truyền đi khi một Node phát hiện ra lỗi và sẽ khiến tất cả các Node khác phát hiện ra lỗi – vì vậy chúng cũng sẽ gửi Error Frame. Sau đó, bộ truyền sẽ tự động cố gắng truyền lại tin nhắn.

Error Frame bao gồm Error Flag (cờ lỗi) có 6 bit có cùng giá trị và Error Delimiter là 8 Recessive Bit. Error Delimiter cung cấp một số khoảng trống trong đó các Node khác trên Bus có thể gửi Error Flag khi chúng phát hiện Error Flag đầu tiên.

Overload Frame (khung báo tràn)

Overload Frame được đề cập ở đây chỉ để hoàn thiện. Nó rất giống với Error Frame về mặt định dạng và nó được truyền bởi một Node khi Node đó quá bận rộn. Overload Frame không được sử dụng thường xuyên, vì ngày nay các bộ điều khiển CAN đủ thông minh để không sử dụng nó. Trong thực tế, bộ điều khiển duy nhất sẽ tạo ra Overload Frame là 82526 đã lỗi thời.

Bit timing (định thời bit)

CAN có các tính năng nâng cao để khắc phục độ trễ thời gian trong độ dài bus (so với tốc độ bit) và khắc phục được sự khác biệt về tần số chrystal xung nhịp cho các nút trên bus.

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.

Bit segments (các đoạn bit – theo tiêu chuẩn của Bosch)

Mỗi bit được chia thành bốn phân đoạn – phân đoạn đồng bộ hóa, phân đoạn lan truyền và phân đoạn giai đoạn một và hai. Mỗi phân đoạn bao gồm một hoặc nhiều lượng tử thời gian.

Lượng tử thời gian là một lượng thời gian cố định được lấy từ đồng hồ của bộ điều khiển CAN với hệ số tỷ lệ đặt trước.

Phân đoạn đồng bộ hóa (Synch_Seg)

Phân đoạn đồng bộ hóa được sử dụng để đồng bộ hóa các nút khác nhau trên bus. Khi một bit được gửi trên bus, cạnh hàng đầu dự kiến ​​sẽ nằm trong phân đoạn này. Đoạn này luôn dài một lần lượng tử.

Phân đoạn lan truyền (Prop_Seg)

Phân đoạn lan truyền là cần thiết để bù đắp cho sự chậm trễ của các bus.

Kích thước phân đoạn có thể thiết lập từ 1 đến 8 lượng tử thời gian.

Phân đoạn giai đoạn 1 (Phase_Seg1), Phân đoạn giai đoạn 2 (Phase_Seg2)

Các phân đoạn này có thể được sử dụng để kéo dài hoặc rút ngắn bằng cách đồng bộ hóa lại.

Phân đoạn bit (theo Intel 527 và C167CR)

Trong hầu hết các bộ điều khiển CAN, các phân đoạn dường như được triển khai theo một cách khác với mô tả trong tiêu chuẩn. Phân đoạn đồng bộ trông giống như trong tiêu chuẩn và bao gồm một lượng tử thời gian. Sự khác biệt lớn là phân đoạn truyền và phân đoạn giai đoạn 1 trong tiêu chuẩn đã được kết hợp thành một phân đoạn, TSEG1. Phân đoạn giai đoạn 2 được giữ nguyên, nhưng được đổi tên thành TSEG2.

Thông thường chỉ có một điểm mẫu cho mỗi bit. Trong trường hợp này, điểm lấy mẫu nằm ở rìa giữa TSEG1 và TSEG2. Tuy nhiên, một số bộ điều khiển CAN cũng có thể lấy mẫu mỗi bit ba lần. Trong trường hợp này, bit sẽ được lấy mẫu ba lượng tử liên tiếp, với mẫu cuối cùng được lấy ở rìa giữa TSEG1 và TSEG2.

Ba mẫu chỉ nên được sử dụng cho baudrat tương đối chậm.

Tính toán tốc độ truyền và điểm mẫu

Tốc độ truyền

Tốc độ truyền của bus có thể được tính từ:

Baudrate = fcrystal / (2 * n * (BRP + 1))

trong đó n là số lượng tử thời gian cho một bit và được định nghĩa là:

n = SYNCHSEG + TSEG1 + TSEG2

BRP là giá trị của BaudRate Prescaler.

Cảnh báo: một số bộ điều khiển CAN (như Intel 526) có một cách khác để tính số lượng tử thời gian trong một bit!

Điểm mẫu

Quantabeforesample = TSEG1 + 1

Quantaaftersample = TSEG2

Thường thì điểm mẫu được tính theo phần trăm thời gian bit. Đây là:

(TSEG1 + 1) / (TSEG1 + 1 + TSEG2)

Cảnh báo: một số bộ điều khiển CAN (như C167CR) sử dụng một cách khác để tính lượng dư lượng tử.

Tái đồng bộ hóa

Tái đồng bộ hóa được thực hiện để bù đắp cho độ trễ của bus và các nút có tần số tinh thể khác nhau. Đồng bộ hóa thường chỉ được thực hiện trên cạnh từ mức bus recessive đến mức bus dominant.

Tái đồng bộ hóa Hard

Khi bus không hoạt động và bộ điều khiển phát hiện một bit bắt đầu, nó sẽ tự đồng bộ hóa lại để cạnh nằm trong phân đoạn Synch. Tái đồng bộ hóa Hard chỉ có thể được thực hiện cho bit đầu tiên trong khung.

Tái đồng bộ hóa trong một khung

Bộ điều khiển CAN có khả năng đồng bộ hóa trên các cạnh bit cũng trong một khung. Độ rộng bước nhảy đồng bộ hóa (lại) (SJW – Synchronisation Jump Width) quyết định số lượng tử thời gian tối đa mà bộ điều khiển có thể tái đồng bộ mỗi bit.

Nếu cạnh từ recessive đến dominant xuất hiện bên trong TSEG1 và cạnh nhỏ hơn hoặc bằng lượng tử SJW bên trong, TSEG1 được khởi động lại. Nếu cạnh nhiều hơn lượng tử SJW bên trong, TSEG1 được kéo dài với lượng tử SJW.

Nếu một cạnh từ recessive đến dominant xuất hiện bên trong TSEG2, TSEG2 được rút ngắn bởi số lượng tử cần thiết để làm cho cạnh nằm ngoài TSEG2. Tuy nhiên, TSEG2 có thể được rút ngắn không nhiều hơn lượng tử SJW.

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. Tuy nhiên, 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 bao gồm hai dây, CAN-High và CAN-Low. Hai dây này đang hoạt động ở chế độ vi sai, nghĩa là chúng mang điện áp ngược (để giảm nhiễu). Các mức điện áp, cũng như các đặc tính khác của lớp vật lý, phụ thuộc vào tiêu chuẩn đang được sử dụng.

ISO 11898

Các mức điện áp cho mạng CAN tuân theo tiêu chuẩn ISO 11898 (CAN tốc độ cao) được mô tả:

Signal   recessive state     dominant state   unit
  min nominal max min nominal max  
CAN-High 2.0 2.5 3.0 2.75 3.5 4.5 Volt
CAN-Low 2.0 2.5 3.0 0.5 1.5 2.25 Volt

Lưu ý rằng đối với trạng thái recessive, điện áp định mức cho hai dây là như nhau. Điều này làm giảm công suất thu được từ các nút thông qua các điện trở kết thúc. Các điện trở này là 120ohm và nằm trên mỗi đầu của dây dẫn. Một số người đã chơi với việc sử dụng các điện trở kết cuối trung tâm (nghĩa là đặt chúng ở một nơi trên bus). Điều này không được khuyến khích, vì cấu hình đó sẽ không ngăn chặn các vấn đề phản chiếu.

ISO 11519

Các mức điện áp cho mạng CAN tuân theo tiêu chuẩn ISO 11519 (CAN tốc độ thấp) được mô tả trong bảng dưới đây:

Signal   recessive state     dominant state   unit
  min nominal max min nominal max  
CAN-High 1.6 1.75 1.9 3.85 4.0 5.0 Volt
CAN-Low 3.1 3.25 3.4 0 1.0 1.15 Volt

Chiều dài bus

Chiều dài bus tối đa cho mạng CAN phụ thuộc vào tốc độ bit được sử dụng. Yêu cầu là mặt trước sóng của tín hiệu bit phải có thời gian để di chuyển đến nút ở xa nhất và quay trở lại trước khi bit được lấy mẫu. Điều này có nghĩa là chiều dài bus với tốc độ bit được sử dụng tối ưu, và nên chọn điểm lấy mẫu một cách cẩn thận.

Dưới đây là bảng các độ dài bus khác nhau và tốc độ bit tối đa tương ứng.

Bus length (metres) Maximum bit rate (bit/s)
40 1 Mbit/s
100 500 kbit/s
200 250 kpit/s
500 125 kbit/s
6 km 10 kbit/s

Cáp CAN

Theo tiêu chuẩn ISO 11898, trở kháng của cáp phải là 120 +/- 12 ôm. Nó phải được xoắn ngang, được che chắn hoặc không được che chắn. Hoạt động đang được tiến hành trên tiêu chuẩn một dây SAE J2411.

Phương thức triển khai mạng CAN

Không có tiêu chuẩn nào về cách triển khai các bộ điều khiển CAN hoặc cách chúng giao tiếp với bộ vi điều khiển master. Có hai phương thức triển khai chính: BasicCAN và FullCAN.

Sự khác biệt chính giữa các phương thức này là cách các thông điệp đặc biệt được lọc ra, đó là cách nó quyết định thông điệp nào đặc biệt và thông điệp nào không. Ngoài ra còn có sự khác biệt về cách các Remote Frame được phản hồi và cách thông điệp được lưu vào bộ đệm. Sự khác biệt sẽ ảnh hưởng đến lượng tải được đặt trên vi điều khiển master.

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.

Bộ điều khiển BasicCAN thường có hai bộ đệm nhận và một bộ đệm truyền. Các bộ đệm nhận được sắp xếp theo cấu trúc FIFO và một thông điệp có thể được nhận vào một bộ đệm trong khi vi điều khiển đang đọc thông tin từ bộ đệm khác. Nếu một thông điệp được nhận trong khi cả hai bộ đệm nhận đều đầy, các thông điệp cũ nhất sẽ được giữ lại. Điều này có nghĩa là các thông điệp mới hơn có thể bị mất nếu bộ vi điều khiển master không đọc các thông điệp đủ nhanh.

Một thông điệp được gửi bằng cách ghi nó vào bộ đệm truyền.

Các thông điệp đặc biệt được lọc ra bằng cách sử dụng hai thanh ghi, hoạt động trên mã nhận dạng thông điệp. Mỗi bit trong mã ID được kiểm tra dựa trên bộ lọc. Nếu thông điệp khớp với bộ lọc, nó sẽ được lưu trữ trong một bộ đệm nhận.

Mỗi bit của bộ lọc ID có thể được đặt thành ‘1’, ‘0’ hoặc ‘không quan tâm’. Thường thì bộ lọc chỉ hoạt động trên tám trong số mười một bit trong ID (CAN tiêu chuẩn). Điều này có nghĩa là ba bit thấp hơn trong mã ID luôn là ‘không quan tâm’.

Khi sử dụng BasicCAN, điều quan trọng là phải chọn số nhận dạng một cách cẩn thận nhất để cửa sổ của bộ lọc có thể được giữ ở mức nhỏ nhất có thể. Tất cả thông điệp được cho qua bộ lọc phải được đọc và kiểm tra bởi bộ vi điều khiển. Điều này có nghĩa là quá trình lọc cuối cùng được thực hiện trong phần mềm.

Bộ điều khiển BasicCAN không có hỗ trợ phản hồi tự động các Remote Frame, có nghĩa là ứng dụng sẽ phải xử lý chúng. Điều này sẽ đặt thêm tải lên bộ vi điều khiển hoặc bộ xử lý, nhưng sẽ đảm bảo rằng giá trị trả về được cập nhật.

Các tính năng BasicCAN

Truyền Ứng dụng điền vào thanh ghi Tx hoàn chỉnh bao gồm ID, RTR, datalength, data -> mọi ID đều có thể được truyền
Nhận Mọi thông điệp CAN đều có thể được nhận
Thông thường có hai bộ đệm nhận trong cấu trúc FIFO
Lọc thông điệp. Thông thường không thể thiết lập bộ lọc để chỉ những thông điệp đặc biệt được cho qua -> ứng dụng phải thực hiện lọc lần cuối
Xử lý Remote Frame Remote Frame được ứng dụng để phản hồi
Ghi đè Giữ lại thông điệp cũ nhất (thông điệp mới hơn sẽ bị mất)

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. Bộ điều khiển FullCAN có một bộ đệm được gọi là hộp thư. Khi khởi tạo, mỗi hộp thư được gán một mã ID và được đặt để truyền hoặc nhận.

Khi bộ điều khiển CAN nhận được một thông điệp, nó sẽ kiểm tra các hộp thư để xem có hộp thư nhận có cùng số nhận dạng với thông điệp hay không. Nếu một hộp thư như vậy được tìm thấy, thư sẽ được lưu trữ trong đó và bộ điều khiển máy chủ sẽ nhận được thông điệp. Nếu không, thông điệp sẽ bị hủy.

Khi truyền một thông điệp, độ dài thông điệp và dữ liệu được ghi vào hộp thư truyền với số nhận dạng chính xác.

Nếu nhận được thông điệp từ xa, bộ điều khiển sẽ kiểm tra số nhận dạng từ xa dựa trên các hộp thư truyền. Nếu tìm thấy một kết quả trùng khớp, bộ điều khiển sẽ tự động gửi một thông điệp với mã ID và dữ liệu có trong hộp thư đó. Điều này có nghĩa là bộ vi điều khiển có tải thấp hơn và phần mềm không phải xử lý các thông điệp từ xa. Tuy nhiên, nếu hộp thư lâu ngày không được cập nhật thông tin gửi đến mạng sẽ bị cũ. Điều này phải được xem xét khi viết phần mềm.

Với bộ điều khiển FullCAN, chỉ có thể lọc ra chính xác các loại thông điệp đặc biệt. Loại bộ điều khiển này do đó sẽ cung cấp tải thấp hơn trên bộ vi điều khiển master. Tuy nhiên, số lượng hộp thư có hạn. Số lượng hộp thư lớn nhất hiện có trong bộ điều khiển CAN ngày nay là ???.

Với một số bộ điều khiển, có thể cấu hình lại các hộp thư động. Tuy nhiên, điều đó không hoàn toàn giải quyết được vấn đề. Do đó một số bộ điều khiển là bộ điều khiển CAN hỗn hợp, có nghĩa là chúng có hộp thư, nhưng cũng có bộ đệm BasicCAN.

Bộ điều khiển FullCAN có hỗ trợ tự động trả lời các Remote Frame. Điều này sẽ giảm tải trên bộ vi điều khiển hoặc bộ xử lý máy chủ, nhưng cũng có thể có nghĩa là thông tin cũ được gửi đi. Điều rất quan trọng là phải xem xét điều này khi viết đơn đăng ký của bạn.

Tính năng FullCAN

Truyền Truyền hộp thư được khởi tạo một lần
Chỉ các byte dữ liệu được ghi trước khi truyền
Nhận Chỉ những thư có ID được xác định trong hộp thư nhận mới có thể nhận được
Không có bộ đệm kép cho hộp thư
Lọc chấp nhận hoàn toàn (chỉ những ID thư chính xác mới được thông qua)
Xử lý Remote Frame Remote Frame được trả lời tự động bởi bộ điều khiển
Ghi đè Giữ lại thông điệp mới nhất (các thông điệp cũ có cùng ID sẽ bị mất)

CAN FD

Giới thiệu về CAN FD

CAN FD hay CAN Flexible Data Rates là một sự cải tiến của CAN 2.0. CAN FD cũng được phát triển bởi tập đoàn Bosch và chính thức được phát hành vào năm 2012.

CAN FD có thể sử dụng chung tầng vật lý với CAN 2.0.

Những khác biệt chính giữa CAN 2.0 và CAN FD:

CAN 2.0 CAN FD
Tốc độ bit tối đa: 1 Mbps. Tốc độ bit tối đa: 12 Mbps (ISO 11898-2 2015).
Lượng dữ liệu tối đa trong 1 Frame: 8 byte. Lượng dữ liệu tối đa trong 1 Frame: 64 byte.
Nhiều Node có thể truyền thông điệp cùng một thời điểm. Chỉ một Node có thể truyền thông điệp tại một thời điểm.
Không có bit để thay đổi tốc độ truyền dữ liệu. Có thêm các bit BRS, FDF, ESI có thể thay đổi tốc độ truyền dữ liệu.
Trường CRC chứa 15 bit. Trường CRC chứa 17 hoặc 21 bit.
Dữ liệu ít bảo mật. Dữ liệu được bảo mật tốt hơn.

CAN FD cũng có 4 loại khung truyền như CAN 2.0: Data Frame, Remote Frame, Error Frame và Overflow Frame.

– Xét riêng về Data Frame của CAN FD cũng bao gồm 2 định dạng như CAN 2.0 đó là:

– CAN FD không định nghĩa một định dạng riêng cho Remote Frame, Error Frame và Overload Frame, mà nó có cùng cấu trúc với CAN 2.0 cho các loại khung này.

Cấu trúc Data Frame

Cấu trúc của khung này tạo nên sự khác biệt (cải tiến) giữa CAN FD và CAN 2.0.

Data Frame CAN FD cũng bao gồm 7 trường bit như CAN 2.0. Chúng ta sẽ tìm hiểu cấu tạo bit của từng trường để thấy được sự khác biệt của chúng.

1. Trường bắt đầu (Start Of Frame Field – SOF)

Trường bắt đầu là vị trí của bit đầu tiên trong khung. Trường này chiếm 1 bit dữ liệu. Bit đầu tiên này là một Dominant Bit (mức logic 0).

2. Trường xác định quyền ưu tiên của tín hiệu (Arbitration Field)

Bit dùng phân biệt Data Frame và Remote Frame – RTR được thay thế bởi bit RRS (Remote Request Substitution) và luôn là một Dominant Bit.

3. Trường điều khiển (Control Field)

Ngoài bit quy định khung FD chuẩn hay mở rộng (bit IDE). Trường điều khiển có thêm các bit sau:

4. Trường dữ liệu (Data Field)

Kích thước dữ liệu tối đa có thể lên tới 64 byte.

5. Trường CRC

Vì độ dài trường dữ liệu tăng lên nên trường CRC cũng được điều chỉnh lại cho phù hợp.

Trường CRC không có độ dài cố định như CAN 2.0 mà thay đổi tùy theo độ dài trường dữ liệu. Cụ thể:

Trong định dạng CAN FD, CRC được tính cho chuỗi bit đã được áp dụng luật chèn bit. Đây là điểm khác biệt so với định dạng CAN vì CRC của định dạng này không bao gồm các bit chèn.

CRC Delimiter chỉ là 1 Recessive Bit đối với định dạng CAN nhưng nó có thể là 1 hoặc 2 Recessive Bit trong định dạng CAN FD. Cụ thể, trong định dạng CAN FD, bộ truyền chỉ truyền 1 Recessive Bit nhưng phải chấp nhận có 2 Recessive Bit trước khi phát hiện cạnh từ Recessive chuyển sang Dominant của ACK Slot. Một bộ nhận sẽ vẫn gửi ACK của nó sau Recessive Bit đầu tiên của CRC Delimiter.

6. Trường ACK

Định dạng CAN FD chấp nhận trường ACK Slot có độ dài tối đa 2 bit để bù sự dịch pha giữa các bộ nhận trong khi định dạng CAN chỉ chấp nhận 1 bit ACK và coi bit ACK thứ 2 là một lỗi định dạng.

ACK Delimiter cũng được tăng lên thành 2 Recessive Bit trong định dạng CAN FD.

7. Trường kết thúc (End Of Frame Field – EOF)

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 Recessive Bit.

Ứng dụng của CAN

Hiện nay CAN được ứng dụng trong rất nhều lĩnh vực khác nhau như: Xe ôtô, tàu khách và tàu hàng, hệ thống điện tử hàng hải, điện tử máy bay và hàng không, tự động hóa nhà máy, điều khiển máy công nghiệp, tự động hóa tòa nhà, thang máy (thang nâng và thang trượt), thiết bị phụ tùng y tế,….với tốc độ bit có thể lên đến 1 Mbit/s.

Trên đây, MC&TT đã chia sẻ cho bạn các thông tin cơ bản về mạng CAN/CAN Bus (Controller Area Network). Hy vọng rằng, với lượng kiến thức trong bài sẽ giúp ích cho các bạn đang nghiên cứu, tìm hiểu, học tập hay làm việc với mạng CAN/CAN Bus. Xin cảm ơn!

Bài viết liên quan