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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于CAN總線PC適配卡設(shè)計(jì)

          基于CAN總線PC適配卡設(shè)計(jì)

          作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
          引 言

          分布式產(chǎn)業(yè)測(cè)控系統(tǒng)需要有現(xiàn)場(chǎng)總線來(lái)連接各現(xiàn)場(chǎng)設(shè)備及處理控制單元。CAN總線就是一種具有較高性能價(jià)格比、能滿足分布式控制要求的現(xiàn)場(chǎng)總線,具有廣泛的應(yīng)用遠(yuǎn)景。它實(shí)際上是一種簡(jiǎn)化型網(wǎng)絡(luò)結(jié)構(gòu),在構(gòu)造單片處理器網(wǎng)絡(luò)中極為有用。為了使上位機(jī)也能和CAN總線相連,使微機(jī)成為系統(tǒng)的上位機(jī),增強(qiáng)控制系統(tǒng)的功能,從而進(jìn)一步延伸CAN總線連通范圍,就需要提供一個(gè)微機(jī)和CAN總線的接口。本文先容作者設(shè)計(jì)制作的一種CAN總線PCI適配器。

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

          接口的硬件設(shè)計(jì)

          PCI接口的實(shí)現(xiàn)

          目前市面上有些CAN總線的適配器,但大多都是基于PC/104或者ISA總線,傳輸速度較慢,效率低下。作者在設(shè)計(jì)中使用高效的PCI總線,實(shí)現(xiàn)了數(shù)據(jù)的高速傳輸。與ISA總線相比較,PCI總線具有如下特點(diǎn):①傳輸速度高。PCI總線寬度為32位(可擴(kuò)展為64位)。時(shí)鐘頻率為0~33MHz。并且支持突發(fā)傳送,傳輸速度可以達(dá)到132Mb/s。相比較,ISA總線寬度為8/16位,時(shí)鐘頻率為132Mb/s相比較,ISA總線為8位/16位,時(shí)鐘頻率為8MHz,不支持突發(fā)傳送,傳輸速率僅為8Mb/s;②即插即用。PCI實(shí)現(xiàn)了真正的即插即用。系統(tǒng)可以實(shí)現(xiàn)對(duì)PCI設(shè)備的自動(dòng)配置;③生命周期長(zhǎng)。PCI總線與處理器無(wú)關(guān)(通過(guò)橋或直接集成),可支持多種系列處理器,包括將來(lái)會(huì)出現(xiàn)的新一代處理器。

          由于PCI總線規(guī)范十分復(fù)雜,其接口設(shè)計(jì)難度較大,但目前有很多廠商提供了專用的PCI接口芯片。這些接口芯片大多對(duì)PCI總線規(guī)范2.1、2.2版完全兼容,從而大大減輕了PCI板卡設(shè)計(jì)的工作量。PCI設(shè)備可以分為主模式和從模式。主模式可以執(zhí)行DMA操縱,而從模式只可以執(zhí)行讀寫(xiě)操縱。根據(jù)PCI提供的傳輸數(shù)據(jù)帶寬(最大132Mb/s)和CAN總線(最大1Mbps)的要求,加上經(jīng)濟(jì)和開(kāi)發(fā)難度與周期上的考慮(主模式橋芯片較昂貴,開(kāi)發(fā)難度較大),又因不需要DMA功能,采用從模式橋芯片足以滿足傳輸數(shù)據(jù)的需要。此外,選擇芯片不僅考慮性能和經(jīng)濟(jì)上的要求,而且還需要考慮硬件開(kāi)發(fā)和驅(qū)動(dòng)程序開(kāi)發(fā)的難易。如不提供足夠的芯片說(shuō)明和應(yīng)用樣例及開(kāi)發(fā)工具,將大大增加開(kāi)發(fā)難度和延長(zhǎng)開(kāi)發(fā)周期。這里我們采用PLX公司的PCI總線目標(biāo)接口芯片PCI9052作為CAN總線適配器的PCI總線接口芯片,負(fù)責(zé)與計(jì)算機(jī)之間的數(shù)據(jù)通訊。9052是PLX公司開(kāi)發(fā)的低價(jià)格PCI總線從模式接口芯片,低功耗,符合PCI2.1規(guī)范,提供的局部總線可通過(guò)編程設(shè)置為8/16/32位的(非)復(fù)用總線。

          CAN總線接口的實(shí)現(xiàn)

          CAN總線之所以在國(guó)內(nèi)乃至全球范圍內(nèi)一直保持高速發(fā)展,完全取決于其卓越的性能。CAN總線主要應(yīng)用在汽車領(lǐng)域,隨著集成工藝的發(fā)展和本錢(qián)的降低,被越來(lái)越多的控制領(lǐng)域內(nèi)的軟硬件工程師所接受,廣泛的應(yīng)用于各行各業(yè)的控制領(lǐng)域網(wǎng)中。其主要性能指標(biāo)如下:①多站仲裁結(jié)構(gòu)(分地址優(yōu)先級(jí),非破壞方式仲裁);②支持主從廣播方式;③不加任何擴(kuò)展最多110個(gè)節(jié)點(diǎn);④最高通訊速率1Mbps,最遠(yuǎn)通訊間隔5km;⑤通常CAN控制器內(nèi)部設(shè)有接收和發(fā)送緩沖;⑥通訊以幀為單位,最多8個(gè)字節(jié)的數(shù)據(jù);⑦硬件自動(dòng)進(jìn)行16位CRC校驗(yàn);⑧具有極強(qiáng)的總線和通訊錯(cuò)誤的治理能力。


          由于PCI9052可以啟動(dòng)局部總線的讀寫(xiě),CAN卡不再需要微控制器,采用CAN通訊控制器即可,本卡采用SJA1000。SJA1000支持基本AN(BisicCAN)和增強(qiáng)CAN(PeliCAN)兩種工作模式,支持具有新功能的CAN2.0B協(xié)議規(guī)范。具有FIFO、支持熱插拔等功能,不但可以實(shí)現(xiàn)CAN總線接口功能,而且芯片可以根據(jù)晶振的頻率,輸出可編程的信號(hào)CLKOUT,該信號(hào)正好可作為PCI9052局部總線的總線頻率,節(jié)省了器件,方便了設(shè)計(jì)。CAN總線的總線頻率可為12MHz、6MHz或24MHz,PCI9052自動(dòng)實(shí)現(xiàn)局部總線與PCI總線的訪問(wèn)同步。CAN總線收發(fā)器采用82C250。該芯片是CAN總線控制器和物理總線的接口,可以提供對(duì)CAN總線的差動(dòng)發(fā)送和接收能力,具有抗瞬間干擾、保護(hù)總線的能力,可以通過(guò)調(diào)整CAN總線上通訊脈沖的邊沿斜率來(lái)降低射頻干擾。其速度可以達(dá)到1Mbps,最多節(jié)點(diǎn)數(shù)可以達(dá)到110個(gè)。


          地址譯碼和邏輯控制是由EPM7064S完成的。EPM7064S是ALTERA出品的MAX7000系列的一種。它主要實(shí)現(xiàn)兩路獨(dú)立的CAN總線通道的地址譯碼、實(shí)現(xiàn)控制信號(hào)的驅(qū)動(dòng)和電平轉(zhuǎn)換。通過(guò)EPM7064S可以進(jìn)步系統(tǒng)的可靠性,縮小板卡的尺寸,方便以后板卡功能的擴(kuò)展。為了在每個(gè)CAN總線通道出現(xiàn)故障時(shí)能夠重新初始化,在接口卡中使用了兩片復(fù)位芯片MAX811。由EPM7064S產(chǎn)生控制信號(hào),當(dāng)CAN總線通道出現(xiàn)異常時(shí),控制MAX811復(fù)位SJA1000控制器。其總線接口原理圖1。


          PCI為每一個(gè)PCI設(shè)備提供了一個(gè)配置空間來(lái)實(shí)現(xiàn)設(shè)備的即插即用(PnP)。在PC機(jī)上電自檢時(shí),配置軟件掃描PCI總線,檢測(cè)所有的PCI設(shè)備,讀取配置信息,并為每一個(gè)PCI設(shè)備分配系統(tǒng)資源,實(shí)現(xiàn)PCI設(shè)備的即插即用。每一個(gè)PCI功能設(shè)備都有一個(gè)64個(gè)雙字的配置空間,以特定的格式存儲(chǔ)設(shè)備支持的功能。PCI協(xié)議定義了開(kāi)頭的16個(gè)雙字的格式和用途,稱為設(shè)備的配置頭區(qū)域。其它48個(gè)雙字是設(shè)備特定的。CAN卡的硬件資源為映射SJA1000內(nèi)部寄存器的內(nèi)存映射空間和一個(gè)中斷源。

          PCI9052提供了5個(gè)局部地址空間,可以選用其中的一個(gè)作為SJA1000的地址空間,分配32個(gè)8位地址空間。同時(shí)設(shè)置相應(yīng)的初始化,PCI配置寄存器中的寄存器PCIBAR2設(shè)置為0XFFFFFFE0,向系統(tǒng)請(qǐng)求分配內(nèi)存的數(shù)目為32,類型為不可預(yù)讀,其它寄存器的值可設(shè)置為0。設(shè)置局部地址空間的范圍為0X00000000~0X00000020。對(duì)中斷的配置是把PCI中斷請(qǐng)求線分配到系統(tǒng)的某一ISA中斷請(qǐng)求(IRQ)線上。在本控制卡中利用一塊串行EEPROM(93C46B)存放控制卡的PCI配置信息。上電后訪問(wèn)93C46B,實(shí)現(xiàn)本控制卡的自動(dòng)配置。


          圖1 總線接口原理圖

          接口的軟件設(shè)計(jì)

          軟件的設(shè)計(jì)包括PCI驅(qū)動(dòng)程序的設(shè)計(jì)和COM組件的設(shè)計(jì)。由于PCI設(shè)備的中斷、I/O端口、映射內(nèi)存等資源都是動(dòng)態(tài)分配的,必須編寫(xiě)驅(qū)動(dòng)程序治理硬件,才能供用戶編程使用。CAN卡驅(qū)動(dòng)程序的開(kāi)發(fā)工具采用WINDRIVER。由于CAN卡上沒(méi)有微控制器,因此對(duì)總線端口的所有操縱都是由驅(qū)動(dòng)程序來(lái)完成的。這不僅可以由計(jì)算機(jī)來(lái)實(shí)現(xiàn)復(fù)雜的功能,例如,錯(cuò)誤檢測(cè)、斷點(diǎn)續(xù)傳等,同時(shí)節(jié)省了硬件,而且有利于卡的升級(jí)——只要更換驅(qū)動(dòng)程序即可。驅(qū)動(dòng)程序的功能主要是配置SJA1000的接口、收發(fā)CAN總線上的數(shù)據(jù)、對(duì)總線進(jìn)行實(shí)時(shí)監(jiān)測(cè)、接收用戶程序的收發(fā)命令。收發(fā)數(shù)據(jù)和CAN總線錯(cuò)誤均采用中斷處理,驅(qū)動(dòng)程序可以快速響應(yīng),通過(guò)事件(Event)內(nèi)核對(duì)象直接通知給用戶程序。CAN總線通訊適配器的初始化是CAN總線設(shè)計(jì)的重要環(huán)節(jié),也是設(shè)計(jì)的難點(diǎn)。在其初始化過(guò)程中需要設(shè)置的參數(shù)有時(shí)鐘、總線配置、標(biāo)志標(biāo)識(shí)符屏蔽段、擴(kuò)展標(biāo)識(shí)符屏蔽段、信息塊、定時(shí)器0、定時(shí)器1、信息塊的控制段、信息塊的工作方式等。CAN總線適配器簡(jiǎn)化流程圖如圖2所示。

          圖2 CAN總線適配器簡(jiǎn)化流程圖

          結(jié)論

          本文設(shè)計(jì)的CAN總線適配器結(jié)構(gòu)簡(jiǎn)單,可用于分布的現(xiàn)場(chǎng)總線控制系統(tǒng)。在WIN2000下經(jīng)過(guò)長(zhǎng)時(shí)間的運(yùn)行測(cè)試,運(yùn)行穩(wěn)定可靠。它可以適應(yīng)不同的傳輸速率和間隔,有效保證了產(chǎn)業(yè)過(guò)程監(jiān)控的實(shí)時(shí)性,同時(shí)也減輕了上位機(jī)的工作負(fù)擔(dān),滿足不同的用戶要求。在不同偏壓和分布參數(shù)條件下為芯片ESD保護(hù)的SNTSCR的I-V特性在CMOS工藝中已經(jīng)具體講述過(guò)。SNTSCR可以在小區(qū)域內(nèi)保持高的ESD電平對(duì)于現(xiàn)代高集成科學(xué)很有吸引力。不采用厚柵氧化層,一般小于0.25μmCMOS工藝中,SNTSCR在有效保護(hù)混合電壓接口電路免于ESD破壞時(shí)充分兼容。



          關(guān)鍵詞: CAN總線PC適配

          評(píng)論


          技術(shù)專區(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); })();