国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ARM實(shí)現(xiàn)高速CAN轉(zhuǎn)USB

2017-04-25 06:38:48周建斌萬(wàn)文杰
實(shí)驗(yàn)室研究與探索 2017年3期
關(guān)鍵詞:固件適配器字節(jié)

周建斌, 萬(wàn)文杰, 趙 祥, 劉 易, 周 偉, 王 敏

(成都理工大學(xué) 核技術(shù)與自動(dòng)化工程學(xué)院,成都 610059)

基于ARM實(shí)現(xiàn)高速CAN轉(zhuǎn)USB

周建斌, 萬(wàn)文杰, 趙 祥, 劉 易, 周 偉, 王 敏

(成都理工大學(xué) 核技術(shù)與自動(dòng)化工程學(xué)院,成都 610059)

設(shè)計(jì)了一款體積小、成本低、可靠性高的具有普適性的高速CAN轉(zhuǎn)USB適配器。以STM32F107系列微處理器作為核心,USB接口部分采用STM32內(nèi)部USB控制器,CAN接口采用STM32內(nèi)部的CAN控制器并且外接帶隔離的CAN收發(fā)器CTM1050。開發(fā)過(guò)程中創(chuàng)建了數(shù)據(jù)傳輸協(xié)議,對(duì)需傳輸?shù)臄?shù)據(jù)有固定的傳輸格式,進(jìn)行數(shù)據(jù)甄別后再傳輸數(shù)據(jù),保證了數(shù)據(jù)傳輸?shù)恼_性和可靠性。設(shè)計(jì)中,ID并不是固定值,而是獲取對(duì)方發(fā)送過(guò)來(lái)的ID。對(duì)CAN接收的數(shù)據(jù)進(jìn)行打包成標(biāo)準(zhǔn)格式幀,以便傳入上位機(jī)后了解傳輸數(shù)據(jù)特性。經(jīng)過(guò)多次現(xiàn)場(chǎng)實(shí)驗(yàn)測(cè)試表明:該設(shè)備可以實(shí)現(xiàn)USB和CAN協(xié)議的數(shù)據(jù)轉(zhuǎn)換,完成CAN側(cè)數(shù)據(jù)收發(fā),CAN側(cè)具有不同的ID以及不同的幀類型都可進(jìn)行傳輸。該系統(tǒng)能以500 Kb/s長(zhǎng)時(shí)間穩(wěn)定運(yùn)行。

通用串行總線; 控制器局域網(wǎng); 數(shù)據(jù)傳輸協(xié)議

0 引 言

CAN總線因具有傳輸距離遠(yuǎn)、傳輸速率高、抗干擾能力強(qiáng)、易于組網(wǎng)等獨(dú)特優(yōu)越性能具有越來(lái)越廣闊的發(fā)展前景[1-2]。CAN總線在數(shù)據(jù)通信方面具有可靠性高、靈活性和實(shí)時(shí)性強(qiáng)優(yōu)點(diǎn),但是一直缺乏與主機(jī)進(jìn)行高速通信且易于使用的接口,此時(shí)就需通過(guò)一種適配器進(jìn)行轉(zhuǎn)換。USB作為一種方便、靈活、簡(jiǎn)單且即插即用的通用串行總線[3-4],可使CAN總線方便高速的與主機(jī)進(jìn)行連接,因此,USB轉(zhuǎn)CAN 得到了迅速的發(fā)展及應(yīng)用[5-10]。

本文設(shè)計(jì)的USB轉(zhuǎn)CAN的轉(zhuǎn)換器,基于Keil在STM32F107開發(fā)板上采用C語(yǔ)言開發(fā)固件程序;基于C#開發(fā)上位機(jī)程序。對(duì)于現(xiàn)在大多工業(yè)上的應(yīng)用由于元器件性能的限制,CAN的波特率還比較低,此設(shè)計(jì)大大提高了CAN傳輸?shù)牟ㄌ芈?,還具有較高的普適性,可適用于多種儀器設(shè)備。而且數(shù)據(jù)在傳輸過(guò)程中因通信系統(tǒng)本身或環(huán)境等干擾易造成傳輸數(shù)據(jù)出錯(cuò),故對(duì)信息進(jìn)行檢錯(cuò)很有必要[11]。本設(shè)計(jì)提出了數(shù)據(jù)傳輸協(xié)議,即滿足了信息傳遞的實(shí)時(shí)性,又提高了數(shù)據(jù)傳輸?shù)恼_性。

1 硬件設(shè)計(jì)

