<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 基于MCP2515的多路CAN總線(xiàn)接口及驅動(dòng)程序設計

基于MCP2515的多路CAN總線(xiàn)接口及驅動(dòng)程序設計

作者:北京交通大學(xué) 徐曉東 路紅英 張寧 時(shí)間:2008-05-23 來(lái)源:《單片機與嵌入式系統應用》 收藏

  引 言

本文引用地址:http://dyxdggzs.com/article/82980.htm

  在鐵路系統中,為了保證列車(chē)的安全運行,需要對鐵軌及周?chē)鸂顩r進(jìn)行實(shí)時(shí)檢測。目前采用的方法是在鐵路沿線(xiàn)安裝多個(gè)檢測設備,用于檢測洪水、大風(fēng)、泥石流等自然災害及軌溫等參數。這些設備一般采用的通信方式是RS232、RS485或,并通過(guò)專(zhuān)線(xiàn)連接至監控中心的各個(gè)監控設備。這種方式極大浪費了線(xiàn)路資源,也不易于設備的統一管理。因此,需要一種安裝在鐵路沿線(xiàn)的設備,它將附近的檢測設備發(fā)送的信息統一收集并通過(guò)一條專(zhuān)線(xiàn)直接送往監控中心。為了與多個(gè)檢測設備通信,必須同時(shí)具有多個(gè)RS232、RS485和?;谶@種應用需要,本文提出了擴展多個(gè)的方法。

  1 系統結構

  1.1 介紹

  系統采用Atmel公司的AT91RM9200(以下簡(jiǎn)稱(chēng)“9200”)作為MCU。該處理器基于A(yíng)RM920T內核,主頻為180 MHz時(shí),性能可達到200MIPS;最高主頻為209MHz。該處理器還具有豐富的外設資源,非常適合工業(yè)控制領(lǐng)域的應用;采用的操作系統是ARM-Linux,內核版本為2.4.19。

  目前主流的CAN協(xié)議控制器一般采用I/O(SJA1000等)或SPI(等)與MCU進(jìn)行通信。由于本設計采用PC/104擴展卡的方式來(lái)擴展多個(gè)RS232和RS485接口,沒(méi)有多余的I/O片選線(xiàn)可用,因此最終選用9200的SPI接口與進(jìn)行多路CAN總線(xiàn)接口的擴展。

  是Microchip公司推出的具有SPI接口的獨立CAN控制器。它完全支持CAN V2.0B技術(shù)規范,通信速率最高可達1 Mbps,內含3個(gè)發(fā)送緩沖器、2個(gè)接收緩沖器、6個(gè)29位驗收濾波寄存器和2個(gè)29位驗收屏蔽寄存器;它的SPI接口時(shí)鐘頻率最高可達10 MHz,可滿(mǎn)足一個(gè)SPI主機接口擴展多路CAN總線(xiàn)接口的需要。

  1.2 系統硬件接口

  圖1是9200與MCP2515的接口原理框圖,通過(guò)9200的SPI接口,連接了5個(gè)MCP2515。由于9200的SPI從設備片選線(xiàn)數量有限,故采用片選譯碼方式,NPCS0可作為普通的外部中斷線(xiàn)使用(NPCS0與IRQ5復用引腳)。由于9200的外部中斷線(xiàn)資源有限,故采用中斷線(xiàn)共享的方式,即分別有兩個(gè)MCP2515共享同一中斷線(xiàn),最后一個(gè)MCP2515獨占一條中斷線(xiàn),以滿(mǎn)足不同通信速率下數據處理的需要。

       

  圖2是MCP2515的外圍CAN總線(xiàn)接口框圖,圖中省略了MCP2515和9200的接口部分。由于設備需要安裝在鐵路沿線(xiàn),必須具有防雷擊的能力。因此MCP2515與CAN總線(xiàn)收發(fā)器(TJA1050)之間采用高速光耦進(jìn)行完全的電氣隔離,并且光耦兩端電路的電源也必須用電源隔離模塊隔離開(kāi),這樣才能真正起到隔離的作用。在TJA1050的CANH和CANL引腳與地之間連接2個(gè)30 pF的電容,可以過(guò)濾CAN總線(xiàn)上的高頻干擾;2個(gè)二極管可以在總線(xiàn)電壓發(fā)生瞬變干擾時(shí)起保護作用。光耦正常工作時(shí)輸入電流為10 mA左右,內部發(fā)光二極管的正向電壓降為1.7 V左右,因此要特別注意輸入端串聯(lián)電阻的阻值選擇。

        

  2 SPI主機的工作方式

  9200通過(guò)SPI接口與5個(gè)MCP2515進(jìn)行通信,9200的SPI控制器工作在主機模式,MCP2515工作在從機模式。MCP2515支持多個(gè)指令(如復位指令、讀指令、寫(xiě)指令等),以便于9200通過(guò)SPI接口對MCP2515的內部寄存器進(jìn)行讀/寫(xiě)操作。9200 SPI控制器作為主機時(shí)工作模式流程如圖3所示。

       

  需要注意的是,SPI使能后,只有在SPI_TDR(發(fā)送數據寄存器)中有數據時(shí),才會(huì )根據片選配置(固定外設或可變外設)使能相應片選;而SPI_TDR中無(wú)數據時(shí),則片選自動(dòng)禁用。因此,9200向MCP2515連續發(fā)送多個(gè)字節時(shí),要保證在前一個(gè)字節傳輸完畢前,后一個(gè)字節就被寫(xiě)入到SPI_TDR中,以避免片選被自動(dòng)禁用;同時(shí),在傳輸完每一個(gè)字節后,還要讀取SPI_RDR(接收數據寄存器)。

  下面以MCP2515的讀指令為例,說(shuō)明圖4所示的完成一次讀指令操作(只讀一個(gè)字節數據)的過(guò)程,并假設9200 SPI采用固定外設的片選配置方式。其他指令的軟件實(shí)現流程與讀指令類(lèi)似。

        


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

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>