找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索

關(guān)于單片機(jī)CAN總線有個(gè)問(wèn)題想請(qǐng)教下大家

查看數(shù): 2275 | 評(píng)論數(shù): 9 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁(yè)<-左 右->
    組圖打開(kāi)中,請(qǐng)稍候......
發(fā)布時(shí)間: 2022-9-15 19:24

正文摘要:

關(guān)于CAN總線有個(gè)問(wèn)題想請(qǐng)教下大家 就是我現(xiàn)在用的是一個(gè)主機(jī)來(lái)控制3個(gè)從機(jī)。單片機(jī)程序流程是主機(jī)發(fā)送一個(gè)廣播消息,3個(gè)從機(jī)接收到消息后執(zhí)行相關(guān)功能,執(zhí)行完后 3個(gè)從機(jī)分別給主機(jī)發(fā)送一個(gè)消息證明已經(jīng)執(zhí)行完了, ...

回復(fù)

ID:228467 發(fā)表于 2022-9-17 10:41
yzwzfyz 發(fā)表于 2022-9-17 09:01
CAN通訊是硬件沖突的,CAN的地址有優(yōu)先識(shí)別,當(dāng)多路同時(shí)發(fā)送數(shù)據(jù)時(shí),地址優(yōu)先的會(huì)搶到總線,直到它發(fā)完數(shù)據(jù) ...

厲害!非常感謝老哥的指點(diǎn),學(xué)習(xí)了
ID:228467 發(fā)表于 2022-9-17 10:40
glinfei 發(fā)表于 2022-9-16 15:23
我覺(jué)得還是總線沖突,反正你運(yùn)動(dòng)函數(shù)也不返回成功值,不如把從機(jī)返回執(zhí)行命令提前在運(yùn)動(dòng)函數(shù)前,這樣大家基 ...

非常感謝老哥的指點(diǎn)!
ID:228467 發(fā)表于 2022-9-17 10:39
圓就是圈圈 發(fā)表于 2022-9-16 13:45
這應(yīng)該是緩沖區(qū)的問(wèn)題,你的緩沖區(qū)里邊里面應(yīng)該只能接受一條消息,導(dǎo)致其他消息被頂出了緩沖區(qū)或者無(wú)人接受

感謝老哥的指點(diǎn)了!CAN緩沖區(qū)有8個(gè)字節(jié),我只發(fā)了1個(gè),應(yīng)該不是這里的問(wèn)題
ID:228467 發(fā)表于 2022-9-17 10:38
pcf2000 發(fā)表于 2022-9-16 12:38
采用廣播的方式發(fā)送命令,意味著3從機(jī)同時(shí)接收到數(shù)據(jù),同時(shí)執(zhí)行動(dòng)作,還有可能同時(shí)返回?cái)?shù)據(jù),這就會(huì)導(dǎo)致總 ...

感謝老哥的指點(diǎn)了!
ID:123289 發(fā)表于 2022-9-17 09:01
CAN通訊是硬件沖突的,CAN的地址有優(yōu)先識(shí)別,當(dāng)多路同時(shí)發(fā)送數(shù)據(jù)時(shí),地址優(yōu)先的會(huì)搶到總線,直到它發(fā)完數(shù)據(jù),其它另一個(gè)次優(yōu)先的才能使用總線。
【解決的方案】是:每個(gè)設(shè)備間隔一段時(shí)間發(fā)數(shù)據(jù)就可以了。
間隔多久呢?估算一下,假設(shè)4個(gè)機(jī)子的總數(shù)據(jù)量一起發(fā)完需要T時(shí)間,間隔時(shí)間>T,就可以了,這是CAN通訊的特長(zhǎng)!不必考慮在T時(shí)間內(nèi),會(huì)不會(huì)發(fā)生沖突。即使你同時(shí)發(fā),它也會(huì)自動(dòng)通過(guò)硬件,讓地址優(yōu)先的先發(fā),發(fā)完后,其它的再發(fā),優(yōu)先級(jí)差的,一定最后發(fā)。
也即,CAN數(shù)據(jù)的真正發(fā)送時(shí)刻,不是你下達(dá)發(fā)送命令的時(shí)刻,你的命令下達(dá)后,只是將數(shù)據(jù)送入緩沖區(qū),當(dāng)總線上有空閑時(shí)(比你優(yōu)先的不用了),此刻數(shù)據(jù)才會(huì)被發(fā)出。
ID:844772 發(fā)表于 2022-9-16 15:23
我覺(jué)得還是總線沖突,反正你運(yùn)動(dòng)函數(shù)也不返回成功值,不如把從機(jī)返回執(zhí)行命令提前在運(yùn)動(dòng)函數(shù)前,這樣大家基本同時(shí)返回值,然后你給每個(gè)從機(jī)不同延時(shí),這樣能減少?zèng)_突。還有,也可以在從機(jī)發(fā)信前,先監(jiān)聽(tīng)總線是否有信息在發(fā)送。反正能用就行,沖突跟干擾一樣是不可能徹底解決的。
ID:725110 發(fā)表于 2022-9-16 13:45
這應(yīng)該是緩沖區(qū)的問(wèn)題,你的緩沖區(qū)里邊里面應(yīng)該只能接受一條消息,導(dǎo)致其他消息被頂出了緩沖區(qū)或者無(wú)人接受
ID:245053 發(fā)表于 2022-9-16 12:38
采用廣播的方式發(fā)送命令,意味著3從機(jī)同時(shí)接收到數(shù)據(jù),同時(shí)執(zhí)行動(dòng)作,還有可能同時(shí)返回?cái)?shù)據(jù),這就會(huì)導(dǎo)致總線競(jìng)爭(zhēng)的,所以要解決好競(jìng)爭(zhēng)的問(wèn)題;再一個(gè)就是,如果3從機(jī)的實(shí)時(shí)性要求不高,主機(jī)可以采取輪詢發(fā)送命令的方式進(jìn)行,間隔一定時(shí)間輪次發(fā)送命令,可以避免總線競(jìng)爭(zhēng)問(wèn)題

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表