1.1 主控芯片選擇

本系統(tǒng)主控部分采用STM32F107作為核心處理器。STM32F107是意法半導(dǎo)體公司根據(jù)ARM公司最新推出的Cortex-M3來(lái)生產(chǎn)的一款高性能ARM微處理器。以其低成本、低功耗、高性能獲得廣泛應(yīng)用。內(nèi)部集成1個(gè)USB控制器和2個(gè)CAN控制器,芯片內(nèi)部可以通過(guò)RAM來(lái)通信。不會(huì)出現(xiàn)如STM32F103因具有1個(gè)USB控制器和1個(gè)CAN控制器,在同一個(gè)應(yīng)用中不能同時(shí)使用而需增加外部模塊的問(wèn)題[12]。STM32F107的外設(shè)已經(jīng)滿足設(shè)計(jì)需求。這樣既避免了使用外部模塊帶來(lái)的額外通信損耗,又節(jié)約了制作成本。其工作頻率為72 MHz,運(yùn)行速度比一般的單片機(jī)快得多,其性能足夠完成數(shù)據(jù)轉(zhuǎn)換。

1.2 CAN收發(fā)器芯片選擇

集成于STM32F107內(nèi)的CAN控制器主要是解析CAN物理層上的數(shù)據(jù)幀將其還原成數(shù)據(jù)鏈路層上的數(shù)據(jù),不能直接驅(qū)動(dòng)CAN物理總線[13]。CTM1050是一款帶隔離的高速CAN收發(fā)芯片,為標(biāo)準(zhǔn)CAN控制器接口,支持各種CAN控制器。該芯片內(nèi)部集成了所有必須的CAN隔離及CAN收、發(fā)器件。它的主要功能是將CAN控制器的邏輯電平轉(zhuǎn)換為CAN總線的差分電平,并且具有對(duì)CAN控制器與CAN總線之間的隔離。通信速率最高可達(dá)1 Mb/s。

1.3 電路設(shè)計(jì)

基于ARM的USB轉(zhuǎn)CAN設(shè)計(jì)以STM32F107單片機(jī)為核心,外加CAN電平轉(zhuǎn)換。其硬件模塊組合如圖1所示。整個(gè)轉(zhuǎn)換器不設(shè)外接電源,直接從USB接口取電,USB供電電路設(shè)計(jì)如圖2所示。

圖1 硬件模塊示意圖

經(jīng)過(guò)2個(gè)Π型濾波電路,將USB提供的5 V電壓轉(zhuǎn)換為3.3 V電壓供給芯片使用,保證了電路在工作過(guò)程中穩(wěn)定運(yùn)行。

2 軟件設(shè)計(jì)

2.1 數(shù)據(jù)傳輸協(xié)議

現(xiàn)有的在USB轉(zhuǎn)CAN中數(shù)據(jù)傳輸大多都是透明傳輸[14-16],在保證傳輸質(zhì)量的前提下,只負(fù)責(zé)將需要傳送的業(yè)務(wù)傳送到目的節(jié)點(diǎn)。這種傳輸因不會(huì)對(duì)傳輸?shù)臉I(yè)務(wù)進(jìn)行處理,一旦傳輸線受到環(huán)境干擾引起數(shù)據(jù)改變,則可能將錯(cuò)誤的數(shù)據(jù)進(jìn)行傳輸。為此,本文提出創(chuàng)建數(shù)據(jù)傳輸協(xié)議,有固定的傳輸格式,先對(duì)傳來(lái)的數(shù)據(jù)進(jìn)行頭甄別,若滿足本設(shè)計(jì)所約定的格式則認(rèn)為數(shù)據(jù)有效,然后才進(jìn)行相關(guān)數(shù)據(jù)傳輸,保證了數(shù)據(jù)傳輸?shù)恼_性和可靠性。其具體內(nèi)容如下。

將一幀數(shù)據(jù)定義為:①數(shù)據(jù)頭 AA 55(2 byte);②幀信息 08(1 byte);③數(shù)據(jù)ID號(hào) 0020(2 byte);④數(shù)據(jù)BODY XX…XX(8 byte)。

圖2 USB供電電路設(shè)計(jì)

