<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è) > 嵌入式系統 > 設計應用 > 基于DSP的CAN總線(xiàn)轉換器的設計

基于DSP的CAN總線(xiàn)轉換器的設計

——
作者:揚州大學(xué)信息工程學(xué)院電氣及自動(dòng)化工程系 時(shí)間:2007-01-26 來(lái)源:《世界電子元器件》 收藏

rs232是pc機與通信應用中應用最廣泛的一種串行接口;rs485半雙工異步通信總線(xiàn)是在分布系統設計中廣泛使用的數據通信總線(xiàn);而can總線(xiàn)是一種可用于遠程通信控制的、雙向、多主方式的串行現場(chǎng)總線(xiàn),特別適合于工業(yè)設備測控單元的互聯(lián)。針對上述幾種比較通用的串行總線(xiàn),實(shí)現總線(xiàn)之間協(xié)議轉換的適配器很多,如rs232與rs485之間、rs232與can之間、rs485與can之間的協(xié)議轉換器等。本文設計了一種可用于can總線(xiàn)、rs232、rs485等三種總線(xiàn)之間的轉換器,為多種異型總線(xiàn)之間的互聯(lián)提供了一種有效的解決方案。

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


總線(xiàn)轉換器的功能

如圖1所示的總線(xiàn)轉換器的功能框圖,總線(xiàn)轉換器包括了三種通信網(wǎng)絡(luò )接口,分別為rs232、rs485和can總線(xiàn)接口,能夠完成以下幾種功能:


(1)rs232與rs485之間的通信轉換:帶有rs232接口的pc操作站、智能網(wǎng)絡(luò )節點(diǎn)可以通過(guò)該總線(xiàn)轉換器的rs485接口接入由其構成的rs485網(wǎng)絡(luò ),實(shí)現rs232站點(diǎn)與rs485網(wǎng)絡(luò )之間的數據通信。

(2)rs232與can之間的通信轉換:帶有rs232接口的pc操作站、智能網(wǎng)絡(luò )節點(diǎn)可以通過(guò)該總線(xiàn)轉換器的can接口接入到由其構成的can網(wǎng)絡(luò ),實(shí)現rs232站點(diǎn)與can總線(xiàn)網(wǎng)絡(luò )之間的數據通信。

(3)rs485與can之間的通信轉換:通過(guò)該總線(xiàn)轉換器,rs485網(wǎng)絡(luò )可以實(shí)現與can網(wǎng)絡(luò )之間的連接,完成網(wǎng)絡(luò )之間數據通信。


總線(xiàn)轉換器硬件設計

總 線(xiàn)轉換器的硬件原理圖如圖2所示。它主要由tms320lf2407a(cpu)及can總線(xiàn)接口、rs485接口、rs232接口和電源等幾個(gè)部分組成。

tms320lf2407a的can模塊是一個(gè)16位的外設模塊,它完全支持can2.0b協(xié)議??赏饨觩hilips公司的pca82c250t作為can控制器和物理總線(xiàn)間的接口,其中電阻r1,r2,r3及二極管d1(in5819)用來(lái)實(shí)現5v與3.3v之間的電平轉換電路。

tms320lf2407a的串行通信接口(sci)模塊是一個(gè)標準的通用異步接收/發(fā)送(uart)可編程串行通信接口。通過(guò)sci接口,我們采用了max3485實(shí)現ttl與rs485電平之間的轉換。max3485工作于半雙工方式下,將tms320lf2407a的iopf6引腳同時(shí)控制max3485的de和/re引腳,可實(shí)現發(fā)送和接收兩種控制狀態(tài)的轉換。

由 于tms320lf2407a只帶有一個(gè)sci接口,所以需擴展一個(gè)uart接口來(lái)實(shí)現rs232接口功能。由于總線(xiàn)轉換器的通信實(shí)時(shí)性要求較高,我們采用了擴展異步通信芯片的方法來(lái)實(shí)現擴展uart接口。異 步通信芯片tl16c550c可實(shí)現如下功能:在接收到外部器件或modem的數據時(shí),完成串行到并行的轉換;在接收到cpu的數據時(shí),完成并行到串行的變換,并進(jìn)行串行發(fā)送。所以在tl16c550c的輸出口外接一個(gè)rs232電平轉換芯片max3232,即可實(shí)現rs232接口的擴展。當其xin、xout端外接1.8342mhz晶振時(shí) ,將波特率因子寄存器設置為03h,dsp即可實(shí)現以38400bps的波特率與 rs232設備通信。同時(shí)將tl16c550c的/rxrdy和/txrdy接入dsp的兩個(gè)外 部中斷,使rs232通信工作于中斷方式,這樣可有效保證通信的實(shí)時(shí)性。


總線(xiàn)轉換器軟件設計

總線(xiàn)轉換器主要實(shí)現rs232、rs485和can總線(xiàn)之間的數據轉換與傳送。rs232和rs485只定義了物理層協(xié)議;而can的協(xié)議規范定義了其物理層和數據鏈路層。因此本設計中的重點(diǎn)是要定義和實(shí)現rs232、rs485和can總線(xiàn)之間的協(xié)議轉換。

通信協(xié)議

(1)can通信協(xié)議:由于can總線(xiàn)數據傳輸時(shí)每幀最多8個(gè)字節,所以當can通信時(shí)傳輸數據大于8時(shí),必須將數據打包傳送。其命令幀和應答幀傳輸格式定義分別如圖3(a)和(b)所示。

