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

CAN總線協議的動力電池報文采集與解析*

2018-08-08 07:31:38,,,,
單片機與嵌入式系統應用 2018年8期
關鍵詞:設置

,,,,

(上海工程技術大學 汽車工程學院,上海 201620)

引 言

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

1 CAN總線報文采集系統結構

本文采用上海山意微電子技術有限公司研發的國產32位M2芯片作為主控制器,M2芯片有兩個UART接口,但不帶CAN接口,采用NXP公司的一種獨立CAN控制器SJA1000,可在BasicCAN和PeliCAN兩種協議下工作。其中BasicCAN支持CAN2.0A協議,PeliCAN工作方式支持CAN2.0B協議。CAN收發器采用TJA1050[1]。整體結構硬件模塊包括:MCU主控制器、CAN 控制器、CAN 收發器,接收的報文可通過PC上位機軟件窗口觀察到。系統框圖如圖1所示。

圖1 CAN總線報文采集系統框圖

2 系統硬件設計

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

3 系統軟件設計

3.1 SJA1000驅動程序設計

CAN控制器SJA1000內部包含128個8位的寄存器,不帶有MCU處理器,相當于是主控制器M2的外部RAM空間,主控制器可通過讀、寫時序對SJA1000的寄存器進行訪問和設置,因此首先要對訪問時序進行軟件編程,實現主控制器與CAN控制器之間的通信,本文采用Intel模式下的交流時序。

寫時序圖如圖2所示。

圖2 寫時序圖

WR_SJA_REG(volatile int ADD,volatile int DATA){

/*初始化引腳*/

MemoryWrite32(SPI_CTL_REG,0x8);

//關閉SPI復用引腳功能

MemoryWrite32(U1_CTL0_REG,0x10);

//關閉UART引腳功能

MemoryWrite32(A_SDV2P_CTL_REG,0x0);

//關閉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); //設置I/O口為輸出

RT_GDR_BIT_ON(0); //ALE HIGN

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

ADD=ADD<<6;

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

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); //設置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發送數據

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;

}

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

圖3 讀時序圖

讀時序與寫時序都是主控制器鎖定目標寄存器,但讀操作是直接把SJA1000寄存器的值讀取回來,當先向SJA1000發送完地址以后,把8路A/D總線I/O口設置為輸入后,寄存器中的數據就會自動發送回來。一次讀時序包括由主控制器向SJA1000發送寄存器地址后,把A/D數據地址總線設置為輸入,讀回數據。讀時序程序如下:

RD_SJA_REG(volatile int ADD){

……

//向SJA1000發送地址部分內容和寫時序部分相同

RT_IOCTL_Set32(0x0); //設置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;

}

讀、寫時序程序設計好以后,接下來的對寄存器的配置、SJA1000的初始化、報文的接收和發送都是基于此通信時序進行相關寄存器的配置,因此讀寫時序程序的設計十分重要。為測試此讀寫時序的正確性,采用邏輯分析儀進行觀察檢測,得到的讀時序圖和寫時序分別圖4和圖5所示。

圖4 邏輯分析儀讀時序

圖5 邏輯分析儀寫時序

3.2 初始化SJA1000

CAN控制器控制SJA1000進行報文的接收和發送之前,需要在復位模式下對SJA1000進行初始化操作[2]。主要操作內容包括配置時鐘分頻寄存器、操作模式、設置驗收代碼寄存器和驗收屏蔽寄存器,設置通信波特率等。初始化程序如下:

int Sja1000_Init(){

int s,a;

s=ENTER_RSTMODE(); //置位復位請求和單濾波模式

s=TEST_COMMUNI_REG();

//寫入測試寄存器,查看讀寫功能是否正確

s=SET_CLOCK_REG(0xC8);

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

s=SET_ACCEPT_FILTER(0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF);//屏蔽寄存器,設為無關,可接收所有報文

//當屏蔽位為1不濾波,屏蔽為位0就表示可以導通相同ID

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

WR_SJA_REG(REG_OCR,0x1A);

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

WR_SJA_REG(REG_INTENABLE,0x1D);

//設置中斷,接收和發送中斷

//喚醒中斷使能,數據溢出中斷使能,錯誤報警中斷使能,

//發送中斷使能,接收中斷使能

a=RD_SJA_REG(REG_CONTROL);

a&=0xfe;

WR_SJA_REG(REG_CONTROL,a);

//退出復位模式,進入工作模式,寄存器末尾功能位置0

return 0;

}

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

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

