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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > CAN總線在嵌入式數(shù)控系統(tǒng)中的應用

          CAN總線在嵌入式數(shù)控系統(tǒng)中的應用

          作者: 時間:2016-12-20 來源:網(wǎng)絡 收藏

          CAN控制器結(jié)構(gòu)

            驅(qū)動程序是應用程序與硬件之間的一個中間軟件層。它使某個特定的硬件響應一個定義良好的內(nèi)部編程接口,同時完全隱蔽了設備的工作細節(jié)二用戶通過一組標準化的調(diào)用來完成相關操作,這些標準化的調(diào)用和具體設備驅(qū)動無關,而驅(qū)動程序的任務就是把這些調(diào)用映射到具體設備對于實際硬件的特定操作上團,其流程圖如圖4所示。

          CAN控制器程序流程圖

            總線報文通過中斷進行接收,此中斷在接收緩沖器滿時被觸發(fā)。報文傳送至某一接收緩沖器,與該接收緩沖器對應的中斷標志寄存器的RXNIF位將置1。一旦緩沖器中的報文處理完畢,MCU就必須將該位清除以接收下一條報文。該控制位提供的鎖定功能確保在MUC尚未處理完上一條報文前,MCP2515不會將新的報文載入接收緩沖器。在程序中通過使能CAN 1TTC寄存器中的RXXIE位,來使能接收中斷,提高了系統(tǒng)工作效率。

            驅(qū)動程序的接口主要分為三部分:

            (1)與內(nèi)核通信的接口。

            內(nèi)核通過主設備號將設備驅(qū)動程序和設備文件相連,而構(gòu)成驅(qū)動的一個重要數(shù)據(jù)結(jié)構(gòu)就是Cle_operaLions內(nèi)核就是通過這個結(jié)構(gòu)來訪問驅(qū)動程序的。它包含指向驅(qū)動程序內(nèi)部大多數(shù)函數(shù)指針,它的每一個成員名稱對應著一個系統(tǒng)調(diào)用。程序如下:

          程序

            (2)與系統(tǒng)啟動代碼的接口,完感沙寸設備的初始化。

            在Linux初始化或驅(qū)動動態(tài)加載的時候要調(diào)用初始化函數(shù),它包括以下內(nèi)容:

            ①初始化設備相關的參數(shù):

           ?、谧栽O備;

           ?、壑袛嘧?。

            (3)與設備的接口,完成對設備的讀寫等操作。

            外部數(shù)據(jù)和命令通過5I}}腳傳送到器件中,且數(shù)據(jù)在SCK時鐘信號的上升沿傳送進去。MCP257 5在SCK的下降沿通過510引腳將數(shù)據(jù)傳送出去。

          4 結(jié)語

            本項目實現(xiàn)了上位機將鍵盤、觸摸屏等設備的輸入數(shù)據(jù)利用CAN總線有選擇性的對下位機進行傳輸,系統(tǒng)中各MCU間及MCU與PLC間可相互通訊。實際運行證明了該系統(tǒng)能夠較好完成六軸聯(lián)動通信系統(tǒng)的要求。由于選擇了總線控制,系統(tǒng)得以數(shù)字化,使系統(tǒng)可靠性得到大大提高,同時簡化方案節(jié)約了成本。由于CAN總線具有高傳輸速率及高可靠性,在數(shù)控機床上必將有著廣闊的前景。


          上一頁 1 2 下一頁

          評論


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