引言
ABS(防抱死剎車系統(tǒng))ECU(電控單元)在研發(fā)過程中,,為了實(shí)時(shí)確定其行車參數(shù)和控制參數(shù),,通常會(huì)使用標(biāo)定技術(shù),,標(biāo)定技術(shù)就是通過一定的命令對(duì)ECU上傳和讀取控制算法參數(shù),以達(dá)到對(duì)其實(shí)時(shí)修改以尋求最優(yōu)的技術(shù),。對(duì)于車載電控單元來說,,其通常只有CAN總線通信接口,為了能實(shí)現(xiàn)上位機(jī)和ECU能直接進(jìn)行通信,,實(shí)現(xiàn)利用標(biāo)定技術(shù)對(duì)ABS ECU進(jìn)行開發(fā),我們?cè)O(shè)計(jì)了一款能實(shí)現(xiàn)CAN到USB的數(shù)據(jù)轉(zhuǎn)換器,。CAN通信協(xié)議是一種用于汽車內(nèi)部測(cè)量與執(zhí)行部件之間的數(shù)據(jù)通信協(xié)議,。而USB具有即插即用的優(yōu)點(diǎn),并且有較高的通信速率,,對(duì)于實(shí)現(xiàn)上位機(jī)和下位機(jī)的通信進(jìn)行標(biāo)定十分方便,。我們?cè)O(shè)計(jì)的數(shù)據(jù)轉(zhuǎn)換器采用了NXP公司的LPC2119 ARM7處理器,通過它成功地實(shí)現(xiàn)上位機(jī)和ECU的可靠通信和對(duì)下位機(jī)的標(biāo)定,。
系統(tǒng)硬件設(shè)計(jì)
LPC2119 ARM7處理器
LPC2119是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的16/32ARM7TDMI-S CPU的微控制器,,并帶有28/256kB嵌入的高速Flash存儲(chǔ)器。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行,。
USB轉(zhuǎn)換芯片CH372
CH372是一個(gè)USB總線的通用設(shè)備接口芯片,,在本地端,CH372具有8位數(shù)據(jù)總線和讀,、寫,、片選控制線以及中斷輸出,可以方便地掛接到控制器的系統(tǒng)總線上,;CH372內(nèi)置了USB通訊中的底層協(xié)議,,在內(nèi)置固件模式下,CH372自動(dòng)處理默認(rèn)端點(diǎn)0的所有事務(wù),。
系統(tǒng)設(shè)計(jì)
轉(zhuǎn)換器直接使用USB的5V供電,,使用了LM1117將5V電源轉(zhuǎn)換成3.3V和1.8V以供ARM處理器及其外圍模塊使用,對(duì)于CAN控制器輸出的邏輯電平用TJA1050轉(zhuǎn)換成差分電平輸出CH372的設(shè)計(jì)十分重要,,外接電容用于CH372內(nèi)外部電源節(jié)點(diǎn)去耦,。在LPC2119的各電壓引腳分別接了0.01μf的電容進(jìn)行濾波。在USB轉(zhuǎn)換芯片的設(shè)計(jì)中,,可選4.7kΩ電阻用于在電源斷電后將電解電容中的電能及時(shí)釋放掉,,使VCC及時(shí)下降到0V,,確保在下次通電時(shí)CH372能夠可靠地上電復(fù)位。為使CH372能夠可靠復(fù)位,,電源電壓從0V上升到5V的上升時(shí)間應(yīng)該少于100ms,,所以電容的容量和電阻的阻值都不能太大。用15pF的獨(dú)石或高頻瓷片電容作為CH372的時(shí)鐘振蕩電路的起振電容,。
系統(tǒng)硬件設(shè)計(jì)部分框圖如圖1,。
系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)程序主要包括CAN控制器驅(qū)動(dòng)程序,USB控制芯片CH372驅(qū)動(dòng)程序,,數(shù)據(jù)讀寫緩沖區(qū)的設(shè)計(jì),,以及如何調(diào)用CAN和USB的讀寫函數(shù)使數(shù)據(jù)的通信更好的同步。
CAN驅(qū)動(dòng)程序
根據(jù)LPC2119微處理器CAN控制器的特性,,將CAN的驅(qū)動(dòng)程序分為3個(gè)層次:1.硬件抽象層:將CAN控制器的硬件特性用數(shù)據(jù)類型進(jìn)行抽象,,并提供CAN控制器硬件操作的接口。對(duì)物理層的寄存器和相應(yīng)地址影射,,定義了CAN控制器寄存器的數(shù)據(jù)類型和對(duì)寄存器的操作方法,。2.功能函數(shù)層:CAN控制器各種功能的實(shí)現(xiàn)函數(shù),該層的函數(shù)利用硬件抽象層中對(duì)寄存器操作的接口來訪問CAN控制器來實(shí)現(xiàn)各種CAN控制器所能提供的功能,。3.應(yīng)用程序接口層:在該層中的主要提供給3個(gè)函數(shù),,初始化CAN控制器CANinit()、發(fā)送數(shù)據(jù)CANSendData(),、接收數(shù)據(jù)CANRecieveData(),。
CH372驅(qū)動(dòng)程序
CH372芯片在本地端提供了通用的被動(dòng)并行接口。CH372芯片的讀寫時(shí)序主要要求讀寫使能信號(hào)有一個(gè)2~10μs的持續(xù)時(shí)間,,并且在a0=1時(shí)寫入命令,,a0=0時(shí)讀寫數(shù)據(jù)。在本設(shè)計(jì)中,,用LPC2119的10口來表示CH372的各信號(hào),,并需要嚴(yán)格按照其時(shí)序要求用軟件模擬其讀寫時(shí)序,一個(gè)典型的寫數(shù)據(jù)子函數(shù)如下:
在以上程序中,,對(duì)各端口的操作先后代表了CH372的讀寫時(shí)序信號(hào)的先后,,適當(dāng)?shù)难訒r(shí)表示有效的寫/讀選通脈沖WR/RD的寬度,其典型值為90到10000ns,,我們選擇25μs,。同理可得寫命令,讀數(shù)據(jù)子函數(shù):USBWriteCMD(uint32 CMD),,USBReadData(),。調(diào)用以上子函數(shù)提供了發(fā)送和接收數(shù)據(jù)的函數(shù):IRQ_CH372(void),UploadUSBData(unin32Length,uint32 Data[]),。
環(huán)形緩沖區(qū)
在本設(shè)計(jì)中,,設(shè)計(jì)了兩個(gè)環(huán)形緩沖區(qū),,分別存放USB及CAN的數(shù)據(jù),使其能同步發(fā)送,,
一個(gè)典型的緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)如下:
數(shù)據(jù)元素是無符號(hào)32位整數(shù),,MAX為環(huán)形緩沖區(qū)最大長度,WritePtr為讀指針,,ReadPtr為寫指針,。讀寫指針初始化為writePtr=ReadPtr=0。通過CAN控制器接受的數(shù)據(jù)存放在環(huán)形緩沖區(qū)CANRecRinBuf中,,再讀出數(shù)據(jù)從USB端輸出,,保證了數(shù)據(jù)通信的可靠性。
上位機(jī)監(jiān)控界面
安裝CH372的上位機(jī)驅(qū)動(dòng)后,,基于CH372的USB設(shè)備就可以被上位機(jī)識(shí)別了,。調(diào)用CH372提供的動(dòng)態(tài)連接庫CH372.d11及其相應(yīng)的LIB文件CH372.Lib和頭文件CH372.h,以建立上位機(jī)的工序,,調(diào)用CH372提供的庫函數(shù)CH375OpenDevice(),、CH375CloseDevice(),用于打開和關(guān)閉設(shè)備,,調(diào)用CH375WriteData();CH375ReadData()接收下位機(jī)通過CH372發(fā)送上來的數(shù)據(jù),,并根據(jù)CAN總線數(shù)據(jù)的格式將其封裝成CAN格式的數(shù)據(jù),,提供對(duì)CAN數(shù)據(jù)的收發(fā)CANDownload(),CANUpload(),。用C++設(shè)計(jì)相應(yīng)的圖形界面以實(shí)現(xiàn)和下位機(jī)的通信,。
結(jié)語
在ABSECU的研發(fā)項(xiàng)目中,我們使用了此轉(zhuǎn)換器將ECU的CAN數(shù)據(jù)轉(zhuǎn)換成USB數(shù)據(jù)和上位機(jī)通信,,ECU上傳需監(jiān)控參數(shù),,上位機(jī)下傳標(biāo)定參數(shù)。其硬件上使用ARM7內(nèi)核的LPC2119作為控制器,,以及底層軟件的設(shè)計(jì)確保了轉(zhuǎn)換器在實(shí)際的ECU開發(fā)的CCP標(biāo)定的工程中,,在大量數(shù)據(jù)進(jìn)行傳輸?shù)倪^程中有較好的可靠性。