《電子技術(shù)應(yīng)用》
欢迎订阅(电子2025)
欢迎订阅(网数2025)
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 高性能CAN適配器的設(shè)計(jì)與實(shí)現(xiàn)
NIDays2025

高性能CAN適配器的設(shè)計(jì)與實(shí)現(xiàn)

2008-04-11
作者:姜海鵬1,周玉杰2
關(guān)鍵詞: 雙端口 鎖存器 鎖存 適配 雙緩沖

  摘 要: 一種快速、高效的CAN適配" title="適配">適配器設(shè)計(jì)方案。把雙端口" title="雙端口">雙端口RAM分為兩個(gè)獨(dú)立的區(qū)域,實(shí)現(xiàn)了雙緩沖" title="雙緩沖">雙緩沖,并從軟硬件上保證了PC機(jī)和片載單片機(jī)對(duì)雙端口RAM的不沖突訪問。
  關(guān)鍵詞: CAN總線 CAN適配器? 雙端口RAM? 單片機(jī)


  Stewart平臺(tái)機(jī)器人又稱六自由度并聯(lián)機(jī)器人,它具有剛度大、承載能力強(qiáng)、誤差小、精度高、自重負(fù)荷比小、動(dòng)力性能好、控制容易等一系列優(yōu)點(diǎn)。本文基于CAN適配器實(shí)現(xiàn)了Stewart平臺(tái)機(jī)器人的遠(yuǎn)程監(jiān)控。由于在應(yīng)用Stewart平臺(tái)進(jìn)行實(shí)驗(yàn)性研究時(shí),外部的控制量無法預(yù)知,并有可能超出Stewart平臺(tái)機(jī)器人的承受范圍。因此,外部的控制命令需要經(jīng)過一個(gè)保護(hù)、控制系統(tǒng),經(jīng)過此系統(tǒng)上位機(jī)的解析后再送給Stewart平臺(tái)。同時(shí),上位機(jī)也負(fù)責(zé)實(shí)時(shí)采集Stewart平臺(tái)的運(yùn)動(dòng)數(shù)據(jù)并發(fā)送。遠(yuǎn)程控制計(jì)算機(jī)通過接收到的狀態(tài)信息產(chǎn)生下一時(shí)刻的控制命令。整個(gè)系統(tǒng)結(jié)構(gòu)如圖1所示。


  遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)要求機(jī)器人把并聯(lián)機(jī)器人六根桿的長(zhǎng)度傳送給遠(yuǎn)程控制端,再把控制量傳回機(jī)器人。實(shí)際應(yīng)用中要傳輸?shù)臈U長(zhǎng)為1000~2000mm,一根桿長(zhǎng)可以用10位二進(jìn)制表示,6根桿長(zhǎng)共用60位,加上4位校驗(yàn)碼共8個(gè)字節(jié)??刂屏渴窍乱淮螜C(jī)器人的6根桿長(zhǎng),所以也為8個(gè)字節(jié)。為了保證機(jī)器人的運(yùn)行安全,要求控制周期最大為20ms,由于監(jiān)控端還要進(jìn)行機(jī)器人位置姿態(tài)解算,因此必須選擇實(shí)時(shí)、高效的通信方式。為了保證實(shí)時(shí),選用了基于實(shí)時(shí)DOS的機(jī)器人控制系統(tǒng)。如果選用以太網(wǎng)卡通信,其在DOS下的驅(qū)動(dòng)比較麻煩,況且如果使用TCP/IP協(xié)議實(shí)現(xiàn)局域網(wǎng)通信,略顯復(fù)雜。
1 CAN適配器的研究現(xiàn)狀
  控制器局域網(wǎng)CAN-bus(Controller Area Network)是目前國際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。它是一種架構(gòu)開放、廣播式的新一代網(wǎng)絡(luò)通信協(xié)議,成本低,實(shí)時(shí)處理能力強(qiáng),可以在強(qiáng)電磁干擾環(huán)境下可靠工作。因此CAN總線被廣泛應(yīng)用于離散控制領(lǐng)域中的過程檢測(cè)和控制,特別是工業(yè)自動(dòng)化的底層監(jiān)控,以解決控制與測(cè)試之間可靠和實(shí)時(shí)的數(shù)據(jù)交換。
