卜云祥 黃巧亮 華明公
(1.江蘇科技大學(xué)電子信息學(xué)院 鎮(zhèn)江 212000)(2.常州今創(chuàng)集團(tuán) 常州 213011)
國外塞拉門的發(fā)展已經(jīng)有多年歷史,國內(nèi)塞拉門的發(fā)展也有近 20年歷史[1~2],自動化、智能化、高密封性[3~4]、高安全性與可靠性應(yīng)是高鐵塞拉門的發(fā)展趨勢,而塞拉門門控器的設(shè)計(jì)則成為重要設(shè)計(jì)內(nèi)容之一。
本文基于OMAPL138芯片的門控器設(shè)計(jì),是對現(xiàn)有塞拉門控制器采用兩個獨(dú)立核心板進(jìn)行控制所存在的占用空間大、硬件成本高、后期軟硬件維護(hù)難度大等缺陷進(jìn)行優(yōu)化設(shè)計(jì)。本設(shè)計(jì)采用TI公司的DSP+ARM雙核異構(gòu)處理器,有效解決了原設(shè)計(jì)存在的缺陷并提高了塞拉門控制的精確性和穩(wěn)?定性。
塞拉門控制的具體功能要求如下。
1)數(shù)據(jù)采集。塞拉門控制器通過傳感器采集門的狀態(tài)信息,每個門對應(yīng)一個特定的ID,通過采集電路將采集到的門ID,開/關(guān)門按鈕指令信息、氣壓信息、速度值等,送入控制器的CPU芯片中進(jìn)行診斷處理。
2)狀態(tài)檢測。門控器核心板上處理器在判斷出當(dāng)前開門/關(guān)門/障礙物/故障狀態(tài)后,根據(jù)不同情況作出不同反饋動作。障礙物/故障類別主要有敏感膠條觸發(fā)、關(guān)門卡滯、開門受阻。開門受阻和關(guān)門卡滯情況,連續(xù)出現(xiàn)三次后,門停止開關(guān)門嘗試,停在當(dāng)前位置并向總控臺發(fā)送診斷信息。故障信息則包括網(wǎng)絡(luò)故障、氣壓故障、門鎖未鎖死/未打開故障、開到位/關(guān)到位檢測故障等。處理器需要對檢測過程中的診斷信息進(jìn)行存儲。
3)數(shù)據(jù)通信。處理器可與外界進(jìn)行通信,通信對象可以是其他門控器、或上位機(jī)。
為滿足塞拉門控制的功能要求,本設(shè)計(jì)的門控器核心硬件設(shè)計(jì)采用主從處理器模式,即主處理器(ARM核)主要用于對上位機(jī)通信及數(shù)據(jù)存儲;從處理器(DSP核)主要用于對采集來的車門狀態(tài)進(jìn)行分析和判斷并對塞拉門驅(qū)動電機(jī)的控制。從處理器對車門狀態(tài)的診斷信息能傳輸給主處理器進(jìn)行存儲。
主處理器的硬件框圖如圖1所示。主處理器(ARM核)用于門控器之間數(shù)據(jù)通信、門控器與總控臺之間的以太網(wǎng)通信[5]、診斷信息的存儲處理及通信等。
NAND FLASH存儲模塊,NAND FLASH芯片選用S34ML01G1_04G1,用于存放主處理器運(yùn)行Linux系統(tǒng)所需文件系統(tǒng)、內(nèi)核文件、u-boot引導(dǎo)文件[6]。
DDR2共享存儲模塊,芯片選用MT47H64M16HR-25EITH,用于雙核芯片DSP核和ARM核間的診斷信息數(shù)據(jù)的共享存儲和讀寫。
串口模塊,主處理器通過UART2_RXD和UART2_TXD引腳連接UART接口,以便于連接上位機(jī)軟件進(jìn)行串口調(diào)試。
以太網(wǎng)通信模塊,主處理器通過RMII_RXD和RMII_TXD引腳連接以太網(wǎng)通信接口用于和總控臺進(jìn)行數(shù)據(jù)通信。
SD Card模塊,通過MMCSD0_DAT數(shù)據(jù)引腳與主處理器相連,主要用于芯片ARM端運(yùn)行的Linux系統(tǒng)的更新。
圖1 主處理器硬件框圖
從處理器(DSP核)用于對采集來的車門狀態(tài)進(jìn)行分析和判斷。通過采樣,檢測到塞拉門出現(xiàn)故障時,能及時判斷發(fā)生的故障。故障分為A、B、C三級:A級,車門立刻停止動作,進(jìn)入釋放狀態(tài),等待手動操作;B級:車門將繼續(xù)進(jìn)行開/關(guān)門嘗試;C級:不影響門運(yùn)行狀態(tài)。故障不論級別,均會通過雙核通信將診斷信息傳送到主處理器(ARM核)存儲,而正常運(yùn)行時開關(guān)門信息則不進(jìn)行診斷數(shù)據(jù)傳輸與存儲。從處理器還能實(shí)現(xiàn)對塞拉門驅(qū)動電機(jī)的控制[7]。該部分硬件框圖如圖2所示。
圖2 從處理器硬件框圖
從處理器通過ADC采樣引腳(Current1/2),連接外設(shè)系統(tǒng)的電流電壓采樣電路,用于對采集來的車門狀態(tài)進(jìn)行分析和判斷。
從處理器通過eCAP口,與捕獲電路相連,使得從處理器具有故障診斷功能。
從處理器通過普通GPIO口接口,與門控器電路相連,實(shí)現(xiàn)對塞拉門主鎖、輔助鎖、報警裝置等硬件設(shè)備的控制,檢測到開/關(guān)門信號(GPIO)時能及時執(zhí)行開關(guān)門命令。
從處理器通過3路ePWM引腳連接電機(jī)驅(qū)動電路,實(shí)現(xiàn)對塞拉門驅(qū)動電機(jī)的控制。電機(jī)采用無刷直流電機(jī)。
DDR2共享存儲模塊,用于雙核芯片DSP核和ARM核間對車門診斷信息數(shù)據(jù)的共享存儲和讀寫。
從處理器通過普通GPIO口與外圍設(shè)備蜂鳴器相連,用于對嚴(yán)重故障信息的報警發(fā)聲。
OMAPL138是DSP+ARM雙核異構(gòu)處理器[8],在本設(shè)計(jì)中,ARM核選用Linux系統(tǒng)環(huán)境Ubuntu 12.04取代之前的裸機(jī)開發(fā),該版本內(nèi)核支持OMAPL138的雙核通信所用到的SYSLINK組件。DSP核則選擇在Linux系統(tǒng)中安裝Code Composer Studio 5.5(CCS 5.5)作為開發(fā)平臺以降低后期軟件維護(hù)難度。
本設(shè)計(jì)中,根據(jù)塞拉門控制器的功能需求以及雙核芯片的硬件特點(diǎn),控制器軟件設(shè)計(jì)主要分為主處理器軟件設(shè)計(jì)和從處理器軟件設(shè)計(jì),本系統(tǒng)軟件設(shè)計(jì)總框圖如圖3所示。
圖3 系統(tǒng)軟件設(shè)計(jì)流程總圖
Syslink組件部分由主處理器進(jìn)行啟動并分配共享內(nèi)存空間[9~10],依賴于主處理器啟動,從處理器啟動Syslink組件時只為從處理器本身分配雙核通信空間。
由于塞拉門故障信息反饋對實(shí)時性要求較高,故Syslink組件啟動[11]后,主處理器不進(jìn)行組件的注銷,Syslink組件隨門控器運(yùn)行而運(yùn)行,使得主從處理器一直處于雙核通信的同步連通狀態(tài)。從而保證了故障反饋的實(shí)時性,增加了塞拉門控制的可靠性和安全性。
Syslink中的處理器間通信協(xié)議(IPC Protocols)有很多類[12],本設(shè)計(jì)綜合使用了多種組件和協(xié)議來傳輸診斷信息,共享內(nèi)存地址范圍為:0xc200 0000~0xc400 0000。Syslink 進(jìn) 程 創(chuàng) 建 函 數(shù) syslink_main()包含兩步,程序如下:
在主處理中,啟動Syslink組件的啟動函數(shù)Syslink*dual_core_link_new()處理流程如圖4所示。主要實(shí)現(xiàn)總圖中,分配ARM端地址空間、初始化Syslink組件、連接IPC接口部分的功能。
通過函數(shù)dual_core_link_start()實(shí)現(xiàn)雙核間通信建立流程如圖5所示。主要實(shí)現(xiàn)總圖中,IPC通信啟動及連接部分的功能。
圖4 Syslink創(chuàng)建流程圖
圖5 Syslink啟動流程圖
通信的建立只能由主處理器發(fā)起,從處理器則在上電自動啟動Syslink組件后進(jìn)入等待狀態(tài)。
1)通過dual_core_link_new()函數(shù)創(chuàng)建雙核通信進(jìn)程。
首先主處理器需要為Syslink組件分配一個連續(xù)的內(nèi)存空間以及為從處理器DSP分配一個存儲空間:
Syslink*dual_core_linkspace=(Syslink*)calloc(1,sizeof(Syslink));
內(nèi)存空間分配完成后,調(diào)用Syslink啟動函數(shù)SysLink_setup(),初始化 Syslink組件,該函數(shù)為Syslink API接口函數(shù),且必須在調(diào)用其他Syslink API函數(shù)之前調(diào)用。該函數(shù)調(diào)用時,若啟動失敗,則將錯誤信息存儲到指定文件夾“stderr”中,延時1ms后再次嘗試啟動,最多嘗試啟動100次?!皊tderr”存儲信息時,通過記錄信息條數(shù)stderr_msg_count來確定是否初始化失敗,若失敗,則門控器數(shù)碼管顯示故障代碼init_error_code。此時需要斷電后重新給門控器上電。
if(stderr_msg_count>=100){Dig_display(init_error_code);break;}
調(diào)用Syslink API接口函數(shù)MultiProc_getId()獲取從處理器ID(從處理器ID此后不可更改),然后返回Syslink組件分配到的內(nèi)存空間首地址。
2)通過函數(shù)dual_core_link_start()實(shí)現(xiàn)雙核通信建立。
根據(jù)新建雙核進(jìn)程時獲得的從處理器ID:Processor_dsp_address,主處理器調(diào)用Syslink API接口函數(shù)Ipc_control()函數(shù),先后進(jìn)行加載、啟動雙核通信進(jìn)程:
status_load=Ipc_control(*Processor_dsp_address,0xBABE0000,NULL);
if(status_load < 0){return false;}
0xBABE0000為IPC加載回調(diào)函數(shù)控制命令的ID,本段程序功能為發(fā)送加載雙核通信組件命令給從處理器,Ipc_control()函數(shù)若通信加載成功則返回0,失敗返回負(fù)值,根據(jù)其返回值,從而判斷雙核間通信是否成功加載。
加載后需要發(fā)送啟動雙核通信組件命令給從處理器,啟動命令的判斷過程與加載命令的判斷過程相同,啟動命令名為Ipc_CONTROLCMD_STARTCALLBACK,啟 動 命 令 ID為0xBABE0001。
dual_core_link_start()函數(shù)返回值為布爾型,根據(jù)返回值可判斷雙核通信是否啟動成功。若成功,則開始進(jìn)行雙核同步處理;若失敗,則報錯并在門控器數(shù)碼管顯示故障代碼后等待門控器核心板斷電重啟。
if(! dual_core_link_start){Dig_display(start_error_code);break;}
雙核同步處理過程,首先使用進(jìn)程間信號量進(jìn)行初始化并占用線程,然后使用Syslink IPC協(xié)議中的Notify_registerEvent()函數(shù)注冊雙核同步事件,最后解除進(jìn)程間信號量阻塞,實(shí)現(xiàn)雙核間通信同步。
主處理器在進(jìn)入同步等待狀態(tài)后,創(chuàng)建共享內(nèi)存,通過Syslink IPC協(xié)議中的NameServer通信協(xié)議上傳共享內(nèi)存地址到Syslink組件。創(chuàng)建共享內(nèi)存、設(shè)置共享內(nèi)存大小由函數(shù)SharedRegion_getH-eap()、Memory_calloc()完成,由于傳輸數(shù)據(jù)內(nèi)容較多,所以創(chuàng)建的共享內(nèi)存空間要取較大值,本設(shè)計(jì)取共享內(nèi)存空間大小為1M。
從處理器即DSP端啟動流程如圖3右側(cè)所示,Syslink組件的創(chuàng)建和初始化過程和主處理器相同,初始化Syslink組件后進(jìn)入循環(huán)等待狀態(tài),DSP每隔1ms查詢一次IPC端口狀態(tài)。在收到主處理器端發(fā)送的Ipc_CONTROLCMD_LOADCALLBACK加載命令[13]后啟動IPC通信。在收到主處理器端Ipc_CONTROLCMD_STARTCALLBACK命令后,退出循環(huán)等待狀態(tài),完成Syslink組件的創(chuàng)建和IPC通信連接[14]。
在雙核通信連接建立后,DSP開始進(jìn)入工作狀態(tài),進(jìn)入車門診斷流程,DSP端診斷出故障信息時,獲取共享內(nèi)存地址,寫入診斷信息(車門ID、故障代碼、IO狀態(tài)、網(wǎng)絡(luò)信息、發(fā)生時間等)。其中,對敏感膠條的長時間觸發(fā)診斷流程圖如圖6所示,診斷功能為內(nèi)側(cè)敏感元件一直有效,報此故障。
根據(jù)模塊化的設(shè)計(jì)要求,向共享內(nèi)存寫入故障信息主要由Message_store()函數(shù)實(shí)現(xiàn)。Dig_display()函數(shù)為顯示函數(shù),用于控制數(shù)碼管上故障代碼顯示。Timer_start()函數(shù)用于啟動定時器,Timer_reset()函數(shù)用于復(fù)位定時器。
在內(nèi)部敏感膠條被按下時,內(nèi)部敏感膠條信號置1,同時檢測定時器0的狀態(tài)若定時器未啟動則啟動定時器0。開始計(jì)時,若已啟動定時器0,則繼續(xù)計(jì)時;若計(jì)時未到60s,則繼續(xù)采集內(nèi)部敏感膠條信號:
若敏感膠條持續(xù)觸發(fā)且時間超過seted_time(60s)時,判定為已觸發(fā)此故障。通過Message_store()函數(shù)對故障信息進(jìn)行記錄并存入共享內(nèi)存中,通過Dig_display()函數(shù)在門控器上顯示故障代碼。從而實(shí)現(xiàn)了對內(nèi)部敏感膠條故障的診斷。
其余診斷流程與敏感膠條診斷流程類似,就不再贅述了。至此,塞拉門控制器的軟件設(shè)計(jì)全部完成。
圖6 敏感膠條故障診斷流程圖
本設(shè)計(jì)基于OMAPL138的塞拉門控制器研究,減小了塞拉門控制器占用空間,通過SyslinkIPC雙核通信保證了數(shù)據(jù)傳輸?shù)目焖傩裕?5~16],增強(qiáng)了控制系統(tǒng)的精確性,降低了后期軟硬件維護(hù)難度,為開發(fā)提供了便利,并且在實(shí)際應(yīng)用中驗(yàn)證了可行性。
接下來的研究中,將嘗試加入LCD顯示屏數(shù)據(jù)接口。由于目前進(jìn)行后期軟件維護(hù)時,需要攜帶電腦,數(shù)據(jù)線等設(shè)備,而在調(diào)試現(xiàn)場的操作空間并沒有那么大,現(xiàn)場維護(hù)有一定難度。使用LCD顯示屏可以使后期的軟件維護(hù)更加方便快速。