驗收屏蔽寄存器AMR定義如下:

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

ACR的每一位和AMR一一對應,驗收屏蔽為0表示相關,即只接收和驗收代碼寄存器幀ID相同的報文。反之為1表示無關,即接收所有報文。本文中接收到的報文是把來自科列的報文導入到上位機軟件USB_CAN TOOL中發送出來,所以設置為FF,接收所有報文即可。

3.3 接收CAN 報文

一條完整的報文包含三部分內容:幀信息、幀ID、幀數據。幀信息解釋了幀的格式和數據長度;標準幀ID為11位,擴展幀ID為29位標識符;幀數據寄存器中保存報文的數據。收到的報文CAN核心模塊把串行位流轉換成并行數據,經過驗收濾波器存儲在FIFO中。M2主控制器通過中斷輪詢的方式訪問SJA1000。當接收到報文后產生接收中斷,M2從緩沖區讀取報文,并釋放接收緩沖區,繼續根據中斷情況讀取下一條報文。其CAN 報文接收程序如下:

while(1){

int0=RT_SEG_Read(1);

WR_SJA_REG(REG_INTENABLE,0x01);

//設置M2接收中斷使能

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

a=RD_SJA_REG(REG_INTERRUPT);

//讀取中斷寄存器只有讀寄存器不會置位

if(a&0x01){

b=RD_SJA_REG(REG_RXBuffer1);

length=b&0x0f;

if((b&0x40)!=0x40){//數據幀=為遠程幀

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

//數據擴展幀從buffer6標準幀到buffer4

c=RD_SJA_REG(REG_RXBuffer6+i);

puts(xtoa(c));

}

……

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

}

}

3.4 發送CAN報文

M2通過判斷在這之前的最后一次發送是否成功,若成功則將需要發送的報文通過A/D總線發送到發送緩沖區,發出發送命令后,將報文發出。在硬件上,當按下Key鍵時,進行報文發送。其CAN 報文發送程序部分如下:

key=RT_SEG_Read(0); //按鍵key值寫入寄存器數據//

if(key==0){

e=RD_SJA_REG(REG_STATUS);

e&=0x04;

if(e==0x04){ //CPU可以向發送緩沖區寫信息

WR_SJA_REG(REG_TXBuffer1,0x05);

//發送報文的信息

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);//發送命令

}

}

4 實例驗證

本文主要使用的是報文的接收功能。以接收為實例,硬件連接完成后,將在與M2配套的編譯環境Camel Studio中編寫的軟件程序下載到M2中,同時通過使用CAN分析儀來模擬BMS給該報文采集裝置發送報文。

通過CAN分析儀提供的上位機軟件USB_CAN TOOL模擬BMS發送CAN 報文,在USB_CAN TOOL上位機軟件中導入所需發送的報文,本文摘取報文的部分信息,導入的報文信息如圖6所示,報文信息來自科列公司提供的BMS的報文和報文解析協議。在PC機上打開Camel Studio軟件,將編譯后的CAN報文接收程序下載到M2中,運行后即可接收到USB_CAN TOOL發出的報文。實物連接圖如圖7所示。

圖6 導入報文信息內容

圖7 實驗實物連接圖

由CAN 分析儀發出的報文信息導入后如圖8所示。由M2和其上位機軟件Camel Studio接收到的報文及顯示如圖9所示。

圖8 CAN 分析儀發出報文信息顯示

圖9 M2上位機軟件Camel Studio接收報文顯示