CAN總線具有協(xié)議簡(jiǎn)單、有效載荷高等特點(diǎn),可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)和多點(diǎn)間的通信,其最高通信速率達(dá)1Mbps/40m,用于局域網(wǎng)通信時(shí)可保證較高的實(shí)時(shí)性。假設(shè)實(shí)際通信中CAN總線的效率為80%,則傳送22字節(jié)(有效數(shù)據(jù)8+8字節(jié),控制信令3+3字節(jié))的時(shí)間僅為0.22ms,完全可以滿足本項(xiàng)目需要。本文根據(jù)控制要求設(shè)計(jì)實(shí)現(xiàn)了適合控制系統(tǒng)數(shù)據(jù)傳輸?shù)腃AN控制器,具有速率高、實(shí)時(shí)性好、PC機(jī)運(yùn)行負(fù)擔(dān)小等特點(diǎn)。
  本文在眾多CAN適配器的研究和開發(fā)的基礎(chǔ)上做了進(jìn)一步改進(jìn),把雙緩沖的概念引入雙端口RAM,實(shí)現(xiàn)了PC機(jī)讀寫和板載單片機(jī)接收的并行工作,并用兩個(gè)鎖存" title="鎖存">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器" title="鎖存器">鎖存器避免PC機(jī)與單片機(jī)的訪問沖突。實(shí)踐表明,該方法可以大大提高通信效率。