一幀數(shù)據(jù)有13 byte,每個(gè)字節(jié)有8 bit。字節(jié)分配情況如圖3所示。第0個(gè)和第1個(gè)字節(jié)為數(shù)據(jù)頭,第2個(gè)字節(jié)為獲取信息,該字節(jié)的第7位為判斷數(shù)據(jù)為擴(kuò)展幀還是標(biāo)準(zhǔn)幀的標(biāo)識(shí),為擴(kuò)展幀則置為1,標(biāo)準(zhǔn)幀則置為0;第6位為判斷數(shù)據(jù)為遠(yuǎn)程幀還是標(biāo)準(zhǔn)幀的標(biāo)識(shí),為遠(yuǎn)程幀置為1,數(shù)據(jù)幀置為0;第3到0位存放數(shù)據(jù)長(zhǎng)度。第3、4字節(jié)用于存放獲取的數(shù)據(jù)ID。第5到12位則用于存放獲取的數(shù)據(jù)。

圖3 一幀數(shù)據(jù)的完整解析

2.2 STM32內(nèi)核固件設(shè)計(jì)

STM32內(nèi)核部分固件主要工作就是初始化模塊和數(shù)據(jù)處理。在STM32F107內(nèi)部,有分別屬于CAN模塊和USB模塊的FIFO。其功能模塊可如圖4所示。

圖4 STM32功能模塊圖

一旦CAN接受到數(shù)據(jù)后先將其存入CAN的FIFO中,然后再通過(guò)USB模塊讀取傳至上位機(jī)。當(dāng)USB接受到數(shù)據(jù)后先將其存入U(xiǎn)SB的FIFO中,然后再通過(guò)CAN模塊讀取傳至下位機(jī)。

固件應(yīng)用程序流程圖如圖5所示,固件首先初始化系統(tǒng)時(shí)鐘,保證系統(tǒng)運(yùn)行在72 MHz實(shí)時(shí)時(shí)鐘上,然后初始化CAN模塊,初始完成后初始化USB模塊。判斷CAN模塊的FIFO中是否有數(shù)據(jù),若有數(shù)據(jù)則通過(guò)USB模塊傳出;判斷USB的FIFO中是否有數(shù)據(jù),若有數(shù)據(jù)則通過(guò)CAN模塊發(fā)送至下位機(jī)。在固件程序主循環(huán)中只要工作就是將隊(duì)列中的數(shù)據(jù)取出來(lái),通過(guò)CAN或USB發(fā)送出來(lái)。

圖5 固件應(yīng)用程序流程圖

固件應(yīng)用程序中斷服務(wù)子程序如圖6、7所示。

USB接收中斷實(shí)現(xiàn)過(guò)程為:USB將當(dāng)前已讀的字節(jié)讀出來(lái),找出開頭為AA的數(shù)據(jù),再找出下一個(gè)為55的數(shù)據(jù),滿足這兩個(gè)條件說(shuō)明找到數(shù)據(jù)頭,表明下一個(gè)到來(lái)的字節(jié)即為q.data[2],此時(shí)可直接將q.data[2]的后4位作為該幀數(shù)據(jù)的數(shù)據(jù)位長(zhǎng)度。然后再依次讀取該數(shù)據(jù)位長(zhǎng)度+2個(gè)字節(jié)就認(rèn)為該幀數(shù)據(jù)已經(jīng)接收完成。最后對(duì)數(shù)據(jù)進(jìn)行打包入隊(duì)。

圖6 USB中斷流程圖 圖7 CAN中斷流程圖

因USB發(fā)送數(shù)據(jù)時(shí)直接發(fā)送至上位機(jī)不許要對(duì)數(shù)據(jù)進(jìn)行解析,故在此不做說(shuō)明。

CAN接收中斷具體實(shí)現(xiàn)過(guò)程為:①將一幀數(shù)據(jù)定義為一個(gè)q.data數(shù)組,然后初始化RxMessage結(jié)構(gòu)體,其中包括將數(shù)據(jù)ID初始化為0,因在本設(shè)計(jì)中為了使設(shè)計(jì)的適配器具有普適性,ID并不是固定值,而是獲取對(duì)方發(fā)送過(guò)來(lái)的ID。②對(duì)數(shù)據(jù)進(jìn)行寫頭,具體為q.data[0]=0XAA, q.data[1]=0X55;③初始化q.data[2],然后判斷該數(shù)據(jù)為擴(kuò)展幀還是標(biāo)準(zhǔn)幀,判斷完后在對(duì)應(yīng)的ID緩存器中取出ID值,并將讀出的ID分為兩個(gè)字節(jié)分別存入q.data[3]、q.data[4]。若為擴(kuò)展幀,則從擴(kuò)展幀緩存器中讀取ID值,并將q.data[2]的第7位置為1作標(biāo)識(shí),若為標(biāo)準(zhǔn)幀,則從標(biāo)準(zhǔn)幀緩存器中讀取ID值,并將q.data[2]的第7位置為0作標(biāo)識(shí)。然后再判斷數(shù)據(jù)為遠(yuǎn)程幀還是數(shù)據(jù)幀,若為遠(yuǎn)程幀則將q.data[2]的第6位置為1作標(biāo)識(shí),否則置為0。最后在從RxMessage.DLC中獲取數(shù)據(jù)長(zhǎng)度放于q.data[2]的后4位。④然后根據(jù)獲取的長(zhǎng)度從RxMessage.Data中取出數(shù)據(jù)依次放于q.data的數(shù)據(jù)存放位中。⑤將一幀數(shù)據(jù)打包插入CAN的FIFO隊(duì)列。

