引言
人們生活中的家用電器種類日益增多,遙控器的種類也隨之增加,不同種類的遙控器之間一般不能相互替代,這給人們的生活帶來諸多不便。各類遙控器功能大致相同,大多都有數字鍵、啟動停止鍵、前進鍵、快進鍵、后退鍵,復雜的也就是增加幾個功能鍵,現實生活中,由于用戶的個體差異,特殊功能鍵的使用頻率很低,甚至部分用戶自始至終就從未使用過這類鍵,因此,這些鍵完全可以簡化和歸類使用,對于那些不易簡化和歸類的少量特殊功能鍵,可以通過開辟自定義按鍵區的方法予以解決。
鑒于此,本文以單片機和大規???a target="_blank">編程門陣列FPGA為基礎,以記錄波形的思想設計了一款自學習式通用家居遙控器,又為原本無遙控功能的電燈、電扇、窗簾等設施追加了教練+學習+控制的遙控模型,在電腦上安裝了Girder軟件后還可實現對電腦的遙控。
1 紅外遙控簡介
1.1 關于紅外線
紅外線是波長在0. 75μm 至100μm 之間的電磁波,它的頻率高于微波而低于可見光,是一種人的眼睛看不到的光線。紅外通訊一般采用紅外波段內的近紅外線,波長在0. 75μm 至25μm 之間。紅外數據協會( IRDA) 成立后,為了保證不同廠商的紅外產品能夠獲得最佳的通訊效果,紅外通訊協議將紅外數據通訊所采用的光波波長的范圍限定在850nm 至900 nm 之內。
由于紅外線的波長較短,對障礙物的衍射能力差,所以適合應用在需要短距離無線通訊的場合,進行點對點的直線數據傳輸。
1.2 紅外遙控編碼格式
用于遙控的控制代碼大都以不同的編碼標準調制在38 kHz 左右的載波頻率之上,再以串行格式通過紅外載波的通斷被發送。下面簡單介紹一下常見的編碼標準:
1) Pulse 編碼(Pulse Coded)
脈沖的長度根據表示的數據‘0’、‘1’而不同,Sony 的遙控用此種編碼。
2) Space 編碼(Space Coded)
與脈沖編碼正好相反,它是以脈沖之間space 的長度不同來表示數據, Panasonic 的遙控用的就是這種編碼。
3) Shift 編碼(Shift Coded)
此種編碼是用電平轉換的方向表示數據的,因此所有的位都有著連續的時段,Philips 就用該編碼方式。
2 系統的軟硬件劃分
該系統采用“電腦主機+單片機+FPGA”的結構,系統軟件分為兩部分:一部分是在主機上運行的Girder程序,用于解碼接收到的信號并控制電腦執行指定的動作,另一部分運行在單片機上,用于驅動遙控器的液晶(LCD)顯示。系統的硬件分為四部分:學習器,教練器,接收器以及與主機的接口電路,其中學習器兼有學習與遙控的功能,通過學習原有遙控器的編碼可以遙控任何擁有遙控功能的電器,它包括單片機和FPGA兩部分,由FPGA執行主要的學習與遙控功能以提高運行速度和集成度,單片機用來驅動液晶顯示;教練器與接收器負責對原本無遙控功能的設備追加遙控功能,具體來說就是教練器產生種類足夠多的編碼地址供學習器來學習,接收器則在電器端負責解碼對應的地址并產生相應的動作;為實現對電腦的遙控功能而設計的主機接口電路負責把紅外信號轉換為數字信號傳入主機。硬件電路實現的總體框圖如圖1所示:
圖1 硬件系統總體框圖
3 系統的硬件設計與實現
3.1 學習器
學習器是硬件電路的主要部分,兼有學習與遙控的功能,它以FPGA為核心,外圍電路力求簡單,主要由鍵盤、存儲器、接收電路和發射電路組成,考慮到用純硬件來控制LCD顯示的困難較大,決定采用微控制器協助FPGA來實現。這里的接收電路與后面要講的接收器不同,它專為學習功能設置,負責接收已有遙控器的紅外信號并送至FPGA內部進行識別、譯碼以及存儲,發射電路由驅動電路和紅外發光二極管兩部分電路組成,負責將編碼信號以紅外光的形式發射出去。
總體原理框圖如圖2所示:
圖2.學習器硬件結構
3.1.1 FPGA的設計
包括鍵盤模塊、發射編碼調制模塊、接收譯碼存儲模塊三個模塊,另外還有一個總控制模塊,其內部結構如圖3所示:
圖3.FPGA內部結構
總控制模塊是一個有限狀態機,它負責協調其他各個模塊的工作并提供與顯示電路和存儲器的接口;鍵盤模塊接收用戶的按鍵信息,并編碼輸出給總模塊,這些信息包括按鍵的地址,按鍵的類型和用戶選擇要遙控的器件編碼;接收譯碼存儲模塊由計數器記錄接收信號高低電平的寬度,并將數據存入存儲器相應地址中,存儲時序由狀態機來控制;發射編碼調制模塊負責由存儲器中讀取當前按鍵的數據信息,產生與學習到的信號相似的高低變化的電平,并以38kHz的載波調制輸出。
3.1.2 單片機實現的LCD顯示電路
顯示電路采用RT12864M-2型液晶顯示器,由我們較為熟悉的單片機控制液晶來顯示遙控器所處的狀態并提示用戶進行正確的操作。
3.2 教練器
教練器的作用是產生種類足夠多的編碼信號供學習器來學習,進而控制不同的接收器。
SC2262是一種CMOS工藝制造的低功耗低價位通用編碼電路,最多可有12位(A0-A11)三態地址端管腳(懸空,接高電平,接低電平),任意組合可提供531441地址碼, SC2262最多可有6位(D0-D5)數據端管腳,其編碼方式如圖4所示。
圖4.SC2262的編碼脈沖
3.3 接收器
SC2272 是與SC2262 配對使用的一塊遙控解碼專用集成電路。它可支持多達531441個地址的編碼,極大的減少了碼的沖突。SC2272 對從Din(14腳)端子送入的信號進行解碼。解碼出來的地址碼與所設置地址輸入端進行比較。如果所設置的地址與連續2個字碼匹配,則SC2272 做以下動作:
a)當解碼得到有“1”數據時,驅動相應的數據輸出端為高電平;
b)驅動VT (17腳)輸出為高電平。
將SC2272與繼電器結合就可以控制電燈、電扇等用電器的電源開關,再加上小型直流電動機就可控制窗簾等機械裝置。
3.4 與主機接口
為了能使此遙控器控制電腦就須將紅外信號送入主機內,有兩種可行的接口,分別為電視卡的紅外接收頭和串口。
3.4.1電視卡的紅外接收頭
現在的電視卡很多都帶有紅外遙控器,這樣的遙控器除了可以控制電視的播放外,通過適當的軟件,它還可以控制音頻、視頻播放、圖片瀏覽程序及電腦的關機等,實現真正的電腦遙控功能。這種方法的缺點是需要購買電視卡,成本較高,不予采用。
3.4.2 串口
現在流行的有半軟半硬和全軟兩種方案,半軟半硬方案在紅外接收頭與串口間加入了數據預處理電路,使數據符合串口規范,降低了編程難度,減少了 CPU占用率;而全軟方案則是直接把紅外接收頭收到的數據送入串口,完全由軟件處理,其編程難度和CPU占用率偏大,但硬件電路非常簡單。圖5是“軟”方案的硬件電路。
圖5.串行紅外接口電路
由于目前應用串口的技術比較成熟,網上有很多現成的插件可以借鑒,因此我們決定采用串口的方式實現。
4 軟件設計
4.1 液晶(LCD)驅動程序
我們采用89S51單片機來控制液晶屏,通過不斷循環讀取FPGA的狀態編碼來控制液晶顯示器實時地刷新其顯示內容,其中包括遙控系統當前所處的狀態(是處于學習狀態還是遙控狀態)以及當前處理的對象類別和編號,防止用戶由于不清楚當前遙控的對象而產生誤操作,同時在每一個狀態液晶屏都要提示用戶下一步該如何操作,為用戶提供一個十分人性化的使用界面,軟件使用Keil C編寫。其程序流程如圖6所示。
圖6.LCD顯示軟件流程
4.2 Girder程序
Girder是一款完全免費的軟件,從本質上說它可接收來自任何輸入設備的指令,識別后做事先定義好的動作,如啟動某個程序或鼠標雙擊等。首先要設置好硬件,從網上下載串口驅動文件IgorPlug.dll拷貝到Girder目錄下的子目錄Plugins中。Girder軟件的界面如圖7。
進入“file\settings”,點擊選項卡上的“Plugins”,找到滾動窗口中的“Igor SFH-56 device”,在它前面的小框中打上勾,再點擊左邊的“Setting”, 選擇你所使用的串口,點擊OK就可以通過串口來控制電腦了。
圖7.Girder的主界面
對于像關機,關閉顯示器等動作,Girder已經有設置好的現成的命令可用,對于一些較復雜的播放軟件的控制可以通過簡單的設置來完成。
5 關鍵技術--對編碼信號的學習方法
紅外遙控信號的編碼方式多種多樣,例如圖8所示的是一種電視卡自帶的遙控器的編碼波形,它采用的是Space編碼,前面9ms的脈沖加4ms低電平是引導碼,中間是8位地址碼00H、8位地址反碼FFH、8位數據碼E8H、8位數據反碼17H,從引導碼開始計時發送108ms后若按鍵仍沒有松開則以后每隔108ms發送一個9ms高+2ms底+0.5ms高的重復簡碼,直到按鍵松開為止。
圖8. 一種電視卡的遙控器編碼波形
如果每一種遙控器都通過解碼后存儲“0”“1”的數字信號,那么解碼的工作將是非常繁重而且不經濟的,一個簡單的方法是記錄下波形中每個高低電平的寬度,使用時再按照原始形式將波形發射出去。
6 結語
智能家居各類產品的智能化加速必將推動家居產業發展,讓我們共同期待,相信智能時代還會創造更多的智能奇跡,智能家居生活終會飛入尋常百姓家,普通百姓也能享受高科技時代下的智慧生活。
評論
查看更多