2 雙緩沖的實(shí)現(xiàn)
2.1 硬件基礎(chǔ)

  適配卡主要由雙端口RAM、微處理器、發(fā)送/接收數(shù)據(jù)緩沖區(qū)、CAN控制器及其收發(fā)電路組成,如圖2所示。其中CAN控制器采用Philips公司的SJA1000及與其對(duì)應(yīng)的PCA82C250 CAN總線收發(fā)器;板載單片機(jī)采用AT89C52,負(fù)責(zé)SJA1000的初始化,向PC端接收/發(fā)送數(shù)據(jù)以及通過控制SJA1000實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù);發(fā)送和接收緩沖區(qū)各由一個(gè)62256存儲(chǔ)器構(gòu)成,各容量為8KB,采用先進(jìn)先出的方式存放數(shù)據(jù)。

  本文采用雙緩沖區(qū)模式實(shí)現(xiàn)高效通信。該模式在工程上稱為“乒乓”緩沖區(qū)模式,與常用的單緩沖區(qū)模式相比,其優(yōu)點(diǎn)是:可以使用容量較小的內(nèi)存,不間斷地對(duì)無限量的數(shù)據(jù)緩沖(輸入與輸出端需協(xié)同工作)。這種緩沖區(qū)模式的工作原理是: 在內(nèi)存中開辟兩塊容量相等的緩沖區(qū)(以下稱1# 緩沖區(qū)和2# 緩沖區(qū))。在通信時(shí),PC機(jī)獲取某緩沖區(qū)(如1# 緩沖區(qū)),把數(shù)據(jù)寫入;然后獲取另一塊緩沖區(qū)的寫控制權(quán),在PC機(jī)給2#緩沖區(qū)寫的同時(shí),單片機(jī)把1#緩沖區(qū)的數(shù)據(jù)傳送給CAN控制器,從而實(shí)現(xiàn)PC機(jī)寫入雙端口RAM與單片機(jī)發(fā)送的并行工作,大大提高通信效率。為了實(shí)現(xiàn)此功能,使用雙端口RAM作為PC機(jī)和單片機(jī)之間的交換區(qū),并協(xié)調(diào)緩沖區(qū)的控制權(quán),避免讀寫沖突。
  雙端口RAM采用CYPRESS公司的7C132,容量為2KB。其中1000字節(jié)作為PC機(jī)向微處理器發(fā)送數(shù)據(jù)的緩沖區(qū),1000字節(jié)作為PC機(jī)從微處理器接收數(shù)據(jù)的緩沖區(qū)。其他區(qū)域用于存放PC機(jī)對(duì)板卡的初始化信息,包括幀長(zhǎng)、通信模式、目標(biāo)節(jié)點(diǎn)ID等。雙端口RAM擁有兩個(gè)完全獨(dú)立的端口,并允許兩個(gè)端口獨(dú)立、異步地對(duì)存儲(chǔ)器中的任何存儲(chǔ)單元進(jìn)行存取操作。當(dāng)兩個(gè)端口同時(shí)對(duì)存儲(chǔ)器中的同一單元進(jìn)行存取操作時(shí)會(huì)發(fā)生競(jìng)爭(zhēng)現(xiàn)象,造成數(shù)據(jù)的丟失或誤讀。為此,雙端口RAM利用內(nèi)部的仲裁邏輯電路決定兩邊的優(yōu)先權(quán),并對(duì)外提供2個(gè)信號(hào),以表示對(duì)該端口的操作是否有效。未獲得許可的端口信號(hào)被拉成低電平,此間,對(duì)該端口的讀操作均無效。解決雙端口RAM的競(jìng)爭(zhēng)問題有兩種方法:軟件查詢法和硬件判優(yōu)法。
  硬件判優(yōu)法需要CPU具有等待時(shí)序的功能。本文所討論的CAN適配卡中微處理器采用的AT89C52不具備READY引腳的功能,因此硬件判優(yōu)法在本適配卡中無法實(shí)現(xiàn)。
  軟件查詢法是將信號(hào)接到微處理器的一個(gè)I/O引腳上,通過查詢此I/O引腳的狀態(tài)確定當(dāng)前是否能對(duì)雙端口RAM進(jìn)行讀寫操作。軟件查詢法會(huì)增加微處理的負(fù)擔(dān),僅適用于競(jìng)爭(zhēng)現(xiàn)象不經(jīng)常發(fā)生的情況。本文所討論的CAN適配卡通過兩片74LS374實(shí)現(xiàn)PC機(jī)和單片機(jī)的狀態(tài)鎖存,巧妙地實(shí)現(xiàn)單片機(jī)和PC機(jī)的協(xié)調(diào)通信。
  具體電路如圖3所示。


  PC機(jī)的狀態(tài)字鎖存信號(hào)由ISA總線的和139A的Y1經(jīng)過一個(gè)或非門決定。平時(shí)CLK引腳為低電平,當(dāng)PC向139A的Y1所對(duì)應(yīng)的I/O地址(即A2~A9為跳線開關(guān)選定地址,A1、A0為01)寫狀態(tài)字時(shí),和Y1同時(shí)為低,CLK引腳變?yōu)楦唠娖?,出現(xiàn)一個(gè)上升沿,從而將ISA數(shù)據(jù)總線的狀態(tài)字鎖存在374中,等待C52的讀取。當(dāng)C52從PC狀態(tài)字對(duì)應(yīng)地址(F700H)讀取狀態(tài)字時(shí),139B的Y3、C52的P2.3和同時(shí)出現(xiàn)低電平,從而使得374的引腳信號(hào)有效,將374鎖存內(nèi)容送到C52的P0口,C52完成對(duì)PC狀態(tài)字的讀取。
  C52的、P2.4和139B的輸出Y3經(jīng)過邏輯或非決定C52狀態(tài)字的鎖存信號(hào)CLK是否有效。當(dāng)C52向其狀態(tài)字對(duì)應(yīng)地址(EF00H)寫入狀態(tài)字時(shí),、P2.4和Y3會(huì)同時(shí)出現(xiàn)一個(gè)低電平信號(hào),經(jīng)過或非門后變?yōu)楦唠娖?,由于CLK引腳平時(shí)是低電平,這時(shí)會(huì)出現(xiàn)一個(gè)上升沿,從而把C52送到P0口的狀態(tài)字鎖存在74LS374中,等待PC的讀取。當(dāng)PC從C52狀態(tài)字地址(A2~A9為跳線開關(guān)選定地址,A1、A0為10)讀取狀態(tài)字時(shí),ISA總線的和139A的Y2會(huì)同時(shí)出現(xiàn)低電平信號(hào),使得374的引腳信號(hào)有效,將其鎖存內(nèi)容送到ISA的數(shù)據(jù)總線上,從而完成對(duì)C52狀態(tài)字的讀取。
