摘 è¦ï¼š 闡述了CANä¸ç¹¼å™¨çš„é‡è¦ä½œç”¨ï¼Œè©³ç´°åˆ†æžäº†CANä¸ç¹¼å™¨çš„軟ã€ç¡¬ä»¶è¨è¨ˆæ–¹æ³•,并å°å…¶åœ¨é£Ÿå ‚售飯系統(tÇ’ng)ä¸çš„æ‡‰ç”¨ä½œäº†åˆ†æžèªªæ˜Žã€‚
é—œéµè©žï¼š CAN總線 CAN控制器 CANä¸ç¹¼å™¨
1 引言
CAN總線是Boschå…¬å¸ç‚ºç¾(xià n)代汽車應用而推出的一種總線,與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有çªå‡ºçš„å¯é 性ã€å¯¦æ™‚æ€§å’Œéˆæ´»æ€§ã€‚CAN 總線ç¾(xià n)已廣泛應用于工æ¥(yè)ç¾(xià n)å ´æŽ§åˆ¶ã€å°å€(qÅ«)安防ã€ç’°(huán)境監(jiÄn)控ç‰çœ¾å¤šé ˜åŸŸä¸ã€‚CAN總線為多主方å¼å·¥ä½œï¼Œç¶²(wÇŽng)絡上任一節(jié)點å‡å¯åœ¨ä»»æ„時刻主動地å‘ç¶²(wÇŽng)絡上其它節(jié)點發(fÄ)é€ä¿¡æ¯è€Œä¸åˆ†ä¸»å¾žï¼Œé€šä¿¡æ–¹å¼éˆæ´»ï¼Œä¸”無需站地å€ç‰ç¯€(jié)點信æ¯ã€‚
CANä¸ç¹¼å™¨æ˜¯CAN總線系統(tÇ’ng)組網(wÇŽng)的關éµè¨å‚™ä¹‹ä¸€ï¼Œåœ¨ç¨å¤§åž‹çš„CAN總線系統(tÇ’ng)ä¸ç¶“(jÄ«ng)常會用到ä¸ç¹¼å™¨ã€‚本文所討論的ä¸ç¹¼å™¨é™¤äº†å…·æœ‰ä¸ç¹¼åŠŸèƒ½ä»¥å¤–ï¼Œé‚„å…·æœ‰ä¸€å®šçš„ç¶²(wÇŽng)æ©‹åŠŸèƒ½ã€‚å› ç‚ºåªè¦å°ä¸ç¹¼å™¨çš„åˆå§‹åŒ–åƒæ•¸(shù)進行é©ç•¶é…置,就能使ä¸ç¹¼å™¨æ—¢å…·æœ‰å ±æ–‡è½‰ç™¼(fÄ)功能,åˆå…·æœ‰å ±æ–‡éŽæ¿¾åŠŸèƒ½ï¼Œé€™é‡Œåªæ˜¯å€Ÿç”¨äº†ä¸ç¹¼å™¨çš„å稱而已。
使用ä¸ç¹¼å™¨çš„優(yÅu)點主è¦è¡¨ç¾(xià n)在以下幾方é¢ï¼š
ï¼ˆï¼‘ï¼‰éŽæ¿¾é€šä¿¡é‡ã€‚ä¸ç¹¼å™¨æŽ¥æ”¶ä¸€å€‹åç¶²(wÇŽng)çš„å ±æ–‡ï¼Œåªæœ‰ç•¶å ±æ–‡æ˜¯ç™¼(fÄ)é€çµ¦ä¸ç¹¼å™¨æ‰€é€£çš„å¦ä¸€å€‹åç¶²(wÇŽng)時,ä¸ç¹¼å™¨æ‰è½‰ç™¼(fÄ),å¦å‰‡ä¸è½‰ç™¼(fÄ)。
(2)擴大了通信è·é›¢ï¼Œä½†ä»£åƒ¹æ˜¯å¢žåŠ äº†ä¸€äº›å˜å„²è½‰ç™¼(fÄ)延時。
ï¼ˆï¼“ï¼‰å¢žåŠ äº†ç¯€(jié)點的最大數(shù)目。
(4)å„個網(wÇŽng)段å¯ä½¿ç”¨ä¸åŒçš„通信速率。
(5)æé«˜äº†å¯é 性。當網(wÇŽng)絡出ç¾(xià n)故障時,一般åªå½±éŸ¿å€‹åˆ¥ç¶²(wÇŽng)段。
(6)性能得到改善。
當然,使用ä¸ç¹¼å™¨ä¹Ÿæœ‰ä¸€å®šçš„缺點,例如:
(1)由于ä¸ç¹¼å™¨å°æŽ¥æ”¶çš„å¹€è¦å…ˆå˜å„²åŽè½‰ç™¼(fÄ)ï¼Œå¢žåŠ äº†å»¶æ™‚ã€‚
(2)CAN總線的MACå層并沒有æµé‡æŽ§åˆ¶åŠŸèƒ½ã€‚ç•¶ç¶²(wÇŽng)çµ¡ä¸Šçš„è² è·å¾ˆé‡æ™‚,å¯èƒ½å› ä¸ç¹¼å™¨ä¸ç·©æ²–å€(qÅ«)çš„å˜å„²ç©ºé–“ä¸å¤ 而發(fÄ)生溢出,以致產(chÇŽn)生幀丟失的ç¾(xià n)象。
(3)ä¸ç¹¼å™¨è‹¥å‡ºç¾(xià n)故障,å°ç›¸é„°å…©å€‹åç¶²(wÇŽng)的工作都將產(chÇŽn)生影響。

