2017-04-15 112 views
1

我正在構建基於Atmega2560芯片的定製Canbus IO模塊。該模塊將具有10個高電流輸出,包括pwm控制和電流反饋,20個數字輸入,5個模擬輸入和4個0-5v模擬輸出。我一直在研究搞清楚我將要使用的J1939消息結構。這些模塊將是由主ECU控制的從屬設備。由於這些模塊中的多個模塊可能位於同一個網絡中,因此我爲每個模塊添加了一個CAN地址開關,以便用戶可以選擇每個單元的CAN ID 1-255。計劃是讓每個模塊在單個CAN消息中廣播所有數字輸入的狀態。如果我選擇0xFF00作爲PGN ID,然後使用8個字節來表示該特定模塊輸入狀態的位狀態,那麼主機如何知道該消息來自哪個模塊? CANbus消息中的模塊地址是?j1939自定義模塊通信

我一直在尋找的Arduino的CANBUS的例子,它看起來像您可以根據PGN過濾,但我沒有看到任何過濾器的基礎上源地址或目的地址。

有人可以提供我如何可能會做一些這方面的澄清?

+0

J1939編碼的源地址作爲擴展CAN標識的8個最低-顯著位。您應該可以編程您的CAN接口來過濾掉那部分,但除非您遇到性能問題,否則我會堅持使用軟件過濾。我懷疑你選擇帶有內置CAN外設的MCU代替ATmega2560可能會更好。 – doynax

+0

所以我可以通過添加優先級,PGN然後來源發送消息? 例如,如果我發送0x0CFF00FE這意味着: 優先3 PGN 65280 源地址254 這是正確的嗎? – jonfarrugia

+0

@jonfarrugia你是對的。請注意,所有專有的PGN(65280-65535)都是廣播消息,這意味着它們的目標地址始終爲255。 – LaneL

回答

0

是的,作爲doynax提到的,8個最低顯著位總是保留用於節點的源地址。如果您將該網絡放置在車輛的CAN總線上,請務必注意,如果您未在車輛總線上聲明源地址,則每當您嘗試將外部信息放置在車輛上時,您可能會從主ECU獲得NAK總線。

爲了避免這個問題,你可能必須爲你的網絡上的每個自定義節點做一個要求地址的過程。這是發送PGN 60928作爲廣播(目的地址0xFF)的地方,網絡上的每個節點都應該在該PGN上用自己的源地址進行響應(假設所有節點都符合本規範,並非全部都符合)。如果在回覆中看到共同的源地址,那麼您知道它不可用。

見頁開始以獲取更多信息下面幻燈片39 J1939