Tại sao bộ thu phát CAN của tôi không nhận được tin nhắn trừ khi có độ trễ khởi động dài hoặc bộ phân tích bus được kết nối?


8

Tôi đang sử dụng MCU 16 bit, PIC24HJ64GP504 , để viết một ứng dụng dựa trên CAN. Về cơ bản, đó là liên lạc giữa bảng của tôi và một nút khác liên tục gửi dữ liệu đến bảng của tôi bằng CAN với tốc độ 1 Mbit / s. Tôi đang cấu hình mô-đun ECAN trong PIC24 của tôi để hoạt động với tốc độ 1 Mbit / s. Tôi đã viết mã theo cách mà trong 10 ms đầu tiên, mô-đun ECAN sẽ chấp nhận tất cả các tin nhắn đến từ phía bên kia và sau đó tôi đã định cấu hình lại mô-đun ECAN để chỉ chấp nhận các tin nhắn có ID tin nhắn 0x13.

Bây giờ đến đây vấn đề .. Các nút khác và bảng của tôi được cấp nguồn cùng một lúc. Nút khác bắt đầu truyền tin nhắn sau 40 ms hoặc lâu hơn sau khi khởi động. Nhưng tôi không thể nhận được bất kỳ tin nhắn từ nó trên bảng của tôi. Bây giờ nếu tôi cấp nguồn cho bảng của mình trước, hãy dành chút thời gian để cấu hình lại mô-đun ECAN với các bộ lọc mới và ổn định và sau đó cấp nguồn cho nút khác, sau đó mọi thứ hoạt động hoàn hảo.

Bây giờ là phần kỳ lạ nhất .. Nếu tôi có một bộ phân tích bus CAN được kết nối giữa bo mạch của tôi và nút khác và ngay cả khi tôi cấp nguồn cho cả hai nút cùng một lúc, mọi thứ đều hoạt động tốt ... không cần phải cấp nguồn cho bảng của tôi trước. Tôi đã thử điều này với ba máy phân tích xe buýt khác nhau từ các nhà sản xuất khác nhau và nhận được kết quả tương tự.

Đối với tôi, dường như trong quá trình cấu hình lại mô-đun ECAN, phải mất một thời gian để ổn định. Và với sự ra đời của máy phân tích xe buýt trong xe buýt, lần này bằng cách nào đó được rút ngắn để mọi thứ hoạt động hoàn hảo. Nhưng tôi không chắc chính xác vấn đề có thể là gì.

Tôi đã vật lộn với vấn đề này trong bảy ngày qua.

PS: Hôm nay tôi đã kiểm tra với một phạm vi và phát hiện ra rằng nếu nút khác bắt đầu truyền sau 170 ms sau khi khởi động, thì toàn bộ hoạt động tốt. Trước đó, thiết bị của tôi sẽ không nhận được bất kỳ tin nhắn nào từ thiết bị trừ khi bộ phân tích bus được kết nối. Phần tồi tệ nhất là tôi không thể trì hoãn việc truyền nút khác, phần sụn của nút đó là độc quyền.

