Cách kiểm tra xe buýt CAN có miễn phí hay không


8

Tôi đã đọc rất nhiều thứ liên quan đến trọng tài xe buýt CAN, nhưng nó không trả lời câu hỏi của tôi.

Nếu một nút đã truyền dữ liệu trên xe buýt và ở giữa một nút khác muốn bắt đầu truyền dữ liệu, làm thế nào "nút khác" đó sẽ biết rằng xe buýt đang bận?

Tất cả các tài liệu (mà tôi đọc) đều đưa ra điều kiện là cả hai nút bắt đầu truyền đồng thời và sau đó một nút có bit trội đầu tiên sẽ nhận được bus nhưng không ai giải thích được điều kiện mà tôi muốn biết.


1
Swanand, bạn có thể nhận được câu trả lời tốt hơn cho câu hỏi của mình nếu bạn chờ thêm một chút nữa để chấp nhận câu trả lời. Đây là một cộng đồng quốc tế và một số chuyên gia có thể không thể phản hồi ngay lập tức.
W5VO

@ W5VO Tôi sẽ nhớ nó lần sau! Cảm ơn đã gợi ý! :)
Swanand

Câu trả lời:


10

Câu trả lời ngắn gọn là nút phải theo dõi các dòng CAN ở chế độ chờ trong một thời gian nhất định trước khi nó cố gắng truyền. Vì vậy, nếu một nút khác đang truyền, nó phải giữ im lặng cho đến khi nút khác được thực hiện.

Một bus CAN dựa trên tín hiệu vi sai. Hai dòng, CAN-High (CAN +) và CAN-Low (CAN-), đều có cùng tiềm năng khi xe buýt không hoạt động. Để gửi bit, một bộ phát CAN đặt một điện áp vi sai trên các dòng khoảng 2 volt.

Một máy phát CAN trước tiên nhìn thấy nếu xe buýt không hoạt động và nếu có, bắt đầu truyền. Cách thức hoạt động của trọng tài là một máy phát giám sát xe buýt khi nó truyền. Việc truyền tải được thực hiện như trên bằng cách giữ hai đường dây ở cùng một tiềm năng hoặc ở một tiềm năng khác biệt. Vì vậy, nếu máy phát truyền một bit bằng cách giữ các đường dây ở cùng một điện thế (sic), nhưng nó thấy rằng hai đường truyền có tiềm năng vi sai, điều đó có nghĩa là một số nút khác đang truyền và máy phát đầu tiên đã mất trọng tài. Sau đó phải dừng truyền.

Khi một nút đầu tiên bắt đầu truyền, các bit được truyền giống nhau cho đến khi địa chỉ của nút truyền rõ ràng là khác nhau. Nếu hai nút bắt đầu truyền cùng nhau, chúng sẽ truyền đồng bộ với nhau cho đến khi đạt được phần địa chỉ. Khi địa chỉ khác nhau, một nút sẽ nhận thấy sự khác biệt tiềm năng trên các dòng ngay cả khi nó không đặt một dòng trên các dòng. Sau đó, nó biết nó đã mất và phải thử lại. Nút chiến thắng tiếp tục truyền mà không biết rằng một số nút khác cũng đang cố gắng. Tất nhiên, logic này cũng mở rộng đến hơn hai nút.

Tôi hi vọng cái này giúp được.


1
Câu trả lời tốt! Nếu tôi nhớ chính xác, việc gửi '0' chiếm ưu thế so với '1', dẫn đến trọng tài thắng địa chỉ thấp nhất. Một tính năng thú vị của điều này là nếu nút mất dừng lại khi dừng, sẽ không có dữ liệu bị hỏng trên xe buýt.
W5VO

Câu trả lời chính xác !! Sẽ rất biết ơn nếu bạn có thể làm rõ điều này: Hãy nói rằng các định danh là "1011001" và "1000110" khi đạt đến bit thứ ba, máy phát thứ nhất đang gửi "1" và thứ hai đang gửi "0"; vì vậy theo giao thức CAN, bit trội là 0 và nó ghi đè lên bit recessive. Vì vậy, bây giờ Bus giữ "0"; mô-đun đầu tiên phát hiện điều này và sẽ dừng truyền trong khi mô-đun thứ hai sẽ tiếp tục truyền. Tôi hiểu thế có đúng không ??
Febin Nắng

@FebinSunny Có ... Những gì bạn nói là chính xác!
Swanand

