0 引言
汽車上用的電子設(shè)備的可靠工作與優(yōu)良性能關(guān)系者駕駛者的生命安全。車用電子設(shè)備出廠前要求對(duì)設(shè)備內(nèi)部電路板進(jìn)行長(zhǎng)時(shí)間老化測(cè)試,以檢測(cè)電路板在高溫環(huán)境和各種輸入信號(hào)條件下,是否仍正常工作。只有經(jīng)過(guò)老化測(cè)試的電路板才能出廠。由于需要老化測(cè)試的電路板數(shù)量巨大,要求該系統(tǒng)能同時(shí)老化測(cè)試許多塊被檢測(cè)電路板,因此設(shè)計(jì)了本老化測(cè)試系統(tǒng)。整個(gè)老化測(cè)試由 1個(gè)通信模塊、 10個(gè)測(cè)試模塊、1個(gè)溫控模塊及上微機(jī)軟件構(gòu)成。本老化檢測(cè)系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖如圖 1所示。
圖 1 系統(tǒng)結(jié)構(gòu)圖在本系統(tǒng)中,每個(gè)檢測(cè)模塊最多可同時(shí)檢測(cè) 10塊電路板,共有 10個(gè)檢測(cè)模塊,因此,整個(gè)系統(tǒng)在一次老化檢測(cè)過(guò)程可以同時(shí)檢測(cè)100塊電路板。檢測(cè)模塊將檢測(cè)的數(shù)據(jù)通過(guò) CAN通信送給通信模塊,由通信模塊通過(guò)串行通信發(fā)送給上位機(jī),由上位機(jī)軟件對(duì)檢測(cè)數(shù)據(jù)進(jìn)行解析,判斷被測(cè)電路板的工作狀態(tài),顯示每一塊被測(cè)電路板的工作狀態(tài),存儲(chǔ)每塊被測(cè)電路板的檢測(cè)數(shù)據(jù),生成歷史報(bào)表。上位機(jī)軟件還向操作員提供良好而方便的人機(jī)交互界面,操作員通過(guò)該界面,可以設(shè)置系統(tǒng)老化的時(shí)間、溫度與測(cè)試模式。
1 通信模塊設(shè)計(jì)
通信模塊在老化系統(tǒng)中處于核心地位,它完成兩方面的任務(wù):一方面,通過(guò)串行異步通信與上位機(jī)通信,接收用戶通過(guò)上位機(jī)發(fā)來(lái)的控制命令,向上位機(jī)發(fā)送檢測(cè)的數(shù)據(jù)。另一方面,通過(guò) CAN通信方式與 10個(gè)檢測(cè)模塊及 1個(gè)溫控模塊通信,向檢測(cè)設(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ì)對(duì)存儲(chǔ)空間的需要,無(wú)需外接存儲(chǔ)器,因而了簡(jiǎn)化系統(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í)對(duì)總線無(wú)影響等特點(diǎn)。為了進(jìn)一步提高系統(tǒng)的抗干擾能力,C8051F040的 CAN控制器引腳CANTX、CANRX和收發(fā)器 TJA1050之間并不直接相連,而是通過(guò)由高速光耦 6N137構(gòu)成的隔離電路后再與 TJA1050相連,這樣就可以很好的實(shí)現(xiàn)了 CAN總線上各節(jié)點(diǎn)的電氣隔離。增加隔離電路雖然增加了節(jié)點(diǎn)的復(fù)雜性,但它卻提高了節(jié)點(diǎn)的穩(wěn)定性和安全性。此外,為避免信號(hào)反射,導(dǎo)致通信的可靠性與抗干擾能力下降,甚至無(wú)法通信,因此,在 CAN總線的兩端需要加有 2個(gè) 120歐姆的總線阻抗匹配電阻。由于 C8051F040的端口電壓為 3.3V,串行通信電路采用的電平轉(zhuǎn)換芯片為 MAX3232。
1.2 軟件設(shè)計(jì)
1.2.1 串行通信程序設(shè)計(jì)
通信模塊一方面通過(guò)串行通信接收上位機(jī)的命令,主要命令有啟動(dòng)、停止和參數(shù)設(shè)置命令。用戶通過(guò)參數(shù)設(shè)置命令為系統(tǒng)設(shè)置不同參數(shù),可以保證老化的正確進(jìn)行。另一方面通過(guò)串行通信向上位機(jī)發(fā)送檢測(cè)到的數(shù)據(jù)。為簡(jiǎn)化設(shè)計(jì),通信模塊和上位機(jī)的串行通信采用固定長(zhǎng)度的信息幀格式,一幀信息包括幀頭、有效數(shù)據(jù)或命令、 CRC16校驗(yàn)位等。通信模塊接收上位機(jī)信息通過(guò)中斷方式實(shí)現(xiàn)。在中斷服務(wù)程序中,每接收到一個(gè)幀頭后,開(kāi)始接收后面若干字節(jié)的信息,經(jīng) CRC16校驗(yàn)有效后,就認(rèn)為是一個(gè)有效的信息幀,按照約定的串行通信協(xié)議解析該信息幀,取出其中的有效命令。通信模塊每收到一個(gè)有效命令幀,向上位機(jī)發(fā)送一幀應(yīng)答信息。為保證通信正確,上位機(jī)軟件對(duì)通信采用超時(shí)機(jī)制。如果上位機(jī)在發(fā)出一
由于通信模塊接收命令和處理命令速度的不同步,為保證上位機(jī)發(fā)來(lái)的每條命令得到執(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è)元素為一條固定長(zhǎng)度的有效命令。通過(guò)選取適當(dāng)?shù)年?duì)列長(zhǎng)度,可以保證在正常工作中,保證命令緩存隊(duì)列不會(huì)產(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;}
通信模塊向上位機(jī)發(fā)送檢測(cè)數(shù)據(jù)時(shí),按照約定的串行通信協(xié)議把一組完整的檢測(cè)數(shù)據(jù)組裝成一個(gè)信息幀發(fā)送。為簡(jiǎn)化設(shè)計(jì),該信息幀的發(fā)送不采用中斷方式,而是采用查詢方式完成。為減少 C8051F040的等待時(shí)間,結(jié)合 C8051F040的時(shí)鐘頻率,串行通信采用了的波特率為 57600bps。經(jīng)過(guò)在現(xiàn)場(chǎng)測(cè)試,在此波特率下進(jìn)行串口通信,沒(méi)有引起通信的錯(cuò)誤。
1.2.2 CAN通信程序設(shè)計(jì)
通信模塊與 10個(gè)檢測(cè)模塊及 1個(gè)溫控模塊通過(guò) CAN總線連接。理論上,在 CAN總線上,任意一個(gè)檢測(cè)模塊都可以向通信模塊發(fā)送檢測(cè)到的數(shù)據(jù),通信控制板模塊可以同時(shí)向 10個(gè)檢測(cè)模塊發(fā)送命令。 CAN總線上的發(fā)送的數(shù)據(jù)幀帶有 ID字段,ID字段的值決定每個(gè)數(shù)據(jù)幀的優(yōu)先級(jí),數(shù)據(jù)幀的 ID值越小,該數(shù)據(jù)幀的優(yōu)先級(jí)越高。同一時(shí)間,在 CAN總線上,不同的節(jié)點(diǎn),不能發(fā)送相同 ID值的數(shù)據(jù)幀。否則會(huì)造成通信錯(cuò)誤。在本設(shè)計(jì)中,分配每個(gè)檢測(cè)模塊 1個(gè)固定的 ID值,可以看作該設(shè)備的地址編號(hào)。這樣不同的設(shè)備發(fā)出的數(shù)據(jù)幀具有不同的優(yōu)先級(jí)。這樣導(dǎo)致一個(gè)問(wèn)題:如果任由每個(gè)檢測(cè)模塊主動(dòng)向通信模塊發(fā)送數(shù)據(jù)幀,會(huì)造成 ID值較大的數(shù)據(jù)幀因優(yōu)先級(jí)低,而不能發(fā)出。另外,每個(gè)檢測(cè)模塊的設(shè)計(jì)也采用了 C8051F040的作為控制核心,一方面完成信號(hào)檢測(cè),另一方面完成與通信模塊的 CAN通信。
在 C8051F040的 CAN控制器內(nèi)部有 32個(gè)緩沖區(qū),每個(gè)緩沖區(qū)為 8字節(jié),每個(gè)緩沖區(qū)需要指定一個(gè)固定的 ID值。每個(gè)緩沖區(qū)可以被設(shè)置為發(fā)送緩沖區(qū)或接收緩沖區(qū)。當(dāng)某個(gè)緩沖區(qū)被設(shè)置為發(fā)送緩沖區(qū)時(shí),該數(shù)據(jù)幀在底層帶有 ID值。當(dāng)該緩沖區(qū)被設(shè)置為接收緩沖區(qū)時(shí),則僅接收 CAN總線上具有相同 ID值的數(shù)據(jù)幀。
在設(shè)計(jì)中,通信模塊的 CAN控制器的 32個(gè)緩沖區(qū)與 ID值分配如下:第 1至第 10緩沖區(qū)為發(fā)送緩沖區(qū),對(duì)應(yīng)的 ID值 21至 30。第 1緩沖區(qū)用于向第 1個(gè)檢測(cè)模塊發(fā)送數(shù)據(jù)幀,依次類推,第 10緩沖區(qū)用于向第 10個(gè)檢測(cè)模塊發(fā)送數(shù)據(jù)幀。第 11緩沖區(qū)為發(fā)送緩沖區(qū),對(duì)應(yīng) ID值為 31,用于向溫控模塊發(fā)送數(shù)據(jù)幀。第 20緩沖區(qū)至第 30緩沖區(qū)為接收緩沖區(qū),對(duì)應(yīng) ID值 50至 60。與此對(duì)應(yīng),則 10個(gè)檢測(cè)模塊的 CAN控制器的 32個(gè)緩沖區(qū)內(nèi)的第 1緩沖區(qū)均為接收緩沖區(qū),分別對(duì)應(yīng)的 ID值是 21至 30。第 2緩沖區(qū)至第 11緩沖區(qū)均為發(fā)送緩沖區(qū),對(duì)應(yīng)的 ID值 50至 60。即 10個(gè)檢測(cè)模塊發(fā)送的 CAN數(shù)據(jù)幀具有相同的 ID值。采用上述分配的原因在于:每個(gè)檢測(cè)模塊同時(shí)檢測(cè) 10個(gè)被測(cè)電路板,每次有 10個(gè)數(shù)據(jù)幀要同時(shí)向通信模塊發(fā)送。前提條件,10個(gè)檢測(cè)模塊不能同時(shí)向通信模塊發(fā)送數(shù)據(jù)。
通信控制板和檢測(cè)模塊之間通信采用主從應(yīng)答通信方式。在工作過(guò)程中,通信模塊從串口命令緩沖隊(duì)列的隊(duì)首取出一條命令,進(jìn)行協(xié)議轉(zhuǎn)換,組裝成 8字節(jié)的 CAN信息幀。其中最后 1個(gè)字節(jié)值設(shè)為前 7個(gè)字節(jié)的 CRC8校驗(yàn)值,雖然 CAN總線本身具有 CRC校驗(yàn),在應(yīng)用層再次進(jìn)行校驗(yàn),可以提高通信的可靠性。
通信模塊將該 CAN信息幀通過(guò) CAN內(nèi)部第 1緩沖區(qū)發(fā)送,這樣 CAN總線上的第 1個(gè)檢測(cè)模塊收到該信息幀,該檢測(cè)模塊校驗(yàn)信息幀,如果通過(guò)校驗(yàn),進(jìn)一步解析該信息幀。如果是參數(shù)設(shè)置命令,則檢測(cè)設(shè)備提取其中的參數(shù),然后向通信模塊發(fā)送 1個(gè)信息幀作為響應(yīng)。如果是讀數(shù)據(jù)命令,則將 10個(gè)被測(cè)電路板的參數(shù)組裝成 10個(gè) CAN數(shù)據(jù)幀,分別通過(guò)檢測(cè)設(shè)備的 CAN緩沖區(qū)的第 2至第 11緩沖區(qū)向外發(fā)送,該 10個(gè)數(shù)據(jù)幀,僅被總線上的通信模塊接收,分別放在第 20至第 30緩沖區(qū)。通信模塊將這些信息通過(guò)串口向上位機(jī)發(fā)送。按照同樣的方式,通信模塊與其它 9個(gè)檢測(cè)模塊及 1個(gè)溫控模塊完成 CAN通信,實(shí)現(xiàn)了命令的設(shè)置與測(cè)試信息的獲取。
2 檢測(cè)模塊的設(shè)計(jì)
老化系統(tǒng)的 10個(gè)檢測(cè)模塊完全一樣,完成同樣的功能。根據(jù)分析被測(cè)電路板的特性,設(shè)計(jì)了檢測(cè)模塊實(shí)現(xiàn)檢測(cè)的方法與流程。檢測(cè)模塊首先檢測(cè)被測(cè)電路板是否存在短路故障與斷路故障,如果發(fā)現(xiàn)被測(cè)電路板存在斷路故障或斷路故障,則不再進(jìn)一步檢測(cè),在與通信模塊通信過(guò)程發(fā)送該故障信息。如果被測(cè)電路沒(méi)有短路故障或斷路故障,則檢測(cè)模塊向被測(cè)電路板加上額定工作電壓與有效的激勵(lì)信號(hào),使被測(cè)電路板正常工作,然后檢測(cè)被測(cè)電路板的輸出信號(hào)的波形類型及頻率,按照設(shè)定的檢測(cè)算法判斷被測(cè)電路板是否存在其它故障。在 100多個(gè)小時(shí)的測(cè)試過(guò)程中,測(cè)試環(huán)境的溫度可以根據(jù)用戶的設(shè)置不斷變化或自動(dòng)變化,檢測(cè)模塊提供的輸入激勵(lì)信號(hào)采用多種組合。
3 溫控模塊設(shè)計(jì)
在老化過(guò)程,被老化的電路板被放置在密閉的柜體中。該柜體內(nèi)的溫度保持在一定的范圍,以模擬中電路板的實(shí)際工作環(huán)境的溫度。溫控模塊通過(guò) CAN總線接收通信模塊發(fā)來(lái)的信息幀,解析信息幀,得到用戶要設(shè)置的溫度值。溫控模塊檢測(cè)柜體溫度,控制加熱裝置加熱與否,使柜體的溫度達(dá)到用戶設(shè)置的溫度。
溫度檢測(cè)采用 DS18B20完成,在溫控模塊中設(shè)置 4個(gè) DS18B20。將測(cè)得的 4個(gè)溫度值進(jìn)行算術(shù)平均,作為老化柜體內(nèi)的溫度值。溫控模塊的繼電器輸出接加熱棒及排風(fēng)風(fēng)扇。采用了 PID控制算法,使柜體內(nèi)溫度達(dá)到用戶設(shè)置溫度。4 上位機(jī)軟件的設(shè)計(jì)上位機(jī)軟件采用 VC++ 6.0設(shè)計(jì)完成,串口通信部分使用 Windows API函數(shù)完成,使用 API函數(shù)處理串口靈活高效。上位機(jī)軟件實(shí)時(shí)顯示每個(gè)被測(cè)電路板是否正常工作及當(dāng)前老化柜的溫度及老化時(shí)間等信息,還提供歷史數(shù)據(jù)查詢及參數(shù)設(shè)置等功能。
5 結(jié)束語(yǔ)
本老化測(cè)試系統(tǒng),采用 CAN總線作為系統(tǒng)的主要通信方式,采用模塊化結(jié)構(gòu),方便系統(tǒng)的設(shè)計(jì)與調(diào)試,同時(shí),各模塊掛在 CAN總線,易于系統(tǒng)實(shí)現(xiàn)與擴(kuò)展。本系統(tǒng)已經(jīng)應(yīng)用于生產(chǎn)中,達(dá)到了設(shè)計(jì)要求,運(yùn)行效果穩(wěn)定良好。本系統(tǒng)已產(chǎn)生經(jīng)濟(jì)效益近 30萬(wàn)元。
本文作者創(chuàng)新點(diǎn):本老化系統(tǒng)的檢測(cè)模塊與通信模塊采用 CAN總線進(jìn)行通信,通信穩(wěn)定,高速;整個(gè)系統(tǒng)采用檢測(cè)模塊-通信模塊-上位機(jī)的三層結(jié)構(gòu),實(shí)現(xiàn)了對(duì)大批量被測(cè)電路板的檢測(cè)。
幀命令后的若干時(shí)間沒(méi)有收到通信模塊的應(yīng)答信息,就再次發(fā)送該命令信息,連續(xù) 3次沒(méi)收到應(yīng)答信息,就可以認(rèn)為存在通信故障,從而產(chǎn)生報(bào)警信息,提示用戶處理。