基于CAN總線的老化測試系統(tǒng)的設(shè)計(jì)
0 引言
汽車上用的電子設(shè)備的可靠工作與優(yōu)良性能關(guān)系者駕駛者的生命安全。車用電子設(shè)備出廠前要求對設(shè)備內(nèi)部電路板進(jìn)行長時(shí)間老化測試,以檢測電路板在高溫環(huán)境和各種輸入信號條件下,是否仍正常工作。只有經(jīng)過老化測試的電路板才能出廠。由于需要老化測試的電路板數(shù)量巨大,要求該系統(tǒng)能同時(shí)老化測試許多塊被檢測電路板,因此設(shè)計(jì)了本老化測試系統(tǒng)。整個(gè)老化測試由 1個(gè)通信模塊、 10個(gè)測試模塊、1個(gè)溫控模塊及上微機(jī)軟件構(gòu)成。本老化檢測系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖如圖 1所示。
圖 1 系統(tǒng)結(jié)構(gòu)圖在本系統(tǒng)中,每個(gè)檢測模塊最多可同時(shí)檢測 10塊電路板,共有 10個(gè)檢測模塊,因此,整個(gè)系統(tǒng)在一次老化檢測過程可以同時(shí)檢測100塊電路板。檢測模塊將檢測的數(shù)據(jù)通過 CAN通信送給通信模塊,由通信模塊通過串行通信發(fā)送給上位機(jī),由上位機(jī)軟件對檢測數(shù)據(jù)進(jìn)行解析,判斷被測電路板的工作狀態(tài),顯示每一塊被測電路板的工作狀態(tài),存儲每塊被測電路板的檢測數(shù)據(jù),生成歷史報(bào)表。上位機(jī)軟件還向操作員提供良好而方便的人機(jī)交互界面,操作員通過該界面,可以設(shè)置系統(tǒng)老化的時(shí)間、溫度與測試模式。
1 通信模塊設(shè)計(jì)
通信模塊在老化系統(tǒng)中處于核心地位,它完成兩方面的任務(wù):一方面,通過串行異步通信與上位機(jī)通信,接收用戶通過上位機(jī)發(fā)來的控制命令,向上位機(jī)發(fā)送檢測的數(shù)據(jù)。另一方面,通過 CAN通信方式與 10個(gè)檢測模塊及 1個(gè)溫控模塊通信,向檢測設(shè)備發(fā)送命令和采集數(shù)據(jù)。通信模塊的硬件系統(tǒng)框圖如圖 2所示。
1.1 硬件設(shè)計(jì)
通信模塊采用 C8051F040作為核心。C8051F040具有許多優(yōu)點(diǎn)。1.采用高速 8051微控制器內(nèi)核,流水線結(jié)構(gòu),大部分指令的執(zhí)行時(shí)間為一或兩個(gè)系統(tǒng)時(shí)鐘周期。
2.有 4352字節(jié)的內(nèi)部 RAM和 64K字節(jié)的 FLASH,滿足大多數(shù)應(yīng)用設(shè)計(jì)對存儲空間的需要,無需外接存儲器,因而了簡化系統(tǒng)設(shè)計(jì)。
3.配置多種端口,如 SPI、SMBus和 UART。
4.C8051F040內(nèi)置標(biāo)準(zhǔn) CAN控制器,只要外接 CAN通信接口芯片就可以進(jìn)行通信,方便實(shí)現(xiàn) CAN總線通信,提高通信的可靠性。
由于 C8051F040集成的是 CAN控制器,要使實(shí)現(xiàn) CAN總線通信,還需要外接 CAN總線收發(fā)器,常用的 CAN總線收發(fā)器有 Philips公司的 PCA82C250收發(fā)器、高速 TJA1050收發(fā)器等。本設(shè)計(jì)采用了 TJA1050高速 CAN收發(fā)器,TJA1050具有電磁輻射低、防短路、不上電時(shí)對總線無影響等特點(diǎn)。為了進(jìn)一步提高系統(tǒng)的抗干擾能力,C8051F040的 CAN控制器引腳CANTX、CANRX和收發(fā)器 TJA1050之間并不直接相連,而是通過由高速光耦 6N137構(gòu)成的隔離電路后再與 TJA1050相連,這樣就可以很好的實(shí)現(xiàn)了 CAN總線上各節(jié)點(diǎn)的電氣隔離。增加隔離電路雖然增加了節(jié)點(diǎn)的復(fù)雜性,但它卻提高了節(jié)點(diǎn)的穩(wěn)定性和安全性。此外,為避免信號反射,導(dǎo)致通信的可靠性與抗干擾能力下降,甚至無法通信,因此,在 CAN總線的兩端需要加有 2個(gè) 120歐姆的總線阻抗匹配電阻。由于 C8051F040的端口電壓為 3.3V,串行通信電路采用的電平轉(zhuǎn)換芯片為 MAX3232。
1.2 軟件設(shè)計(jì)
1.2.1 串行通信程序設(shè)計(jì)
通信模塊一方面通過串行通信接收上位機(jī)的命令,主要命令有啟動、停止和參數(shù)設(shè)置命令。用戶通過參數(shù)設(shè)置命令為系統(tǒng)設(shè)置不同參數(shù),可以保證老化的正確進(jìn)行。另一方面通過串行通信向上位機(jī)發(fā)送檢測到的數(shù)據(jù)。為簡化設(shè)計(jì),通信模塊和上位機(jī)的串行通信采用固定長度的信息幀格式,一幀信息包括幀頭、有效數(shù)據(jù)或命令、 CRC16校驗(yàn)位等。通信模塊接收上位機(jī)信息通過中斷方式實(shí)現(xiàn)。在中斷服務(wù)程序中,每接收到一個(gè)幀頭后,開始接收后面若干字節(jié)的信息,經(jīng) CRC16校驗(yàn)有效后,就認(rèn)為是一個(gè)有效的信息幀,按照約定的串行通信協(xié)議解析該信息幀,取出其中的有效命令。通信模塊每收到一個(gè)有效命令幀,向上位機(jī)發(fā)送一幀應(yīng)答信息。為保證通信正確,上位機(jī)軟件對通信采用超時(shí)機(jī)制。如果上位機(jī)在發(fā)出一
由于通信模塊接收命令和處理命令速度的不同步,為保證上位機(jī)發(fā)來的每條命令得到執(zhí)行,需要將有效命令放入到命令緩存隊(duì)列的隊(duì)尾。該命令緩存隊(duì)列采用環(huán)形結(jié)構(gòu),接收的有效命令被放到隊(duì)尾,而主程序從命令緩存隊(duì)列的頭部取出一條命令,進(jìn)行后期處理。為方便從命令緩存隊(duì)列存放或存取一條命令,在實(shí)現(xiàn)命令緩存隊(duì)列時(shí),采用了二維數(shù)組結(jié)構(gòu),即數(shù)組的每一個(gè)元素為一條固定長度的有效命令。通過選取適當(dāng)?shù)年?duì)列長度,可以保證在正常工作中,保證命令緩存隊(duì)列不會產(chǎn)生溢出。本設(shè)計(jì)中,命令緩存隊(duì)列的數(shù)據(jù)結(jié)構(gòu)如下:
unsigned char s_queue[QUEUE_LEN][CMD_PACK_LEN];
unsigned char s_front;
unsigned char s_rear;}
評論