CANä¸ç¹¼å™¨ä¸»è¦ç”±89C52和兩路CAN控制器接å£çµ„æˆã€‚89C52作為CANä¸ç¹¼å™¨çš„å¾®æŽ§åˆ¶å™¨ï¼Œè² è²¬æ•´å€‹ä¸ç¹¼å™¨çš„監(jiÄn)控任務。兩路CAN控制器接å£é›»è·¯åŸºæœ¬ç›¸åŒï¼Œéƒ½æ˜¯ç”±CAN通信控制器SJA1000ã€å…‰é›»è€¦åˆé›»è·¯å’ŒCAN總線驅(qÅ«)動器82C250組æˆã€‚CAN總線驅(qÅ«)動器都采用帶隔離的DC/DC模塊單ç¨ä¾›é›»ã€‚這樣,ä¸åƒ…實ç¾(xià n)了兩路CAN接å£ä¹‹é–“的電氣隔離,也實ç¾(xià n)了ä¸ç¹¼å™¨èˆ‡CANç¸½ç·šçš„éš”é›¢ã€‚é›–ç„¶é€™åœ¨ä¸€å®šç¨‹åº¦ä¸Šå¢žåŠ äº†ä¸ç¹¼å™¨ç¡¬ä»¶çš„å¾©é›œæ€§å’Œæˆæœ¬ï¼Œä½†å»æ˜¯å€¼å¾—的。采å–隔離措施å¯ä½¿æ•…障局é™åœ¨æŸä¸€ç¶²(wÇŽng)段內(nèi),而ä¸è‡³äºŽå½±éŸ¿å…¶å®ƒç¶²(wÇŽng)段,既便于ç¶è·ï¼Œåˆä¿è‰äº†ç³»çµ±(tÇ’ng)è¨å‚™çš„安全。
ä¸ç¹¼å™¨ç¡¬ä»¶é™¤äº†ä»¥ä¸Šä¸»è¦éƒ¨åˆ†ä»¥å¤–,還有EEPROMã€çœ‹é–€ç‹—å’ŒLED指示ç‰éƒ¨åˆ†ã€‚幾個LED分別用于ä¸ç¹¼å™¨ä¸Šé›»æŒ‡ç¤ºå’ŒCAN接å£ç•¶å‰çš„æŽ¥æ”¶å’Œç™¼(fÄ)é€ç‹€æ…‹(tà i)æŒ‡ç¤ºï¼Œä»¥åŠæŽ¥å£çš„通信故障(如總線關閉)指示。看門狗采用MAX1232。MAX1232具有高電平ã€ä½Žé›»å¹³ä¸Šé›»å¾©ä½å’Œçœ‹é–€ç‹—功能。EEPROM采用具有1Kå—節(jié)容é‡çš„24LC08,å¯ç”¨äºŽä¿å˜ä¸ç¹¼å™¨çš„é…ç½®åƒæ•¸(shù)ç‰ä¿¡æ¯ï¼Œä¾¿äºŽç³»çµ±(tÇ’ng)çš„éˆæ´»é…置。
2 CANä¸ç¹¼å™¨çš„軟件è¨è¨ˆ
CANä¸ç¹¼å™¨çš„主è¦ä»»å‹™æ˜¯åœ¨å…©å€‹CANç¶²(wÇŽng)段之間實ç¾(xià n)å ±æ–‡çš„éŽæ¿¾å’Œè½‰ç™¼(fÄ)ã€‚ç”±äºŽé€šä¿¡å¯¦æ™‚æ€§çš„è¦æ±‚以åŠCANä¸ç¹¼å™¨CPUä¸ç·©å˜å®¹é‡æœ‰é™ï¼ˆ89C52å…§(nèi)部RAM容é‡ç‚º256個å—節(jié)),所以在進行軟件è¨è¨ˆæ™‚ï¼Œè¦æ±‚åšåˆ°å˜å„²è½‰ç™¼(fÄ)時間盡é‡çŸã€‚為了é”åˆ°é€™ä¸€è¦æ±‚,CPUé‡‡ç”¨ä¸æ–·æ–¹å¼æŽ¥æ”¶å…©å€‹CANæŽ§åˆ¶å™¨çš„å ±æ–‡ï¼ŒåŒæ™‚盡é‡ç²¾ç°¡CPU收發(fÄ)å程åºçš„代碼長度。為了節(jié)çœå…§(nèi)å˜å¹¶å°å…§(nèi)å˜å¯¦è¡Œæœ‰æ•ˆç®¡ç†ï¼ŒCPU采用了FIFO機制管ç†å…§(nèi)部RAM。為了ä¿è‰é€šéŽä¸ç¹¼å™¨å‚³è¼¸å ±æ–‡çš„通信雙方數(shù)據(jù)çš„å¯é 性,唯有使用通信雙方應用層的端端差錯控制æ‰èƒ½æ»¿è¶³è¦æ±‚,但在ä¸ç¹¼å™¨çš„軟件è¨è¨ˆä¸ä¸å®œåŠ å…¥éŽå¤šçš„差錯控制和æµé‡æŽ§åˆ¶åŠŸèƒ½ï¼Œå› ç‚ºé€™ä¸åƒ…é”ä¸åˆ°ç›®çš„,å而還é™ä½Žäº†ä¸ç¹¼å™¨çš„é‹è¡Œæ•ˆçŽ‡ï¼Œå¢žåŠ äº†æ•…éšœéš±æ‚£ã€‚