2.2 狀態(tài)控制
  雙緩沖機(jī)制非常有效,但是用雙端口RAM實(shí)現(xiàn)雙緩沖時(shí),必須解決訪問沖突問題。為了減小CPU查詢此狀態(tài)的負(fù)擔(dān),PC端和單片機(jī)端均通過自己的狀態(tài)變量和讀取對(duì)方鎖存器來判別緩沖區(qū)的使用權(quán),以避免訪問沖突。下面介紹實(shí)現(xiàn)方法。
  記連接ISA/IOW的鎖存器為PC_STATUS,該鎖存器反映PC機(jī)的狀態(tài)變量PC_FLAG,為PC寫,單片機(jī)只讀;記連接C52/WR的鎖存器為MCU_STATUS,該鎖存器反映單片機(jī)的狀態(tài)變量MCU_FLAG,為單片機(jī)寫,PC只讀。
  鎖存器低4位中,第0位反映1# 緩沖區(qū)的占有權(quán)。規(guī)定兩個(gè)鎖存器的低2位中,若第0位相同,則PC端對(duì)1# 緩沖區(qū)有控制權(quán),否則該緩沖區(qū)的控制權(quán)在單片機(jī)端;鎖存器第1位反映2# 緩沖區(qū)的狀態(tài),不再贅述??刂茩?quán)示意圖如圖4。如果任意一方把自己鎖存器的對(duì)應(yīng)位求反后,則表示放棄控制權(quán)。如PC_STATUS=01H,MCU_STATUS=00H,表示PC機(jī)擁有2#緩沖區(qū),單片機(jī)擁有1#緩沖區(qū)。MCU_STATUS保持不變,當(dāng)PC_STATUS=03H時(shí),表示PC放棄2#緩沖區(qū),即單片機(jī)同時(shí)得到兩個(gè)緩沖區(qū)。


  鎖存器中第3、4位為1,分別表示1#、2#緩沖區(qū)有數(shù)據(jù),PC讀到此狀態(tài)便知單片機(jī)已寫好數(shù)據(jù)等待PC機(jī)讀??;單片機(jī)讀到此狀態(tài)便知該緩沖區(qū)中有數(shù)據(jù)要發(fā)送。
