|
發布時間: 2022-9-15 19:24
正文摘要:關于CAN總線有個問題想請教下大家 就是我現在用的是一個主機來控制3個從機。單片機程序流程是主機發送一個廣播消息,3個從機接收到消息后執行相關功能,執行完后 3個從機分別給主機發送一個消息證明已經執行完了, ... |
yzwzfyz 發表于 2022-9-17 09:01 厲害!非常感謝老哥的指點,學習了 ![]() |
glinfei 發表于 2022-9-16 15:23 非常感謝老哥的指點! |
圓就是圈圈 發表于 2022-9-16 13:45 感謝老哥的指點了!CAN緩沖區有8個字節,我只發了1個,應該不是這里的問題 |
pcf2000 發表于 2022-9-16 12:38 感謝老哥的指點了! |
|
CAN通訊是硬件沖突的,CAN的地址有優先識別,當多路同時發送數據時,地址優先的會搶到總線,直到它發完數據,其它另一個次優先的才能使用總線。 【解決的方案】是:每個設備間隔一段時間發數據就可以了。 間隔多久呢?估算一下,假設4個機子的總數據量一起發完需要T時間,間隔時間>T,就可以了,這是CAN通訊的特長!不必考慮在T時間內,會不會發生沖突。即使你同時發,它也會自動通過硬件,讓地址優先的先發,發完后,其它的再發,優先級差的,一定最后發。 也即,CAN數據的真正發送時刻,不是你下達發送命令的時刻,你的命令下達后,只是將數據送入緩沖區,當總線上有空閑時(比你優先的不用了),此刻數據才會被發出。 |
| 我覺得還是總線沖突,反正你運動函數也不返回成功值,不如把從機返回執行命令提前在運動函數前,這樣大家基本同時返回值,然后你給每個從機不同延時,這樣能減少沖突。還有,也可以在從機發信前,先監聽總線是否有信息在發送。反正能用就行,沖突跟干擾一樣是不可能徹底解決的。 |
| 這應該是緩沖區的問題,你的緩沖區里邊里面應該只能接受一條消息,導致其他消息被頂出了緩沖區或者無人接受 |
| 采用廣播的方式發送命令,意味著3從機同時接收到數據,同時執行動作,還有可能同時返回數據,這就會導致總線競爭的,所以要解決好競爭的問題;再一個就是,如果3從機的實時性要求不高,主機可以采取輪詢發送命令的方式進行,間隔一定時間輪次發送命令,可以避免總線競爭問題 |