<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 汽車(chē)電子 > 設(shè)計(jì)應(yīng)用 > 基于CAN總線的車(chē)輛虛擬儀表數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)

          基于CAN總線的車(chē)輛虛擬儀表數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2011-09-25 來(lái)源:網(wǎng)絡(luò) 收藏
          3.1 控制器編程

          本文引用地址:http://www.ex-cimer.com/article/197306.htm

            本系統(tǒng)軟件設(shè)計(jì)的一個(gè)難點(diǎn)在于關(guān)于的編程。本系統(tǒng)處理的程序模塊有:CAN初始化子程序、CAN中斷程序和CAN數(shù)據(jù)收發(fā)子程序。

            CAN 是Controller Area Network 的縮寫(xiě),是國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議。在當(dāng)前的汽車(chē)產(chǎn)業(yè)中,出于對(duì)安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統(tǒng)被開(kāi)發(fā)了出來(lái)。由于這些系統(tǒng)之間通信所用的數(shù)據(jù)類(lèi)型及對(duì)可靠性的要求不盡相同,由多條構(gòu)成的情況很多,線束的數(shù)量也隨之增加。為適應(yīng)減少線束的數(shù)量、通過(guò)多個(gè)LAN,進(jìn)行大量數(shù)據(jù)的高速通信的需要,1986 年德國(guó)電氣商博世公司開(kāi)發(fā)出面向汽車(chē)的CAN 通信協(xié)議。此后,CAN 通過(guò)ISO11898 及ISO11519 進(jìn)行了標(biāo)準(zhǔn)化,現(xiàn)在在歐洲已是汽車(chē)網(wǎng)絡(luò)的標(biāo)準(zhǔn)協(xié)議。

            CAN的基本特點(diǎn):

            *CAN協(xié)議廢除了傳統(tǒng)的站地址編碼,采用數(shù)據(jù)通信數(shù)據(jù)塊進(jìn)行編程,可以多主方式工作。

            *CAN采用非破壞性仲裁技術(shù),當(dāng)兩個(gè)節(jié)點(diǎn)同時(shí)向網(wǎng)絡(luò)上傳送數(shù)據(jù)時(shí),優(yōu)先級(jí)低的節(jié)點(diǎn)主動(dòng)停止數(shù)據(jù)發(fā)送,而優(yōu)先級(jí)高的節(jié)點(diǎn)可不受影響地繼續(xù)傳輸數(shù)據(jù),有效避免了沖突。

            *CAN采用短幀結(jié)構(gòu),每一幀的 有效字節(jié)為8個(gè)(CAN技術(shù)規(guī)范2.0A),數(shù)據(jù)傳輸時(shí)間短,受干擾的概率低,重新發(fā)送的時(shí)間短。

            *CAN的每幀數(shù)據(jù)都有CRC效驗(yàn)及其他檢錯(cuò)措施,保證了數(shù)據(jù)傳輸?shù)母呖煽啃裕m于在高干擾環(huán)境中使用。

            *適用于現(xiàn)場(chǎng)設(shè)備與儀表之間或者與其上位設(shè)備間的通信網(wǎng)絡(luò),可以統(tǒng)一組態(tài),相互操作,控制功能分散到最底層。

            *CAN節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下,具有自動(dòng)關(guān)閉總線的功能,切斷它與總線的聯(lián)系,以使總線上其它操作不受影響。

            *CAN可以點(diǎn)對(duì)點(diǎn)、一點(diǎn)對(duì)多點(diǎn)(成組)及全局廣播集中方式傳送和接受數(shù)據(jù)

            *CAN總線直接通訊距離最遠(yuǎn)可達(dá)10km/5Kbps,通訊速率最高可達(dá)1Mbps/40m.

            *采用不歸零碼(NRZ-Non-Return-to-Zero)編碼/解碼方式,并采用位填充(插入)技術(shù)。

            CAN控制器是以CPU存儲(chǔ)器映像外圍設(shè)備出現(xiàn)的。P80C592的CPU與CAN控制器之間的數(shù)據(jù)傳輸通過(guò)4個(gè)特殊功能寄存器來(lái)實(shí)現(xiàn),即: CANADR、CANCON、CANSTA和CANDAT,通過(guò)這四個(gè)特殊功能寄存器,CPU可以訪問(wèn)CAN控制器內(nèi)部的任一寄存器(地址為0~29)和 DMA邏輯。表1給出了這四個(gè)SFR的功能簡(jiǎn)述,其中CANCON和CANSTA的讀寫(xiě)操作含義不同。

          表1 SFR功能簡(jiǎn)述

            CAN控制器初始化(圖4)是CAN通信中一個(gè)非常重要的子程序,程序是否合理將直接影響整個(gè)通信過(guò)程。CAN控制器的初始化首先必須通過(guò)置位CAN控制寄存器的復(fù)位請(qǐng)求位,置位復(fù)位請(qǐng)求并不影響正在進(jìn)行的一個(gè)收發(fā)作業(yè),特別需要注意的是,只有當(dāng)復(fù)位請(qǐng)求被置位時(shí),CAN內(nèi)部地址為4-8的寄存器方可被訪問(wèn),在復(fù)位操作結(jié)束后必須將該位置0以保持所進(jìn)行的設(shè)置并使CAN返回工作狀態(tài)。

            圖4 CAN通信中一個(gè)重要的子程序

            P80C592和其在片CAN控制器都具有中斷寄存器,必須注意兩者的區(qū)別。CAN中斷子程序(圖5)首先讀CAN中斷寄存器(IR)以判斷中斷類(lèi)型,據(jù)此轉(zhuǎn)入相應(yīng)的操作。如果接收緩存器滿而另一個(gè)報(bào)文的首字節(jié)又需要被存儲(chǔ)時(shí),數(shù)據(jù)超限位被置位,此時(shí)應(yīng)清除超限并釋放接收緩存,然后重新發(fā)送數(shù)據(jù)請(qǐng)求。在數(shù)據(jù)接受子程序中當(dāng)數(shù)據(jù)被轉(zhuǎn)入RAM區(qū)后,應(yīng)及時(shí)釋放接受緩存器,以便為接收下一幀數(shù)據(jù)做好準(zhǔn)備。

            圖5 CAN中斷子程序

            數(shù)據(jù)發(fā)送子程序見(jiàn)圖6.CAN控制器向總線發(fā)送數(shù)據(jù)時(shí),首先將在片主RAM中數(shù)據(jù)存放的首地址寫(xiě)入CANSTA,然后讀取CANSTA.6的值(讀 CANSTA的操作其實(shí)是對(duì)CAN控制器內(nèi)部狀態(tài)寄存器的讀操作,CANSTA.6是錯(cuò)誤顯示位,當(dāng)至少有一個(gè)總線錯(cuò)誤計(jì)數(shù)器計(jì)數(shù)達(dá)到CPU告警極限時(shí),該位將被CAN控制器置位。),若檢測(cè)出錯(cuò),則執(zhí)行CAN初始化子程序,若正常,則繼續(xù)檢測(cè)接收狀態(tài)和發(fā)送緩沖器狀態(tài),若發(fā)送條件滿足則在CANADR中寫(xiě)入發(fā)送緩存器地址并置位DMA控制位,DMA傳送隨即被啟動(dòng),數(shù)據(jù)場(chǎng)由RAM拷貝到發(fā)送緩存器,置發(fā)送請(qǐng)求位后數(shù)據(jù)開(kāi)始發(fā)送。

            4 結(jié)語(yǔ)

            用高性能的P80C592和AD1674A模塊組成車(chē)輛環(huán)境系統(tǒng)具有較高的性?xún)r(jià)比,目前該系統(tǒng)已投入試用階段,運(yùn)行狀況良好。CAN總線非常適合分布式控制或適時(shí)控制的串行通信網(wǎng)絡(luò),本課題只涉及了,如果在此基礎(chǔ)上擴(kuò)展車(chē)輛輔助控制和重要數(shù)據(jù)備份功能,系統(tǒng)將會(huì)有更廣闊的應(yīng)用前景。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();