新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于DSP的CAN總線轉(zhuǎn)換器的設(shè)計(jì)

基于DSP的CAN總線轉(zhuǎn)換器的設(shè)計(jì)

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

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

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


總線轉(zhuǎn)換器的功能

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


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

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

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


總線轉(zhuǎn)換器硬件設(shè)計(jì)

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

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

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

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


總線轉(zhuǎn)換器軟件設(shè)計(jì)

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

通信協(xié)議

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

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

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

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

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

通信軟件流程設(shè)計(jì)

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

(1)總線轉(zhuǎn)換器的初始化部分

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

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

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

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

(2)rs485接口對(duì)應(yīng)的輪詢程序和rs485設(shè)備請(qǐng)求發(fā)送子程序

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

(3)rs232接口對(duì)應(yīng)的中斷服務(wù)子程序

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


(4)can接口對(duì)應(yīng)的中斷服務(wù)子程序

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



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