新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機在中央空調控制器中的應用

        PIC單片機在中央空調控制器中的應用

        作者: 時間:2012-02-09 來源:網絡 收藏

        1 引 言

        本文引用地址:http://www.104case.com/article/172143.htm

        有別于普通空調。普通空調安裝于室內掛機內,對控制器尺寸要求不高,采用任何加上外擴,不管多少外圍器件都沒問題。但控制器由于沒有可放置的室內機,所以只能單獨放置,這樣,就要求控制器小巧精致。本設計中,用戶要求設計的控制器尺寸與一般的家用開關面板大小相仿,上面排布七個按鍵,十個LED發光指示和一個溫度顯示,功能上還有遙控、兩路溫度采樣等。

        2 系統硬件設計

        根據用戶要求,我們進行了初步設計。在排布組件時,我們就發現,這么小的空間,放上面板所需的鍵盤、顯示后,只留下了一片的位置,那么A/D、紅外遙控譯碼和外圍驅動電路怎么放?經過比較,我們最終選擇了。在開發階段使用16F877,以后還可改為16C74,以降低產品成本。

        PIC16F877于本系統具有以下優勢:

        ·自帶10位多通道模數轉換器,因而無須增加外圍模數轉換器;

        ·有三個定時器,有足夠的時鐘可用,因為空調控制最重要的部分就在時鐘上,而且實現紅外遙控的軟件解碼亦需定時器。

        設計中,為了減少驅動要求,全部采用低電平有效,這樣就進一步減少了外圍器件對空間的要求。

        41.jpg

        圖1中,RA3引腳由于模數轉換的設置限制而不能使用,RC0、RC1引腳由于時鐘定義限制而不能使用。

        3 系統軟件設計

        3.1 總體設計方案

        系統主程序非常簡單,主要執行一個任務,就是鍵盤掃描檢測,因為PIC16F877只有一個外部中斷引腳,為實現紅外遙控軟解碼,鍵盤須采用掃描查詢方式。本系統的技術方案主要集中在紅外遙控軟件解碼和時鐘控制上。

        3.2 紅外遙控軟件解碼

        紅外遙控采用HOLTEK公司的HT6221多功能編碼芯片,該公司公布的資料顯示,該芯片采用PPM進行編碼,HT6221每發送一個碼,先送出一個 9ms的頭碼和4.5ms的間隙,然后依次送出16位的地址碼(18ms~36ms)、8位數據碼(9ms~18ms)和8位數據反碼,圖2給出了 DOUT引腳上輸出的格式。

        數據的識別為:1.12ms為 0,2.24ms為1,如圖3所示。這樣,紅外遙控軟件解碼需設計一時鐘,與中斷同步計數就可識別了。本系統的系統時鐘為4MHz,為了便于識別數據值,我們確定:時鐘中斷為0.28ms。其基本工作原理為:通過判斷兩次外部中斷間時鐘中斷的次數(即時間值)來解碼。基本算法如下:

        42.jpg

        3.3 時鐘控制設計

        時鐘中斷設計是本系統的重點,系統每一部分功能幾乎都圍繞時鐘進行,例如:制冷室內風機起動20秒后壓縮機外風機才起動,溫度到時,壓縮機關機20秒后關風機,壓縮機停機后三分鐘才能再開;按鍵調溫度,5秒停止按鍵后恢復,并顯示溫度,LED要閃爍。各種模式下,除了本身控制需要的時間要求外,還有許多為保護系統而設的時鐘要求。經過對系統的仔細分析,設計方案主要從兩個方面著手:

        一是處理好各種狀態,為此,為每種狀態都定義狀態標志如下:

        系統的四種切換模式定義狀態,定義名為mode

        43.jpg

        上面列出了系統所定義的狀態,正是有了這些狀態的幫助,才方便了時間控制的處理。

        二是經分析,時鐘的要求盡管多,但都為秒、分、時,所以就設計了一個真正的“時鐘”,把“秒”的控制放在“秒”一段,“分”的放在“分”一段,“時”的放在“時”一段,結合上面的狀態,使控制邏輯非常清晰。下面給出算法示意:

        時鐘中斷服務程序
        Secs++“秒”計數
        If Secs6
        goto sec-1 如果不到1分鐘,處理“秒”程序段
        else
        {

        44.jpg

        以上程序是用匯編語言實現的,為了清晰及減少篇幅,這里改用算法描述來說明。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 藁城市| 柳林县| 无锡市| 益阳市| 乐清市| 潼关县| 定襄县| 元谋县| 克什克腾旗| 桓仁| 明水县| 崇左市| 连州市| 平乐县| 青神县| 平江县| 马尔康县| 凭祥市| 大冶市| 灌云县| 彰化县| 丹棱县| 青冈县| 海原县| 长宁县| 九台市| 黔南| 独山县| 普兰店市| 正安县| 阿拉善左旗| 怀柔区| 利津县| 白朗县| 博野县| 荥阳市| 汝阳县| 隆昌县| 府谷县| 西乌| 内丘县|