報文接收到以后,可根據電池廠家提供的協議進行翻譯,本質上是匹配ID后對數據按照協議規則進行計算。報文解析如圖10所示。

圖10 報文解析

由此可以得到電池的電壓值,根據這些值計算出單體電池的直流內阻。本實驗的電池工況是先讓電池處于開路狀態,電流為0 A,測得電壓值U1,再進行5 A放電,測得電壓值為U2,時間為T2。從而可進一步計算T2時刻下電池的直流內阻,直流內阻=(U1-U2)/5。如圖11所示。

圖11 單體電池直流內阻分布圖

圖11的橫坐標表示電池的序號,一共是84節電池。縱坐標表示電池的直流內阻,單位為歐姆。由圖可知,有5顆電池的直流內阻值偏大,其余電池整體的一致性比較穩定。用此方法同時也可測得不同時間、不同工況下的直流內阻值。

結 語

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

猜你喜歡
設置
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
船舶防火結構及設置的缺陷與整改
水上消防(2020年5期)2020-12-14 07:16:18
中外醫學專業與專科設置對比分析及啟示
特殊場景下列控等級轉換的設置方案
7招教你手動設置參數
動車段(所)股道有效長設置研究
我國中小學將設置人工智能相關課程
玩具世界(2017年9期)2017-11-24 05:17:29
吃紙的妖怪
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
主站蜘蛛池模板: 欧美一级黄色影院| 国产成人精品亚洲77美色| 精品一区国产精品| 国产乱子伦手机在线| 免费Aⅴ片在线观看蜜芽Tⅴ| 福利一区三区| 亚洲美女一级毛片| 亚洲日韩精品欧美中文字幕| 久久这里只有精品8| 国产经典免费播放视频| 国产一区免费在线观看| 国产精品久久精品| 国产极品美女在线播放| 亚洲精品在线观看91| 国产玖玖视频| 久久精品只有这里有| 成人国产免费| 亚洲AV一二三区无码AV蜜桃| 欧美激情第一欧美在线| 激情综合婷婷丁香五月尤物| 久久精品无码一区二区国产区| 国产福利一区视频| 亚洲日本中文综合在线| 国产在线观看高清不卡| 国产精品观看视频免费完整版| 日本一区中文字幕最新在线| 亚洲精品国偷自产在线91正片| 成年午夜精品久久精品| 制服无码网站| 久久伊人操| www.精品视频| 国产午夜福利片在线观看| 91久久大香线蕉| 国产超薄肉色丝袜网站| 中文字幕2区| 伊在人亚洲香蕉精品播放| 国产精品久久自在自线观看| 黄色免费在线网址| 99视频在线观看免费| 亚洲中文字幕国产av| 国产日本视频91| 亚洲欧美国产视频| 亚洲美女一区二区三区| 欧美日本在线| 黄片一区二区三区| 性欧美在线| 欧美啪啪精品| 国产精品播放| 国产制服丝袜无码视频| h网址在线观看| 久热这里只有精品6| 五月六月伊人狠狠丁香网| 国产精品成人AⅤ在线一二三四| 巨熟乳波霸若妻中文观看免费| 国产波多野结衣中文在线播放| 国产午夜福利亚洲第一| 91po国产在线精品免费观看| 日本手机在线视频| 久久国产精品影院| AV不卡无码免费一区二区三区| 一级毛片高清| 国产哺乳奶水91在线播放| 国产91av在线| 日韩国产亚洲一区二区在线观看| 亚洲午夜天堂| 国产视频你懂得| 亚洲国产精品不卡在线| 欧美一级片在线| 免费无码又爽又黄又刺激网站| 91精品视频在线播放| 日韩精品久久久久久久电影蜜臀| 视频二区中文无码| 成年片色大黄全免费网站久久| 国产精品自拍合集| 色老头综合网| 国产呦视频免费视频在线观看| 国产又粗又猛又爽视频| 永久在线播放| 日本道综合一本久久久88| 青青草原国产免费av观看| 国产精品va| 怡红院美国分院一区二区|