国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用MC9S12(X)單片機(jī)構(gòu)建CAN總線(xiàn)網(wǎng)絡(luò)的研究

2016-08-19 21:00宋富強(qiáng)熊武馮宇飛彭思苑
電腦知識(shí)與技術(shù) 2016年20期
關(guān)鍵詞:CAN總線(xiàn)通信

宋富強(qiáng)++熊武++馮宇飛++彭思苑++黃海波

摘要:飛思卡爾MC9S12(X)單片機(jī)的控制器局域網(wǎng)(MSCAN)是一種通信控制器,介紹基于使用該單片機(jī)的MSCAN模塊構(gòu)建小型網(wǎng)絡(luò)的研究,實(shí)現(xiàn)三塊單片機(jī)的實(shí)時(shí)交互通信。三塊單片機(jī)包括一塊主控制器和兩塊輔控制器,系統(tǒng)將兩塊輔控制器掛在主控制器的CAN總線(xiàn)上,與主控制器進(jìn)行數(shù)據(jù)交換。其中,數(shù)據(jù)包括采集的環(huán)境溫度和用電壓模擬的車(chē)速。

關(guān)鍵詞:MC9S12(X);CAN總線(xiàn);通信

中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)20-0210-03

CAN全稱(chēng)為Controller Area Network,即控制器局域網(wǎng),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線(xiàn)之一。最初,CAN是由德國(guó)的Bosch公司提出,被設(shè)計(jì)為汽車(chē)環(huán)境中的微控制器通信,在車(chē)載各電子控制裝置ECU之間交換信息,形成汽車(chē)電子控制網(wǎng)絡(luò)。本文按照CAN總線(xiàn)協(xié)議設(shè)計(jì)了一個(gè)小型的CAN總線(xiàn)網(wǎng)絡(luò),正文從硬件設(shè)計(jì)和軟件流程來(lái)進(jìn)行闡述。

1 硬件電路設(shè)計(jì)

1.1 CAN接口電路

本文采用TJA1050作為CAN總線(xiàn)的接口芯片,它是一種標(biāo)準(zhǔn)的高速CAN收發(fā)器,可以為總線(xiàn)提供差動(dòng)發(fā)送性能和為CAN控制器提供差動(dòng)接收性能。

TJA1050的3引腳和2引腳分別為電源的正極和負(fù)極,連接5V電源和地。1引腳和4引腳為CAN模塊的發(fā)送和接收引腳,分別用于從CAN總線(xiàn)控制器中輸入發(fā)送到總線(xiàn)上的數(shù)據(jù)和將從總線(xiàn)接收的數(shù)據(jù)發(fā)送給CAN總線(xiàn)控制器,連接單片機(jī)的PM1和PM0引腳。7引腳和6引腳連接到CAN總線(xiàn)的CANH和CANL線(xiàn)上,信號(hào)使用差分電壓傳送,因此兩條信號(hào)線(xiàn)被稱(chēng)為CAN_L和CAN_H。8引腳是工作模式選定引腳,該CAN接口芯片一共有高速、斜率控制和待機(jī)3種工作模式,把該引腳直接接地可選擇高速工作模式。在總線(xiàn)接口部分還要接一個(gè)120歐姆的匹配電阻。J_CAN是與CAN總線(xiàn)連接的接口。CAN總線(xiàn)接口電路見(jiàn)圖1:

1.2 電源模塊

電源模塊采用LM2940穩(wěn)壓芯片,將電壓從12V穩(wěn)到5V。原理圖中C11、C12、C13、C14、C15、C16分別為濾波電容,F(xiàn)11為濾波電感,D12是電源指示燈,防止指示燈被燒,串聯(lián)一個(gè)1K的電阻。其中PAD02接MC9S12(X)單片機(jī)的71引腳PAD02,采用固定電壓的AD轉(zhuǎn)換輸入。電源模塊電路圖見(jiàn)圖2:

1.3 AD采集電路

本文所設(shè)計(jì)的CAN小型網(wǎng)絡(luò)只用到兩路AD采集。因此電路圖中PAD00和PAD01分別接MC9S12(X)單片機(jī)的67腳和69腳,R44和R47采用1K的電阻,而R43和R46采用10K的電位器來(lái)進(jìn)行分壓調(diào)節(jié)。AD采集電路見(jiàn)圖3:

1.4 溫度傳感器模塊

