版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于CAN總線的數(shù)據(jù)采集系統(tǒng)前言 (一)背景隨著汽車工業(yè)的發(fā)展,20 世紀(jì) 80 年代中期,率先由 Bosch 公司研發(fā)出新一代的汽車總線即控制器局域網(wǎng)(Controller Area Network,簡(jiǎn)稱:CAN 總線或 CAN-bus),CAN 總線具有布線簡(jiǎn)單、典型的總線型結(jié)構(gòu)、可最大限度的節(jié)約布線與維護(hù)成本、穩(wěn)定可靠、實(shí)時(shí)、抗干擾能力強(qiáng)、傳輸距離遠(yuǎn)等特點(diǎn),這些都決定了 CAN 總線必定是一種成功的總線。一經(jīng)推出不僅在汽車行業(yè)得到廣泛的推廣與應(yīng)用,在諸如航天、電力、石化、冶金、紡織、造紙等領(lǐng)域也得到廣泛應(yīng)用。在自動(dòng)化儀表、工業(yè)生產(chǎn)現(xiàn)場(chǎng)、數(shù)控機(jī)床等系統(tǒng)中也越來(lái)越多的使用了 CAN 總線,C
2、AN 總線在未來(lái)的發(fā)展中依然充滿活力,有著巨大的發(fā)展空間。由于 CAN 總線本身只定義 ISO/OSI 模型中的第一層(物理層)和第二層(數(shù)據(jù)鏈路層),通常情況下 CAN 總線網(wǎng)絡(luò)都是獨(dú)立的網(wǎng)絡(luò),所以沒(méi)有網(wǎng)絡(luò)層。在實(shí)際使用中,用戶還需要自己定義應(yīng)用層的協(xié)議,因此在 CAN 總線的發(fā)展過(guò)程中出現(xiàn)了各種版本的 CAN 應(yīng)用層協(xié)議,現(xiàn)階段最流行的 CAN 應(yīng)用層協(xié)議主要有 CANopen、DeviceNet 和 J1939 等協(xié)議。而本設(shè)計(jì)采用的協(xié)議時(shí)CANopen。(二)概述 控制器局部網(wǎng)(CANCONTROLLER AREA NETWORK)是BOSCH公司為現(xiàn)代汽車應(yīng)用領(lǐng)先推出的一種多主機(jī)局部
3、網(wǎng),由于其高性能、高可靠性、實(shí)時(shí)性等優(yōu)點(diǎn)現(xiàn)已廣泛應(yīng)用于工業(yè)自動(dòng)化、多種控制設(shè)備、交通工具、醫(yī)療儀器以及建筑、環(huán)境控制等眾多部門??刂破骶植烤W(wǎng)將在我國(guó)迅速普及推廣。 隨著計(jì)算機(jī)硬件、軟件技術(shù)及集成電路技術(shù)的迅速發(fā)展,工業(yè)控制系統(tǒng)已成為計(jì)算機(jī)技術(shù)應(yīng)用領(lǐng)域中最具活力的一個(gè)分支,并取得了巨大進(jìn)步。由于對(duì)系統(tǒng)可靠性和靈活性的高要求,工業(yè)控制系統(tǒng)的發(fā)展主要表現(xiàn)為:控制面向多元化,系統(tǒng)面向分散化,即負(fù)載分散、功能分散、危險(xiǎn)分散和地域分散。 分散式工業(yè)控制系統(tǒng)就是為適應(yīng)這種需要而發(fā)展起來(lái)的。這類系統(tǒng)是以微型機(jī)為核心,將 5C技術(shù)-COMPUTER(計(jì)算機(jī)技術(shù))、CONTROL(自動(dòng)控制技術(shù))、COMMUNIC
4、ATION(通信技術(shù))、CRT(顯示技術(shù))和 CHANGE(轉(zhuǎn)換技術(shù))緊密結(jié)合的產(chǎn)物。它在適應(yīng)范圍、可擴(kuò)展性、可維護(hù)性以及抗故障能力等方面,較之分散型儀表控制系統(tǒng)和集中型計(jì)算機(jī)控制系統(tǒng)都具有明顯的優(yōu)越性。 典型的分散式控制系統(tǒng)由現(xiàn)場(chǎng)設(shè)備、接口與計(jì)算設(shè)備以及通信設(shè)備組成?,F(xiàn)場(chǎng)總線(FIELDBUS)能同時(shí)滿足過(guò)程控制和制造業(yè)自動(dòng)化的需要,因而現(xiàn)場(chǎng)總線已成為工業(yè)數(shù)據(jù)總線領(lǐng)域中最為活躍的一個(gè)領(lǐng)域?,F(xiàn)場(chǎng)總線的研究與應(yīng)用已成為工業(yè)數(shù)據(jù)總線領(lǐng)域的熱點(diǎn)。盡管目前對(duì)現(xiàn)場(chǎng)總線的研究尚未能提出一個(gè)完善的標(biāo)準(zhǔn),但現(xiàn)場(chǎng)總線的高性能價(jià)格比將吸引眾多工業(yè)控制系統(tǒng)采用。同時(shí),正由于現(xiàn)場(chǎng)總線的標(biāo)準(zhǔn)尚未統(tǒng)一,也使得現(xiàn)場(chǎng)總線的應(yīng)
5、用得以不拘一格地發(fā)揮,并將為現(xiàn)場(chǎng)總線的完善提供更加豐富的依據(jù)??刂破骶植烤W(wǎng) CAN(CONTROLLER AERANETWORK)正是在這種背景下應(yīng)運(yùn)而生的。 由于CAN為愈來(lái)愈多不同領(lǐng)域采用和推廣,導(dǎo)致要求各種應(yīng)用領(lǐng)域通信報(bào)文的標(biāo)準(zhǔn)化。為此,1991年 9月 PHILIPS SEMICONDUCTORS制訂并發(fā)布了 CAN技術(shù)規(guī)范(VERSION 2.0)。該技術(shù)規(guī)范包括A和B兩部分。2.0A給出了曾在CAN技術(shù)規(guī)范版本1.2中定義的CAN報(bào)文格式,能提供11位地址;而2.0B給出了標(biāo)準(zhǔn)的和擴(kuò)展的兩種報(bào)文格式,提供29位地址。此后,1993年11月ISO正式頒布了道路交通運(yùn)載工具-數(shù)字信息交
6、換-高速通信控制器局部網(wǎng)(CAN)國(guó)際標(biāo)準(zhǔn)(ISO11898),為控制器局部網(wǎng)標(biāo)準(zhǔn)化、規(guī)范化推廣鋪平了道路。一、 總體方案設(shè)計(jì)(一) 方案論證方案一:?jiǎn)纹瑱C(jī)AT89C51屬標(biāo)準(zhǔn)型,芯片價(jià)格低廉,引腳與80C51完全兼容。片上外圍資源豐富,片內(nèi)具有41d3 的Flash ROM程序存貯空間,這不僅給程序修改帶來(lái)極大方便,而且避免了外部ROM擴(kuò)展,降低了節(jié)點(diǎn)成 本和線路復(fù)雜性,提高了電路可靠性。另外AT89C51具有在片程序和ROM兩級(jí)保密系統(tǒng),可防止程序被 非法剽竊。 SJA1000是PHILIP公司推出的功能很強(qiáng)的CAN 控制器,其內(nèi)部結(jié)構(gòu)見圖2。片內(nèi)含信息緩沖、位流處 理、位定時(shí)邏輯、接收濾
7、波、錯(cuò)誤管理邏輯等電路,并配置有豐富的功能寄存器。可完成數(shù)據(jù)成幀、總線填充、 錯(cuò)誤檢測(cè)、總線仲裁及錯(cuò)誤界定處理等CAiN規(guī)范。方案二:采用Luminary公司基于 ARM® CortexTM-M3 的控制器LM3S5749。Luminary Micro StellarisTM系列的微控制器是首款基于 ARM® CortexTM-M3 的控制器,它將高性能的 32 位計(jì)算引入到對(duì)價(jià)格敏感的嵌入式微控制器應(yīng)用中。這些堪稱先鋒的器件擁有與 8 位和 16 位器件相同的價(jià)格,卻能為用戶提供 32 位器件的性能,而且,所有器件都是小型封裝形式提供。Luminary Micro 提供一
8、套完整的解決方案以便快速進(jìn)入市場(chǎng),包括用戶開發(fā)板、白皮書和應(yīng)用手冊(cè),以及強(qiáng)大的支持、銷售和分銷商網(wǎng)絡(luò)。所以,我們這里就采用M3來(lái)實(shí)現(xiàn)CAN總線的數(shù)據(jù)采集。(二) 系統(tǒng)框圖如圖1:圖1 系統(tǒng)框圖二、 硬件電路的設(shè)計(jì)外圍電路包括:電源電路、溫度采集、時(shí)鐘電路、存儲(chǔ)電路、報(bào)警電路、模擬控制電路、按鍵電路、顯示電路以及串口等電路。下面將依次對(duì)各個(gè)模塊進(jìn)行說(shuō)明。(一)電源電路電源變壓器是將交流電網(wǎng)220V的電壓變?yōu)樗枰碾妷褐怠=涣麟娊?jīng)過(guò)二極管整流之后,方向單一了,但是電流強(qiáng)度大小還是處在不斷地變化之中。這種脈動(dòng)直流一般是不能直接用來(lái)給集成電路供電的,而要通過(guò)整流電路將交流電變成脈動(dòng)的直流電壓。由于此
9、脈動(dòng)的直流電壓還含有較大的紋波,必須通過(guò)濾波電路加以濾除,從而得到平滑的直流電壓。濾波的任務(wù),就是把整流器輸出電壓中的波動(dòng)成分盡可能地減小,改造成接近穩(wěn)恒的直流電。但這樣的電壓還隨電網(wǎng)電壓波動(dòng),一般有%左右的波動(dòng),負(fù)載和溫度的變化而變化,因而在整流、濾波電路之后,還需要接穩(wěn)壓電路。穩(wěn)壓電路的作用是當(dāng)電網(wǎng)電壓波動(dòng),負(fù)載和溫度變化時(shí),維持輸出直流電壓穩(wěn)定。220V交流電通過(guò)9V變壓器變?yōu)?V的交流電,9V交流電通過(guò)四個(gè)二極管的全橋整流后變?yōu)?V直流電,然后經(jīng)過(guò)電解電容(470F)進(jìn)行一級(jí)濾波,以去除直流電里面的雜波,防止干擾。9V直流電出來(lái)后再經(jīng)過(guò)三端穩(wěn)壓器LM7805穩(wěn)壓成為穩(wěn)定的5V電源,其中
10、7805的Vin腳是輸入腳,接9V直流電源正極,GND是接地腳,接9V直流電源負(fù)極,Vout為輸出腳,它和接地腳的電壓就是+5V了。5V電源出來(lái)再經(jīng)過(guò)電解電容的二級(jí)濾波,使5V電源更加穩(wěn)定可靠。同時(shí)在5V穩(wěn)壓電源加上一個(gè)10K的電阻和一個(gè)紅色發(fā)光二極管,當(dāng)上電后,紅色發(fā)光二極管點(diǎn)亮,表示電源工作正常。此時(shí)一個(gè)穩(wěn)定輸出5V的電源已經(jīng)設(shè)計(jì)好,對(duì)于本設(shè)計(jì)它完全能夠滿足單片機(jī)及集成塊所需電源的要求。電源原理圖如圖2所示:圖2 電源原理圖(二)復(fù)位電路所示為復(fù)位電路原理圖,復(fù)位是單片機(jī)的初始化操作,其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序,并使其它功能單元處于一個(gè)確定的
11、初始狀態(tài)。本復(fù)位電路采用的是按鍵復(fù)位,它是通過(guò)復(fù)位端經(jīng)電阻與VCC電源接通而實(shí)現(xiàn)的,它兼具上電復(fù)位功能。因本系統(tǒng)的晶振的頻率為12MHz,所以,復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)當(dāng)超過(guò)2S才能完成復(fù)位操作。圖3 復(fù)位電路(三)CAN總線通訊電路圖4 CAN總線通訊接口(四)按鍵電路圖5.4所示為鍵盤原理圖,本系統(tǒng)采用的是獨(dú)立式鍵盤結(jié)構(gòu),每個(gè)按鍵單獨(dú)占用一根I/O口線,每個(gè)按鍵的工作不會(huì)影響其它I/O口線的狀態(tài)。它軟件是采用查詢式結(jié)構(gòu),首先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對(duì)應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。鍵盤是人與微機(jī)打交道的主要設(shè)備,按鍵
12、的讀取容易引起誤動(dòng)作??刹捎密浖ザ秳?dòng)的方法處理,軟件的觸點(diǎn)在閉合和斷開的時(shí)候會(huì)產(chǎn)生抖動(dòng),這時(shí)觸點(diǎn)的邏輯電平是不穩(wěn)定的,如不采取妥善處理的話,將引起按鍵命令錯(cuò)誤或重復(fù)執(zhí)行,在這里采用軟件延時(shí)的方法來(lái)避開抖動(dòng),延時(shí)時(shí)間20ms。按下某鍵時(shí),對(duì)應(yīng)的功能鍵解釋程序得到執(zhí)行,如操作者沒(méi)有釋放按鍵,則對(duì)應(yīng)的功能會(huì)反復(fù)執(zhí)行,好象連續(xù)執(zhí)行,在這里我們采用軟件延時(shí)250ms,當(dāng)按鍵沒(méi)釋放則執(zhí)行下一條對(duì)應(yīng)程序。利用連擊功能,能實(shí)現(xiàn)快速調(diào)時(shí)操作。單片及應(yīng)用系統(tǒng)中,鍵盤掃描只是CPU的工作內(nèi)容之一。CPU忙于各項(xiàng)任務(wù)時(shí),如何兼顧鍵盤的輸入,取決于鍵盤的工作方式??紤]儀表系統(tǒng)中CPU任務(wù)的份量,來(lái)確定鍵盤的工作方式。
13、鍵盤的工作方式選取的原則是:既要保證能及時(shí)響應(yīng)按鍵的操作,又不過(guò)多的占用CPU的工作時(shí)間。鍵盤的工作方式有:查詢方式(編程掃描,定時(shí)掃描方式)、中斷掃描方式。矩陣式鍵盤適用于按鍵數(shù)量較多的場(chǎng)合,由行線和列線組成,按鍵位于行列的交叉點(diǎn)上節(jié)省I/O口。按鍵電路如圖16圖5 按鍵電路(五)JTAG下載電路JTAG是英文“Joint Test Action Group(聯(lián)合測(cè)試行為組織)”的詞頭字母的簡(jiǎn)寫,該組織成立于1985 年,是由幾家主要的電子制造商發(fā)起制訂的PCB 和IC 測(cè)試標(biāo)準(zhǔn)。JTAG 建議于1990 年被IEEE 批準(zhǔn)為IEEE1149.1-1990 測(cè)試訪問(wèn)端口和邊界掃描結(jié)構(gòu)標(biāo)準(zhǔn)。該
14、標(biāo)準(zhǔn)規(guī)定了進(jìn)行邊界掃描所需要的硬件和軟件。自從1990 年批準(zhǔn)后,IEEE 分別于1993 年和1995 年對(duì)該標(biāo)準(zhǔn)作了補(bǔ)充,形成了現(xiàn)在使用的IEEE1149.1a-1993 和IEEE1149.1b-1994。JTAG 主要應(yīng)用于:電路的邊界掃描測(cè)試和可編程芯片的在線系統(tǒng)編程。圖6 JTAG電路(六)LM3S6965介紹如圖18所示為L(zhǎng)M3S6965芯片的引腳圖圖7 AT89S52引腳圖Luminary Micro公司 Stellaris®所提供一系列的微控制器是首款基于ARM® Cortex-M3的控制器,它們?yōu)閷?duì)成本尤其敏感的嵌入式微控制器應(yīng)用方案帶來(lái)了高性能的32位
15、運(yùn)算能力。 這些具備領(lǐng)先技術(shù)的芯片使用戶能夠以傳統(tǒng)的8位和16位器件的價(jià)位來(lái)享受32位的性能,而且所有型號(hào)都是以小占位面積的封裝形式提供。該 Stellaris® 系列芯片能夠提供高效的性能、廣泛的集成功能以及按照要求定位的選擇,適用于各種關(guān)注成本并明確要求具有的過(guò)程控制以及連接能力的應(yīng)用方案。 該Stellaris® LM3S1000 系列使用更大的片上存儲(chǔ)器、增強(qiáng)型電源管理和擴(kuò)展I/O以及控制功能來(lái)擴(kuò)展Stellaris®家族。 該Stellaris®LM3S2000 系列是針對(duì)控制器局域網(wǎng)(CAN)應(yīng)用方案而設(shè)計(jì)的一組芯片,它在Stellaris系
16、列芯片的基礎(chǔ)上擴(kuò)展了Bosch CAN網(wǎng)絡(luò)技術(shù)短距離工業(yè)網(wǎng)絡(luò)里的黃金標(biāo)準(zhǔn)。 該Stellaris® LM3S2000系列芯片還標(biāo)志著先進(jìn)的Cortex-M3內(nèi)核和CAN能力的首次結(jié)合運(yùn)用。 該Stellaris® LM3S6000 系列芯片結(jié)合了10/100以太網(wǎng)媒體訪問(wèn)控制(MAC)以及物理層(PHY),標(biāo)志著ARM Cortex-M3 MCU已經(jīng)具備集成連接能力,還是唯一集成了10/100以太網(wǎng)MAC和PHY物理層的ARM架構(gòu)MCU。 該Stellaris® LM3S8000 系列結(jié)合了 Bosch 控制器局域網(wǎng)技術(shù)和 10/100 以太網(wǎng)媒體訪問(wèn)控制(MAC
17、)以及物理 (PHY) 層。該LM3S5749微控制器是針對(duì)工業(yè)應(yīng)用方案而設(shè)計(jì)的,包括遠(yuǎn)程監(jiān)控、電子販?zhǔn)蹤C(jī)、測(cè)試和測(cè)量設(shè)備、網(wǎng)絡(luò)設(shè)備和交換機(jī)、工廠自動(dòng)化、HVAC和建筑控制、游戲設(shè)備、運(yùn)動(dòng)控制、醫(yī)療器械、以及火警安防。至于那些對(duì)功耗有特別要求的應(yīng)用方案,LM3S5749微控制器還具有一個(gè)電池備用的休眠模塊,從而有效的使LM3S5749芯片在未被激活的時(shí)候進(jìn)入低功耗狀態(tài)。 一個(gè)上電/掉電序列發(fā)生器、連續(xù)的時(shí)間計(jì)數(shù)器(RTC)、一對(duì)匹配寄存器、一個(gè)到系統(tǒng)總線的APB接口以及專用的非易失性存儲(chǔ)器、休眠模塊等功能組件使LM3S5749微控制器極其適合用在電池的應(yīng)用中。除此之外,該LM3S5749微控制
18、器的優(yōu)勢(shì)還在于能夠方便的運(yùn)用多種ARM的開發(fā)工具和片上系統(tǒng)(SoC)的底層IP應(yīng)用方案,以及廣大的用戶群體。 另外,該微控制器使用了兼容ARM的Thumb®指令集的Thumb2指令集來(lái)減少存儲(chǔ)容量的需求,并以此達(dá)到降低成本的目的。 最后,LM3S5749微控制器與Stellaris®系列的所有成員是代碼兼容的,這為用戶提供了靈活性,能夠適應(yīng)各種精確的需求。三、 軟件設(shè)計(jì)(一)概述CANopen 協(xié)議是在 20 世紀(jì) 90 年代末,由 CiA 組織(CAN-in-Automation)在 CAL(CAN Application Layer)的基礎(chǔ)上發(fā)展而來(lái),一經(jīng)推出便在歐洲得
19、到了廣泛的認(rèn)可與應(yīng)用。經(jīng)過(guò)對(duì) CANopen 協(xié)議規(guī)范文本的多次修改,使得 CANopen 協(xié)議的穩(wěn)定性、實(shí)時(shí)性、抗干擾性都得到了進(jìn)一步的提高。并且 CIA 在各個(gè)行業(yè)不斷推出設(shè)備子協(xié)議,使 CANopen 協(xié)議在各個(gè)行業(yè)得到更快的發(fā)展與推廣。目前 CANopen 協(xié)議已經(jīng)在運(yùn)動(dòng)控制、車輛工業(yè)、電機(jī)驅(qū)動(dòng)、工程機(jī)械、船舶海運(yùn)等行業(yè)得到廣泛的應(yīng)用。 (二)CANopen協(xié)議簡(jiǎn)介 圖8 CANopen 設(shè)備結(jié)構(gòu)圖8 所示為 CANopen 設(shè)備結(jié)構(gòu),CANopen 協(xié)議通常分為用戶應(yīng)用層、對(duì)象字典、以及通訊三個(gè)部分。其中最為核心的是對(duì)象字典,這部分將在本文以下章節(jié)中介紹。CANopen通訊是 CAN
20、open 關(guān)鍵部分,其定義了 CANopen 協(xié)議通信規(guī)則以及與 CAN 控制器驅(qū)動(dòng)之間對(duì)應(yīng)關(guān)系,這部分是CANopen 協(xié)議核心思想。(三) 軟件流程圖9 軟件流程四、 總結(jié)在硬件電路制作階段,我到圖書館、網(wǎng)上查閱各種資料,在電腦上使用PROTEL99SE進(jìn)行以及相關(guān)的繪圖軟件,使自己在理論分析設(shè)計(jì)和動(dòng)手操作能力等各方面得到了極大提高。我通過(guò)對(duì)設(shè)計(jì)任務(wù)書的具體要求分析思考,再加上以前在學(xué)校進(jìn)行的各種相關(guān)實(shí)踐和實(shí)習(xí)積累的經(jīng)驗(yàn),首次完成了硬件電路板的制作,雖然在初次制板時(shí),其中在鉆孔時(shí),看著別人鉆好簡(jiǎn)單,自己一試,也不是一件容易的事,不僅看得你眼花繚亂,還一不小心,鉆頭就斷了,鉆孔那天我組就弄斷
21、了好幾個(gè)。后來(lái)隨著動(dòng)作越來(lái)越熟練,速度也越來(lái)越快。盡管板面沒(méi)買得好看,但那也是我們的成果,還有因不細(xì)心、不熟習(xí)制作流程,還有打印的時(shí)候由于油墨的質(zhì)量不行且不夠濃,導(dǎo)致第一塊電路板有很多的斷線而報(bào)廢,但總結(jié)了經(jīng)驗(yàn)后又重新做了一塊板子,總算成功,但是還有很多地方要改進(jìn)才行,以后做板子的時(shí)候要特別注意。硬件電路板制好后,在利用ASM51軟件編寫程序調(diào)試時(shí),遇到了不少困難,這使我學(xué)會(huì)了耐心分析問(wèn)題,并進(jìn)一步鍛煉自己去攻破難題的能力。這次課程設(shè)計(jì)整體來(lái)說(shuō)是成功的,但我也發(fā)現(xiàn)了自己許多錯(cuò)漏和不足之處。譬如,最簡(jiǎn)單的程序沒(méi)寫好就想著寫更復(fù)雜的程序,做事還是缺乏耐性和細(xì)心,當(dāng)有時(shí)遇到問(wèn)題時(shí),總覺(jué)得無(wú)從下手,對(duì)
22、于課本上的知識(shí)不能很好的組織起來(lái)。在編寫各功能程序時(shí),特別是后來(lái)增添的比較復(fù)雜的程序, 目前,外面企業(yè)公司編寫程序大部分用C語(yǔ)言,而少用我們現(xiàn)在所學(xué)的匯編語(yǔ)言,所以我在以后的時(shí)間還是會(huì)自學(xué)C語(yǔ)言編程。再之現(xiàn)在電子領(lǐng)域、不同的行業(yè)極為廣泛,對(duì)于我們學(xué)電子專業(yè)的人來(lái)說(shuō),學(xué)好課本上的知識(shí)僅僅是基礎(chǔ),要掌握一門技術(shù)必須還得更深層的學(xué)習(xí),并且親自動(dòng)手去做,這樣才能達(dá)到事半功倍的效果。在最后,再次感謝王維博老師。參考文獻(xiàn)1 余永權(quán). 單片機(jī)原理及應(yīng)用. 北京:電子工業(yè)出版社, 1997 2 邦田. 電子電路實(shí)用抗干擾技術(shù). 北京:人民郵電出版社,1994 3 曲喜貴. 電子元件材料手冊(cè). 北京:電子工業(yè)出
23、版社,19894 黃賢武,鄭筱霞 傳感器實(shí)際應(yīng)用電路設(shè)計(jì). 成都:電子科技大學(xué)出版社,19975 劉君華. 智能傳感器系統(tǒng). 西安:西安電子科技大學(xué)出版社,19996 余永權(quán). Flash 單片機(jī)原理及應(yīng)用. 北京:電子工業(yè)出版社,19977 邦田. 電子電路實(shí)用抗干擾技術(shù). 北京:人民郵電出版社,19948 吉鵬.馬云峰. 微機(jī)原理與接口技術(shù). 北京:高等教育出版社,20019 振國(guó). DS1820 及高精度溫度測(cè)量的實(shí)現(xiàn). 電子技術(shù)應(yīng)用,200010 一線數(shù)字溫度傳感器資料. 武漢:武漢力源電子有限公司,199611 賢武,鄭霞. 傳感器實(shí)際應(yīng)用電路設(shè)計(jì). 成都:電子科技大學(xué)出版社,199
24、712 偉正. 單線數(shù)字溫度傳感器的原理與應(yīng)用. 電子技術(shù)應(yīng)用,200013 周月霞,孫傳友. DS18B20 硬件連接及軟件編程. 傳感器世界,200114 單線數(shù)字溫度傳感器資料 武漢:武漢力源電子有限公司,1996附錄1:電路原理圖附錄2:部分源碼#include "config.h"/* 聲明全局變量*/extern tCANFrameBuff *pReceFrameBuff; /* 指向幀接收緩沖區(qū)的指針 */extern tCANFrameBuff *pSendFrameBuff; /* 指向幀發(fā)送緩沖區(qū)的指針 */extern tCANNodeInfo *pC
25、AN_Node_Info; /* 指向CAN節(jié)點(diǎn)數(shù)據(jù)信息的指針 */ /* This structure holds the static defitions used to configure the CAN controller bit clock in the proper state given a requested setting.*/tCANBitClkParms CANBitClkSettings = /* * OSC = 8MHz */ #if 0 5, 2, 2, 1, /* CANBAUD_1M */ 5, 2, 2, 2, /* CANBAUD_500K */ 5, 2
26、, 2, 4, /* CANBAUD_250K */ 9, 6, 4, 4, /* CANBAUD_125K */ 5, 2, 2, 10, /* CANBAUD_100k */ 5, 2, 2, 20, /* CANBAUD_50k */ 9, 6, 4, 20, /* CANBAUD_25k */ 5, 2, 2, 50, /* CANBAUD_20k */ 5, 2, 2, 100, /* CANBAUD_10k */ 9, 6, 2, 100, /* CANBAUD_5k */ 9, 6, 2, 200, /* CANBAUD_2k5 */#endif/* * OSC = 6MHz *
27、/ 6, 1, 2, 1, /* CANBAUD_1M */11, 4, 2, 1, /* CANBAUD_500K */11, 4, 2, 2, /* CANBAUD_250K */11, 4, 2, 4, /* CANBAUD_125K */11, 4, 2, 5, /* CANBAUD_100k */11, 4, 2, 10, /* CANBAUD_50k */11, 4, 2, 20, /* CANBAUD_25k */11, 4, 2, 25, /* CANBAUD_20k */11, 4, 2, 50, /* CANBAUD_10k */11, 4, 2, 100, /* CANB
28、AUD_5k */11, 4, 2, 200, /* CANBAUD_2k5 */;/* Function name: CreateCAN* Descriptions: 創(chuàng)建一個(gè)節(jié)點(diǎn)信息結(jié)構(gòu)體* input parameters: *pCAN 指向節(jié)點(diǎn)結(jié)構(gòu)的空指針* ulChannelNr 節(jié)點(diǎn)通道號(hào)* ulBaud 節(jié)點(diǎn)通信波特率* ulRxMsgObj 節(jié)點(diǎn)接收數(shù)據(jù)MO* ulTxMsgObj 節(jié)點(diǎn)發(fā)送數(shù)據(jù)MO* *pReceBuff 節(jié)點(diǎn)接收數(shù)據(jù)緩沖區(qū)* *pSendBuff 節(jié)點(diǎn)發(fā)送數(shù)據(jù)緩沖區(qū)* output parameters: 無(wú)* Returned value: 無(wú)*/void
29、 CreateCAN (void *pCAN,unsigned long ulChannelNr, unsigned char ulBaud, unsigned long ulRxMsgObj, unsigned long ulTxMsgObj, tCANFrameBuff *pReceBuff, tCANFrameBuff *pSendBuff) tCANNodeInfo *pCAN_Info;pCAN_Info = (tCANNodeInfo *)pCAN; pCAN_Info->ulChNr = ulChannelNr;pCAN_Info->ucBADVal = ulBaud
30、;pCAN_Info->ulRxMsgObjNr = ulRxMsgObj; pCAN_Info->ulTxMsgObjNr = ulTxMsgObj;pCAN_Info->pReceFrameBuff = pReceBuff; pCAN_Info->pSendFrameBuff = pSendBuff;return;/* Function name: CAN_ucWriteBuffer* Descriptions: 寫幀接收緩沖區(qū)* input parameters: *pBuf 指向接收緩沖區(qū)的指針* *pWrite 寫數(shù)據(jù)塊指針* output parameter
31、s: 無(wú)* Returned value: FULL, 緩沖區(qū)已滿* NOT_FULL 緩沖區(qū)未滿*/unsigned char CAN_ucWriteBuffer (void *pBuf, void *pWrite) tCANFrameBuff *pRecBuf;tCANFrame *pWriteBuf;pRecBuf = (tCANFrameBuff *)pBuf;pWriteBuf = (tCANFrame *)pWrite;if (pRecBuf->ucBufEmpty = FULL) /* 接收緩沖區(qū)已滿 */ return FULL;pRecBuf->ucSize +;
32、pRecBuf->ucBufFull = NOT_FULL; pRecBuf->BufferpRecBuf->ucWrite = *pWriteBuf; /* 向接收緩沖區(qū)寫數(shù)據(jù) */ pRecBuf->ucWrite = (pRecBuf->ucWrite + 1) % CAN_MAX_Buffer; if (pRecBuf->ucSize = CAN_MAX_Buffer) /* 接收緩沖區(qū)已滿 */ pRecBuf->ucBufFull = FULL; pRecBuf->ucBufEmpty = NOT_EMPTY; return FULL
33、; return NOT_FULL;/* Function name: CAN_ucReadBuffer* Descriptions: 讀數(shù)據(jù)緩沖區(qū)* input parameters: *pBuf 指向數(shù)據(jù)緩沖區(qū)指針* *pRead 讀數(shù)據(jù)塊指針* output parameters: 無(wú)* Returned value: EMPTY , 緩沖區(qū)為空* NOT_EMPTY, 緩沖區(qū)非空*/unsigned char CAN_ucReadBuffer (void *pBuf, void *pRead) tCANFrameBuff *pRecBuf;tCANFrame *pReadBuf;pRe
34、cBuf = (tCANFrameBuff *)pBuf;pReadBuf = (tCANFrame *)pRead;if (pRecBuf->ucSize = 0 ) pRecBuf->ucBufEmpty = EMPTY; pRecBuf->ucBufFull = NOT_FULL; return EMPTY;pRecBuf->ucSize -;*pReadBuf = pRecBuf->BufferpRecBuf->ucRead;pRecBuf->ucRead = (pRecBuf->ucRead + 1) % CAN_MAX_Buffer;
35、 return NOT_EMPTY;/* Function name: SendCANFrame* Descriptions: 發(fā)送一幀CAN報(bào)文至總線* input parameters: *pCAN 指向發(fā)送報(bào)文結(jié)構(gòu)體指針* *pFrame 數(shù)據(jù)塊指針 * output parameters: 無(wú)* Returned value: 無(wú)*/void SendCANFrame(void *pCAN, void *pFrame) tCANMsgObject MsgObjectTx;tCANNodeInfo *pCAN_Info;tCANFrame *pCANFrame;pCAN_Info = (
36、tCANNodeInfo *)pCAN;pCANFrame = (tCANFrame *)pFrame; MsgObjectTx.ulMsgID = pCANFrame->ulID;if (pCANFrame->ucXID) MsgObjectTx.ulFlags = MSG_OBJ_EXTENDED_ID; else MsgObjectTx.ulFlags = MSG_OBJ_NO_FLAGS; MsgObjectTx.ulFlags |= MSG_OBJ_TX_INT_ENABLE; MsgObjectTx.ulMsgLen = (unsigned long)pCANFrame
37、->ucDLC; MsgObjectTx.pucMsgData = pCANFrame->ucDatBuf; /* * 啟動(dòng)發(fā)送失敗重發(fā) */CANRetrySet(pCAN_Info->ulChNr, pCAN_Info->ulTxMsgObjNr); CANMessageSet(pCAN_Info->ulChNr, pCAN_Info->ulTxMsgObjNr, &MsgObjectTx, MSG_OBJ_TYPE_TX); return;/* Function name: CANAcceptFilterSet* Descriptions: 設(shè)
38、置節(jié)點(diǎn)接收驗(yàn)收過(guò)濾* input parameters: *pCAN 指向節(jié)點(diǎn)的空指針* ulFrameID 接收幀ID* ulFrameIDMask 接收幀屏蔽碼* ucReceMode ID_FILTER 根據(jù)MsgObj ID 過(guò)濾(標(biāo)準(zhǔn)幀或擴(kuò)展幀)* EXT_FILTER 過(guò)濾接收擴(kuò)展幀* output parameters: 無(wú)* Returned value: 無(wú)*/void CANAcceptFilterSet (void *pCAN, unsigned long ulFrameID, unsigned long ulFrameIDMask, unsigned char ucRe
39、ceMode) tCANMsgObject MsgObjectRx;tCANNodeInfo *pCAN_Info;unsigned char ucBufferIn8;pCAN_Info = (tCANNodeInfo *)pCAN; ASSERT(pCAN_Info->ulChNr = pCAN_Info->ulChNr)| (pCAN_Info->ulChNr = CAN1_BASE); switch (ucReceMode) /* * 驗(yàn)收過(guò)濾標(biāo)準(zhǔn)幀 */ case STD_ID_FILTER: MsgObjectRx.ulFlags = (MSG_OBJ_RX_INT
40、_ENABLE | MSG_OBJ_EXTENDED_ID | MSG_OBJ_USE_ID_FILTER); MsgObjectRx.ulMsgID = (ulFrameID & 0x7ff) << 18); MsgObjectRx.ulMsgIDMask = (ulFrameIDMask & 0x7ff) << 18); break; /* * 驗(yàn)收過(guò)濾擴(kuò)展幀 */ case EXT_ID_FILTER: MsgObjectRx.ulFlags = (MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_EXTENDED_ID | MSG_OBJ_USE_EXT_FILTER); MsgObjectRx.ulMsgID = ulFrameID; MsgObjectRx.ulMsgIDMask = ulFrameIDMask; break; default: break; MsgOb
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版游戲版權(quán)采購(gòu)合同示范文本3篇
- 湘潭大學(xué)《體育基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版經(jīng)營(yíng)權(quán)作抵押借款協(xié)議樣例版B版
- 二零二五版戶外廣告資源代理合作框架協(xié)議3篇
- 2024消防設(shè)備研發(fā)與制造合同范本3篇
- 二零二五年度藝術(shù)品收藏交易合同3篇
- 2025年度智慧養(yǎng)老服務(wù)平臺(tái)建設(shè)與運(yùn)營(yíng)合同3篇
- 桐城師范高等專科學(xué)?!侗硌莼A(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版板房租賃合同含物業(yè)管理及保潔服務(wù)3篇
- 四川文軒職業(yè)學(xué)院《機(jī)械工程材料B》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海紐約大學(xué)自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 2022年物流服務(wù)師職業(yè)技能競(jìng)賽理論題庫(kù)(含答案)
- ?;钒踩僮饕?guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術(shù)規(guī)程
- 高邊坡施工危險(xiǎn)源辨識(shí)及分析
- 中海地產(chǎn)設(shè)計(jì)管理程序
- 簡(jiǎn)譜視唱15942
- 《城鎮(zhèn)燃?xì)庠O(shè)施運(yùn)行、維護(hù)和搶修安全技術(shù)規(guī)程》(CJJ51-2006)
- 項(xiàng)目付款審核流程(visio流程圖)
評(píng)論
0/150
提交評(píng)論