• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      宋富強(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總線上,與主控制器進(jìn)行數(shù)據(jù)交換。其中,數(shù)據(jù)包括采集的環(huán)境溫度和用電壓模擬的車速。

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

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

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

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

      1.1 CAN接口電路

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

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

      1.3 AD采集電路

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

      1.4 溫度傳感器模塊

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

      1.5 LED顯示模塊

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

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

      2.1 MSCAN初始化程序的編寫

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

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

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

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

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

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

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

      MSCAN的發(fā)送流程:

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

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

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

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

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

      接著,要向緩存區(qū)寫入數(shù)據(jù),具體有:CPU標(biāo)識符、數(shù)據(jù)段長度和需要發(fā)送的數(shù)據(jù)。數(shù)據(jù)是以報(bào)文形式裝入的,而且用何種方式寫的報(bào)文,接收也會(huì)用同樣的方式,并且還要檢測發(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,若用戶在先前使能發(fā)送中斷,則在此這個(gè)過程中會(huì)產(chǎn)生一個(gè)發(fā)送中斷。當(dāng)然,在這個(gè)中斷過程中,發(fā)送用戶還可以繼續(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è)問題,MSCAN模塊就給每個(gè)緩存區(qū)分配了一個(gè)8位的優(yōu)先級域,這就決定了在數(shù)據(jù)建立之前,用戶首先要對此域?qū)懭雰?yōu)先級。通過判斷域內(nèi)的優(yōu)先級即可判斷數(shù)據(jù)的優(yōu)先級,優(yōu)先級的值越小,則表示此緩沖區(qū)的優(yōu)先級越高。當(dāng)MSCAN每次參與總線仲裁和發(fā)生發(fā)送錯(cuò)誤時(shí),都會(huì)進(jìn)行內(nèi)部的數(shù)據(jù)排列。若準(zhǔn)備發(fā)送的緩沖區(qū)不止一個(gè),則MSCAN模塊會(huì)使用內(nèi)部的優(yōu)先級來決定先發(fā)送哪個(gè)緩沖區(qū)。

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

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

      2.3 MSCAN 接收程序的編寫

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

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

      MSCAN接收流程:

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

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

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

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

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

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

      參考文獻(xiàn):

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

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

      猜你喜歡
      CAN總線通信
      論網(wǎng)絡(luò)通信技術(shù)
      基于嵌入式的汽車輔助制動(dòng)系統(tǒng)研究
      CAN總線通信技術(shù)在電梯監(jiān)控系統(tǒng)中的應(yīng)用
      基于“一級調(diào)度、兩級運(yùn)維”的通信管理體系研究①
      科技資訊(2016年19期)2016-11-15 10:10:38
      計(jì)算機(jī)技術(shù)在通信中的應(yīng)用
      簡述計(jì)算機(jī)通信網(wǎng)絡(luò)安全與防護(hù)策略
      Android環(huán)境下主UI線程與子線程通信機(jī)制研究
      無線自組網(wǎng)在野戰(zhàn)防空通信系統(tǒng)中的應(yīng)用
      基于CANoe的J1939協(xié)議在ECU通信中的應(yīng)用
      科技視界(2016年18期)2016-11-03 22:53:48
      商用車基于CAN總線的組合儀表開發(fā)與應(yīng)用
      民丰县| 安仁县| 宽城| 明溪县| 蓬莱市| 筠连县| 普定县| 滦平县| 宝丰县| 丹阳市| 桐柏县| 玉林市| 简阳市| 福泉市| 古交市| 右玉县| 保德县| 晋州市| 泗水县| 分宜县| 曲阜市| 星子县| 富锦市| 日喀则市| 永胜县| 临猗县| 若羌县| 荔波县| 鹤岗市| 太保市| 沾益县| 荥阳市| 巨鹿县| 榕江县| 大冶市| 海盐县| 南木林县| 菏泽市| 靖西县| 阿荣旗| 资溪县|