設(shè)計(jì)中,我們用的溫度傳感器是DS18B20。用DS18B20有以下幾個(gè)優(yōu)點(diǎn):①獨(dú)特的單線(xiàn)接口方式,只需一個(gè)接口引腳即可通信;②可用數(shù)據(jù)線(xiàn)供電,電壓范圍:+3.0V—+5.5V;③測(cè)溫范圍:-55℃—+125℃,在-10℃—+85℃圍內(nèi)精度為范圍內(nèi)精度為+0.5℃,分辨率為0.0625℃;④通過(guò)編程可實(shí)現(xiàn)9-12位的數(shù)字讀數(shù)方式。⑤多個(gè)DS18B20可以并聯(lián)在惟一的三線(xiàn)上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。溫度傳感器模塊原理圖見(jiàn)圖4:

1.5 LED顯示模塊

本設(shè)計(jì)的顯示模塊采用LCD12864液晶顯示屏,顯示的內(nèi)容有兩個(gè)輔控制器采集到的溫度和經(jīng)過(guò)兩個(gè)輔控制器AD轉(zhuǎn)換以及計(jì)算模擬出來(lái)的車(chē)速。經(jīng)過(guò)液晶屏的顯示,可以方便的知道CAN總線(xiàn)上的數(shù)據(jù)傳輸是否正確。LED顯示模塊原理圖見(jiàn)5:

2 軟件設(shè)計(jì)

2.1 MSCAN初始化程序的編寫(xiě)

初始化按照下列過(guò)程實(shí)現(xiàn):

1)首先檢測(cè)MSCAN是否處于工作模式;

2)進(jìn)入初始化模式中,正在進(jìn)行的任何發(fā)送或接收都會(huì)立即中止,與CAN總線(xiàn)失去同步。在進(jìn)入初始化模式時(shí),必須要保證MSCAN不在工作狀態(tài),否則中止正在發(fā)送的報(bào)文可能導(dǎo)致錯(cuò)誤發(fā)生。在初始化模式中,雖然MSCAN被停止,但是其接口寄存器仍然可以訪(fǎng)問(wèn);

1)設(shè)置相應(yīng)寄存器,依次設(shè)置CAN總線(xiàn)波特率、接收濾波方式、標(biāo)識(shí)符接收寄存器和標(biāo)識(shí)符掩碼寄存器;

2)使能CAN模塊,設(shè)置運(yùn)行模式(初始化、睡眠和工作三種模式)。MACAN初始化流程圖見(jiàn)圖6。

2.2 MSCAN發(fā)送程序的編寫(xiě)

MACAN用報(bào)文來(lái)發(fā)送數(shù)據(jù),首先選擇空閑的發(fā)送緩沖區(qū),然后向該空閑緩沖區(qū)寫(xiě)入數(shù)據(jù),最后設(shè)置改緩沖區(qū)的發(fā)送標(biāo)志位來(lái)將報(bào)文發(fā)送至CAN總線(xiàn)上。因此,用戶(hù)在發(fā)送報(bào)文緩存區(qū)寫(xiě)入數(shù)據(jù)前,只需要通過(guò)相應(yīng)的寄存器(CANTBSEL)設(shè)置一個(gè)指針來(lái)訪(fǎng)問(wèn)任何一個(gè)緩沖區(qū)。此算法不僅簡(jiǎn)化了發(fā)送緩沖器選擇功能,而且這種機(jī)制還使程序軟件處理更為簡(jiǎn)單。

MSCAN的發(fā)送流程:

首先,在發(fā)送前要檢測(cè)判是否存在可用緩沖區(qū)的寄存器(CANTDLG&7)是否為0。若該寄存器(CANTDLG&7=0),則說(shuō)明三個(gè)緩沖區(qū)已滿(mǎn),并且報(bào)文未被發(fā)出。此時(shí)若繼續(xù)選擇向緩沖區(qū)裝填數(shù)據(jù),將導(dǎo)致先前發(fā)送的報(bào)文丟失。在沒(méi)出現(xiàn)問(wèn)題的情況下,寄存器CANTDLG&7的值都為1,即存在可用的緩存區(qū)。檢測(cè)到CANTDLG&7=0,原因可能為:

①M(fèi)SCAN還沒(méi)來(lái)得及將報(bào)文發(fā)出;

②總線(xiàn)上的節(jié)點(diǎn)出現(xiàn)問(wèn)題,沒(méi)有及時(shí)應(yīng)答,導(dǎo)致報(bào)文發(fā)送不成功。

⑴若沒(méi)有可用的緩存區(qū),檢查硬件系統(tǒng)和程序是否出現(xiàn)問(wèn)題,直到報(bào)文能順利發(fā)出;

