版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于CAN總線的單片機監(jiān)控系統(tǒng) 目錄一項目描述3二項目原理圖3三項目中使用的器件介紹4四 CAN總線監(jiān)控系統(tǒng)軟件設計134.1主控制程序134.2SJA1000初始化164.3發(fā)送程序設計184.4接受程序設計20一項目描述現(xiàn)場總線是自動化領域的計算機網(wǎng)絡,是當今自動化領域技術發(fā)展的熱點之一。它以總線為紐帶,將現(xiàn)場設備連接起來成為一個能夠相互交換信息的控制網(wǎng)絡,是一種雙向串行多節(jié)點數(shù)字通信系統(tǒng)。CAN總線是現(xiàn)場總線的一種,它最初被應用于汽車的控制系統(tǒng)中。由于其卓越的性能,CAN總線的應用范圍已不再局限于汽車工業(yè),被廣泛應用到自動控制、樓宇自動化、醫(yī)學設備等各個領域。本項目設計的CAN總線監(jiān)控系
2、統(tǒng)主要由統(tǒng)通信電路構成。單片機對CAN總線控制芯片SJA1000進行正確初始化后,將要發(fā)送的數(shù)據(jù)通過82C250輸出至CAN總線。接收過程中,通過選擇將要索取信息的節(jié)點及其相關信息的選項,數(shù)據(jù)流按照上述發(fā)送過程通過總線到達被索取節(jié)點,再由該節(jié)點分析數(shù)據(jù)包,從而進行相應的控制。所有數(shù)據(jù)都由SJA1000打包,再按CAN2.0B的PeliCAN模式發(fā)送和接收。二項目原理圖本項目的電路主要由通信控制器SJA1000、微處理器C8051F310、獨立CAN總線發(fā)報器P82C250、高速光電耦合器6N137組成。接口電路如圖3-3所示。圖3-3 CAN總線通信原理圖微處理器AT89C51負責SJA100
3、0的初始化,通過控制SJA1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務,設計中,SJA1000的地址/數(shù)據(jù)總線AD0AD7分別連接到C8051F310的P2口,CS連接到C8051F310的P3.3,SJA1000的RD、WR、ALE分別與C8051F310的P3.2,P3.1,P3.4引腳相連,INT接C8051F310的P1.6引腳,RST接C8051F310的P1.7引腳。在設計硬件電路時,要注意到以下幾點:(1) 為了CAN總線節(jié)點的抗干擾能力,SAJ1000的TX0和RX0并不是直接與82C250的TXD和RXD相連,而是通過高速光電耦合器6N137后PAC82C250相連,這樣就很好地實
4、現(xiàn)了總線上各CAN節(jié)點之間的電氣隔離,不過需特別說明的一點是光耦部分電路所采用的兩個電源VCC和VDD必須完全隔離,否則采用光耦也就失去了意義。(2) PCA82C250與CAN總線的接口部分也要采取了一定的安全和抗干擾措施,PAC82C250的CANH和CANL引腳各自通過1個5歐的電阻與CAN總線相連,電阻可起到一定的限流作用,保護PAC82C250免受過流的沖擊,CANH和CANL與地之間并聯(lián)了2個30pF的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的作用,另外在兩根CAN總線接入端與地之間分別反接了一個保護二極管,當CAN總線有較高的負電壓時,通過二極管的短路可起到一定的過
5、壓保護作用(3) 總線兩端應接有兩個120的電阻,對于匹配總線阻抗起著相當重要的作用,忽略掉它們,會使數(shù)據(jù)通信的抗干擾及可靠性大大降低,甚至無法通信。三項目中使用的器件介紹3.1 CAN接口芯片介紹 利用CAN總線實現(xiàn)總線上各節(jié)點之間的數(shù)據(jù)通信。由于CAN總線采用多主方式工作,實際中最多可連接110個節(jié)點,將3個獨立CAN總線節(jié)點的CANH,CANL分別連接到CAN總線上,這樣就構成利用CAN總線進行通信的網(wǎng)絡。下面介紹CAN總線節(jié)點的設計。 CAN節(jié)點的硬件電路的設計主要是CAN總線通信控制器與微處理器之間的接口電路以及CAN總線收發(fā)器與物理總線之間的接口電路設計。CAN通信控制器是接口電路
6、的核心,它主要完成CAN總線的通信協(xié)議,而CAN總線收發(fā)器的功能則是增大通信距離,保護系統(tǒng)不受干擾。本文設計了CAN總線接口電路,在設計中使用的是Silicon Labs公司的C8051F310作為MCU及PHILIPS的SJA1000總線通信控制器,在與物理總線的連接處則采用了PCA82C250收發(fā)器和高速光電耦合器6N137。3.1.1 C8051F310簡介本電路采用應用廣泛的Silicon Labs公司生產(chǎn)的低功耗、高性能8位單片機C8051F310作微控制器,他的主要特性有:1. 高速、流水線結構的8051兼容的CIP-51內核(可達25MIPS)2. 全速、非侵入式的在線系統(tǒng)調試接
7、口(片內)3. 帶模擬多路器、真正10位200ksps的25通道單端/差分ADC4. 高精度可編程的25MHz內部振蕩器5. 16KB可在線系統(tǒng)編程的FLASH存儲器6. 1280字節(jié)片內RAM7. 硬件實現(xiàn)的SMBus/ I2C、增強型UART和增強型SPI串行接口8. 4個通用的16位定時器9. 29個端口I/O(容許5V輸入)10. 可在工業(yè)溫度范圍 (-45到+85) 內用 2.7V-3.6V的電壓工作 C8051F310主要負責SJA1000的初始化,對SJA1000進行讀/寫操作,控制SJA1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送,在對接收的數(shù)據(jù)進行分析,進行相應的控制。3.1.2 SJA10
8、00簡介目前市場上比較流行的CAN總線器件有兩大類:一是獨立的CAN總線通信控制器,如SJA1000。二是集成了CAN總線通信控制器的微處理器,如P87C591等。本課題選取了PHILIPS公司的SJA1000CAN總線通信控制器和PCA82C250總線收發(fā)器,主要是考慮到SJA1000支持CAN 2.0規(guī)范,而且可支持多達110個節(jié)點,且這兩種器件價格適宜。本設計所采用的Philips公司的獨立CAN控制器SJA1000主要用于移動目標和一般工業(yè)環(huán)境中的區(qū)域網(wǎng)絡控制,其內部結構如圖3-1所示:圖3-1 SJA1000內部結構圖1. 接口管理邏輯(IML)解釋來自CPU的命令,控制CAN寄存器
9、的尋址,向主控制器(CPU)提供中斷信息和狀態(tài)信息。2. 接收緩沖器(RXB、RXFIFO)是接收濾波器和CPU之間的接口,用來存儲從CAN總線上接收并被確認的信息。3. 發(fā)送緩沖器(TXB)是CPU和位流處理器BSP之間的接口,能夠存儲發(fā)送到CAN網(wǎng)絡上的完整信息,緩沖器長13個字節(jié),由CPU寫入BSP讀出。4. 驗收濾波器(AFC)把它的內容和接收到的標識碼相比較,以決定是否接收這條報文,在驗收測試通過后,如果接收則這條完整的報文就被保存在RXFIFO中。5. 位流處理器(BSP)是一個在發(fā)送緩沖器、RXFIFO和CAN總線之間控制數(shù)據(jù)流的隊列(序列)發(fā)生器,它還執(zhí)行總線上的錯誤檢測、仲裁
10、、填充和錯誤處理。6. 位時序邏輯(BTL)監(jiān)視串行的CAN總線和位時序,它是在一條報文開頭,總線傳輸出現(xiàn)隱性到顯性時同步于CAN總線上的位流(硬同步),并且在其接收一條報文的傳輸過程中再同步(軟同步)。7. 錯誤管理邏輯(EML)負責限制傳輸層模塊的錯誤。它接收來自位流處理器(BSP)的出錯報告,然后將有關錯誤統(tǒng)計通知位流處理器(BSP)和接口管理邏輯(IML)。 SJA1000全面支持CAN2.0A和CAN2.0B協(xié)議,SJA1000的主要功能還包括:1. 有擴展的接收緩沖器64字節(jié)(FIFO)。2. 支持11位和29位標識碼。3. 通信的位速率最高可達1Mbps。4. 可與不同的微處理器
11、接口。圖3-2 SJA1000管腳圖SJA1000的芯片引腳如圖3-2所示, 微處理器以訪問外部存儲器的方式來訪問SJA1000。設計中,SJA1000的地址/數(shù)據(jù)總線AD0AD7分別連接到C8051F310的P2口,CS連接到C8051F310的P3.3,微處理器以訪問外部存儲器的方式來訪問SJA1000,可對SJA1000執(zhí)行相應的讀/寫操作,SJA1000的RD、WR、ALE分別與C8051F310的P3.2,P3.1,P3.4引腳相連,INT接C8051F310的P1.6引腳,RST接C8051F310的P1.7引腳。要使SJA1000CAN控制器正常工作,最主要的是要對SAJ1000
12、的工作模式及其各寄存器要進行正確的初始化。要對寄存器作出正確的初始化,首先要了解各寄存器的功能及結構。下面對SJA1000CAN控制器的各寄存器作詳細的說明。SJA1000有兩種工作模式:BasicCAN模式(基本模式)和PeliCAN模式(擴展模式)。在PeliCAN模式下主要對下面一些寄存器操作:模式寄存器、命令寄存器、狀態(tài)寄存器、中斷寄存器、驗收代碼寄存器、驗收屏蔽寄存器、總線定時寄存器0、總線定時寄存器1、輸出控制寄存器、發(fā)送緩沖器、接收緩沖器、時鐘分頻器。1. 模式寄存器(MOD)的內容是用來改變CAN控制器的行為的,這些位可以被微控器設置或復位,微控制器可以對控制寄存器進行讀/寫操
13、作,保留位讀值為邏輯 0。2. 命令寄存器(CMR)是命令位初始化 CAN 控制器傳輸層的一個動作,這個寄存器是只寫的,所有位的讀出值都是邏輯 0,因處理需要,兩條命令之間至少有一個內部時鐘周期,內部時鐘周期的頻率是外部振蕩器的一半。3. 狀態(tài)寄存器(SR)的內容反映了SJA1000的狀態(tài),狀態(tài)寄存器對微控制器來說是只讀存儲器。4. 發(fā)送緩沖器被分為描述符區(qū)和數(shù)據(jù)區(qū),描述符區(qū)的第一個字節(jié)是幀信息字節(jié)(幀信息),它說明了幀格式(標準幀格式SFF或擴展幀格式EFF)、遠程或數(shù)據(jù)幀和數(shù)據(jù)長度。SFF有兩個字節(jié)的識別碼,EFF 有四個字節(jié)的識別碼,數(shù)據(jù)區(qū)最多長8個數(shù)據(jù)字節(jié),發(fā)送緩沖器長13個字節(jié)。在C
14、AN地址的16-28 。 發(fā)送緩沖器的結構圖如表3-1:CAN地址名稱位7654321016TX幀F(xiàn)FRTRXXDLC.3DLC.2DLC.1DLC.017TXID1ID.28ID.27ID.26ID.25ID.24ID.23ID.22ID.2118TXID2ID.20ID.19ID.18XXXXX19DATE1發(fā)送數(shù)據(jù)字節(jié)120DATE2發(fā)送數(shù)據(jù)字節(jié)221DATE3發(fā)送數(shù)據(jù)字節(jié)322DATE4發(fā)送數(shù)據(jù)字節(jié)423DATE5發(fā)送數(shù)據(jù)字節(jié)524DATE6發(fā)送數(shù)據(jù)字節(jié)625DATE7發(fā)送數(shù)據(jù)字節(jié)726DATE8發(fā)送數(shù)據(jù)字節(jié)8表3-1 發(fā)送緩沖器結構數(shù)據(jù)區(qū)的信息字節(jié)長度由數(shù)據(jù)長度代碼編制,在遠程幀發(fā)送
15、開始時由于 RTR位被置位(遠程)數(shù)據(jù)長度代碼是不被考慮的,這使接收/發(fā)送的數(shù)據(jù)字節(jié)數(shù)目為0,如果有兩個CAN控制器使用同一個識別碼同時啟動遠程幀傳送,數(shù)據(jù)長度代碼必須正確說明以避免總線錯誤。數(shù)據(jù)字節(jié)長度范圍是0-8編碼形式如下:數(shù)據(jù)字節(jié)數(shù)=8×DLC.3+4×DLC.2+2×DLC.1+DLC.0 標準幀格式(SFF)的識別碼有11位(ID.28-ID.18),ID.18是最高位,在總線仲裁過程中最先發(fā)送到總線上,別碼就象信息的名字一樣,使用在驗收濾波器中,而且在仲裁過程中決定了總線訪問的優(yōu)先權,識別碼的二進值越低優(yōu)先權越高。5. 接收緩沖器是RXFIFO的可訪
16、問部分,和發(fā)送緩沖器結構一樣。位于CAN 地址的16和28,每條信息都分為描述符和數(shù)據(jù)區(qū),接受緩沖器結構圖如表3-1。RXFIFO共有64個信息字節(jié)的空間,一次可以存儲多少條信息取決于數(shù)據(jù)的長度,如果RXFIFO中沒有足夠的空間來存儲新的信息,CAN控制器會產(chǎn)生數(shù)據(jù)溢出條件,此時信息有效且接受檢測為肯定發(fā)生數(shù)據(jù)溢出情況時,已部分寫入RXFIFO的信息將被刪除,這種情況可以通過狀態(tài)寄存器和數(shù)據(jù)超限中斷(中斷允許)反應到CPU。6. 接收過濾器由接收代碼寄存器(ACR)和接受屏蔽寄存器(AMR)組成,在接受過濾器的幫助下,只接收識別碼和接受過濾器中預設值相等時,CAN控制器能夠允許RXFIFO。本
17、課題采用的是單濾波模式。7. 總線定時寄存器0(BTR0)定義了波特率預設值(BRP)和同步跳轉寬度(SJW)的值,復位模式有效時這個寄存器是可以被訪問(讀/寫)。在工作模式中只能讀。 總線定時寄存器0的位功能說明:CAN地址是6,BRP.0BRP.5為波特率預設值位;CAN的系統(tǒng)時鐘tSCL的周期是可編程的,而且決定了各自的位時序,CAN系統(tǒng)時鐘周期由如下公式計算:tSCL=2×tCLK*(32*BRP.5+16*BRP.4+8*BRP.3+4*BRP.2+2*BRP.1+BRP.0+1)這里 tCLK =XTAL 的頻率周期=1/fXTAL,本課題中設置是tSCL=12×
18、;tCLK。SJW.0、SJW.1為同步跳轉寬度位,為了補償在不同總線控制器的時鐘振蕩器之間的相位偏移,任何總線控制器必須在當前傳送的相關信號邊沿重新同步,同步跳轉寬度定義了每一位周期可以被重新同步縮短或延長的時鐘周期的最大數(shù)目:tSJW=tSCL×(2×SJW.1+SJW.0+1)本課題中設置的是tSJW = 3×tSCL8. 總線定時寄存器1(BTR1)定義了每個位周期的長度、采樣點的位置和在每個采樣點的采樣數(shù)目,在復位模式中,這個寄存器可以被讀/寫訪問, 在工作模式中只能讀。SAM為采樣位;SAM=1,三倍,總線采樣三次;建議在低/中速總線(A級和B級)上使
19、用,這對過濾總線上的毛刺波是有益的;SAM=0,單倍,總線采樣一次,建議在高速總線上(C級)上使用。TSEGl.0TSEG1.3與TSEG2.2TSEG2.0分別為時間段1(TSEG1)和時間段2(TSEG2)的位;TSEG1和TSEG2決定了每一位的時鐘數(shù)目和采樣點的位置。每一位的時鐘數(shù)目:tTSEG1 =tSCL×(8×TSEG1.3 + 4×TSEG1.2 + 2×TSEG1.1 + TSEG1.0 + 1)本課題設置的是tTSEG1 = 5×tSCL。采樣點的位置:tTSEG2 =tscl× (4×TSEG2.2 +
20、 2×TSEG2.1 + TSEG2.0 + 1)本課題中設置的是tTSEG2 =3×tSCL。9. 輸出控制寄存器(OCR)實現(xiàn)了由軟件控制不同輸出驅動配置的建立,在復位模式中此寄存器可被讀/寫訪問,在PeliCAN模式的工作模式中,此寄存器只讀。發(fā)送的輸出階段可以有不同的模式,OCMODE1與OCMODE0是輸出模式控制的設置位,表3-2列出了輸出控制寄存器的設置。OCMODE1OCMODE0說明00雙相輸出模式01測試輸出模式10正常輸出模式11時鐘輸出模式表3-2 輸出控制寄存器的設置本課題設置的是正常輸出模式,在正常輸出模式中位序列(TXD)通過TX0和TX1送出
21、,輸出驅動引腳TX0和TX1的電平取決于被OCTPX,OCTNX(懸空,上拉,下拉,推挽)編程的驅動器的特性和被OCPOLX編程的輸出端極性。10. 時鐘分頻寄存器(CDR)控制著CLKOUT的頻率以及屏蔽CLKOUT引腳;而且它還控制著TX1上的專用接收中斷脈沖,接收比較通道和BasicCAN模式的選擇,硬件復位后寄存器的默認狀態(tài)是Motorola模式(00000101,12分頻)和Intel模式(00000000,2分頻)。軟件復位(復位請求/復位模式)時,此寄存器不受影響。課題中CAN 控制器工作于PeliCAN模式,只有接收引腳TX0被激活,禁能SJA1000的外部CLKOUT引腳。3
22、.1.3 PAC82C250簡介PAC82C250是CAN協(xié)議控制器和物理總線間的接口,它主要是為汽車中高速通訊(高達1Mbps)應用而設計。該器件對總線提供差動發(fā)送能力,對CAN控制器提供差動接收能力,完全符合“ISO11898”標準。PAC82C250的主要特性有:1. 完全符合“ISO11898”標準。2. 高速率(最高達1Mbps)。3. 具有抗汽車環(huán)境中的瞬間干擾,保護總線能力。4. 斜率控制,降低射頻干擾(RFI)。5. 差分接收器,抗寬范圍的共模干擾,抗電磁干擾(EMI)。6. 熱保護。7. 防止電池和地之間的發(fā)生短路。8. 低電流待機模式。9. 未上電的節(jié)點對總線無影響。10.
23、 可連接110個節(jié)點。11. 具有限流保護。PCA82C250的主要功能有:首先P82C250驅動電路內部具有限流電路,可以防止輸出級對電源、地或負載短路,雖然在這種故障條件出現(xiàn)時功耗增加,但不致使輸出級破壞。其次,P82C250采用雙線差動驅動,有助于抑制惡劣環(huán)境下的瞬變干擾。引腳Rs可用于選擇三種不同的工作方式:高速、斜率控制和待機。在高速工作方式下,發(fā)送器輸出晶體管以盡可能快的速度啟閉。在這種方式下,不采用任何措施限制上升和下降斜率,此時,建議使用屏蔽電纜以避免射頻干擾問題。通過將引腳RS接地可選擇高速方式。對于較低速度或較短總線長度,可用非屏蔽雙絞線或平行線作總線。為降低射頻干擾。應限
24、制上升和下降斜率,上升和下降斜率可通過由引腳8至地連接的電阻進行控制。斜率正比于引腳8上的電流輸出。若腳8接高電平,則電路進入低電平待機方式,在這種方式下,發(fā)送器被關閉,而接收器轉至低電流。若檢測到顯畦位,RXD將轉至低電平,微控制器應通過引腳8將發(fā)送器變?yōu)檎7绞阶鳛閷Υ藯l件作出的反應。由于在待機方式下,接收器是慢速的,因此第一個報文將被丟失。對于CAN控制器及帶有CAN總線接口的器件,P82C250并不是必須使用的器件,因為多數(shù)CAN控制器均具有配置靈活的收發(fā)器件,并允許總線故障,只是驅動能力只允許2030個節(jié)點連接在一條總線上。而P82C250支持多達110個節(jié)點,并能以1Mbps的速率
25、工作于惡劣電氣環(huán)境下。利用82C250還可方便地在CAN控制器與收發(fā)器之間建立光電隔離,以實現(xiàn)總線上各個節(jié)點之間的電氣隔離。四 CAN總線監(jiān)控系統(tǒng)軟件設計在CAN總線構成的系統(tǒng)中,用戶要根據(jù)自己的要求來編寫應用層和用戶層軟件。用戶層實現(xiàn)用戶要求的控制策略和系統(tǒng),應用層則定義了結構、響應及報文的意義,應用層要根據(jù)CAN系統(tǒng)應用場合的不同而有所變化。CAN通信協(xié)議的實現(xiàn),包括各種幀的組織和發(fā)送,都集成在了CAN總線的通信控制器SJA1000的內部電路中實現(xiàn)的。因此,系統(tǒng)開發(fā)主要是集中在應用層軟件的設計上。而應用層軟件的設計的核心部分,則是微控制器(C8051F310)與CAN總線通信控制器SJA1
26、000之間的數(shù)據(jù)發(fā)送和接收程序,也就是說,當微處理器把要發(fā)送的數(shù)據(jù)傳送到SJA1000通信控制器后,由SJA1000將數(shù)據(jù)發(fā)送到CAN總線上,而當SJA1000從總線上接收到數(shù)據(jù)之后,則要求微控制器從SJA1000中取走數(shù)據(jù)。CAN總線通信程序主要包括三個部分,即CAN初始化、數(shù)據(jù)的發(fā)送和數(shù)據(jù)的接收。初始化程序主要是對SJA1000的初始化設置,包括工作方式的設置、輸出模式、接收濾波方式的設置、接收屏蔽寄存器和驗收代碼寄存器的設置、波特率的設置和中斷允許寄存器的設置。但應說明的是,SJA1000的初始化工作要在復位模式下才能進行。下面就這三個部分的實現(xiàn)分別加以闡述。4.1 主控制程序本課題設計
27、主要利用CAN總線實現(xiàn)多個設備之間相互控制或者一個中心控制器控制多個設備。該程序是通過判斷按鍵的次數(shù)去控制其他設備的;并通過分析接收數(shù)據(jù)的信息來實現(xiàn)被其他設備的控制。在設計程序時要注意按鍵的防抖動技術。本課題以三個設備為例,每一個設備可以控制其他兩個設備,其程序流程圖如圖4-1。開始控制器系統(tǒng)時鐘初始化控制器端口初始化關閉控制器看門狗和中斷初始化SJA1000有按鍵按下判斷按鍵的次數(shù)并發(fā)送對應的控制信息有接收數(shù)據(jù)分析接收數(shù)據(jù)并執(zhí)行相應的控制YYNN圖4-1 主控制程序流程圖具體程序如下:/* - 功能描述:主控制程序 - 隸屬模塊:公開函數(shù)模塊 - 函數(shù)屬性:外部,用戶可調用 - 參數(shù)說明:無
28、 - 返回說明:無 */void main(void)uchar receive_frame=0; /接收幀uchar lin1=0; /啟動蜂鳴器或者的變量SYSCLK_Init(); /系統(tǒng)時鐘初始化PORT_Init (); /端口初始化PCA0MD &= 0x40; /關閉看門狗定時器BUFFER=1;LED=1;EA=0; /關閉所有中斷CS_sja=0; /片選sja1000SJA1000_Init(); /sja1000初始化while(1)if(BUTTON=0) /如果按鍵按下delay(500); /軟件消抖if(BUTTON=0) count=count+1; i
29、f(count=1)/向總線發(fā)送一幀數(shù)據(jù)啟動一個節(jié)點的蜂鳴器 SJA1000_Send_frame(send_frame10);/*向總線發(fā)送一幀數(shù)據(jù)*/ delay(1000); if(count=2) /向總線發(fā)送一幀數(shù)據(jù)關閉前一個節(jié)點的蜂鳴器,然后發(fā)送一幀數(shù)據(jù)啟動另外一個節(jié)點的蜂鳴器 SJA1000_Send_frame(send_frame11); /向總線發(fā)送一幀數(shù)據(jù) delay(1000); SJA1000_Send_frame(send_frame20); /向總線發(fā)送一幀數(shù)據(jù) delay(1000); if(count=3) /向總線發(fā)送一幀數(shù)據(jù)關閉后啟動的節(jié)點的蜂鳴器 SJA
30、1000_Send_frame(send_frame21); /向總線發(fā)送一幀數(shù)據(jù) count=0; delay(1000); while(BUTTON=0); /等待按鍵釋放 receive_frame=SJA1000_Receive_frame();/檢測接收數(shù)據(jù);如果有總線有數(shù)據(jù)發(fā)過來,則數(shù)據(jù)存入接收幀if(receive_symbol=1) /檢測到數(shù)據(jù)被接收receive_symbol=0; /數(shù)據(jù)接收標志變量清零if(receive_frame=0x04) /如果接收數(shù)據(jù)等于預設值,即數(shù)據(jù)接受正確lin1=lin1; /啟動蜂鳴器receive_frame=0; /接收幀變量清零i
31、f(receive_frame=0x05) /如果接收數(shù)據(jù)等于預設值,即數(shù)據(jù)接受正確lin1=0; /關閉蜂鳴器BUFFER=1;receive_frame=0; /接收幀變量清零if(lin1) /控制蜂鳴器BUFFER=1;delay(100);BUFFER=0;delay(100);4.2 SJA1000初始化SJA1000初始化只有在復位模式下才可以進行,SJA1000有兩種工作模式:BasicCAN和PeliCAN,本文設計的CAN網(wǎng)絡節(jié)點采用PeliCAN模式,要將時鐘分頻寄存器的最高位值1。本文設計的初始化程序主要任務就是對SAJ1000在PeliCAN模式下的總線定時寄存器、輸
32、出控制寄存器、時鐘分頻寄存器、接收緩沖器起始地址寄存器、驗收代碼寄存器和接收屏蔽寄存器、中斷使能寄存器等關鍵的寄存器進行配置,這些寄存器是通信成功的關鍵,如果配置不當?shù)脑?,CAN總線不可能工作正常。通過對以上寄存器的配置,系統(tǒng)經(jīng)過初始化后,SAJ1000被設置為PeliCAN模式;工作波特率為200Kbit/s;錯誤中斷使能、接收中斷使能;采用正常輸出模式。其程序流程如圖4-2所示。開始硬件復位進入復位模式復位模式置位設置波特率和采樣點設置輸出模式設置工作模式設置接收緩沖器地址設置驗收代碼寄存器和驗收屏蔽寄存器接收中斷使能進入正常工作模式YN返回圖4-2 SJA1000初始化程序流程圖具體程序
33、如下:/* - 功能描述:SJA1000初始化 - 隸屬模塊:公開函數(shù)模塊 - 函數(shù)屬性:外部,用戶可調用 - 參數(shù)說明:無 - 返回說明:無 */void SJA1000_Init(void)uchar readback_data_sja;/軟件復位delay(100);RST_sja=0;delay(100);RST_sja=1;delay(100);write_byte(sja1000_MOD,0x01);/進入復位模式;doreadback_data_sja=read_byte(sja1000_MOD);while(readback_data_sja&0x01=0x00);/*
34、循環(huán)等待SJA1000進入復位模式*/*CAN的系統(tǒng)時鐘t_SCL=12*t_CLK;t_SJW=3*t_SCL*/write_byte(sja1000_BTR0,0x85);write_byte(sja1000_BTR1,0xa4);/*每位的時鐘輸入為5個Tscl;采樣點在第三個Tscl*/write_byte(sja1000_OCR,0x1a); /正常輸出模式write_byte(sja1000_CDR,0xc8); /*設置輸出模式,SJA1000工作于PeliCAN模式;中止CAN輸入比較器,關閉CLKOUT*/write_byte(sja1000_RBSA,0x00); /*來存
35、儲位于接收緩沖器窗口中的信息的內部RAM起始地址設為:0+32=32;*/-設置驗收碼寄存器和驗收屏蔽寄存器write_byte(sja1000_ACR0,0x03);/驗收代碼寄存器0write_byte(sja1000_ACR1,0x00);/驗收代碼寄存器1write_byte(sja1000_ACR2,0xFF);/驗收代碼寄存器2write_byte(sja1000_ACR3,0xFF);/驗收代碼寄存器3write_byte(sja1000_AMR0,0x00);/驗收屏蔽寄存器0write_byte(sja1000_AMR1,0x0F);/驗收屏蔽寄存器1write_byte(s
36、ja1000_AMR2,0xFF);/驗收屏蔽寄存器0write_byte(sja1000_AMR3,0xFF);/驗收屏蔽寄存器1write_byte(sja1000_IER,0xFD);/使能接收中斷write_byte(sja1000_MOD,0x0C); /*進入正常工作模式;單個驗收濾波器;自檢測模式*/4.3 發(fā)送程序設計發(fā)送緩沖寄存器用于存放由CPU傳到SAJ1000等待發(fā)送到CAN總線上的信息,它分為描述區(qū)和數(shù)據(jù)區(qū)。只有SAJ1000在工作模式時,CPU才可以讀/寫發(fā)送緩沖寄存器。描述符域包括表示符11位,遠程發(fā)送請求位RTR和數(shù)據(jù)長度碼DLC。其中,表示符位ID.10是最高位
37、,發(fā)送時最高位先發(fā)送。發(fā)送數(shù)據(jù)時用戶只需將要發(fā)送的數(shù)據(jù)按照CAN控制器SJA1000所規(guī)定的格式組合成一幀報文,送入控制器的發(fā)送緩沖區(qū)中,然后啟動SJA1000發(fā)送就可以實現(xiàn),但是在將報文發(fā)送到緩沖區(qū)之前,要確定發(fā)送緩沖器為釋放狀態(tài)。圖4-2是發(fā)送子程序的程序流程。開始發(fā)送緩沖器是釋放狀態(tài)釋放接受緩沖器將數(shù)據(jù)發(fā)送到SJA1000的發(fā)送緩沖器啟動SJA1000發(fā)送數(shù)據(jù)返回數(shù)據(jù)發(fā)送完畢?YNYN圖4-3 發(fā)送程序流程圖具體程序如下:/* - 功能描述:CAN總線發(fā)送程序 - 隸屬模塊:公開函數(shù)模塊 - 函數(shù)屬性:外部,用戶可調用 - 參數(shù)說明:發(fā)送信息,*temp - 返回說明:無 */void SJA1000_Send_frame(uchar *te
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蜜蜂身體形態(tài)特征與采蜜
- 小型礦井水及生活污水處理方案
- 高一化學教案:第一單元化學是認識和創(chuàng)造物質的科學
- 2024高中物理第一章電磁感應章末質量評估含解析粵教版選修3-2
- 2024高中語文第1單元論語蚜第4課己所不欲勿施于人練習含解析新人教版選修先秦諸子蚜
- 2024高中語文第五課言之有“理”第3節(jié)有話“好好說”-修改蹭練習含解析新人教版選修語言文字應用
- 2024高中語文綜合評估含解析新人教版必修5
- 2024高考歷史一輪復習方案專題十八20世紀的戰(zhàn)爭與和平第39講第一次世界大戰(zhàn)及凡爾賽-華盛頓體系下的世界教學案+練習人民版
- 小學民主監(jiān)督制度
- 二零二五年綠化垃圾處理與運輸合作協(xié)議3篇
- 跆拳道專業(yè)隊訓練計劃書
- DL-T1848-2018220kV和110kV變壓器中性點過電壓保護技術規(guī)范
- 國有企業(yè)內部審計實施方案
- 部編版語文一年級下冊全冊大單元整體作業(yè)設計
- 減速機的培訓課件
- 六西格瑪-DMAIC-報告
- 老年人護理風險管理
- 蒸壓加氣混凝土制品課件
- 《根號2有多大》課件
- 《樹立正確的人生觀》課件
- 全新特種設備安全操作培訓課件完整版下載
評論
0/150
提交評論