系統(tǒng)總體結(jié)構(gòu)與硬件設(shè)計(jì)
系統(tǒng)采用模塊化設(shè)計(jì),各模塊通過(guò)接口電路與主控芯片相連。主要模塊有:矩陣鍵盤,液晶顯示,存儲(chǔ)模塊,紅外發(fā)送模塊,紅外接收模塊,RS232、RS485 通信模塊,以及溫度檢測(cè)模塊。系統(tǒng)結(jié)構(gòu)圖如圖1 所示。
系統(tǒng)以Atmega16 單片機(jī)作為主控芯片,Atmega16具有16K 字節(jié)的系統(tǒng)內(nèi)可編程Flash ,512 字節(jié)EEPROM,1K 字節(jié)SRAM,32 個(gè)通用I/O 口線,32 個(gè)通用工作寄存器,用于邊界掃描的JTAG 接口,支持片內(nèi)調(diào)試與編程,三個(gè)具有比較模式的靈活的定時(shí)器/計(jì)數(shù)器(T/C),片內(nèi)/外中斷,可編程串行USART,有起始條件檢測(cè)器的通用串行接口,8 路10 位具有可選差分輸入級(jí)可編程增益的ADC,具有片內(nèi)振蕩器的可編程看門狗定時(shí)器,一個(gè)SPI 串行端口,以及六個(gè)可以通過(guò)軟件進(jìn)行選擇的省電模式。該芯片功能強(qiáng)大,滿足系統(tǒng)設(shè)計(jì)需要并提供了充分的擴(kuò)展空間。主控芯片使用8MHz 的晶振,晶振電路靠近主控芯片,盡量減少輸入噪聲。復(fù)位電路采用低電平復(fù)位。
矩陣鍵盤采用3*3 的設(shè)計(jì),設(shè)置了8 個(gè)功能鍵,方便用戶進(jìn)行手動(dòng)操作。其中單獨(dú)設(shè)計(jì)了一顆模式切換鍵,可在學(xué)習(xí)、發(fā)射、通信模式中切換。為了實(shí)現(xiàn)學(xué)習(xí)功能, 紅外接收模塊使用了一體化接收頭NB1838,其光電檢測(cè)和前置放大器集成于同一封裝,中心頻率為37.9KHz. NB1838 的環(huán)氧樹(shù)脂封裝結(jié)構(gòu)為其提供了一個(gè)特殊的紅外濾光器,對(duì)自然光和電場(chǎng)干擾有很強(qiáng)的防護(hù)性。NB1838 對(duì)接收到的紅外信號(hào)進(jìn)行放大、檢波、整形,并調(diào)制出紅外編碼,得到TTL 波形,反相后輸入單片機(jī),再由單片機(jī)進(jìn)行進(jìn)一步的處理,存儲(chǔ)到EEPROM 中,接收電路如圖2 所示。
考慮到系統(tǒng)需要的存儲(chǔ)空間比較大,設(shè)計(jì)了單獨(dú)的存儲(chǔ)模塊,選用的EEPROM 是AT24C64,它提供了8KB 的容量,通過(guò)IIC 協(xié)議與Atmega16 TWI 接口通信,將學(xué)習(xí)到的紅外指令存儲(chǔ)在此,掉電不丟失。
在發(fā)射模式下,系統(tǒng)從EEPROM 讀取相應(yīng)數(shù)據(jù)信息,利用三極管9013 組成的放大電路,通過(guò)大功率紅外發(fā)射管將調(diào)制好的紅外信號(hào)發(fā)射出去。發(fā)射電路如圖3所示,非發(fā)送狀態(tài)時(shí),三極管工作在截止?fàn)顟B(tài),紅外發(fā)射管不工作,有利于降低功耗以及延長(zhǎng)紅外發(fā)射管的使用壽命。經(jīng)實(shí)際測(cè)試,發(fā)射距離可達(dá)到10m 左右。
通信模式中,系統(tǒng)通過(guò)RS232 電路與上位機(jī)通信,在與上位機(jī)通信時(shí)使用DS18B20 反饋溫度信息,DS18B20 一線總線設(shè)計(jì)大大提高了系統(tǒng)的抗干擾性,獨(dú)特而且經(jīng)濟(jì)。系統(tǒng)還增加了RS485 模塊,便于組網(wǎng),以實(shí)現(xiàn)對(duì)多個(gè)紅外設(shè)備進(jìn)行控制。RS485 在組網(wǎng)時(shí)只需要用一對(duì)雙絞線將子設(shè)備的"A"、"B"端連接起來(lái),這種接線方式為總線式拓?fù)浣Y(jié)構(gòu),在同一總線上可掛接多個(gè)結(jié)點(diǎn),連接方便。
為了增加設(shè)備的實(shí)用性,系統(tǒng)設(shè)計(jì)了兩個(gè)電源方案,一個(gè)是直接接入5V 直流電源,一個(gè)是接入12V直流電源,然后通過(guò)L7805 構(gòu)成的變壓電路降壓為5V使用。
[page]
系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
系統(tǒng)程序主要分為三個(gè)部分:學(xué)習(xí)模式,發(fā)送模式以及通信模式。當(dāng)?shù)谝淮芜M(jìn)入系統(tǒng)時(shí),初始化設(shè)置設(shè)備地址,然后設(shè)置通信的波特率,提供1200、9600 以及19200 三種選擇。系統(tǒng)主程序即在三個(gè)模式間切換,默認(rèn)進(jìn)入通信模式,可以通過(guò)模式切換按鍵改變模式,也可以通過(guò)上位機(jī)直接更改。出于系統(tǒng)的穩(wěn)定性需要,在程序中加入了軟件看門狗,防止程序"跑飛".
學(xué)習(xí)功能設(shè)計(jì)
學(xué)習(xí)模式
紅外遙控器的碼型多樣,編碼一般包括:幀頭、系統(tǒng)碼、操作碼、同步碼、幀間隔碼、幀尾,且同步碼與幀間隔碼出現(xiàn)的位置不固定,因此碼型格式靈活多變,很難區(qū)分各種碼型的編碼含義;各個(gè)紅外遙控的編碼長(zhǎng)度不盡相同,發(fā)送方式也多種多樣,最常用的有三種:完整幀只發(fā)送一次、完整幀重復(fù)發(fā)送兩次、先發(fā)送一個(gè)完整幀,后重復(fù)發(fā)送幀頭和一個(gè)脈沖。面對(duì)如此多樣化的編碼方式,如果區(qū)分每種編碼的含義進(jìn)行學(xué)習(xí),學(xué)習(xí)的復(fù)雜度將會(huì)很高,并且通用性也會(huì)受到影響。所以,為了避開(kāi)各色碼型的干擾,系統(tǒng)在學(xué)習(xí)時(shí)并不關(guān)心碼型數(shù)據(jù)的實(shí)際意義,只記錄脈沖的時(shí)間寬度。系統(tǒng)主要針對(duì)載波頻率為38KHz(周期為26us)的紅外遙控器,利用變量IR_time 記錄接收到的脈沖寬度。學(xué)習(xí)程序流程如圖4 所示。
由于不考慮具體的碼型數(shù)據(jù)意義,只記錄脈沖的寬度,系統(tǒng)的學(xué)習(xí)功能通用性得到了提高,但這種方式學(xué)習(xí)到的數(shù)據(jù)量很大,對(duì)存儲(chǔ)的要求就變得很高。
盡管系統(tǒng)針對(duì)存儲(chǔ)的大容量需求設(shè)計(jì)了單獨(dú)的存儲(chǔ)模塊,但考慮到應(yīng)在不增加硬件開(kāi)銷的情況下保證足夠的存儲(chǔ)容量,以及滿足未來(lái)擴(kuò)展的需要,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),采取了數(shù)據(jù)壓縮技術(shù)。
從學(xué)習(xí)到的電平數(shù)據(jù)可以發(fā)現(xiàn),無(wú)論數(shù)據(jù)是1 還是0,都有相同時(shí)長(zhǎng)的電平出現(xiàn),這符合游程編碼的特點(diǎn)。游程編碼是一種簡(jiǎn)單的非破壞性資料壓縮法,其好處是加壓縮和解壓縮都非??欤浞椒ㄊ怯?jì)算連續(xù)出現(xiàn)的資料長(zhǎng)度壓縮之。比如:一張二值圖像的數(shù)據(jù)為:
WWWWWWWWBWWWWBBBWWWWWWWBWWWWW
使用游程編碼壓縮可得:8W1B4W3B7W1B 5W.
可見(jiàn),壓縮效率極高,且可避免復(fù)雜的編碼和解碼運(yùn)算。所以,在存儲(chǔ)時(shí),系統(tǒng)對(duì)學(xué)習(xí)到的數(shù)據(jù)進(jìn)行游程編碼壓縮[7,8].例如,學(xué)習(xí)到的一組空調(diào)遙控器的數(shù)據(jù)為[157 153 23 53 … 23 53 23 180 156 152 23 53 …53 23],如圖5 所示,對(duì)重復(fù)的電平數(shù)據(jù)采用游程編碼壓縮后,原本需要199 字節(jié)的空調(diào)遙控碼,只需要106個(gè)字節(jié)即可存儲(chǔ),壓縮率達(dá)53.27%.因此,在存儲(chǔ)時(shí)針對(duì)學(xué)習(xí)到的數(shù)據(jù)特點(diǎn)采取游程編碼壓縮,可以有效節(jié)約存儲(chǔ)空間。
現(xiàn)有的紅外遙控器很多都是采用外部電路產(chǎn)生載波信號(hào),例如使用NEC555 振蕩器產(chǎn)生載波信號(hào)。為了減少硬件開(kāi)銷,本系統(tǒng)使用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生載波。系統(tǒng)使用的是Atmega16 單片機(jī),其定時(shí)器功能強(qiáng)大,具有普通模式、CTC 模式、快速PWM 模式、相位修正PWM 模式等工作模式,系統(tǒng)利用定時(shí)器1,使其工作在快速PWM 模式,產(chǎn)生占空比為1:3 的38KHz 的PWM 波。當(dāng)發(fā)送某條指令時(shí),單片機(jī)從對(duì)應(yīng)的EEPROM 中提取指令信息,然后調(diào)制到生成的載波上,再通過(guò)發(fā)射電路即可完成紅外信號(hào)的發(fā)射。
[page]
通信功能設(shè)計(jì)
上位機(jī)通信
本遙控器除了能通過(guò)功能按鍵實(shí)現(xiàn)手動(dòng)操作外,還可以通過(guò)上位機(jī)軟件對(duì)遙控器進(jìn)行控制。遙控器與上位機(jī)通過(guò)RS232 模塊進(jìn)行通信,首先配置上位機(jī)軟件,確定串口號(hào),選擇與設(shè)備相同的波特率及主從設(shè)備地址,然后根據(jù)需要選擇相應(yīng)的指令,點(diǎn)擊發(fā)送即可通過(guò)上位機(jī)對(duì)設(shè)備進(jìn)行控制。由于本遙控器是基于空調(diào)遙控器進(jìn)行研究的,在與上位機(jī)通信時(shí),系統(tǒng)中的溫度檢測(cè)模塊會(huì)上傳實(shí)時(shí)溫度,便于用戶進(jìn)行調(diào)整。圖6 為上位機(jī)軟件流程圖。
組網(wǎng)控制
為了實(shí)現(xiàn)對(duì)多個(gè)設(shè)備的聯(lián)網(wǎng)控制,還設(shè)計(jì)了RS485 模塊。各子遙控器通過(guò)RS485 模塊的"A"、"B"端連接在一起,組成控制網(wǎng)絡(luò),如圖7 所示,其中一個(gè)作為主遙控器,與上位機(jī)通過(guò)RS232 模塊進(jìn)行串口通信。當(dāng)上位機(jī)需要對(duì)某個(gè)子設(shè)備進(jìn)行控制時(shí),選擇相應(yīng)的子設(shè)備地址號(hào),發(fā)送指令即可,主遙控器收到指令信息后,會(huì)將指令發(fā)給對(duì)應(yīng)的子設(shè)備。與主遙控器相連的上位機(jī)PC 連接Internet,作為本地服務(wù)器,可實(shí)現(xiàn)遠(yuǎn)程控制。
用戶登錄遠(yuǎn)程客戶端,經(jīng)身份驗(yàn)證后與服務(wù)器建立連接,可發(fā)送指令給本地服務(wù)器,本地服務(wù)器再經(jīng)過(guò)串口通信對(duì)遙控器進(jìn)行相應(yīng)操作。如果遙控器主機(jī)與上位機(jī)距離較遠(yuǎn),RS232 不能滿足通信需要,也可不使用遙控器主機(jī),在上位機(jī)PC 上使用RS232-485 轉(zhuǎn)接頭,通過(guò)RS485 直接將遙控器網(wǎng)絡(luò)與PC 機(jī)485 接口相連,利用上位機(jī)對(duì)遙控器網(wǎng)絡(luò)直接進(jìn)行控制。
本文設(shè)計(jì)了一款智能空調(diào)遙控器。該系統(tǒng)采用只記錄紅外信號(hào)脈沖寬度,不考慮紅外編碼格式的方式,通過(guò)游程編碼算法將紅外信號(hào)壓縮后保存到EEPROM 中,并直接利用主控芯片定時(shí)器的PWM 模式產(chǎn)生38KHz 的載波,節(jié)約了硬件成本,除手動(dòng)操作外還可以通過(guò)上位機(jī)對(duì)遙控器進(jìn)行控制,使用方便。
系統(tǒng)成功實(shí)現(xiàn)了對(duì)多種空調(diào)遙控器的學(xué)習(xí)與功能再現(xiàn),操作靈活,性能穩(wěn)定。本系統(tǒng)還可用于智能家居中,對(duì)不同的紅外設(shè)備進(jìn)行控制,也可用于遠(yuǎn)程網(wǎng)絡(luò)控制,為智能家居及遠(yuǎn)程監(jiān)控提供了一種實(shí)現(xiàn)方法。
相關(guān)閱讀:
技術(shù)帝教你DIY紅外遙控LED電子鐘
一款單線紅外遙控開(kāi)關(guān)電路設(shè)計(jì)
萬(wàn)能紅外遙控開(kāi)關(guān)DIY,讓你實(shí)現(xiàn)隨時(shí)開(kāi)關(guān)