3 軟件設(shè)計(jì)
  CAN適配器與PC機(jī)的關(guān)系如圖5所示。最上面一層是應(yīng)用層,主要功能是實(shí)現(xiàn)用戶與CAN適配卡之間的接口程序,完成數(shù)據(jù)的發(fā)送和接收。其余層構(gòu)成CAN適配器。其中控制層由微處理器AT89C52完成,主要負(fù)責(zé)檢測(cè)PC端和CAN總線的狀態(tài),并進(jìn)行相應(yīng)的數(shù)據(jù)轉(zhuǎn)移,即把PC端要發(fā)送的數(shù)據(jù)從雙端口RAM中取出并通過CAN總線發(fā)往指定的節(jié)點(diǎn),或者接收來自CAN總線上的數(shù)據(jù)并將其放入接收緩沖區(qū)等待PC端用戶的讀取。數(shù)據(jù)層主要由CAN控制器SJA1000完成報(bào)文的驗(yàn)收和濾波以及數(shù)據(jù)的接收/發(fā)送。最底層是物理層,CAN收發(fā)器PCA82C250完成協(xié)議控制器和物理傳輸線路之間的接口,將總線電纜上的差動(dòng)電壓轉(zhuǎn)換為邏輯電平信號(hào)或者進(jìn)行相反的操作。


  為了實(shí)現(xiàn)通信,本文完成了PC機(jī)程序和板載單片機(jī)程序的設(shè)計(jì)。單片機(jī)程序描述如下:
  (1)等待PC機(jī)初始化,得到幀長(zhǎng)、目標(biāo)ID等信息;
  (2)查詢CAN總線是否有數(shù)據(jù),如果沒有則轉(zhuǎn)到(5);
  (3)得到可以接收的緩沖區(qū)編號(hào);
  (4)接收數(shù)據(jù)。修改狀態(tài),放棄當(dāng)前緩沖區(qū)控制權(quán),置有數(shù)據(jù)位為1,并鎖存該狀態(tài);
  (5)判斷PC機(jī)方有無數(shù)據(jù)要發(fā)送,如果沒有則轉(zhuǎn)到(2);
  (6)得到待發(fā)送的緩沖區(qū)編號(hào);
  (7)發(fā)送數(shù)據(jù)。修改狀態(tài),放棄當(dāng)前緩沖區(qū)控制權(quán),置有數(shù)據(jù)位為0,并鎖存該狀態(tài);
  (8)轉(zhuǎn)到(2)。
  (3)中得到可接收緩沖區(qū)編號(hào)的條件是:MCU_FLAG和PC_STATUS的低2位中有一位不同,并且該位表示緩沖區(qū)中沒有數(shù)據(jù)(對(duì)應(yīng)的第3或4位為0);(6)得到待發(fā)送緩沖區(qū)編號(hào)的條件是:MCU_FLAG和PC_STATUS的低2位中有一位不同,并且該位表示的緩沖區(qū)中有數(shù)據(jù)。上述程序中的讀是從CAN總線讀,寫是向CAN控制器發(fā)送數(shù)據(jù);而PC機(jī)的寫是向單片機(jī)寫,讀是從單片機(jī)讀。因此二者的程序非常類似,不再重復(fù)。
  為了提高通信效率,本文做了三方面的工作。首先將板載單片機(jī)AT89C52作為適配卡的主控制器,負(fù)責(zé)數(shù)據(jù)管理工作,提高了數(shù)據(jù)傳輸?shù)乃俣?、穩(wěn)定性和可靠性,減輕了PC機(jī)的處理負(fù)擔(dān);其次利用雙端口RAM作為PC機(jī)數(shù)據(jù)發(fā)送和接收的緩沖區(qū),并將雙端口RAM映射為PC機(jī)內(nèi)存的一部分,減少了PC發(fā)送和接收數(shù)據(jù)的時(shí)間;最后根據(jù)雙緩沖的思想,把整個(gè)緩沖區(qū)一分為二,使PC機(jī)寫數(shù)據(jù)和CAN適配卡發(fā)送數(shù)據(jù)異步進(jìn)行,并用鎖存器實(shí)現(xiàn)互斥訪問,進(jìn)一步提高通信速度和效率。
  本文中遠(yuǎn)程控制器的操作系統(tǒng)為Win98,這是因?yàn)閃in2000或者XP的實(shí)時(shí)性并不比Win98好,而且Win98可以對(duì)I/O端口直接讀寫,開發(fā)工作量小。
參考文獻(xiàn)
1 鄔寬明.CAN總線原理與應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1996
2 呂杜鵑.CAN智能適配卡的設(shè)計(jì)方案[J].工業(yè)控制計(jì)算機(jī),2001;(8)
3 楊朝龍.基于雙接收緩沖隊(duì)列的CAN驅(qū)動(dòng)模型設(shè)計(jì)[J].微計(jì)算機(jī)信息,2006;(2)
4 傅民倉.基于CAN總線的數(shù)據(jù)采集系統(tǒng)實(shí)現(xiàn)與應(yīng)用[J].現(xiàn)代電子技術(shù),2006;(2)
5 陳楊楊.CAN總線和DeviceNet通信協(xié)議在單片機(jī)系統(tǒng)中的應(yīng)用[J].儀器儀表學(xué)報(bào),2005;(2)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。