⑵若有可用的緩沖區(qū),則使用對(duì)應(yīng)的選擇緩沖區(qū)語(yǔ)句“CANTBSEL=CANTFLG”,選擇相應(yīng)的發(fā)送緩沖區(qū)。若有多個(gè)緩沖區(qū)空閑時(shí),選擇的緩沖區(qū)的序號(hào)是最小的,即用“CANTBSEL=CANTFLG”和“CANTBSEL=1”語(yǔ)句,MSCAN會(huì)自動(dòng)選擇了第一個(gè)發(fā)送緩沖區(qū)。

接著,要向緩存區(qū)寫(xiě)入數(shù)據(jù),具體有:CPU標(biāo)識(shí)符、數(shù)據(jù)段長(zhǎng)度和需要發(fā)送的數(shù)據(jù)。數(shù)據(jù)是以報(bào)文形式裝入的,而且用何種方式寫(xiě)的報(bào)文,接收也會(huì)用同樣的方式,并且還要檢測(cè)發(fā)送或者接收數(shù)據(jù)是否有誤。

最后,將已選擇的緩沖區(qū)標(biāo)記為發(fā)送,即置位發(fā)送標(biāo)志“CANTFLG=CANTBSEL”,與此同時(shí),TXE標(biāo)志也會(huì)被清零。

此后MSCAN會(huì)自動(dòng)把數(shù)據(jù)裝入傳送隊(duì)列,傳送成功后將TXE置1,若用戶(hù)在先前使能發(fā)送中斷,則在此這個(gè)過(guò)程中會(huì)產(chǎn)生一個(gè)發(fā)送中斷。當(dāng)然,在這個(gè)中斷過(guò)程中,發(fā)送用戶(hù)還可以繼續(xù)加載數(shù)據(jù)到發(fā)送緩沖區(qū)并重新發(fā)送。

當(dāng)然,在發(fā)送數(shù)據(jù)時(shí)也會(huì)出現(xiàn)同時(shí)有多個(gè)緩存區(qū)準(zhǔn)備發(fā)送,這時(shí)候如果同時(shí)發(fā)送必然導(dǎo)致錯(cuò)誤。為了解決這個(gè)問(wèn)題,MSCAN模塊就給每個(gè)緩存區(qū)分配了一個(gè)8位的優(yōu)先級(jí)域,這就決定了在數(shù)據(jù)建立之前,用戶(hù)首先要對(duì)此域?qū)懭雰?yōu)先級(jí)。通過(guò)判斷域內(nèi)的優(yōu)先級(jí)即可判斷數(shù)據(jù)的優(yōu)先級(jí),優(yōu)先級(jí)的值越小,則表示此緩沖區(qū)的優(yōu)先級(jí)越高。當(dāng)MSCAN每次參與總線(xiàn)仲裁和發(fā)生發(fā)送錯(cuò)誤時(shí),都會(huì)進(jìn)行內(nèi)部的數(shù)據(jù)排列。若準(zhǔn)備發(fā)送的緩沖區(qū)不止一個(gè),則MSCAN模塊會(huì)使用內(nèi)部的優(yōu)先級(jí)來(lái)決定先發(fā)送哪個(gè)緩沖區(qū)。

當(dāng)用戶(hù)有重要的數(shù)據(jù)需要發(fā)送時(shí),就必須給該數(shù)據(jù)較高的優(yōu)先級(jí)。如果MSCAN的三個(gè)緩存區(qū)都在發(fā)送數(shù)據(jù)。此時(shí),就需要三個(gè)緩存區(qū)中優(yōu)先級(jí)比較低的數(shù)據(jù)停止發(fā)送來(lái)讓優(yōu)先級(jí)比較高的數(shù)據(jù)先發(fā)送。如果優(yōu)先級(jí)低的數(shù)據(jù)發(fā)送過(guò)程不能終止,用戶(hù)就需要對(duì)相應(yīng)的寄存器中的相應(yīng)位進(jìn)行設(shè)置(本單片機(jī)為CANTARQ寄存器中的ABTRQ位)來(lái)強(qiáng)行終止發(fā)送。

發(fā)送流程圖見(jiàn)圖7:

2.3 MSCAN 接收程序的編寫(xiě)

同MSCAN有3個(gè)發(fā)送緩沖區(qū)的發(fā)送機(jī)制類(lèi)似,MSCAN有5個(gè)接收緩沖區(qū),而且這5個(gè)接收緩沖區(qū)被交替映射到單個(gè)存儲(chǔ)器區(qū)域CANRXFG中。同發(fā)送緩存區(qū)一樣,這種機(jī)制也簡(jiǎn)化了應(yīng)用軟件的編寫(xiě),提高了接收數(shù)據(jù)的效率。

