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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于CAN總線技術在車站信號系統(tǒng)中的應用

          基于CAN總線技術在車站信號系統(tǒng)中的應用

          作者: 時間:2013-09-06 來源:網(wǎng)絡 收藏


            在性能方面,除了SJAl000在軟件和引腳上與它的前—款PCA82C200獨立CAN控制器兼容之外,其還增加了很多新的功能。在具體應用中,SJAl000采用了兩種工作方式:Basic CAN方式(PCA82C200兼容方式)和PeliCAN方式(擴展特性方式),這是SJAl000實現(xiàn)其兼容性的基礎。SJAl000的兩種工作方式是通過時鐘分頻寄存器中的CAN方式位來選擇的,其中上電復位的默認工作方式是Basic CAN方式。在PeliCAN方式下,SJAl000有一個重新設計的含很多新功能的寄存器組。SJAl000包含PCA82C200中的所有位,同時增加了一些新的功能位。PeliCAN方式支持CAN2.0B協(xié)議規(guī)定的所有功能(29位的標識符)[2]。

            3、SAJ1000與Atmega128單片機接口技術的實現(xiàn)

            在SJA1000的主要特性介紹中,提到其支持多種微處理器接口,在具體設計中,我們主要研究了其與Atmega 128單片機的接口,設計了用于CAN通信的最小單片機系統(tǒng)(以下簡稱CAN通信系統(tǒng))接口方式如圖3所示。系統(tǒng)的通信部分主要有Atmega 128單片機、SJA1000CAN控制器、光電隔離部分和收發(fā)芯片組成。

            TJA1050是PHILIPS公司生產(chǎn)的、用以替代82C250的高速CAN總線驅動器,是CAN控制器和物理總線之間的接口,可以提供向總線的差動發(fā)送能力和對CAN控制器的差動接收能力,其與ISO/DIS 11898標準完全兼容[3]。


            光電隔離部分是為了增強CAN總線節(jié)點的抗干擾能力,不過,應該特別說明的一點是,光電耦合部分電路所采用的兩個電源必須完全隔離,否則采用光電耦合也就失去了意義。電源的完全隔離采用小功率電源隔離模塊實現(xiàn)。這部分雖然增加了接口電路的復雜性,但是卻提高了節(jié)點的穩(wěn)定性和安全性。

            4、CAN結點通信軟件的設計

            SJA1000是I/O設備基于內存編址的微控制器,雙設備獨立操作通過像RAM一樣的片內寄存器修正來實現(xiàn)。因此CAN總線通信部分編程主要就是對SJAl000的片內寄存器的讀寫操作。通信部分軟件設計總體上可以劃分為3大模塊:總線初始化、數(shù)據(jù)幀的接收和發(fā)送、總線出錯和異常處理。

            4.1 CAN通信初始化

            其主要是設置CAN的通信參數(shù)。需要初始化的寄存器有:總線定時寄存器0、總線定時寄存器1、輸出控制寄存器、接收代碼寄存器、接收屏蔽寄存器等等。需要注意的是,只有當控制寄存器中的復位要求位置為高時,這些寄存器才可被訪問。因此,在對這些寄存器初始化前,必須確保系統(tǒng)進入了復位狀態(tài)。在訪問總線定時寄存器時,由于其內容決定波特率的數(shù)值,總線定時寄存器的初始化字必須依據(jù)系統(tǒng)中各CAN控制器的晶振頻率而設定。初始化程序的流程圖如圖4所示[4]。


            4.2 數(shù)據(jù)發(fā)送和接收程序

            信息從CAN控制器發(fā)送到CAN總線是由CAN控制器自動完成的。發(fā)送程序只需把發(fā)送的信息幀送到CAN的發(fā)送緩沖區(qū),啟動發(fā)送命令即可。需要注意的是,發(fā)送中斷不是由于發(fā)送完成而產(chǎn)生,而是由于發(fā)送緩沖區(qū)再次可用而產(chǎn)生的。



          評論


          技術專區(qū)

          關閉
          看屁屁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); })();