Ngoài ra tôi đã đọc trong một diễn đàn ngày hôm nay rằng CÓ THỂ cần điện trở 120 at tại nút để làm cho nó hoạt động (mặc dù nút của tôi không có và nó hoạt động tốt, được cung cấp một thời gian để giải quyết sau khi cấu hình lại). Tôi nghi ngờ việc giới thiệu máy phân tích xe buýt bằng cách nào đó thay đổi một số thông số điện của mạng sao cho thời gian mà nút của tôi mất để giải quyết sau khi cấu hình lại bị cắt ngắn. Nhưng tôi không chắc .. :(


1
Bạn có thể cho chúng tôi liên kết đến tất cả các sản phẩm bạn đang sử dụng. Điều này cho phép các câu trả lời cụ thể được xây dựng dễ dàng hơn.
Kortuk

Bạn có thể thực hiện các thay đổi cho hội đồng quản trị của bạn, hoặc bạn đang mong đợi / hy vọng cho một giải pháp phần mềm hoàn toàn?
Abbeyatcu

Bạn có chắc rằng nút khác tiếp tục truyền, ngay cả khi nút riêng của bạn không hoạt động? Một số triển khai CAN sử dụng bộ đếm lỗi và nếu lỗi này tràn ra (ví dụ do không nhận được nút nào), nút truyền sẽ dừng lại.
SCHEDLER

Câu trả lời:


9

Bạn "đọc trên một diễn đàn" ở đâu đó rằng xe buýt CAN cần điện trở? Nghiêm túc!!?

Đây là một phần không thể thiếu trong thiết kế của bạn. Nếu bạn định sử dụng CAN, bạn cần hiểu nó, có nghĩa là đọc tài liệu liên quan.

Spearson đúng nhưng vì lý do sai. Một bus CAN khác biệt như bạn có thể có (bạn không nói bạn đang sử dụng chip giao diện nào, nhưng có lẽ bạn có một bus CAN khác biệt được điều khiển bởi một thứ như MCP2551 ở mỗi nút) yêu cầu một điện trở giữa các dòng. Điều này là do trạng thái lặn được báo hiệu bởi hai đường bị động kéo lại với nhau và trạng thái chiếm ưu thế do chúng bị kéo ra một cách chủ động. Các điện trở giữa các dòng theo nghĩa đó tương đương với một điện trở pullup trên một dòng collector mở. Không có thứ gì đó nối các dòng với nhau khi không có gì lái xe buýt, xe buýt không hoạt động.

Các điện trở cũng có chức năng như các đầu mối như spearson đã chỉ ra. Bạn thường sử dụng cặp xoắn cho hai tuyến xe buýt. Điều này có trở kháng khoảng 120. Loại bus vi sai CAN này được xác định là có 60 Ω giữa các đường là một điểm nối với nhau để có thể thực hiện với 120 Ω mỗi dòng để kết thúc bus và tránh phản xạ.

 


"Spearson" đề cập đến điều gì? Một người dùng có tên "spearson" đã để lại nhận xét (từ đó bị xóa hoặc người dùng đã thay đổi tên màn hình?)? Một cuốn sách (tên của tác giả)?
Peter Mortensen

@peter: Rõ ràng là có.
Olin Lathrop

4

Trong hoạt động CAN bình thường, một nút sẽ lặp lại quá trình truyền của nó cho đến khi nó bị ACK hoặc số lỗi đã bị vượt quá. Khi bạn có bộ phân tích CAN được kết nối với mạng, nó sẽ phát ra bit ACK khi phát hiện khung từ nút đầu tiên của bạn, giúp việc truyền thành công. Nếu bạn đang sử dụng Trình phân tích CAN BUS của Microchip, bạn có thể định cấu hình nó ở chế độ 'chỉ nghe', điều đó có nghĩa là nó sẽ không phát hành bất kỳ bit ACK nào, do đó không ảnh hưởng đến mạng. Vì vậy, bạn sẽ có thể thấy khung CAN lặp lại trong màn hình phân tích cho đến khi nút thứ hai phát ra ACK hoặc nút đầu tiên thoát khỏi truyền do đếm lỗi.

Bit ACK sẽ được đặt bởi một nút nhận (nếu khung hoàn thành và chính xác) bất kể lọc địa chỉ nào.

Rất có thể nút đầu tiên của bạn đang đạt đến trạng thái lỗi do khung không phải là ACK'd. Bạn nên phát hiện điều này trong phần mềm bằng cách sử dụng thanh ghi CiINTF. Bạn cũng có thể định cấu hình PIC để phát hành các ngắt cho các điều kiện lỗi bằng cách sử dụng thanh ghi CiINTE.

Nếu phạm vi của bạn không giải mã được các khung CAN, hãy thử bộ phân tích Logic Saleae . Nó sẽ giải mã khung CAN và hiển thị bit ACK / Error. Nó đáng tin cậy hơn nhiều so với máy phân tích Microchip CAN.


3

Có một khe ACK (hai bit) trong Khung CAN. Nếu một nút A đang truyền dữ liệu và có năm nút khác trên bus, sau khi truyền bất kỳ nút nào nhận được khung sẽ đặt bit chiếm ưu thế vào khe ACK. Điều này cho thấy tin nhắn đã được truyền thành công. Mặt khác, bộ điều khiển CAN coi đó là một lỗi trên xe buýt.

Khi bạn thêm một bộ phân tích CAN, nó sẽ gửi ACK đến bộ phát. Các máy phát nghĩ rằng xe buýt là tốt và tiếp tục truyền. Trong trường hợp không có bộ phân tích CAN, khi bạn định cấu hình lại bộ điều khiển CAN của mình, bộ phát không nhận được ACK và nghĩ rằng có lỗi trên bus, vì vậy nó dừng truyền.

Tôi hy vọng bạn có điểm.

Hãy chắc chắn rằng ACK đang nhận được đúng. Ngoài ra, cố gắng không tắt hoàn toàn bộ thu CAN của bạn trong khi thực hiện cấu hình lại.

Một mẹo khác (tôi không chắc nó sẽ hoạt động luôn) là gửi khung DLC ​​bằng 0 và khung ID 0 sau khi cấu hình lại. Điều này sẽ cho nút phát rằng bus đang hoạt động và nó sẽ bắt đầu truyền.

Lưu ý: điện trở 120 is là PHẢI !!! . Một kháng chiến chấm dứt là điều quan trọng trên BẤT K bus xe buýt nào.


Thủ thuật gửi khung không DLC ​​và ID 0 của bạn sau khi khởi tạo, thực sự đã có trong các tiêu chuẩn, được gọi là thông báo khởi động. ID của nó giống như nhịp tim (0x700 + ID nút) và có một DLC duy nhất là 1. Công cụ phân tích sẽ nhận ra điều này.
BullBoyShoes
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.