999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

CAN總線(xiàn)協(xié)議的動(dòng)力電池報(bào)文采集與解析*

2018-08-08 07:31:38,,,,
關(guān)鍵詞:設(shè)置

,,,,

(上海工程技術(shù)大學(xué) 汽車(chē)工程學(xué)院,上海 201620)

引 言

電動(dòng)汽車(chē)車(chē)用鋰電池發(fā)展十分迅速,預(yù)計(jì)未來(lái)幾年動(dòng)力電池將進(jìn)入大量回收的階段,因此需要考慮電池的回收、處理和再利用等問(wèn)題。電動(dòng)汽車(chē)的動(dòng)力電池組壽命終結(jié)后,仍具有約70%~80%的容量,因此可將動(dòng)力電池梯次利用于風(fēng)光儲(chǔ)能、智能電網(wǎng)的削峰填谷等[5]。本文設(shè)計(jì)了一套采集報(bào)文的裝置,采用主控制芯片M2+CAN控制器,通過(guò)對(duì)電動(dòng)汽車(chē)退役電池進(jìn)行再測(cè)試,從BMS中獲取與單體電池性能相關(guān)的報(bào)文,根據(jù)協(xié)議進(jìn)行報(bào)文解析、計(jì)算,可篩選出一致性較好的電池,有助于提高能源利用率。

1 CAN總線(xiàn)報(bào)文采集系統(tǒng)結(jié)構(gòu)

本文采用上海山意微電子技術(shù)有限公司研發(fā)的國(guó)產(chǎn)32位M2芯片作為主控制器,M2芯片有兩個(gè)UART接口,但不帶CAN接口,采用NXP公司的一種獨(dú)立CAN控制器SJA1000,可在BasicCAN和PeliCAN兩種協(xié)議下工作。其中BasicCAN支持CAN2.0A協(xié)議,PeliCAN工作方式支持CAN2.0B協(xié)議。CAN收發(fā)器采用TJA1050[1]。整體結(jié)構(gòu)硬件模塊包括:MCU主控制器、CAN 控制器、CAN 收發(fā)器,接收的報(bào)文可通過(guò)PC上位機(jī)軟件窗口觀察到。系統(tǒng)框圖如圖1所示。

圖1 CAN總線(xiàn)報(bào)文采集系統(tǒng)框圖

2 系統(tǒng)硬件設(shè)計(jì)

上海山意微電子技術(shù)有限公司自主研發(fā)的M2芯片,是基于MIPS架構(gòu)的32位精簡(jiǎn)指令型處理器,擁有128 KB的Flash存儲(chǔ)空間、2個(gè)UART/LIN通信串口、1個(gè)SPI通信接口、8路20位ADC采集模塊以及豐富的I/O接口,溫度穩(wěn)定性高,滿(mǎn)足使用需求。本文采用的SJA1000CAN控制器是NXP公司的一種獨(dú)立CAN控制器,可在BasicCAN和PeliCAN兩種協(xié)議下工作。其中PeliCAN工作方式可接收擴(kuò)展幀,29位標(biāo)識(shí)符。由于本文采集的是電池管理系統(tǒng)發(fā)出的CAN報(bào)文,均為擴(kuò)展幀、數(shù)據(jù)幀,因此選擇PeliCAN工作方式。

3 系統(tǒng)軟件設(shè)計(jì)

3.1 SJA1000驅(qū)動(dòng)程序設(shè)計(jì)

CAN控制器SJA1000內(nèi)部包含128個(gè)8位的寄存器,不帶有MCU處理器,相當(dāng)于是主控制器M2的外部RAM空間,主控制器可通過(guò)讀、寫(xiě)時(shí)序?qū)JA1000的寄存器進(jìn)行訪(fǎng)問(wèn)和設(shè)置,因此首先要對(duì)訪(fǎng)問(wèn)時(shí)序進(jìn)行軟件編程,實(shí)現(xiàn)主控制器與CAN控制器之間的通信,本文采用Intel模式下的交流時(shí)序。

寫(xiě)時(shí)序圖如圖2所示。

圖2 寫(xiě)時(shí)序圖