(2)rs232與rs485通信協(xié)議

rs232與rs485的命令幀和應答幀的數據格式分別如圖4(a)和(b)所示。

(3)有關(guān)地址、命令和應答狀態(tài)的說(shuō)明

在上述協(xié)議格式中,源地址和目的地址定義相同,采用2個(gè)字節來(lái)實(shí)現地址劃分,其定義如下:字節1用來(lái)區分can網(wǎng)絡(luò )中設備號,而字節2代表總線(xiàn)轉換器下的rs485網(wǎng)絡(luò )中的設備地址(其中0ffh除外,若字節2為0ffh,則代表該總線(xiàn)轉換器下的rs232設備)。
在協(xié)議格式中,命令包含兩種:01h代表發(fā)送數據至其他設備,02h代表請求其他設備發(fā)送數據。應答狀態(tài)包含兩種:15h代表命令執行成功,19h代表命令執行失敗。

通信軟件流程設計

軟件設計采用模塊化設計,按照系統功能可劃分為:初始化部分、rs485接口對應的輪詢(xún)程序和485設備請求發(fā)送子程序、rs232接口對應的中斷服務(wù)程序、can接口對應的中斷服務(wù)程序、rs232、rs485和can接口分別對應的數據打包和處理程序以及故障處理程序等。下面就幾個(gè)關(guān)鍵部分加以敘述。

(1)總線(xiàn)轉換器的初始化部分

總線(xiàn)轉換器的初始化主要包括rs232、rs485和can接口及發(fā)送、接收緩沖區的相關(guān)參數設置。

對 于rs232接口,dsp需將兩個(gè)外部中斷xint1、xint2的優(yōu)先級設置為高優(yōu)先級模式;并設置tl16c550c的波特率因子寄存器。

對于rs485接口,將sci模塊設置為多處理器通訊模式;設置串行接口通信寄存器sciccr為地址位通訊數據格式,設置串行通信接口控制寄存器為禁止sci口發(fā)送和接收中斷,以及設置串行通信接口波特率選擇寄存器等。

對于can接口,主要包括配置位定時(shí)器從而設置通訊波特率和郵箱的初始化,其中將郵箱4設置為發(fā)送郵箱,郵箱1設置為接收郵箱。can郵箱中斷設置為低優(yōu)先級模式。這樣總線(xiàn)轉換器在輪詢(xún)485從設備時(shí),優(yōu)先響應來(lái)自rs232接口的控制命令,其次是響應來(lái)自can接口的控制命令。

(2)rs485接口對應的輪詢(xún)程序和rs485設備請求發(fā)送子程序

如圖5所示,我們將總線(xiàn)轉換器設計為rs485網(wǎng)絡(luò )上的主設備,而掛在該接口上的其他rs485設備均為從設備。這樣485網(wǎng)絡(luò )上的通訊任務(wù)均由總線(xiàn)轉換器發(fā)起,通過(guò)總線(xiàn)轉換器不斷輪詢(xún)485網(wǎng)絡(luò )上的從設備,從而獲得從設備的狀態(tài)或信息。若從設備工作正常且不主動(dòng)請求發(fā)送信息,則該從設備返回一個(gè)運行正常信息給總線(xiàn)轉換器。這時(shí)總線(xiàn)轉換器可以修改輪詢(xún)設備號,實(shí)現下一個(gè)從設備的輪詢(xún)。若從設備需要主動(dòng)請求發(fā)送信息,則總線(xiàn)轉換器調用485設備請求發(fā)送子程序。對于rs485設備請求發(fā)送子程序設計的關(guān)鍵是要進(jìn)行目的地址的判斷。若目的地址不是位于本總線(xiàn)轉換器內部 ,則需將數據打包處理后通過(guò)can接口發(fā)送出去;若目的地址位于本總線(xiàn)轉換器內,則將數據打包處理后通過(guò)485接口或232接口發(fā)送出去。限于篇幅,不再詳述。

(3)rs232接口對應的中斷服務(wù)子程序

rs232接口通??梢酝饨觩c操作站、智能網(wǎng)絡(luò )節點(diǎn)等,因此將來(lái)自rs232接口的控制命令產(chǎn)生的中斷設置為高優(yōu)先級。rs232接口對應的中斷服務(wù)子程序如圖6所示,當有來(lái)自pc操作站、智能網(wǎng)絡(luò )節點(diǎn)的rs232接口的控制命令時(shí),總線(xiàn)轉換器將停止輪詢(xún)r(jià)s485從設備,并產(chǎn)生接收中斷,響應該命令??偩€(xiàn)轉換器首先判斷目的地址,若目的地址不在本總線(xiàn)轉換器內部,則總線(xiàn)轉換器將命令地址打包處理后發(fā)送至can接口;然后根據命令字將數據信息發(fā)送至can接口或等待來(lái)自can接口的數據。若目的地址位于本總線(xiàn)轉換器內,則總線(xiàn)轉換器將命令地址發(fā)送至rs485接口;然后根據命令字將數據信息發(fā)送至rs485接口或等待來(lái)自rs485接口的數據。最后總線(xiàn)轉換器將應答或數據信息送至rs232接口。


(4)can接口對應的中斷服務(wù)子程序

can接口對應的中斷服務(wù)子程序與rs232接口對應的中斷服務(wù)子程序基本類(lèi)似,限于篇幅,不再詳述。



關(guān)鍵詞:

評論


相關(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>