1
Câu trả lời này không "tốt" hay "tuyệt vời". Trong thực tế, nó là hoàn toàn sai . Đầu tiên, máy phát không "giữ hai dòng ở cùng một tiềm năng" để gửi bit recessive. Nó chỉ đơn giản là dừng việc kéo các dòng ra xa nhau, và các điện trở kết thúc cân bằng tiềm năng. Thứ hai, địa chỉ của nút truyền không phải là một phần của trường trọng tài trong CAN spec, mặc dù một số giao thức dựa trên CAN cấp cao hơn sử dụng nó như một phần của ID thông báo. Thứ ba, cả hai điều này đều không liên quan gì đến việc phát hiện xe buýt nhàn rỗi
Maple

7

Tôi biết hai cách để giải quyết nó:

Đầu tiên, bộ điều khiển CAN sẽ luôn giám sát xe buýt; Khi phát hiện một tin nhắn trên xe buýt, nó bắt đầu quá trình nhận. Bây giờ nó ở trạng thái nhận, nó biết xe buýt đang được sử dụng khi yêu cầu truyền phát.

Thứ hai, bằng cách nhồi bit, bộ thu phát CAN sẽ không có cùng một bit trong hơn năm chu kỳ (trừ khi phát hiện ra lỗi bus, trong trường hợp đó bạn sẽ thấy tối đa 12 bit trội). Ngoại lệ cho điều này là khi không có gì được truyền trên xe buýt, khi một bit thụ động luôn được đọc. Một bộ điều khiển chỉ mới bắt đầu có thể nghe xe buýt trong năm chu kỳ trước khi tuyên bố 'có thể miễn phí'.

Tôi không đảm bảo rằng đây là các quy trình thực tế, nhưng dựa trên kiến ​​thức (giới hạn) của tôi về CAN, chúng sẽ hoạt động.


Tôi thích mánh 2! Đó là logic thuần túy và tuyệt vời!
Swanand

2
Bạn đang thiếu điểm chính của trọng tài xe buýt - rằng điều đầu tiên trong gói CAN là địa chỉ.
W5VO

1
Đó thực sự không phải là câu hỏi của anh ấy; câu hỏi là làm thế nào một bộ điều khiển xác định nếu có hoạt động trên xe buýt
CoderTao

@ W5VO CÓ THỂ khung không có địa chỉ, trừ khi một số giao thức cấp cao hơn làm cho nó trở thành một phần của ID thông báo.
Maple

@CoderTao trong khi nhồi bit không phải là cách bộ điều khiển phát hiện bus nhàn rỗi, bạn đúng ở chỗ nó đóng vai trò quan trọng trong quá trình này, bằng cách đảm bảo dữ liệu truyền có thể bị nhầm lẫn vào cuối khung
Maple

3

Như CoderTao nói - bộ điều khiển CAN liên tục theo dõi xe buýt, vì vậy nó biết khi nào quá trình truyền đang diễn ra. Vì vậy, thời điểm duy nhất khi va chạm có thể xảy ra là khi cả hai nút bắt đầu truyền "đồng thời" - trong một khoảng thời gian bit của nhau (+ một lượng nhỏ thời gian bổ sung để truyền bus). Do đó, đó là những trường hợp duy nhất bạn tìm thấy trong tài liệu :)


2

Địa chỉ nút xác định mức độ ưu tiên, địa chỉ thấp hơn có mức độ ưu tiên cao. Việc truyền bắt đầu với nút phát địa chỉ của nó. Đồng thời nó truyền đi, nó lắng nghe. Giả sử nút ba và hai truyền cùng một lúc. Là bit cuối cùng của địa chỉ, nút ba phát 1 và nút hai phát a 0. Vì 0, dòng dữ liệu được kéo xuống trạng thái 0. Nút ba thấy rằng thay vì 1 nó phát, đường truyền là 0 và dừng truyền.

CAN lần đầu tiên được sử dụng trong xe hơi và xe tải. Một số cảm biến cần thiết để có mức độ ưu tiên cao hơn nhiều so với những cảm biến khác. Ví dụ, hệ thống chống trượt cần phải có mức độ ưu tiên cao hơn so với dung dịch rửa kính chắn gió thấp.


Tôi đã biết điều này .... Câu hỏi của tôi không phải là về Trọng tài khi bắt đầu .... Đó là về giữa các lần truyền ....
Swanand

1