WR_SJA_REG(volatile int ADD,volatile int DATA){

/*初始化引腳*/

MemoryWrite32(SPI_CTL_REG,0x8);

//關(guān)閉SPI復(fù)用引腳功能

MemoryWrite32(U1_CTL0_REG,0x10);

//關(guān)閉UART引腳功能

MemoryWrite32(A_SDV2P_CTL_REG,0x0);

//關(guān)閉SD引腳功能

int p,i;

/*芯片I/O口引腳配置,單向I/O SEG口引腳配置*/

RT_GDR_BIT_OFF(0); //SEG 20 ==GDR 0 ALE

RT_GDR_BIT_ON(1); //SEG 21 ==GDR 1 RD

RT_GDR_BIT_ON(2); //SEG 22 ==GDR 2WR

RT_GDR_BIT_ON(3); //SEG 23 ==GDR 3CS

RT_IOCTL_Set32(0xFFFF); //設(shè)置I/O口為輸出

RT_GDR_BIT_ON(0); //ALE HIGN

for(i=0;i<5;i++);

ADD=ADD<<6;

RT_GPIO_Write32(ADD); //M2向SJA1000發(fā)送地址

for(i=0;i<5;i++);

RT_GDR_BIT_OFF(0); //ALE LOW

for(i=0;i<5;i++);

RT_GDR_BIT_OFF(3); //CS LOW

for(i=0;i<5;i++);

RT_IOCTL_Set32(0xFFFF); //設(shè)置I/O口為輸出

for(i=0;i<5;i++);

RT_GDR_BIT_OFF(2); //WR LOW

for(i=0;i<5;i++);

DATA=DATA<<6;

RT_GPIO_Write32(DATA); //M2向SJA1000發(fā)送數(shù)據(jù)

p=RT_GPIO0_Read32();

p=p>>6;

p=p&0Xff;

for(i=0;i<5;i++);

RT_GDR_BIT_ON(2); //WR HIGN

for(i=0;i<5;i++);

RT_GDR_BIT_ON(3); //CS HIGN

for(i=0;i<5;i++);

return p;

}

由于脈寬保持時(shí)間需要保持大于一定的時(shí)間,且時(shí)序的正確配合十分重要,程序中利用for延時(shí)不同的時(shí)間來(lái)實(shí)現(xiàn)。同時(shí),采用的GPIO口為復(fù)用引腳,需先關(guān)閉本控制芯片的SPI、UARTt和SD的復(fù)用引腳功能。同理,讀交流時(shí)序如圖3所示。

圖3 讀時(shí)序圖

讀時(shí)序與寫(xiě)時(shí)序都是主控制器鎖定目標(biāo)寄存器,但讀操作是直接把SJA1000寄存器的值讀取回來(lái),當(dāng)先向SJA1000發(fā)送完地址以后,把8路A/D總線(xiàn)I/O口設(shè)置為輸入后,寄存器中的數(shù)據(jù)就會(huì)自動(dòng)發(fā)送回來(lái)。一次讀時(shí)序包括由主控制器向SJA1000發(fā)送寄存器地址后,把A/D數(shù)據(jù)地址總線(xiàn)設(shè)置為輸入,讀回?cái)?shù)據(jù)。讀時(shí)序程序如下:

RD_SJA_REG(volatile int ADD){

……

//向SJA1000發(fā)送地址部分內(nèi)容和寫(xiě)時(shí)序部分相同

RT_IOCTL_Set32(0x0); //設(shè)置GPIO為輸入

for(i=0;i<5;i++);

RT_GDR_BIT_OFF(1); //RD LOW

for(i=0;i<5;i++);

p=RT_GPIO1_Read();

p=p>>6;

p&=0xff;

for(i=0;i<5;i++);

RT_GDR_BIT_ON(1); //RD HIGN

for(i=0;i<5;i++);

RT_GDR_BIT_ON(3); //CS HIGN

for(i=0;i<5;i++);

return p;

}

讀、寫(xiě)時(shí)序程序設(shè)計(jì)好以后,接下來(lái)的對(duì)寄存器的配置、SJA1000的初始化、報(bào)文的接收和發(fā)送都是基于此通信時(shí)序進(jìn)行相關(guān)寄存器的配置,因此讀寫(xiě)時(shí)序程序的設(shè)計(jì)十分重要。為測(cè)試此讀寫(xiě)時(shí)序的正確性,采用邏輯分析儀進(jìn)行觀察檢測(cè),得到的讀時(shí)序圖和寫(xiě)時(shí)序分別圖4和圖5所示。

圖4 邏輯分析儀讀時(shí)序

圖5 邏輯分析儀寫(xiě)時(shí)序

3.2 初始化SJA1000

CAN控制器控制SJA1000進(jìn)行報(bào)文的接收和發(fā)送之前,需要在復(fù)位模式下對(duì)SJA1000進(jìn)行初始化操作[2]。主要操作內(nèi)容包括配置時(shí)鐘分頻寄存器、操作模式、設(shè)置驗(yàn)收代碼寄存器和驗(yàn)收屏蔽寄存器,設(shè)置通信波特率等。初始化程序如下:

int Sja1000_Init(){

int s,a;

s=ENTER_RSTMODE(); //置位復(fù)位請(qǐng)求和單濾波模式

s=TEST_COMMUNI_REG();

//寫(xiě)入測(cè)試寄存器,查看讀寫(xiě)功能是否正確

s=SET_CLOCK_REG(0xC8);

//選擇Pelican模式,禁能外部時(shí)鐘引腳Intel模式

s=SET_ACCEPT_FILTER(0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF);//屏蔽寄存器,設(shè)為無(wú)關(guān),可接收所有報(bào)文

//當(dāng)屏蔽位為1不濾波,屏蔽為位0就表示可以導(dǎo)通相同ID

s=SET_BAUDRATE(ByteRate_125k);//選擇波特率

WR_SJA_REG(REG_OCR,0x1A);

//輸出控制寄存器——正常輸出模式

WR_SJA_REG(REG_INTENABLE,0x1D);

//設(shè)置中斷,接收和發(fā)送中斷

//喚醒中斷使能,數(shù)據(jù)溢出中斷使能,錯(cuò)誤報(bào)警中斷使能,

//發(fā)送中斷使能,接收中斷使能

a=RD_SJA_REG(REG_CONTROL);

a&=0xfe;

WR_SJA_REG(REG_CONTROL,a);

//退出復(fù)位模式,進(jìn)入工作模式,寄存器末尾功能位置0

return 0;

}

本文中需要接收的報(bào)文是擴(kuò)展幀、數(shù)據(jù)幀,因此選擇PeliCAN工作方式支持CAN2.0B協(xié)議。幀信息占一個(gè)字節(jié),幀ID分配4個(gè)字節(jié),使用29位,幀數(shù)據(jù)分配8個(gè)字節(jié),設(shè)置單濾波模式,設(shè)置4個(gè)驗(yàn)收代碼寄存器ACR和4個(gè)驗(yàn)收屏蔽寄存器AMR,下面以一個(gè)寄存器為例,驗(yàn)收代碼寄存器定義如下:

位76543210功能AC.7AC.6AC.5AC.4AC.3AC.2AC.1AC.0

驗(yàn)收屏蔽寄存器AMR定義如下:

位76543210功能AM.7AM.6AM.5AM.4AM.3AM.2AM.1AM.0

ACR的每一位和AMR一一對(duì)應(yīng),驗(yàn)收屏蔽為0表示相關(guān),即只接收和驗(yàn)收代碼寄存器幀ID相同的報(bào)文。反之為1表示無(wú)關(guān),即接收所有報(bào)文。本文中接收到的報(bào)文是把來(lái)自科列的報(bào)文導(dǎo)入到上位機(jī)軟件USB_CAN TOOL中發(fā)送出來(lái),所以設(shè)置為FF,接收所有報(bào)文即可。

3.3 接收CAN 報(bào)文

一條完整的報(bào)文包含三部分內(nèi)容:幀信息、幀ID、幀數(shù)據(jù)。幀信息解釋了幀的格式和數(shù)據(jù)長(zhǎng)度;標(biāo)準(zhǔn)幀ID為11位,擴(kuò)展幀ID為29位標(biāo)識(shí)符;幀數(shù)據(jù)寄存器中保存報(bào)文的數(shù)據(jù)。收到的報(bào)文CAN核心模塊把串行位流轉(zhuǎn)換成并行數(shù)據(jù),經(jīng)過(guò)驗(yàn)收濾波器存儲(chǔ)在FIFO中。M2主控制器通過(guò)中斷輪詢(xún)的方式訪(fǎng)問(wèn)SJA1000。當(dāng)接收到報(bào)文后產(chǎn)生接收中斷,M2從緩沖區(qū)讀取報(bào)文,并釋放接收緩沖區(qū),繼續(xù)根據(jù)中斷情況讀取下一條報(bào)文。其CAN 報(bào)文接收程序如下:

