康瑞航,嚴(yán) 宇,劉 奇,郝 飛,申港港,倪 新
(陜西萬(wàn)方汽車零部件有限公司,陜西 西安 710200)
硬件電路檢測(cè)是電器產(chǎn)品生產(chǎn)過(guò)程中的重要環(huán)節(jié),可以在產(chǎn)品外殼裝配環(huán)節(jié)前檢測(cè)出硬件電路甚至芯片或者電阻級(jí)別的質(zhì)量問(wèn)題,避免問(wèn)題件被深度加工。
硬件電路檢測(cè)軟件主要功能有開(kāi)關(guān)電路檢測(cè)(高有效、低有效)、ADC信號(hào)采集電路、系統(tǒng)電壓采集電路(主系統(tǒng)電壓和各分系統(tǒng)電壓)、系統(tǒng)喚醒源(CAN、LIN、硬線)電路、半橋/全橋驅(qū)動(dòng)電路、驅(qū)動(dòng)電路、驅(qū)動(dòng)電路的輸出反饋電路、驅(qū)動(dòng)電路的輸出上拉電路以及各種通信接口電路(CAN、LIN、串口)等等。
硬件檢測(cè)軟件功能需求除了基本的硬件電路檢測(cè)以外,還需要人機(jī)交互、檢測(cè)結(jié)果數(shù)據(jù)傳輸功能、按照功能模塊化劃分,具體系統(tǒng)功能組件如圖1所示。
圖1 系統(tǒng)功能組件圖
按照功能進(jìn)行軟件代碼分層設(shè)計(jì),將系統(tǒng)由外設(shè)驅(qū)動(dòng)層(PD)外設(shè)抽象層(PAL)、中間件層(Middleware)、應(yīng)用層、狀態(tài)機(jī)調(diào)度層分為5層。每個(gè)層級(jí)又分為多個(gè)單獨(dú)的模塊,模塊間相互獨(dú)立,被上次系統(tǒng)逐級(jí)調(diào)用,軟件分層如圖2所示。
圖2 軟件分層圖
PD層組件通過(guò)調(diào)用對(duì)外設(shè)寄存器操作的硬件訪問(wèn)(一般為宏定義或者static函數(shù)),讀寫MCU底層硬件外設(shè)模塊的寄存器,完成對(duì)外設(shè)功能配置和狀態(tài)讀取實(shí)現(xiàn)軟硬件交互,由于PD層代碼直接操作寄存器,所以其效率很高,但不能跨平臺(tái)使用[1]。
PD層組件提供了豐富的API接口,支持對(duì)外設(shè)寄存器進(jìn)行直接讀寫操作,其API函數(shù)以
在PD層的基礎(chǔ)上,封裝一個(gè)外設(shè)抽象層,將能夠?qū)崿F(xiàn)相同功能的外設(shè)PD組件封裝為一個(gè)PAL功能組件,PAL抽象對(duì)上層級(jí)提供統(tǒng)一的API函數(shù),便于上層對(duì)于相同功能模塊的統(tǒng)一化處理。
PAL層組件對(duì)PD層組件功能進(jìn)行了抽象和封裝,提供了相對(duì)較少但功能強(qiáng)大的API接口,其API函數(shù)以
定時(shí)器中斷服務(wù)函數(shù)void ftmTimerISR(void)
代碼如下:
用于產(chǎn)生時(shí)間標(biāo)志用于驅(qū)動(dòng)調(diào)度機(jī)制運(yùn)轉(zhuǎn),以及指示燈閃爍,便于使用者觀察[2]。
一般中間件包括軟件協(xié)議棧(CAN,LIN)USB及文件系統(tǒng),外圍復(fù)雜芯片驅(qū)動(dòng)。S32 SDK 提供了PD,PAL,Middle-ware,可以通過(guò)NXP公司的桌面可視化配置工具完成配置,配置方法參考的是官方說(shuō)明文檔,也可參考官方代碼自行完成PD層和PAL層設(shè)計(jì)[3]。
本設(shè)計(jì)PD層和PAL層用NXP提供的SDK配置,Middle-ware使用協(xié)議棧生成CAN,LIN通訊協(xié)如圖3所示。
圖3 CAN協(xié)議棧代碼
定義狀態(tài)數(shù)據(jù)的枚舉類型
本設(shè)計(jì)應(yīng)用層主要是調(diào)用狀態(tài)機(jī)調(diào)度層,實(shí)現(xiàn)不同模塊的硬件狀態(tài)檢測(cè),此外應(yīng)用層還有個(gè)重要任務(wù)是將檢測(cè)結(jié)果通過(guò)CAN總線或者LIN總線或者串口傳輸出去,檢測(cè)結(jié)果輸出方式可靈活配置選擇某種方式也可以三種方式同時(shí)輸出,便于上位機(jī)或者顯示屏等使用,檢測(cè)結(jié)果通過(guò) CAN總線如圖4所示。
圖4 檢測(cè)結(jié)果通過(guò)CAN總線外發(fā)
分層架構(gòu)設(shè)計(jì)的硬件檢測(cè)軟件和老版本的硬件檢測(cè)軟件在檢測(cè)效率和誤檢率上的比較數(shù)據(jù),如表1所示。
表1 分層架構(gòu)后檢測(cè)時(shí)間和誤檢數(shù)對(duì)比(每100個(gè))
本文介紹的分層設(shè)計(jì),逐級(jí)調(diào)用的硬件檢測(cè)軟件已經(jīng)在檢測(cè)臺(tái)架上使用,并明顯提高了檢測(cè)效率,降低了誤檢率。在硬件檢測(cè)軟件的設(shè)計(jì)中,這樣設(shè)計(jì)有如下優(yōu)點(diǎn):
(1)提高軟件質(zhì)量,縮短產(chǎn)品開(kāi)發(fā)周期,在各模塊算法軟件實(shí)現(xiàn)的時(shí)候,能調(diào)用統(tǒng)一的底層軟件提高代碼復(fù)用性,避免重復(fù)去實(shí)現(xiàn)相似的函數(shù),減少工作量提高代碼運(yùn)行效率。
(2)可配置的檢測(cè)結(jié)果輸出方式,方便后期檢測(cè)臺(tái)架升級(jí),狀態(tài)機(jī)清晰的程序結(jié)構(gòu)和統(tǒng)一接口可有效避免軟件代碼問(wèn)題,提高產(chǎn)品的穩(wěn)定性。
(3)代碼的分層設(shè)計(jì),便于后期針對(duì)需求對(duì)部分軟件進(jìn)行調(diào)整而不影響其他沿用軟件,簡(jiǎn)化程序的升級(jí)和維護(hù)。