CAN發(fā)送數(shù)據(jù)實(shí)現(xiàn)過(guò)程需要對(duì)USB發(fā)送過(guò)來(lái)的數(shù)據(jù)進(jìn)行解析。分析過(guò)程如下:若USB發(fā)送過(guò)來(lái)1幀數(shù)據(jù),則首先要解析該數(shù)據(jù)是擴(kuò)展幀還是標(biāo)準(zhǔn)幀,具體可由q.data[2]&0x80實(shí)現(xiàn),若相與后值為0x80,則表明該數(shù)據(jù)是擴(kuò)展幀,否則為標(biāo)準(zhǔn)幀;然后解析該數(shù)據(jù)為遠(yuǎn)程幀還是數(shù)據(jù)幀,可由q.data[2]&0x40來(lái)實(shí)現(xiàn),若相與后值為0x40則表明該數(shù)據(jù)為遠(yuǎn)程幀,否則為數(shù)據(jù)幀;之后將q.data[2]的后4位數(shù)據(jù)長(zhǎng)度賦值給TxMessage.DLC寄存器;再根據(jù)獲取的長(zhǎng)度將相應(yīng)的數(shù)據(jù)寫入TxMessage.Data;最后通過(guò)CAN_Transmit函數(shù)將此幀數(shù)據(jù)發(fā)送給下位機(jī)。

2.4 設(shè)備驅(qū)動(dòng)程序及上位機(jī)軟件的設(shè)計(jì)

對(duì)設(shè)備的驅(qū)動(dòng)程序,直接采用意法半導(dǎo)體公司官網(wǎng)提供的STM32的USB虛擬串口驅(qū)動(dòng)程序,這樣大大縮短了我們的開發(fā)周期。因涉及的轉(zhuǎn)換器應(yīng)具有普適性的性質(zhì),即上位機(jī)軟件的設(shè)計(jì)因應(yīng)用場(chǎng)景和要求不同,故所設(shè)計(jì)的上位機(jī)軟件都可以通過(guò)編程訪問(wèn)驅(qū)動(dòng)來(lái)讀取數(shù)據(jù)和發(fā)送數(shù)據(jù)。

3 結(jié) 語(yǔ)

本文采用了STM32+CTM1050兩塊低成本的芯片設(shè)計(jì)了一款速率可在500 Kb/s長(zhǎng)時(shí)間穩(wěn)定運(yùn)行的USB轉(zhuǎn)CAN適配器。經(jīng)過(guò)多次測(cè)試表明該設(shè)備可以實(shí)現(xiàn)USB和CAN協(xié)議的數(shù)據(jù)轉(zhuǎn)換,完成CAN側(cè)數(shù)據(jù)收發(fā)。尤其在使用數(shù)據(jù)傳輸協(xié)議的情況下大大提高了數(shù)據(jù)的準(zhǔn)確性。

[1] 饒運(yùn)濤,鄒繼軍. 王進(jìn)宏,等.現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù)[M].2版.北京:北京航空航天大學(xué)出版社.

[2] 韓成浩,高曉紅. CAN總線技術(shù)及其應(yīng)用[J]. 制造業(yè)自動(dòng)化,2010(2):146-149.

[3] 李宏凱. USB2.0總線技術(shù)在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[D].南京:南京航空航天大學(xué),2006.

[4] 劉 丁,毛德柱,王云飛. USB在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J]. 電子技術(shù)應(yīng)用,2000(4):37-39.

[5] 岳彬彬,李向陽(yáng). 基于CotexM3的USB-CAN轉(zhuǎn)換器開發(fā)[J]. 計(jì)算機(jī)工程與科學(xué),2012(5):68-72.

[6] 周 震. 基于CAN總線的車身控制模塊[D].南京:南京航空航天大學(xué),2005.