while(1){

int0=RT_SEG_Read(1);

WR_SJA_REG(REG_INTENABLE,0x01);

//設(shè)置M2接收中斷使能

if(int0==0){ //模擬下降沿觸發(fā)

a=RD_SJA_REG(REG_INTERRUPT);

//讀取中斷寄存器只有讀寄存器不會(huì)置位

if(a&0x01){

b=RD_SJA_REG(REG_RXBuffer1);

length=b&0x0f;

if((b&0x40)!=0x40){//數(shù)據(jù)幀=為遠(yuǎn)程幀

h=0;

for(i=0;i<4;i++){

f=RD_SJA_REG(REG_RXBuffer5-i);

g=f<<(8*i);

h+=g;

}

h=h>>3;//幀ID信息

puts(“ID:”);

puts(xtoa(h));

for(i=0;i

//數(shù)據(jù)擴(kuò)展幀從buffer6標(biāo)準(zhǔn)幀到buffer4

c=RD_SJA_REG(REG_RXBuffer6+i);

puts(xtoa(c));

}

……

WR_SJA_REG(REG_COMMAND,0x04);//釋放緩沖區(qū)//

}

}

3.4 發(fā)送CAN報(bào)文

M2通過(guò)判斷在這之前的最后一次發(fā)送是否成功,若成功則將需要發(fā)送的報(bào)文通過(guò)A/D總線(xiàn)發(fā)送到發(fā)送緩沖區(qū),發(fā)出發(fā)送命令后,將報(bào)文發(fā)出。在硬件上,當(dāng)按下Key鍵時(shí),進(jìn)行報(bào)文發(fā)送。其CAN 報(bào)文發(fā)送程序部分如下:

key=RT_SEG_Read(0); //按鍵key值寫(xiě)入寄存器數(shù)據(jù)//

if(key==0){

e=RD_SJA_REG(REG_STATUS);

e&=0x04;

if(e==0x04){ //CPU可以向發(fā)送緩沖區(qū)寫(xiě)信息

WR_SJA_REG(REG_TXBuffer1,0x05);

//發(fā)送報(bào)文的信息

WR_SJA_REG(REG_TXBuffer2,0x00);

WR_SJA_REG(REG_TXBuffer3,0x01);

WR_SJA_REG(REG_TXBuffer4,0x42);

WR_SJA_REG(REG_TXBuffer5,0x42);

WR_SJA_REG(REG_TXBuffer6,0x42);

WR_SJA_REG(REG_TXBuffer7,0x42);

WR_SJA_REG(REG_TXBuffer8,0x42);

WR_SJA_REG(REG_TXBuffer9,0x42);

WR_SJA_REG(REG_TXBuffer10,0x42);

WR_SJA_REG(REG_TXBuffer11,0x42);

WR_SJA_REG(REG_COMMAND,0x03);//發(fā)送命令

}

}

4 實(shí)例驗(yàn)證

本文主要使用的是報(bào)文的接收功能。以接收為實(shí)例,硬件連接完成后,將在與M2配套的編譯環(huán)境Camel Studio中編寫(xiě)的軟件程序下載到M2中,同時(shí)通過(guò)使用CAN分析儀來(lái)模擬BMS給該報(bào)文采集裝置發(fā)送報(bào)文。

通過(guò)CAN分析儀提供的上位機(jī)軟件USB_CAN TOOL模擬BMS發(fā)送CAN 報(bào)文,在USB_CAN TOOL上位機(jī)軟件中導(dǎo)入所需發(fā)送的報(bào)文,本文摘取報(bào)文的部分信息,導(dǎo)入的報(bào)文信息如圖6所示,報(bào)文信息來(lái)自科列公司提供的BMS的報(bào)文和報(bào)文解析協(xié)議。在PC機(jī)上打開(kāi)Camel Studio軟件,將編譯后的CAN報(bào)文接收程序下載到M2中,運(yùn)行后即可接收到USB_CAN TOOL發(fā)出的報(bào)文。實(shí)物連接圖如圖7所示。

圖6 導(dǎo)入報(bào)文信息內(nèi)容

圖7 實(shí)驗(yàn)實(shí)物連接圖

由CAN 分析儀發(fā)出的報(bào)文信息導(dǎo)入后如圖8所示。由M2和其上位機(jī)軟件Camel Studio接收到的報(bào)文及顯示如圖9所示。

圖8 CAN 分析儀發(fā)出報(bào)文信息顯示

圖9 M2上位機(jī)軟件Camel Studio接收?qǐng)?bào)文顯示

報(bào)文接收到以后,可根據(jù)電池廠家提供的協(xié)議進(jìn)行翻譯,本質(zhì)上是匹配ID后對(duì)數(shù)據(jù)按照協(xié)議規(guī)則進(jìn)行計(jì)算。報(bào)文解析如圖10所示。

圖10 報(bào)文解析

由此可以得到電池的電壓值,根據(jù)這些值計(jì)算出單體電池的直流內(nèi)阻。本實(shí)驗(yàn)的電池工況是先讓電池處于開(kāi)路狀態(tài),電流為0 A,測(cè)得電壓值U1,再進(jìn)行5 A放電,測(cè)得電壓值為U2,時(shí)間為T(mén)2。從而可進(jìn)一步計(jì)算T2時(shí)刻下電池的直流內(nèi)阻,直流內(nèi)阻=(U1-U2)/5。如圖11所示。

