版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、xxx大學(xué)xxx學(xué)院本科畢業(yè)設(shè)計(jì)基于can總線數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)can總線通信實(shí)驗(yàn)學(xué)生: 指導(dǎo)教師:內(nèi)容提要:以can (controller area network) 總線控制器sja1000為核心, 設(shè)計(jì)了一種通用的基于can總線的數(shù)據(jù)采集系統(tǒng), 給出了數(shù)據(jù)采集系統(tǒng)的原理、單個(gè)節(jié)點(diǎn)的軟硬件設(shè)計(jì); 重點(diǎn)闡述了can 總線智能節(jié)點(diǎn)的設(shè)計(jì)、實(shí)現(xiàn)與注意事項(xiàng)。 試驗(yàn)表明, can 總線的多主結(jié)構(gòu)使系統(tǒng)改型靈活, 數(shù)據(jù)傳輸穩(wěn)定, 可靠性好, 數(shù)據(jù)傳輸速率可達(dá)1mbit/s, 能滿足現(xiàn)場的實(shí)時(shí)性要求。can 總線的使用大大節(jié)約了連接導(dǎo)線、維護(hù)和安裝費(fèi)用, 提高了系統(tǒng)的性價(jià)比, 具有廣泛的應(yīng)用前景
2、。關(guān)鍵詞:數(shù)據(jù)采集 can 總線 現(xiàn)場總線 芯片sja 1000 design and realization of data acquisition system based on can buscan bus comuniostion experimentabstract : one kind of current data acquisition system based on can (controllera rean etwork) bus is designed its core design is can bus controller sja1000. the principle
3、 of the data acquisition system and the software and hadware design of a single node are given . the main concerns are design, the realization and the rules of the intelligent node of can bus . the result of test shows three aspects of advantages . the multi-master capabilities of can bus make the s
4、ystem resetmore smartly . the speed rate of data transmsion reaches 1m bit/s . the stability and good reliability of data transm ission can meet the real time need of the field . dependability is good, and the field real time demand is satisfied . meanw hile the expenses of connecting wires, mainten
5、ance and installation are decreased because of the use of can bus . it improves the price ration of the system. thus it will be widely applied .key words: data acquisition controller area network bus field bus controller sja 1000 目 錄一、引言1二、 can總線1(一)can總線介紹1(二)can協(xié)議1三、結(jié)構(gòu)設(shè)計(jì)4四、硬件設(shè)計(jì)5五、軟件設(shè)計(jì)6(一)初始化子程序7(二
6、)發(fā)送子程序8(三)查詢方式接收子程序10六、測試報(bào)告12附錄15參考文獻(xiàn)36iii一、引言信息技術(shù)的飛速發(fā)展,引起了自動化系統(tǒng)結(jié)構(gòu)的變革, 形成以網(wǎng)絡(luò)集成自動化為基礎(chǔ)的控制系統(tǒng)?,F(xiàn)場總線順應(yīng)這一形式發(fā)展, 已成為當(dāng)前工業(yè)數(shù)據(jù)總線領(lǐng)域中一個(gè)新熱點(diǎn), 被廣泛應(yīng)用于工業(yè)現(xiàn)場控制、智能家居、交通工具、環(huán)境監(jiān)測等眾多領(lǐng)域。 用數(shù)據(jù)采集系統(tǒng)能實(shí)現(xiàn)數(shù)據(jù)采集與處理, 加入高級算法即可實(shí)現(xiàn)智能控制, 因而減輕了上位機(jī)的負(fù)擔(dān)。 本設(shè)計(jì)設(shè)計(jì)了一個(gè)通用的基于can 總線的數(shù)據(jù)采集卡, 著重闡述了它的設(shè)計(jì)及其實(shí)現(xiàn)。二、 can總線(一)can總線介紹can 總線 (cont roller area network 控
7、制器局域網(wǎng))是現(xiàn)場總線的一種。 它是德國bosch 公司在1986 年為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通訊總線。can 總線與其它通信網(wǎng)的不同之處有二:一是報(bào)文傳送中不包含目標(biāo)地址 ,它是以全網(wǎng)廣播為基礎(chǔ) ,各接收站根據(jù)報(bào)文中反映數(shù)據(jù)性質(zhì)的標(biāo)識符過濾報(bào)文 ,該收的收下 ,不該收的棄而不用。其好處是可在線上網(wǎng)下網(wǎng)、 即插即用和多站接收;二是特別強(qiáng)化了對數(shù)據(jù)安全性的關(guān)注 , 滿足控制系統(tǒng)及其它較高數(shù)據(jù)要求的系統(tǒng)需求。can 總線具有下列主要特性:l 多主站依據(jù)優(yōu)先權(quán)進(jìn)行總線訪問;l 非破壞性的基于優(yōu)先權(quán)的總線仲裁;l 借助接收濾波的多地址幀傳送;l 遠(yuǎn)程數(shù)據(jù)請
8、求;l 配置靈活;l 全系統(tǒng)的數(shù)據(jù)相容性;l 錯(cuò)誤檢測和出錯(cuò)信令;l 發(fā)送期間若丟失仲裁或由于出錯(cuò)而遭破壞的幀可自動重發(fā)送;l 暫時(shí)錯(cuò)誤和永久性故障節(jié)點(diǎn)的判別以及故障節(jié)點(diǎn)的自動脫離 can 總線。(二)can協(xié)議數(shù)據(jù)傳輸?shù)耐ㄐ艆f(xié)議是指對數(shù)據(jù)傳輸?shù)募s定 ,包括定時(shí) 、控制 、格式化和數(shù)據(jù)表示方法等等 。1.can分層結(jié)構(gòu)的協(xié)議can是一串行通訊協(xié)議 can總線規(guī)范規(guī)定了任意兩個(gè)節(jié)點(diǎn)之間的兼容性 ,包括電氣特性及數(shù)據(jù)解釋協(xié)議 ,為保證設(shè)計(jì)使用的透明性及使用的靈活性 ,can協(xié)議分為如下幾層:目標(biāo)層 、傳送層 、物理層 。目標(biāo)層的功能范圍包括:信息識別、信息狀態(tài)及處理。傳送層的功能范圍包括: 幀組織
9、、總線仲裁、檢錯(cuò)、錯(cuò)誤報(bào)告、錯(cuò)誤處理。物理層的功能范圍包括: 實(shí)際位傳送過程上的電氣特性。2.can網(wǎng)絡(luò)通訊協(xié)議總線控制器支持4種不同結(jié)構(gòu)的can協(xié)議幀類型:數(shù)據(jù)幀用于節(jié)點(diǎn)之間的數(shù)據(jù)傳輸遠(yuǎn)程幀:用于請求發(fā)送具有相同標(biāo)識符的數(shù)據(jù)幀出錯(cuò)幀:用于指示檢測到的錯(cuò)誤狀態(tài)過載幀:用于提供先前和后續(xù)數(shù)據(jù)幀或遠(yuǎn)程幀之間的附加延時(shí)數(shù)據(jù)幀、遠(yuǎn)程幀、出錯(cuò)幀、過載幀都按一定的格式進(jìn)行編碼數(shù)據(jù)幀:由7個(gè)不同的位場構(gòu)成 ,如圖 1所示。它們是:幀起始 、仲裁場、控制場、crc場 、ack場和幀結(jié)束;遠(yuǎn)程幀:由6個(gè)不同的位場構(gòu)成:幀起始 、仲裁場、控制場、crc場 、ack場、幀結(jié)束出錯(cuò)幀:由兩個(gè)不同的場構(gòu)成。第一個(gè)場由來
10、自不同節(jié)點(diǎn)的錯(cuò)誤標(biāo)志疊加給出,后隨的第二個(gè)場為錯(cuò)誤定界符超載幀:包括兩個(gè)位場、超載標(biāo)志和超載界定符。數(shù)據(jù)幀和遠(yuǎn)程幀以幀間空間同先前幀隔開,幀編碼和發(fā)送/接收。圖1 數(shù)據(jù)幀的構(gòu)成幀起始、仲裁場、控制場、數(shù)據(jù)場、序列幀段均以位填充方法進(jìn)行編碼 ,即在以送位流中檢測到5個(gè)數(shù)值相同的時(shí)候 ,自動插人一個(gè)補(bǔ)碼位。數(shù)據(jù)幀或遠(yuǎn)程幀的其余位場、錯(cuò)誤幀、超載幀為固定格式 ,不使用位填充方法編碼,幀中的位流按照非歸零方法編碼。發(fā)送時(shí)從其sof場開始逐個(gè)位場發(fā)送。對于發(fā)送器和接收器 ,一幀的有效點(diǎn)是不同的。對于發(fā)送器 ,若在幀結(jié)束完成前不存在錯(cuò)誤 ,則該幀有效。對于接收器 ,若在幀結(jié)束最后一位前不存在錯(cuò)誤 ,則該幀
11、有效??偩€訪問和仲裁:當(dāng)檢測到間歇場未被 “顯性”位中斷后 ,認(rèn)為總線被所有節(jié)點(diǎn)釋放??偩€被釋放后 , “錯(cuò)誤一激活”節(jié)點(diǎn)可以訪問總線。當(dāng)許多節(jié)點(diǎn)一起開始發(fā)送時(shí) ,只有發(fā)送具有最高優(yōu)先權(quán)的幀節(jié)點(diǎn)變?yōu)榭偩€主機(jī) ,享有對總線的控制權(quán)。這種解決總線訪問沖突的機(jī)理是基于競爭的促裁 ,依據(jù)標(biāo)識符和緊隨其后的rtr位來完成。錯(cuò)誤檢測:在can中存在5類不同的錯(cuò)誤位錯(cuò)誤、填充錯(cuò)誤、crc錯(cuò)誤、形式錯(cuò)誤、應(yīng)答錯(cuò)誤、在網(wǎng)絡(luò)中的任何一個(gè)節(jié)點(diǎn) ,根據(jù)其錯(cuò)誤計(jì)數(shù)器的數(shù)值,可能處于下列3種狀態(tài)之一:“錯(cuò)誤一激活”節(jié)點(diǎn):一個(gè)“錯(cuò)誤一激活”節(jié)點(diǎn)可以正常參與總線通信,并在檢測到錯(cuò)誤時(shí) ,發(fā)出一個(gè)激活錯(cuò)誤標(biāo)志?!板e(cuò)誤一認(rèn)可”節(jié)
12、點(diǎn):一個(gè)“錯(cuò)誤一認(rèn)可”節(jié)點(diǎn)不應(yīng)發(fā)送激活錯(cuò)誤標(biāo)志 ,它參與總線通信,但在檢測到錯(cuò)誤時(shí),發(fā)出一個(gè)認(rèn)可錯(cuò)誤標(biāo)志。“總線脫離”節(jié)點(diǎn):當(dāng)一個(gè)節(jié)點(diǎn)由于請求故障界定實(shí)體而對總線處于關(guān)閉狀態(tài)時(shí) ,其處于“總線脫離”狀態(tài),在“總線脫離”狀態(tài)。為了進(jìn)行錯(cuò)誤界定 ,在總線上的每一個(gè)單元中都設(shè)有兩種計(jì)數(shù)器:發(fā)送出錯(cuò)計(jì)數(shù)器和接收出錯(cuò)計(jì)數(shù)器 ,錯(cuò)誤計(jì)數(shù)器的值按照一定的規(guī)則進(jìn)行修正。當(dāng)節(jié)點(diǎn)的發(fā)送計(jì)數(shù)器或接收計(jì)數(shù)器的值超過127時(shí) ,則監(jiān)控器要求置相應(yīng)節(jié)點(diǎn)為“錯(cuò)誤一認(rèn)可”狀態(tài) ,送出一個(gè)激活標(biāo)志。當(dāng)發(fā)送計(jì)數(shù)器或接收計(jì)數(shù)器的值均小于或等于127時(shí) , “錯(cuò)誤一認(rèn)可”節(jié)點(diǎn)再次變?yōu)?“錯(cuò)誤一激活” 。當(dāng)節(jié)點(diǎn)的發(fā)送計(jì)數(shù)器的值超過25
13、5時(shí) ,則監(jiān)控器要求置相應(yīng)節(jié)點(diǎn)為“脫離總線”狀態(tài)。處于“脫離總線”狀態(tài)的節(jié)點(diǎn) ,在監(jiān)測到總線上出現(xiàn)128次11個(gè)連續(xù)的“隱性”位 ,變?yōu)閮蓚€(gè)錯(cuò)誤計(jì)數(shù)器均為0的“錯(cuò)誤一激活”節(jié)點(diǎn)。三、結(jié)構(gòu)設(shè)計(jì) 數(shù)據(jù)采集系統(tǒng)由數(shù)據(jù)采集模塊和數(shù)據(jù)傳輸模塊組成, 其中數(shù)據(jù)傳輸通過can (controller area network) 總線來實(shí)現(xiàn)。 控制器局域網(wǎng)can 屬于現(xiàn)場總線范疇, 它是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò)。系統(tǒng)采用總線式網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu), 其系統(tǒng)總體結(jié)構(gòu)如圖2所示。圖2 系統(tǒng)總體結(jié)構(gòu)選用can 總線連接各節(jié)點(diǎn), 形成多主控制器的局域網(wǎng)。 can 總線符合 iso11898標(biāo)準(zhǔn), 最多可
14、掛接110個(gè)節(jié)點(diǎn), 采用can 總線特有的多主傳送方式, 各采集控制器根據(jù)現(xiàn)場需要, 當(dāng)有數(shù)據(jù)時(shí)可自主發(fā)送, 無需主機(jī)不停地輪巡, 節(jié)省了網(wǎng)絡(luò)上的數(shù)據(jù)流量, 提高了傳輸效率。 can 總線傳輸介質(zhì)為雙絞線或同軸電纜, 走線少、系統(tǒng)易擴(kuò)展、改型靈活, 正是由于這些其他通信方式無法比擬的優(yōu)點(diǎn), 才使之成為系統(tǒng)分布比較分散的數(shù)據(jù)采集系統(tǒng)的理想總線。數(shù)據(jù)采集系統(tǒng)將由現(xiàn)場傳感器送來的數(shù)據(jù)發(fā)送到空閑的can 總線上, 而總線上各節(jié)點(diǎn)通過預(yù)先設(shè)置好的驗(yàn)收碼和驗(yàn)收屏蔽碼, 來決定是否使用這個(gè)消息。 如果采集的數(shù)據(jù)需要進(jìn)一步進(jìn)行處理, 則上位機(jī)可從總線上接收數(shù)據(jù)并對其處理。 處理后的數(shù)據(jù)再送回can 總線, 經(jīng)
15、數(shù)模轉(zhuǎn)換模塊或其他節(jié)點(diǎn)進(jìn)行控制操作。 當(dāng)上位機(jī)需對某個(gè)節(jié)點(diǎn)施以控制時(shí), 可采用點(diǎn)對點(diǎn)的方式與該節(jié)點(diǎn)進(jìn)行通訊; 而當(dāng)它需要對所有節(jié)點(diǎn)加以控制時(shí), 則采用廣播方式將命令發(fā)送到總線。 這樣大大減少了數(shù)據(jù)的傳輸量, 從而提高了系統(tǒng)的傳輸速率, 同時(shí)又保證了系統(tǒng)的實(shí)時(shí)性和可靠性。 下面以數(shù)據(jù)采集系統(tǒng)中的數(shù)據(jù)采集節(jié)點(diǎn)為例來說明單個(gè)節(jié)點(diǎn)的設(shè)計(jì)思想。四、硬件設(shè)計(jì)數(shù)據(jù)采集系統(tǒng)單個(gè)節(jié)點(diǎn)硬件框圖如圖3所示, 由傳感器檢測的信息經(jīng)多路開關(guān)送到可編程放大器pga 204, 根據(jù)信號大小調(diào)節(jié)放大倍數(shù)(1, 10, 100, 1 000倍) , 放大后, 經(jīng)ad574轉(zhuǎn)換為數(shù)字信號, 送入微處理器中存儲, 然后根據(jù)現(xiàn)場情況
16、的需要, 將信號發(fā)送到can 總線上, 被其他節(jié)點(diǎn)或上位機(jī)接收。圖3 節(jié)點(diǎn)硬件框圖由于以ad574為a/d 轉(zhuǎn)換器的數(shù)據(jù)采集卡比較普及, 故下面重點(diǎn)闡述數(shù)據(jù)傳輸部分, 即can 總線智能節(jié)點(diǎn)的設(shè)計(jì)與實(shí)現(xiàn)。 can 總線上的節(jié)點(diǎn)是網(wǎng)絡(luò)上的信息接收和發(fā)送站, 由于節(jié)點(diǎn)主要由單片機(jī)和可編程的can 通信控制器組成, 能通過編程設(shè)置工作方式、id 地址、波特率等參數(shù), 故稱其為智能節(jié)點(diǎn)。can節(jié)點(diǎn)原理圖如圖4所示。89c51是節(jié)點(diǎn)的微處理器, 作為一個(gè)存儲器 i/o 映象設(shè)備, 負(fù)責(zé)對控制器sja 1000初始化, 并控制其實(shí)現(xiàn)數(shù)據(jù)的收發(fā)等通信任務(wù)。 在can 總線通信接口中, 使用ph il ips
17、 公司的 sja 1000和 tja 1040芯片。 sja 1000是獨(dú)立的can 通信控制器, 用于完成can 總線通信協(xié)議的物理層和數(shù)據(jù)鏈路層的功能。tja1040為高性能、高速can 收發(fā)器, 使用它可增大通信距離, 提高系統(tǒng)瞬間抗干擾能力, 改良系統(tǒng)的抗電磁干擾及電磁輻射性能, 保護(hù)總線, 降低射頻干擾, 實(shí)現(xiàn)熱防護(hù)等。圖4 can節(jié)點(diǎn)原理圖為進(jìn)一步提高抗干擾能力, 在can 控制器sja 1000和驅(qū)動器tja 1040之間使用了高速光耦器件6n137構(gòu)成隔離電路, 傳輸介質(zhì)采用雙絞線 (或同軸電纜) 分別接至can 收發(fā)器tja 1040的canh 和canl 引腳。 同時(shí)在總線
18、兩端canh 和canl 之間加上分離中斷的120 8 終端電阻, 對總線阻抗匹配起著相當(dāng)重要的作用 4 。此外, 為使can 控制器和微處理器能同時(shí)可靠復(fù)位, 外加了手動復(fù)位電路。sja 1000的中斷輸出信號 (/n t) 接至單片機(jī)的中斷引腳 in t0, 通過中斷方式實(shí)現(xiàn)單片機(jī)與can 控制器的通信。 在電路實(shí)際調(diào)試過程中須注意以下幾點(diǎn)。1.總線的兩個(gè)1208 終端電阻不可忽略。 否則會使數(shù)據(jù)通信的抗干擾性和可靠性降低, 嚴(yán)重時(shí)可導(dǎo)致無法通信。2.tja 1040 (與pca 82c250兼容) 的“spl it”引腳 (代替82c250“ v ref”引腳) , 對總線dc 穩(wěn)壓很有
19、效 4 。 如果“spl it”用于共模電壓的dc 穩(wěn)壓, 這個(gè)“spl it”引腳要連接到分離中斷的中間分接頭。 若“spl it”不使用, 只需保持開路即可。3.tja 1040引腳“stb”一般被直接連接到微處理器輸出口, 以便于控制收發(fā)器的工作模式。五、軟件設(shè)計(jì)can 總線節(jié)點(diǎn)的軟件設(shè)計(jì)主要包括三大部分:can 節(jié)點(diǎn)初始化、報(bào)文發(fā)送和報(bào)文接收。熟悉這三部分程序的設(shè)計(jì), 就能編寫出利用 can 總線進(jìn)行通信的一般應(yīng)用程序。當(dāng)然要將 can 總線應(yīng)用于通信任務(wù)比較復(fù)雜的系統(tǒng)中還需詳細(xì)了解有關(guān)can總線錯(cuò)誤處理、總線脫離處理、接收濾波處理、波特率參數(shù)設(shè)置和自動檢測以及can總線通信距離和節(jié)點(diǎn)
20、數(shù)的計(jì)算等方面的內(nèi)容。下面僅就前面提到的三部分程序的設(shè)計(jì)作一個(gè)描述,以供大家在實(shí)際應(yīng)用中參考。 (一)初始化子程序 sja1000 的初始化只有在復(fù)位模式下才可以進(jìn)行。初始化主要包括工作方式的設(shè)置 接收濾波方式的設(shè)置,接收屏蔽寄存器amr 和接收代碼寄存器 acr 的設(shè)置,波特率參數(shù)設(shè)置和中斷允許寄存器 ier 的設(shè)置等。在完成 sja1000 的初始化設(shè)置以后 sja1000 就可以回到工作狀態(tài) 進(jìn)行正常的通信任務(wù)。下面提供了sja1000 初始化的 51 匯編源程序。程序中寄存器符號表示的是 sja1000 相應(yīng)寄存器占用的片外存貯器地址 這些符號可在程序的頭部用偽指令equ進(jìn)行定義。后文
21、對這一點(diǎn)不再作特別說明。canini: mov dptr, #mod ;方式寄存器 mov a, #09h ;進(jìn)入復(fù)位模式 對 sja1000 進(jìn)行初始化. movx dptr, a mov dptr, #cdr ;時(shí)鐘分頻寄存器 mov a , #88h ;選擇 pelican 模式 關(guān)閉時(shí)鐘輸出 clkoutmovx dptr, a mov dptr, #ier ;中斷允許寄存器 mov a ,#0dh ;開放發(fā)送中斷 超載中斷和錯(cuò)誤警告中斷 movx dptr, a mov dptr ,#amr ;接收屏蔽寄存器 mov r6, #4 mov r0 ,#damr ;接收屏蔽寄存器內(nèi)容在片
22、內(nèi) ram 中的首址 amr: mov a r0 movx dptr, a ;接收屏蔽寄存器賦初值 inc dptr djnz r6 ,amr mov dptr ,#acr ;接收代碼寄存器 mov r6 ,#4 mov r0, #dacr ;接收代碼寄存器內(nèi)容在片內(nèi) ram 中的首址 acr:mov a, r0 movx dptr, a ;接收代碼寄存器賦初值 inc dptr djnz r6 ,acr mov dptr, #btr0 ;總線定時(shí)寄存器 0 mov a, #03h movx dptr, a mov dptr, #btr1 ;總線定時(shí)寄存器 1 mov a ,#0ffh ;16
23、mhz 晶振情況下 設(shè)置波特率為 80kbps. movx dptr, a mov dptr, #ocr ;輸出控制寄存器 mov a ,#0aah movx dptr,a mov dptr, #rbsa ;接收緩存器起始地址寄存器 mov a, #0 ;設(shè)置接收緩存器 fifo 起始地址為 0 movx dptr, a mov dptr, #txerr ;發(fā)送錯(cuò)誤計(jì)數(shù)寄存器. mov a ,#0 ;清除發(fā)送錯(cuò)誤計(jì)數(shù)寄存器 movx dptr, a mov dptr ,#ecc ;錯(cuò)誤代碼捕捉寄存器 movx a ,dptr ;清除錯(cuò)誤代碼捕捉寄存器 mov dptr, #mode ;方式寄存
24、器 mov a ,#08h ;設(shè)置單濾波接收方式 并返回工作狀態(tài) movx dptr ,a ret (二)發(fā)送子程序 發(fā)送子程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的發(fā)送,發(fā)送時(shí)用戶只需將待發(fā)送的數(shù)據(jù)按特定格式組合成一幀報(bào)文送入sja1000 發(fā)送緩存區(qū)中,然后啟動sja1000發(fā)送即可。當(dāng)然在往 sja1000 發(fā)送緩存區(qū)送報(bào)文之前必須先作一些判斷。如下文程序所示,發(fā)送程序分發(fā)送遠(yuǎn)程幀和數(shù)據(jù)幀兩種:遠(yuǎn)程幀無數(shù)據(jù)場。下面以發(fā)送數(shù)據(jù)幀為例對發(fā)送子程序作一個(gè)說明 。tdata: mov dptr, #sr ;狀態(tài)寄存器 movx a,dptr ;從 sja1000 讀入狀態(tài)寄存器值 jb acc.4,tdata ;判斷是
25、否正在接收 正在接收則等待 ts0: movx a, dptr jnb acc.3 ,ts0 ;判斷上次發(fā)送是否完成 未完成則等待發(fā)送完成 ts1: movx a,dptr jnb acc.2 ,ts1 ;判斷發(fā)送緩沖區(qū)是否鎖定 鎖定則等待 ts2: mov dptr, #cantxb ;sja1000 發(fā)送緩存區(qū)首址 mov a , #88h ;發(fā)送數(shù)據(jù)長度為 8 個(gè)字節(jié)的擴(kuò)展幀格式報(bào)文 movx dptr, a inc dptr mov a , #id0 ;4 個(gè)字節(jié)的標(biāo)識符 id0-id3 movx dptr, a inc dptr mov a, #id1 movx dptr, a in
26、c dptr mov a , #id2 movx dptr, a inc dptr mov a, #id3 movx dptr,a mov r0 ,#trdata ;cpu 發(fā)送數(shù)據(jù)區(qū)首址 mtbf:mov a, r0 inc dptr movx dptr, a inc r0 cjne r0, #trdata+8 mtbf ;向發(fā)送緩沖區(qū)寫 8 個(gè)字節(jié) mov dptr, #cmr ;命令寄存器地址 mov a , #01h movx dptr ,a ;啟動 sja1000 發(fā)送 ret(三)查詢方式接收子程序 接收子程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的接收以及其它情況處理,接收子程序比發(fā)送子程序要復(fù)雜一些。因
27、為在處理接收報(bào)文的過程中,同時(shí)要對諸如總線脫離、錯(cuò)誤報(bào)警、接收溢出等情況進(jìn)行處理sja1000報(bào)文的接收主要有兩種方式:中斷接收方式和查詢接收方式。如果對通信的實(shí)時(shí)性要求不是很強(qiáng),建議采用查詢接收方式。兩種接收方式編程的思路基本相同,下面僅以查詢方式接收報(bào)文為例對接收子程序作一個(gè)說明。search: mov dptr, #sr ;狀態(tài)寄存器地址 movx a ,dptr anl a ,#0c3h ;讀取總線脫離 錯(cuò)誤狀態(tài) 接收溢出 jnz proc ret ;無上述狀態(tài) 結(jié)束 proc: jnb acc.7 ,proci buserr: mov dptr, #ir ;ir 中斷寄存器 出現(xiàn)總線
28、脫離 movx a , dptr ;讀中斷寄存器 清除中斷位. mov dptr, #mode ;方式寄存器地址 mov a, #08h movx dptr, a ;將方式寄存器復(fù)位請求位清 0 lcall alarm. ;調(diào)用報(bào)警子程序 ret nop proci: mov dptr, #ir ;總線正常 movx a, dptr ;讀取中斷位 nb acc.3, other over: mov dptr, #cmr ;數(shù)據(jù)溢出中斷置位. mov a, #0ch movx dptr, a ;在命令寄存器中清除數(shù)據(jù)溢出 ret nop other:jb acc.0 ,rece ;ir.0=1
29、接收 fifo 未滿或接收 ljmp recout ;ir.0=0接收緩沖區(qū)無數(shù)據(jù)退出接收 nop rece: mov dptr, #canrxb ;接收緩沖區(qū)首地址 16 準(zhǔn)備讀取數(shù) movx a, dptr ;首字節(jié)是接收幀格式字 jnb acc.6 ,rdata ;rtr=1 是遠(yuǎn)程請求幀 無數(shù)據(jù) mov dptr, #cmr mov a , #04h ;cmr.2=1 釋放接收緩沖區(qū) movx dptr ,a ;只有接收了數(shù)據(jù)才能釋放接收緩沖區(qū) lcall tdata ;發(fā)送對方請求的數(shù)據(jù) ljmp recout ;退出接收 nop rdata: mov dptr, #canrxb ;
30、讀取并保存接收緩沖區(qū)的數(shù)據(jù) mov r1, #cpurbf ;cpu 片內(nèi)接收緩沖區(qū)首址 movx a, dptr ;讀取讀取 can 緩沖區(qū)的 2 號字節(jié) mov r1, a ;保存 anl a, #0fh ;截取低 4 位是數(shù)據(jù)長度 08 add a, #4 ;加 4 個(gè)字節(jié)的標(biāo)識符 id mov r6, a rdata: inc dptr inc r1 movx a, dptr mov r1 ,a djnz r6,rdata0 ;循環(huán)讀取與保存 mov dptr, #cmr mov a, #04h ;釋放 can 接收緩沖區(qū) movx dptr ,a recout: mov dptr,
31、#alc movx a, dptr mov dptr, #ecc movx a, dptr nop ret需要注意的是: sja 1000的初始化只有在復(fù)位模式下才可以進(jìn)行。 在對sja 1000寄存器設(shè)定前, 主控制器通過讀復(fù)位模式 請求標(biāo)志來檢查sja 1000是否已達(dá)到復(fù)位模式。 在復(fù)位模式下, 主控制器必須配置sja 1000控制段的寄存器。 時(shí)鐘輸出控制寄存器 (ocr) 的內(nèi)容決定can 控制器的輸出方式。 驗(yàn)收代碼(acr) 和驗(yàn)收屏蔽(amr) 寄存器根據(jù)實(shí)際網(wǎng)絡(luò)系統(tǒng)和報(bào)文標(biāo)志符來確定, 須引起注意的是: acr位 (ac172 ac10) 和信息識別碼的高8位 ( id110
32、2id13) 相等, 且與amr 位 (am 172 am 10) 的相應(yīng)位相或?yàn)?, 即: ( id1102id13) (ac172 ac10) (am 172 am 10) 1111 1111滿足上述條件的報(bào)文才予以接收 3 。 btr0、 btr1寄存器的內(nèi)容可唯一地確定系統(tǒng)的通信波特率和同步跳轉(zhuǎn)寬度, 所以整個(gè)系統(tǒng)中的所有節(jié)點(diǎn), 這兩個(gè)寄存器的內(nèi)容必須相同 (包括上位機(jī)) , 否則將無法進(jìn)行通信。六、測試報(bào)告實(shí)驗(yàn)達(dá)到了預(yù)定結(jié)果,可以將各個(gè)分布點(diǎn)的測量數(shù)據(jù)準(zhǔn)確發(fā)送到指定can節(jié)點(diǎn)。can總線最高速度達(dá)到1m。實(shí)驗(yàn)用電路板如圖4所示。圖5 實(shí)驗(yàn)用電路板七、總結(jié)由基于can 總線的智能節(jié)點(diǎn)在
33、數(shù)據(jù)采集卡中的實(shí)際運(yùn)用表明, 在實(shí)驗(yàn)室條件下數(shù)據(jù)傳輸速率最高可達(dá)1m / s, 誤碼率低, 當(dāng)節(jié)點(diǎn)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí), 可自動脫離總線而整個(gè)系統(tǒng)不受影響。 由此, 該節(jié)點(diǎn)的設(shè)計(jì)方案是可行的, 既可提高系統(tǒng)的可靠性、數(shù)據(jù)傳輸速度, 又具有操作簡便、實(shí)時(shí)性強(qiáng)、擴(kuò)展靈活、糾檢錯(cuò)能力強(qiáng)等特點(diǎn), 另外, 它可大大節(jié)約連接導(dǎo)線、維護(hù)和安裝費(fèi)用, 提高了系統(tǒng)的性價(jià)比。 因此可廣泛應(yīng)用于各種測控系統(tǒng)中。七、致 謝本設(shè)計(jì)是在導(dǎo)師汪老師的精心指導(dǎo)和鼓勵下完成的。汪老師開闊的視野,嚴(yán)謹(jǐn)?shù)膶W(xué)風(fēng)和真誠謙遜的為人,使我在這次設(shè)計(jì)過程中受益匪淺。汪老師在生活等各方面給我的關(guān)懷和幫助也將令我終生難忘。在此,謹(jǐn)向汪老師表示衷心的感
34、謝。感謝我的父母,是他們無私的愛的支持和鼓勵使我順利完成學(xué)業(yè)!感謝同組的同學(xué)對我的幫助和支持!此外,我還要感謝在我的論文中所有被援引過的文獻(xiàn)的作者,他們是我的知識之源!最后,再次向所有曾經(jīng)給予我?guī)椭凸膭畹睦蠋熀屯瑢W(xué)致以最誠摯的謝意!附錄(一)源程序:#include reg51.h#define uchar unsigned char#define uint unsigned intsbit pb=p27;sbit lamp=p26;uchar rtr_bit=0;uchar int_flag=0;uchar stat;/*/can總線寄存器映射表/高4地址:0000#define rxf0
35、sidh 0x0#define rxf0sidl 0x01#define rxf0eid8 0x02#define rxf0eid0 0x03#define rxf1sidh 0x04#define rxf1sidl 0x05#define rxf1eid8 0x06#define rxf1eid0 0x07#define rxf2sidh 0x08#define rxf2sidl 0x09#define rxf2eid8 0x0a#define rxf2eid0 0x0b #define bfpctrl 0x0c#define txrtsctrl 0x0d#define canstat 0x
36、0e#define canctrl 0x0f/高4地址:0001#define rxf3sidh 0x10#define rxf3sidl 0x11#define rxf3eid8 0x12#define rxf3eid0 0x13#define rxf4sidh 0x14#define rxf4sidl 0x15#define rxf4eid8 0x16#define rxf4eid0 0x17#define rxf5sidh 0x18#define rxf5sidl 0x19#define rxf5eid8 0x1a#define rxf5eid0 0x1b#define tec 0x1c
37、#define rec 0x1d/高4地址:0010#define rxm0sidh 0x20#define rxm0sidl 0x21#define rxm0eid8 0x22#define rxm0eid0 0x23#define rxm1sidh 0x24#define rxm1sidl 0x25#define rxm1eid8 0x26#define rxm1eid0 0x27#define cnf3 0x28#define cnf2 0x29#define cnf1 0x2a#define caninte 0x2b#define canintf 0x2c#define eflg 0x
38、2d/高4地址:0011#define txb0ctrl 0x30 #define txb0sidh 0x31#define txb0sidl 0x32#define txb0eid8 0x33#define txb0eid0 0x34#define txb0dlc 0x35 #define txb0d0 0x36#define txb0d1 0x37#define txb0d2 0x38#define txb0d3 0x39#define txb0d4 0x3a #define txb0d5 0x3b#define txb0d6 0x3c#define txb0d7 0x3d/高4地址:01
39、00#define txb1ctrl 0x40 #define txb1sidh 0x41#define txb1sidl 0x42#define txb1eid8 0x43#define txb1eid0 0x44#define txb1dlc 0x45 #define txb1d0 0x46#define txb1d1 0x47#define txb1d2 0x48#define txb1d3 0x49#define txb1d4 0x4a #define txb1d5 0x4b#define txb1d6 0x4c#define txb1d7 0x4d/高4地址:0101#define
40、txb2ctrl 0x50 #define txb2sidh 0x51#define txb2sidl 0x52#define txb2eid8 0x53#define txb2eid0 0x54#define txb2dlc 0x55 #define txb2d0 0x56#define txb2d1 0x57#define txb2d2 0x58#define txb2d3 0x59#define txb2d4 0x5a #define txb2d5 0x5b#define txb2d6 0x5c#define txb2d7 0x5d/高4地址:0110#define rxb0ctrl 0
41、x60 #define rxb0sidh 0x61#define rxb0sidl 0x62#define rxb0eid8 0x63#define rxb0eid0 0x64#define rxb0dlc 0x65 #define rxb0d0 0x66#define rxb0d1 0x67#define rxb0d2 0x68#define rxb0d3 0x69#define rxb0d4 0x6a #define rxb0d5 0x6b#define rxb0d6 0x6c#define rxb0d7 0x6d/高4地址:0111#define rxb1ctrl 0x70 #defin
42、e rxb1sidh 0x71#define rxb1sidl 0x72#define rxb1eid8 0x73#define rxb1eid0 0x74#define rxb1dlc 0x75 #define rxb1d0 0x76#define rxb1d1 0x77#define rxb1d2 0x78#define rxb1d3 0x79#define rxb1d4 0x7a #define rxb1d5 0x7b#define rxb1d6 0x7c#define rxb1d7 0x7d/*/spi指令集#define cmd_reset 0xc0 #define cmd_read
43、 0x03#define cmd_rd_rxbuf 0x90#define cmd_write 0x02#define cmd_wr_txbuf 0x40#define cmd_rts 0x80#define cmd_rd_status 0xa0#define cmd_rx_status 0xb0#define cmd_bit_m 0x05/spi控制寄存器spctl#define spi_clk_4 0x0#define spi_clk_16 0x01#define spi_clk_64 0x02#define spi_clk_128 0x03#define spi_cpha 0x04#de
44、fine spi_cpol 0x08#define spi_mstr 0x10#define spi_dord 0x20#define spi_spen 0x40#define spi_ssig 0x80/spi狀態(tài)寄存器spstat#define spi_spif 0x80#define spi_wcol 0x40/sbit ss=p14;uchar spidata16;uchar uart_data;uchar status;void sendbyte(uchar temp) es=0;ti=0;sbuf=temp;while(!ti);ti=0;es=1;uart_int() interrupt 4 if(ri=1) ri=0; uart_data=sbuf; sendbyte(uart_data);else ti=0; void uart_init() tmod=0x20;tl1=0xfd;th1=0xfd;scon=0x50;auxr&=0xbf; et1=0;tr1=1;ea=1; void
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度油氣儲罐智能控制系統(tǒng)采購合同4篇
- 2025年度農(nóng)業(yè)技術(shù)引進(jìn)及代辦推廣合同4篇
- 2025年度某三期護(hù)坡樁工程安全質(zhì)量達(dá)標(biāo)施工合同4篇
- 二零二五年度聯(lián)合體競標(biāo)大連項(xiàng)目協(xié)議書4篇
- 2025年度人工智能教育平臺開發(fā)與運(yùn)營合同4篇
- 2025年度建筑廢棄物資源化利用承包施工合同4篇
- 2025年度出租車公司車輛改裝升級合同范本4篇
- 2025至2030年P(guān)E材料熱縮管項(xiàng)目投資價(jià)值分析報(bào)告
- 二零二五版教育用品集中采購合同模板下載3篇
- 2025年度跨境貿(mào)易貨物進(jìn)出口代理合同范本4篇
- 農(nóng)民工工資表格
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級英語下冊寒假提前學(xué)(含答案)
- 2024年突發(fā)事件新聞發(fā)布與輿論引導(dǎo)合同
- 地方政府信訪人員穩(wěn)控實(shí)施方案
- 小紅書推廣合同范例
- 商業(yè)咨詢報(bào)告范文模板
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 幼兒園籃球課培訓(xùn)
- AQ 6111-2023個(gè)體防護(hù)裝備安全管理規(guī)范知識培訓(xùn)
- 老干工作業(yè)務(wù)培訓(xùn)
- 基底節(jié)腦出血護(hù)理查房
評論
0/150
提交評論