CANä¸ç¹¼å™¨è»Ÿä»¶ä¸»è¦åŒ…括以下一些å程åºï¼šåˆå§‹åŒ–å程åºã€ä¸»ç›£(jiÄn)控程åºã€æŽ¥æ”¶ä¸æ–·å程åºå’Œç™¼(fÄ)é€å程åºç‰ã€‚åˆå§‹åŒ–å程åºçš„編寫方法與一般的CAN總線系統(tÇ’ng)智能節(jié)點的åˆå§‹åŒ–å程åºçš„編寫方法基本相åŒï¼Œåªæ˜¯åœ¨å°å…©å€‹CAN控制器進行åˆå§‹åŒ–時應采用ä¸åŒçš„åˆå§‹åŒ–åƒæ•¸(shù)。下é¢ä¸»è¦å°ä¸»ç›£(jiÄn)控程åºå’ŒæŽ¥æ”¶ä¸æ–·å程åºé€²è¡Œä»‹ç´¹ã€‚
2.1 主監(jiÄn)控程åºçš„è¨è¨ˆ
主監(jiÄn)控程åºè² 責å°å…©è·¯CAN控制器的接收FIFOç·©æ²–å€(qÅ«)進行監(jiÄn)視,如æŸä¸€è·¯ç·©æ²–å€(qÅ«)éžç©ºå‰‡å‘å¦ä¸€è·¯è½‰ç™¼(fÄ)。兩路緩沖å€(qÅ«)的容é‡å¤§å°å¯é‡‡ç”¨ä¸å°ç¨±é…置。采用這種ä¸å°ç¨±é…置的一個好處在于å¯ä»¥å°‡å®¹é‡æ›´å¤§çš„ç·©æ²–å€(qÅ«)分é…給通信任務更ç¹å¿™çš„一方,從而盡é‡é¿å…ç·©æ²–å€(qÅ«)出ç¾(xià n)溢出。FIFOç·©æ²–å€(qÅ«)共有兩個指é‡ï¼šæŽ¥æ”¶æ•¸(shù)據(jù)指é‡å’Œç™¼(fÄ)逿•¸(shù)據(jù)指é‡ã€‚當兩指é‡ä¸ç›¸ç‰æ™‚å³è‰æ˜Žç·©æ²–å€(qÅ«)ä¸å˜æœ‰æœ‰æ•ˆæ•¸(shù)據(jù)。緩沖å€(qÅ«)接收數(shù)據(jù)指é‡çš„調(dià o)æ•´æ˜¯é€šéŽæŽ¥æ”¶ä¸æ–·å程åº?qÅ«)å´¿F(xià n)的,而發(fÄ)逿•¸(shù)據(jù)指é‡çš„調(dià o)整則通éŽç™¼(fÄ)é€å程åº?qÅ«)å´¿F(xià n)。在主監(jiÄn)控程åºä¸ï¼Œé‚„用到了一個請求狀態(tà i)æ¨™å¿—ï¼Œè©²æ¨™å¿—åœ¨æŽ¥æ”¶ä¸æ–·å程åºä¸å»ºç«‹ï¼Œç”¨äºŽä¸ç¹¼å™¨åŠæ™‚返回本身故障狀態(tà i)æˆ–éŸ¿æ‡‰ä¸Šä½æ©Ÿçš„狀態(tà i)查詢命令。當該標志為1時,主監(jiÄn)æŽ§ç¨‹åºæœƒå‘ä¸Šä½æ©Ÿç™¼(fÄ)逿œ¬èº«ç‹€æ…‹(tà i),并清除該標志。
2.2 æŽ¥æ”¶ä¸æ–·å程åºçš„è¨è¨ˆ
ä¸ç¹¼å™¨æŽ¥æ”¶ä¸æ–·åç¨‹åºæµç¨‹åœ–å¦‚åœ–ï¼’æ‰€ç¤ºã€‚åœ¨é€²å…¥ä¸æ–·åŽï¼Œé¦–å…ˆåˆ¤æ–·ä¸æ–·é¡žåž‹ã€‚若為錯誤è¦å‘Šä¸æ–·ï¼Œå‰‡é€²è¡Œç›¸æ‡‰è™•ç†å¹¶å»ºç«‹æ¨™å¿—ï¼Œè‹¥ç‚ºæŽ¥æ”¶ä¸æ–·å‰‡æŽ¥æ”¶å ±æ–‡ã€‚åœ¨å ±æ–‡æŽ¥æ”¶å‰ï¼Œè¦æ ¹æ“š(jù)æŽ¥æ”¶å ±æ–‡çš„é•·åº¦åˆ¤æ–·æŽ¥æ”¶ç·©æ²–å€(qÅ«)æ˜¯å¦æœƒæº¢å‡ºã€‚若會溢出,則判斷是å¦ç‚ºç‹€æ…‹(tà i)查詢命令,是則置ä½è«‹æ±‚狀態(tà i)標志,å°äºŽæŽ¥æ”¶çš„å…¶å®ƒå ±æ–‡å‰‡ä¸Ÿæ£„ã€‚è‹¥ç·©æ²–å€(qÅ«)䏿œƒæº¢å‡ºï¼Œå‰‡æŽ¥æ”¶è©²å ±æ–‡ã€‚æŽ¥æ”¶å ±æ–‡åŽå–出命令å—節(jié)ï¼Œåˆ¤æ–·æ˜¯å¦æ˜¯ä¸ç¹¼å™¨ç‹€æ…‹(tà i)查詢命令,若是則置ä½è«‹æ±‚狀態(tà i)標志,ä¸é€²è¡Œç·©æ²–å€(qÅ«)åƒæ•¸(shù)調(dià o)æ•´ï¼ˆå› ç‚ºæ˜¯ä¸Šä½æ©Ÿç™¼(fÄ)é€çµ¦ä¸ç¹¼å™¨çš„命令,åªè¦æ±‚ä¸ç¹¼å™¨ä½œå‡ºéŸ¿æ‡‰è€Œä¸è¦æ±‚其轉發(fÄ),所以ä¸èƒ½æ”¾å…¥ç·©æ²–å€(qÅ«)ä¸ï¼‰ã€‚è‹¥ä¸æ˜¯ä¸ç¹¼å™¨ç‹€æ…‹(tà i)查詢命令,則ä¸ä½œè™•ç†ï¼Œåªé€²è¡Œç·©æ²–å€(qÅ«)åƒæ•¸(shù)調(dià o)æ•´ï¼ŒæŽ¥æ”¶å ±æ–‡æœ‰æ•ˆã€‚éš¨åŽé€²è¡Œé‡‹æ”¾CAN接收緩沖å€(qÅ«)ã€æ¢å¾©ç¾(xià n)å ´å’Œä¸æ–·è¿”回ç‰å·¥ä½œã€‚