圖11 單體電池直流內(nèi)阻分布圖

圖11的橫坐標(biāo)表示電池的序號(hào),一共是84節(jié)電池。縱坐標(biāo)表示電池的直流內(nèi)阻,單位為歐姆。由圖可知,有5顆電池的直流內(nèi)阻值偏大,其余電池整體的一致性比較穩(wěn)定。用此方法同時(shí)也可測(cè)得不同時(shí)間、不同工況下的直流內(nèi)阻值。

結(jié) 語(yǔ)

本文根據(jù)接收退役電池組的BMS發(fā)出的CAN報(bào)文,設(shè)計(jì)了一套主控制芯片M2+SJA1000的裝置,并為該裝置芯片之間實(shí)現(xiàn)通信和控制芯片接收CAN報(bào)文設(shè)計(jì)編程,成功實(shí)現(xiàn)報(bào)文的獲取。同時(shí)如需對(duì)驗(yàn)收濾波寄存器進(jìn)行相應(yīng)的配置,只需要在復(fù)位模式下在軟件程序中修改相關(guān)寄存器值。

猜你喜歡
設(shè)置
中隊(duì)崗位該如何設(shè)置
船舶防火結(jié)構(gòu)及設(shè)置的缺陷與整改
水上消防(2020年5期)2020-12-14 07:16:18
中外醫(yī)學(xué)專(zhuān)業(yè)與專(zhuān)科設(shè)置對(duì)比分析及啟示
特殊場(chǎng)景下列控等級(jí)轉(zhuǎn)換的設(shè)置方案
7招教你手動(dòng)設(shè)置參數(shù)
動(dòng)車(chē)段(所)股道有效長(zhǎng)設(shè)置研究
我國(guó)中小學(xué)將設(shè)置人工智能相關(guān)課程
玩具世界(2017年9期)2017-11-24 05:17:29
吃紙的妖怪
本刊欄目設(shè)置說(shuō)明
中俄臨床醫(yī)學(xué)專(zhuān)業(yè)課程設(shè)置的比較與思考
主站蜘蛛池模板: 久热精品免费| 91成人在线观看视频| 欧美日韩免费在线视频| 国产后式a一视频| 内射人妻无套中出无码| 色丁丁毛片在线观看| 亚洲专区一区二区在线观看| 亚洲av无码人妻| 91精品人妻一区二区| 亚洲欧美一区二区三区麻豆| 国产91丝袜在线播放动漫| 国产成人乱无码视频| 最新亚洲人成无码网站欣赏网| yy6080理论大片一级久久| 亚洲欧美日本国产综合在线| 蜜桃视频一区二区| 丁香婷婷激情网| 91在线精品麻豆欧美在线| 99视频国产精品| 日韩二区三区无| 欧美亚洲一二三区| 国产精品私拍在线爆乳| 国产成本人片免费a∨短片| 国产精品永久免费嫩草研究院| 国产欧美精品午夜在线播放| 国产高清在线观看91精品| 一区二区午夜| 国产一区二区影院| 天天色天天综合| 国产人成在线视频| 在线a视频免费观看| 99这里只有精品免费视频| av无码一区二区三区在线| 国产本道久久一区二区三区| 国产视频入口| 久久五月视频| 一本大道视频精品人妻| 免费A∨中文乱码专区| 免费又黄又爽又猛大片午夜| 97国产精品视频自在拍| 亚洲欧洲日韩综合色天使| 婷婷综合亚洲| 欧美激情视频一区二区三区免费| 精品久久久久久成人AV| 久热这里只有精品6| 午夜福利视频一区| 国产精品主播| 日韩精品毛片| AV网站中文| 国产成人久久综合777777麻豆| 久久青草热| 日本手机在线视频| 青青青国产在线播放| 国产精品自在自线免费观看| 福利片91| 国产毛片基地| 视频一区亚洲| 久久综合婷婷| 一级毛片在线播放| 午夜国产精品视频黄| 青青青视频91在线 | 亚洲av无码久久无遮挡| 国产三级国产精品国产普男人| 91九色国产porny| 小说 亚洲 无码 精品| 尤物在线观看乱码| 无码专区第一页| 国产噜噜在线视频观看| 国模沟沟一区二区三区| 26uuu国产精品视频| 美女免费黄网站| 色悠久久久| 特级做a爰片毛片免费69| 思思热精品在线8| 日韩国产无码一区| 亚洲福利网址| 91小视频在线观看免费版高清| 91色爱欧美精品www| 久久免费视频播放| 亚洲无码高清免费视频亚洲| 久久不卡国产精品无码| 国产色婷婷|