Có bốn yếu tố chính trong đặc tả CAN cho phép bộ điều khiển CAN phát hiện trạng thái bus không hoạt động:

  • Tín hiệu có dây-AND cho phép bit trội được truyền bởi một trong các nút được phát hiện bởi tất cả các nút khác truyền bit lặn cùng một lúc. Vì vậy, nếu bất kỳ nút nào truyền bit recessive thấy trạng thái chi phối của bus thì nó biết rằng bus đang bận .

  • Nhồi bit đảm bảo rằng không có quá 5 bit liên tiếp giống hệt nhau. Chính nó, nhồi bit được sử dụng để duy trì đồng bộ hóa. Tuy nhiên, một tác dụng phụ của nó là không có quá 5 bit thoái liên tiếp có thể xảy ra trong các bit khung lên đến dấu phân cách CRC.

  • End-of-frame là một chuỗi gồm 7 bit lặn ở cuối khung. Chúng không được nhồi bit, do đó chúng có thể dễ dàng được phát hiện bởi các bộ điều khiển. Lưu ý rằng xe buýt vẫn chưa nhàn rỗi trong thời gian này, vì EOF được coi là một phần của khung.

  • Không gian liên khung là một chuỗi gồm 3 bit tạm dừng giữa các khung, theo sau là trạng thái không hoạt động của bus. Không có nút nào được phép bắt đầu truyền trong khi ngắt, trừ khi họ muốn gửi lỗi hoặc quá tải khung. Hơn nữa, nút truyền khung cuối cùng cũng phải gửi 8 bit truyền tạm dừng sau khi ngắt trước khi bắt đầu truyền khác. Yêu cầu cuối cùng này cho phép các nút khác bắt đầu gửi tin nhắn đang chờ xử lý, vì vậy không có nút nào có thể "hog bus" vô thời hạn.

Từ tất cả những điều trên, đây là cách các nút phát hiện trạng thái bus nhàn rỗi:

  • Các nút nhận chỉ đơn giản là chờ 10 bit recessive liên tiếp , bao gồm EOF và ngắt. Sau thời gian đó, họ coi xe buýt không hoạt động và có thể cố gắng bắt đầu truyền tải.

  • Nút truyền sẽ gửi 11 bit recessive liên tiếp sau EOF của khung cuối cùng mà nó truyền. Nếu không có nút nào khác bắt đầu truyền trong thời gian này, nó coi bus là không hoạt động và có thể cố gắng bắt đầu truyền khác. Nếu bit trội được phát hiện trong thời gian này, nút trở thành máy thu.

Thông tin trên cộng với thông tin bổ sung về thời gian bit có thể được tìm thấy trong đặc tả CAN được phát triển bởi BOSCH.


Có một xe buýt với nhiều nút hoạt động. Một nút mới được cắm khi không có giao tiếp nào xảy ra. Làm thế nào nút mới này sẽ biết rằng xe buýt không hoạt động? 10 bit recessive liên tiếp được truyền đi khi nút mới này không có trong ảnh.
Swanand

"Tín hiệu có dây-AND" có nghĩa là các bit lặn không được "truyền" như vậy, điều đó có nghĩa là nút truyền không tích cực tạo ra tiềm năng chi phối. Nhưng chúng được nhận , tức là các nút nhận lấy mẫu bus theo các khoảng bit và chúng thấy bit recessive trên dòng. Vì vậy, nếu nút mới này lấy mẫu bus 10 lần và thấy bit recessive mỗi khi nó coi bus không hoạt động.
Maple

Không có sự khác biệt giữa "10 bit recessive liên tiếp được truyền khi nút mới này không có trong ảnh" và trạng thái không hoạt động của bus sau đó. Nếu không có giao tiếp, bất kỳ việc đọc nào trên xe buýt sẽ trả về bit recessive ("1"). Vì vậy, không quan trọng khi bạn bắt đầu lấy mẫu, trong hoặc sau bit trội cuối cùng. Miễn là người nhận thấy 10 bit, nó có thể bắt đầu truyền. BTW, không ai gửi 10 bit. Bộ phát cuối cùng "gửi" 11 bit recessive, 3 ngắt + 8 tạm dừng. Nếu nút chờ bắt đầu truyền sau ngày 10, máy phát cuối cùng sẽ mất trọng tài và đưa xe buýt sang nút mới
Maple

0

Một nút cụ thể chỉ bắt đầu truyền sau khoảng thời gian INTERMISSION (thời lượng này còn được gọi là thời lượng TẠM NGỪNG, trong giai đoạn này, 3 bit lặn được truyền đến bus sau khi truyền khung DATA / REMOTE sang bus. Điều này cho thấy rằng Bus là ở trạng thái IDLE), bởi vì, trong giai đoạn này, không có nút nào khởi tạo Truyền. Sau khi Bus ở trạng thái IDLE STATE, nút muốn bus truyền đi vào ARBITRATION.

Sau khi truyền không gian khung liên kết tới bus, các nút có trong mạng CAN sẽ cố gắng bắt đầu Truyền. Do đó, một nút cụ thể biết liệu Bus có bận hay không.


Điều gì nếu, nó sẽ được truyền đầu tiên trên xe buýt? Trong trường hợp đó, sẽ không có bất kỳ "Thời gian tạm dừng". Tham khảo câu trả lời của @ Doc để biết chi tiết.
Swanand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.