接收已滿(mǎn)標(biāo)志CANRFLG寄存器的RXF位指示了前臺(tái)接收緩沖區(qū)的狀態(tài),當(dāng)緩沖區(qū)中有正確的報(bào)文被接收時(shí)就設(shè)置接收已滿(mǎn)標(biāo)志,即將RXF置1。報(bào)文的接收有兩種方式:中斷接收和查詢(xún)接收。接收時(shí),首先要檢查每條報(bào)文的標(biāo)識(shí)符是否通過(guò)濾波器。如果標(biāo)識(shí)符通過(guò)了濾波器,就將有效的報(bào)文寫(xiě)入后臺(tái)接收緩存器中,MSCAN將后臺(tái)接收緩沖器中的報(bào)文內(nèi)容轉(zhuǎn)移到前臺(tái)接收緩沖器中,并設(shè)置接收已滿(mǎn)標(biāo)志(CANRFLG寄存器的RXF位)。而接收?qǐng)?bào)文時(shí)必須從前臺(tái)接收緩沖器讀取報(bào)文,接收完后,將接收器已滿(mǎn)標(biāo)志(CANRFLG寄存器的RXF位)清零來(lái)釋放前臺(tái)接收緩沖器。而背景臺(tái)接收緩沖器接收到無(wú)效的報(bào)文時(shí),該報(bào)文會(huì)被下一條覆蓋。用戶(hù)的中斷服務(wù)程序可以把數(shù)據(jù)從前臺(tái)緩沖區(qū)讀出,并置位RXF標(biāo)志以響應(yīng)中斷并釋放前臺(tái)緩沖區(qū)。

MSCAN接收流程:

①首先,要檢測(cè)接收器已滿(mǎn)標(biāo)志(CANRFLG寄存器的RXF位),當(dāng)接收器已滿(mǎn)標(biāo)志(CANRFLG寄存器的RXF位)置1時(shí),表示接收緩沖器接收到了正確的報(bào)文;

②然后,檢測(cè) CAN協(xié)議報(bào)文的模式,讀標(biāo)識(shí)符,讀取數(shù)據(jù)長(zhǎng)度,讀取數(shù)據(jù);

③最后,清接收器已滿(mǎn)標(biāo)志(CANRFLG寄存器的RXF位),以便接收下一個(gè)報(bào)文。

注意:對(duì)報(bào)文的檢測(cè)和讀取一定要在清接收器已滿(mǎn)標(biāo)志(CANRFLG寄存器的RXF位)之前進(jìn)行,否則該報(bào)文會(huì)被下一個(gè)報(bào)文覆蓋,從而丟失信息。讀取報(bào)文流程圖見(jiàn)圖8:

3 系統(tǒng)測(cè)試與總結(jié)

經(jīng)過(guò)一段時(shí)間的研究與設(shè)計(jì),終于將“利用飛思卡爾MC9S12(X)單片機(jī)構(gòu)建CAN總線(xiàn)小型網(wǎng)絡(luò)”這個(gè)課題做完并經(jīng)過(guò)了測(cè)試。測(cè)試過(guò)程中,利用了CAN總線(xiàn)構(gòu)建了3個(gè)節(jié)點(diǎn)的小型網(wǎng)絡(luò),實(shí)現(xiàn)了對(duì)溫度和用電壓模擬的速度這些數(shù)據(jù)進(jìn)行了測(cè)量、傳輸和顯示。測(cè)量工具有:示波器、萬(wàn)用表、溫度計(jì)、秒表等。經(jīng)過(guò)測(cè)試,利用飛思卡爾MC9S12(X)單片機(jī)CAN總線(xiàn)構(gòu)建的小型網(wǎng)絡(luò)工作狀態(tài)良好,通信無(wú)誤且具有實(shí)時(shí)性,達(dá)到了預(yù)期的目標(biāo)。

參考文獻(xiàn):

[1]馮沖,段曉敏.飛思卡爾MC9S12(X)開(kāi)發(fā)必修課[M].北京航空航天大學(xué)出版社,2014.

[2]羅峰,孫澤昌.汽車(chē)CAN總線(xiàn)系統(tǒng)原理、設(shè)計(jì)與應(yīng)用[M].電子工業(yè)出版社,2010.

猜你喜歡
CAN總線(xiàn)通信
基于嵌入式的汽車(chē)輔助制動(dòng)系統(tǒng)研究
基于“一級(jí)調(diào)度、兩級(jí)運(yùn)維”的通信管理體系研究①
對(duì)數(shù)字微波通信技術(shù)的研究