基于單片機(jī)MC9S12XS128的汽車BCM的設(shè)計(jì)
圖2 硬件電路圖
MC33993通過(guò)SPI和處理器通信,可檢測(cè)22路開(kāi)關(guān)量輸入信號(hào),并可以設(shè)置哪些開(kāi)關(guān)通道可以觸發(fā)中斷。首先XS128通過(guò)SPI向MC33993發(fā)送控制命令字,進(jìn)行初始化設(shè)置,設(shè)定MC33993的工作方式,并使能那些中斷喚醒的開(kāi)關(guān)通道的可觸發(fā)中斷功能。在正常工作模式下XS128通過(guò)SPI接口周期讀取MC33993的開(kāi)關(guān)狀態(tài),在低功耗模式下可觸發(fā)中斷的開(kāi)關(guān)通道狀態(tài)發(fā)生變化時(shí),便可以喚醒XS128,進(jìn)入正常工作模式。
2 軟件設(shè)計(jì)
2.1 軟件流程設(shè)計(jì)
BCM的軟件設(shè)計(jì)采用初始化+循環(huán)體的軟件結(jié)構(gòu),軟件流程圖如圖3所示。首先進(jìn)行全局變量和所用外設(shè)(包括IO、ADC、SPI、PWM、TIME-R、SCI)的初始化,然后在循環(huán)體內(nèi)依次進(jìn)行開(kāi)關(guān)信號(hào)檢測(cè)、LIN通信、RKE通信以及負(fù)載控制。對(duì)負(fù)載控制邏輯而言,開(kāi)關(guān)信號(hào)、LIN信號(hào)和RKE信號(hào)都是觸發(fā)其控制操作的輸入信號(hào),而且由于需要把若干開(kāi)關(guān)信號(hào)填充到LIN幀中,所以把負(fù)載控制放在循環(huán)體的最后,各軟件模塊次序如圖3所示。
圖3 軟件流程圖
2.2 開(kāi)關(guān)信號(hào)檢測(cè)軟件設(shè)計(jì)
在BCM的開(kāi)關(guān)控制邏輯中,開(kāi)關(guān)信號(hào)的狀態(tài)及其變化經(jīng)常作為某個(gè)控制邏輯的背景條件和激勵(lì)信號(hào),所以在程序設(shè)計(jì)時(shí),對(duì)單個(gè)物理開(kāi)關(guān)信號(hào)需要確定其當(dāng)前狀態(tài)及狀態(tài)跳變(包括開(kāi)關(guān)閉合到斷開(kāi)和開(kāi)關(guān)斷開(kāi)到閉合的變化)。由于BCM需要采集的開(kāi)關(guān)信號(hào)比較多,為了程序的簡(jiǎn)潔和邏輯的清晰,定義一個(gè)結(jié)構(gòu)體將各路開(kāi)關(guān)信號(hào)統(tǒng)一起來(lái),利用結(jié)構(gòu)體的位變量特性節(jié)約變量空間,利用結(jié)構(gòu)的統(tǒng)一性節(jié)約開(kāi)關(guān)信號(hào)檢測(cè)函數(shù)的代碼空間。設(shè)計(jì)結(jié)構(gòu)體如下:
在上述結(jié)構(gòu)體中Switch表示開(kāi)關(guān)信號(hào)的當(dāng)前狀態(tài),Swon_event和Swoff_event分別表示開(kāi)關(guān)從斷開(kāi)到閉合和從閉合到斷開(kāi)的變化,CurSw和Detect_cnt用于開(kāi)關(guān)信號(hào)采集、的軟件消抖功能。設(shè)計(jì)一10 ms的定時(shí)器,周期讀取開(kāi)關(guān)當(dāng)前狀態(tài),3次確認(rèn)以判斷Switch、Swon_event、Swoff_event。其代碼實(shí)現(xiàn)如下:
評(píng)論