[7] 黃學(xué)勤. 基于CAN總線的汽車燈控網(wǎng)絡(luò)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京農(nóng)業(yè)大學(xué),2006.

[8] 曲鳳麗. 汽車網(wǎng)絡(luò)研究及CAN總線網(wǎng)絡(luò)拓?fù)涞膬?yōu)化[D].杭州:浙江大學(xué),2008.

[9] 袁傳義. 電動(dòng)汽車CAN總線的研究[D].合肥:安徽農(nóng)業(yè)大學(xué),2004.

[10] 袁 強(qiáng). 基于CAN總線的汽車儀表研究[D].重慶:重慶大學(xué),2006.

[11] 李會(huì)如. 實(shí)時(shí)監(jiān)控系統(tǒng)中的數(shù)據(jù)通信校驗(yàn)及其實(shí)現(xiàn)方法[J]. 郵電設(shè)計(jì)技術(shù),1998(11):15-19.

[12] 劉純虎,付 斌,盛慶華. 基于STM32的微型USB-CAN適配器開發(fā)[J]. 計(jì)算機(jī)測(cè)量與控制,2013(4):996-998,1007.

[13] 陳紅衛(wèi). 基于Cortex-M3的USB轉(zhuǎn)CAN研究與實(shí)現(xiàn)[D].長(zhǎng)沙:中南大學(xué),2013.

[14] 鄭雅偉. 基于ARM Cortex3的低功耗無(wú)源USB-CAN透明傳輸?shù)膶?shí)現(xiàn)[J]. 山西電子技術(shù),2013(6):52-54.

[15] 程 焱. 基于USB接口的CAN總線控制系統(tǒng)的設(shè)計(jì)[D].成都:西南交通大學(xué),2005.

[16] 范新峰. CAN總線與USB的轉(zhuǎn)接技術(shù)[J]. 電子元器件應(yīng)用,2007(5):41-43.

Implementation of Conversion between USB and CAN Based on ARM

ZHOUJianbin,WANWenjie,ZHAOXiang,LIUYi,ZHOUWei,WANGMin

(College of Applied Nuclear Technology & Automation Engineering, Chengdu University of Technology, Chengdu 610059, China)

This paper studied the design of a general high-speed USB and CAN converter, which has small volume, low cost, high reliability. STM32F107 was used as the core of converter, the USB interface part adopted USB controller from internal of STM32, the CAN interface used CAN controller from internal of STM32 with external connection of CAN transceiver CTM1050. Data transfer protocol was created, the protocol needed a fixed transmission format and screen data before transmitting data. The ID unfixed was acquired from the other side of the ID. The data received by CAN were packaged into standard format of data frame, so that the data transmission characteristics could be easily found when data were transferred to a PC. A lot of tests showed that this equipment can realize the conversion between USB and CAN, the system runs stably for a long time with 500 Kb/s.

universal serial bus(USB); controller area network(CAN); data transfer protocol

2016-08-05

四川省卓越工程師教育培養(yǎng)計(jì)劃(核工程與核技術(shù))(11100-15Z006/064)

周建斌(1971-),男,湖南桃源人,博士,教授,從事核測(cè)量?jī)x器及相關(guān)軟件的研究。

Tel.:13881925909;E-mail: zjb@cdut.edu.cn

TL 821

A

1006-7167(2017)03-0129-04

猜你喜歡
固件適配器字節(jié)
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
適配器模式及其應(yīng)用
簡(jiǎn)談MC7字節(jié)碼
新型水文測(cè)驗(yàn)GPS適配器設(shè)計(jì)與應(yīng)用
基于固件的遠(yuǎn)程身份認(rèn)證
基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線通信
美國(guó)麥格普公司新型M—LOK相機(jī)三腳架適配器
輕兵器(2015年20期)2015-09-10 07:22:44
提取ROM固件中的APP
一種通過(guò)USB接口的可靠固件升級(jí)技術(shù)
育儿| 沙湾县| 襄樊市| 泸州市| 恭城| 聂荣县| 巢湖市| 牙克石市| 永川市| 佛山市| 民勤县| 大石桥市| 广元市| 乐东| 阳城县| 沭阳县| 六安市| 古交市| 乌拉特后旗| 资兴市| 临高县| 从江县| 界首市| 筠连县| 巴林左旗| 万荣县| 昌平区| 洛南县| 临沂市| 常山县| 清水县| 伊金霍洛旗| 宜兰县| 天等县| 新泰市| 晋州市| 敦化市| 和硕县| 南和县| 康平县| 武强县|