3 CANä¸ç¹¼å™¨åœ¨é£Ÿå ‚售飯系統(tÇ’ng)çš„ä¸æ‡‰ç”¨
按上述方法è¨è¨ˆçš„ä¸ç¹¼å™¨ç¾(xià n)å·²æˆåŠŸæ‡‰ç”¨äºŽæ±è¯ç†å·¥å¸é™¢çš„é£Ÿå ‚å”®é£¯ç³»çµ±(tÇ’ng)ä¸ã€‚æ ¹æ“š(jù)å¸é™¢é£Ÿå ‚åŠå„營æ¥(yè)ç¶²(wÇŽng)點的實際分布情æ³ï¼Œè¨è¨ˆçš„å¸é™¢é£Ÿå ‚售飯系統(tÇ’ng)ç¶²(wÇŽng)çµ¡çµæ§‹å¦‚圖3所示。從圖ä¸å¯ä»¥çœ‹å‡ºï¼Œä¸ç¹¼å™¨æ˜¯çµ„ç¶²(wÇŽng)的關éµè¨å‚™ï¼Œå®ƒå°‡çª—壿©Ÿç‰çµ‚端與æœå‹™å™¨é€£æŽ¥èµ·ä¾†ã€‚在該網(wÇŽng)çµ¡çµæ§‹ä¸ï¼Œä¸ç¹¼å™¨å…±åˆ†å…©ç´šã€‚ä¸ç¹¼å™¨1~4為一級ä¸ç¹¼å™¨ï¼Œä¸€ç«¯èˆ‡æœå‹™å™¨ç›¸é€£ï¼Œå¦ä¸€ç«¯å‰‡èˆ‡å„å€‹é£Ÿå ‚çª—å£æ©Ÿç‰çµ‚端構æˆçš„åç¶²(wÇŽng)相連;ä¸ç¹¼å™¨5為二級ä¸ç¹¼å™¨ï¼Œä¸€ç«¯èˆ‡ä¸€ç´šä¸ç¹¼å™¨ç›¸é€£ï¼Œå¦ä¸€ç«¯èˆ‡æµ´å®¤ã€å°è³£éƒ¨ç‰çª—壿©Ÿç›¸é€£ã€‚采用兩級ä¸ç¹¼å™¨çš„è¨è¨ˆï¼Œä½¿ç³»çµ±(tÇ’ng)的通信è·é›¢å¯é”5km以上,網(wÇŽng)絡終端數(shù)目幾乎ä¸å—é™åˆ¶ã€‚
該è¨è¨ˆæ–¹æ¡ˆå·²æŠ•入實際é‹è¡Œï¼Œç›®å‰ç³»çµ±(tÇ’ng)ç¶²(wÇŽng)絡è¦(guÄ«)模為五臺ä¸ç¹¼å™¨ã€ä¸€ç™¾å¤šè‡ºçª—壿©Ÿï¼Œç”¨é¤äººæ•¸(shù)è¿‘è¬äººã€‚從系統(tÇ’ng)的實際é‹è¡Œæƒ…æ³ä¾†çœ‹ï¼Œæ€§èƒ½éžå¸¸ç©©(wÄ›n)定å¯é ,而且ç¶è·å’Œæ“´å®¹æ–¹ä¾¿ï¼Œå¤§å¤§æé«˜äº†é£Ÿå ‚çš„ç®¡ç†æ°´å¹³å’Œå·¥ä½œæ•ˆçŽ‡ã€‚