單片機在家電控制系統(tǒng)中的應(yīng)用
1 系統(tǒng)構(gòu)成和核心接口電路的工作原理 設(shè)計家電控制器的核心是成本、功耗的控制。現(xiàn)在市場上的同類產(chǎn)品中需要的硬件資源比較多,包括國個MCU和個三-八譯碼器,其中三-八譯碼器用于擴展I/O端口。實際上,在國般MCU的I/O端口足夠的情況下,可以充發(fā)利用MCU,采用軟件編碼模塊完全代替三-八譯碼器,從而降低成本和功耗。 1.1 用戶端的輸入信號源和輸出信號源 冷風扇除了具有普通電風扇的基本功能外,還有國個最重要的功能——冷風功能,用于選擇是否冷風輸出。控制功能需要兩個水位信號源——缺水(L)、水滿(H),輸出信號國個。 從用戶使用方面來講,有下列輸入源和輸出源。 輸入源: ·6個鍵盤:關(guān)機、開機/風速、風類、導風、定時和冷風; ·6個紅外遙控功能鍵:與鍵盤相對應(yīng); ·2個水位信號。 輸出源: ·12個LED指示燈; ·5個控制信號:高風HF、中風MF、低風LF、導風SWI和冷風輸出控制; ·蜂鳴信號。 1.2 系統(tǒng)構(gòu)成框圖 本設(shè)計中采用單片機SST868542R。該單片機有20個I/O端口,352字節(jié)片上SRAM,16KB Flash EEPROM,以及兩個可充當計數(shù)器的模塊Core Timer和Carrier Modulator Transmitter。采用6805精簡指令集。 6個紅外輸入共有國個紅外輸入端口,根據(jù)輸入的紅外碼來判斷輸入的按鍵。6個鍵盤輸入共用國個鍵盤輸入端口。12個LED指示燈與單片機的接口有8個,分別為6個掃描端口和2個控制端口。系統(tǒng)框圖如圖1所示。 1.3 LED和鍵盤輸入的接口電路及其工作原理 為了節(jié)省I/O端口,接口電路將12個LED排列成一個6行×2列的矩陣,如圖2所示。每列有6個LED,其陽極相連并通過一個反相器連接到單片機的I/O口,稱為控制端口。每行有2個LED,其陰極相連并與單片機I/O口相連,稱為掃描端口。每一行的掃描端口后串聯(lián)一個二極管和一個脈沖式鍵盤,6個鍵盤的另一端相連并與單片機的公共鍵盤輸入端口相連。這樣LED和鍵盤僅需要9個端口。 由于電路上的需要,LED和鍵盤檢測采用行掃描的工作方式。每次掃描將需掃描行的掃描端口置低,其它掃描端口置高。如果此時按下被掃描行的鍵盤,那么公共鍵盤輸入端口為低電平,否則為高電平。為了讓指標燈持續(xù)發(fā)亮沒有閃爍感,掃描頻率要求75Hz以上。每周期掃描6行,因此掃描時間間隔應(yīng)小于2.2ms。 2 軟件模塊的設(shè)計 系統(tǒng)軟件分為主程序和實時中斷兩個模塊。 主程序包括系統(tǒng)參數(shù)初始傾向循環(huán)工作過程。系統(tǒng)參數(shù)初始化包括單片機狀態(tài)參量和程序自定義的狀態(tài)變量的初始化。循環(huán)工作過程循環(huán)執(zhí)行水位檢測、紅外碼流檢測、輸入狀態(tài)字變化檢測、輸出端口賦值和定時器檢查等任務(wù)。 實時中斷服務(wù)程序是本設(shè)計中的關(guān)鍵,主要處理與時間有關(guān)的任務(wù),包括掃描端口和控制端口的賦值、鍵盤檢測、定時器的處理、蜂鳴波形的產(chǎn)生和紅外信號的捕獲等。 2.1 鍵盤和LED的掃描編碼 指示燈用于指示系統(tǒng)的當前狀態(tài),而系統(tǒng)的狀態(tài)由用戶輸入的信號來改變。根據(jù)6種不同的輸入源,定義6個輸入狀態(tài)變量,每一次按鍵,相應(yīng)的狀態(tài)字將產(chǎn)生變化,表示系統(tǒng)的不同狀態(tài)。從上述的電路及其工作原理可以看出,輸入鍵盤和掃描端口的值是相互對應(yīng)的,如‘關(guān)閉鍵’對應(yīng)0111,狀態(tài)變量設(shè)為OFF,只有兩個狀態(tài),開/關(guān),因此用一個比特就能表示。同理可以得到其它5個狀態(tài)變量的定義和編碼。編碼應(yīng)盡量簡單,狀態(tài)的變經(jīng)如能采用自編碼應(yīng)盡量簡單,狀態(tài)的變化如能采用自減一或自加一則最好。詳細見表1。
表1 輸入狀態(tài)變量的定義及編碼 輸入鍵 掃描端口PA7-2 紅外碼字 狀態(tài)變量 狀態(tài)變化的編碼 關(guān)閉
開機/風速 | 風類 | 定時 | 導風 | 冷風 |
011111 | 22h | |||
101111 | 60h | |||
110111 | 40h | |||
111011 | 01h | |||
111101 | E0h |
111110 C0h OFF
SPEED
MODE
TIMER
SWING
COOL 1-關(guān)機 0-開機
11-低 10-中 01-高
11-正常 10-自然 01-睡眠
1111-無 1110-0.5小時…
0000-7.5小時
1-無 0-導風
1-無 0-冷風 LED的掃描端口是確定的六個值,控制端口的數(shù)據(jù)由輸入狀態(tài)變量來決定。 當系統(tǒng)處于開機狀態(tài)下,掃描端口是011111時,表示選中(圖2)LED矩陣的第一行,此時系統(tǒng)控制第一行兩個燈的亮滅。首先來看看這兩個燈各代表什么意思,第一個表示‘導風’連接到PA0端口,第二個表示‘冷風’連接到PA1端口。 從狀態(tài)字的定義來看,SWING=1,無導風,則燈滅,反之SWING=0,燈亮;由于MCU的PA0端口通過反相器連接到該燈的陽極,所以PA0=1,燈滅,PA0=0,燈亮,因此PA0的值直接等于狀態(tài)變量SWING。同理,PA1=COOL。 在其它5個不同的掃描端口賦值下,根據(jù)控制燈和狀態(tài)字的意義,可以得出如表2的結(jié)果,表中的(0)、(1)、(2)、(3)表示該狀態(tài)字的第0、1、2、3位的值。當系統(tǒng)處于關(guān)閉狀態(tài)時,所有指示燈是滅的,因此對于6個掃描端口值,控制端口PA1-PA0恒等于11,不驅(qū)動LED。
表2 開機狀態(tài)下控制端口、輸入狀態(tài)字和掃描序號的關(guān)系 掃描序號 PA7-PA2 PA1 PA0 5 011111 COOL(0) SWING(0) 4 101111 SPEED(0) NOT(SPEED(0) AND SPEED(1)) 3 110111 TIMER(0) SPEED(1) 2 111011 TIMER(1) NOT(MODE(0) AND MODE(1)) 1 111101 TIMER(2) MODE(0) 0 111110 TIMER(3) MODE(1) 事實上,5個控制輸出信號也是與當前的狀態(tài)變量密切相關(guān)的,它們的賦值計算方法與PA1、PA0相同。 2.2 紅外碼流檢測 紅外碼流檢測采用查詢方式。在實時中斷服務(wù)程序中,每隔2ms檢查是否有紅外按建鍵輸入,進行引導碼的查詢捕獲。一旦捕獲后,執(zhí)行碼流檢測子程序,該子程序包括讀取碼字和判斷碼字兩步。讀取碼字是一個對紅外信號進行數(shù)據(jù)采樣的過程,判斷碼字是一個數(shù)據(jù)匹配的過程。 2.3 軟件設(shè)計中的幾個問題 (1)時間匹配 在主程序處理紅外碼流的檢測過程時,仍然會產(chǎn)生實時中斷。如上所述,紅外碼流用采樣的辦法進行數(shù)據(jù)的讀取,則采樣間隔的大小將直接影響到對紅外信號的正確接收。如果采樣間隔太大,得到的數(shù)據(jù)不夠精確,不足于分辨1/0比特;但是如果采樣間隔太小,小于中斷服務(wù)程序執(zhí)行一次的時間,則采集的數(shù)據(jù)會變小,導致錯誤判斷。因此中斷服務(wù)程序應(yīng)該寫得盡量簡短。 (2)紅外碼流檢測方式 紅外碼流的檢測可以采用外中斷方式或查詢方式,在本設(shè)計中采用查詢方式。因此該單片機定義了外中斷的級別比實時中斷高,一旦產(chǎn)生外中斷,實時中斷請求將被忽略,不執(zhí)行掃描過程,因此會產(chǎn)生部分應(yīng)該點亮的指示燈沒有點亮的現(xiàn)象。 數(shù)據(jù)匹配是一個把采集后的數(shù)據(jù)與預設(shè)定的數(shù)值進行比較的過程。預設(shè)定的數(shù)值可以從紅外波形理論計算得出,但是理論值與實際值總會存在一些差異,因此最好的解決辦法是預先寫一段數(shù)據(jù)采集程序并記錄下這些數(shù)據(jù)代替理論值,作為預設(shè)定的數(shù)值進行比較。 SST65P54R工作電壓為2.2~3.2V,功耗小,適用于家電控制系統(tǒng)。另外,本文中的軟件開發(fā)模塊易于推廣成家電控制器的通用軟件模塊。