我談學習型紅外遙控(一)

2021-06-13 15:32:31 字數 2411 閱讀 9836

跟著專案組長一起做了幾個空鼠專案,一直覺得自己長勁不大,因為自己只負責簡單的鍵盤定義部分,最終的整個軟體架構其實自己都不太了解。從去年11月份開始,一直都很忙,乙個接著乙個做,我的任務也只是鍵盤部分。重複的做一樣東西,感覺挺沒勁的!

由於產品設計需要,我們要做學習型的遙控器。於是,這項任務就落在了我的手裡。

一說起學習型遙控器,其實,思路很簡單

:就是把要學習的遙控器傳送的電平給記錄下來,然後存入flash中。待到需要傳送時,從flash中將記錄的電平給傳送出來。而設計的難點在於:用於記錄電平的陣列應該設為多大,什麼時候才算學完乙個波形。以及在學習時,怎麼才能區分出碼字資訊和重發資訊。

不同的紅外編碼格式,按鍵在短按和長按的情況下,傳送的紅外資訊格式也不一樣。分析了大部分的紅外編碼,我發現它們大致可以分為兩類:一類是傳送完碼字資訊之後,後面跟有stop bit ,然後是repeat code;一類是傳送完碼字資訊之後,後面只跟有stop bit。而且這兩種方式,在按鍵短按和長按的情況下也不一樣。第一類:按鍵短按情況下,傳送完碼字資訊,傳送一次repeat code 就結束;長按情況下,傳送完碼字資訊,則一直傳送repeat code。第二類:按鍵短按情況下,會有兩種情況,一是傳送完碼字資訊之後,緊跟一次stop bit 就結束,另一種是傳送完碼字資訊之後,傳送stop bit ,然後再發一次碼字資訊才結束。出現這兩種不同情況,我判斷是跟按鍵按下的時間長短有關,但具體原因和原理,還不是很清楚。希望看到這點的博友,能給解釋下。按鍵長按的情況下,會再次重發碼字資訊和stop bit 。但是長按時,不同的紅外格式,重發的也不一樣。以我現在的了解,我知道,該類方式大部分編碼按鍵在長按時,會再次傳送第一次傳送的資訊(包含所謂的lead code)和stop bit。但也有特殊的,像紅外編碼victor c8d8 這種格式,在長按時,重發部分不含有lead code。 

對於第乙個難點,我發現幾乎所有的編碼格式,在按鍵長按時,不管有無repeat code,電平中最大時長不超過100ms,最大的在96、97ms左右。所以在我的設計中,把94ms定為學習結束的乙個標誌,當發現學習的電平中,出現大於94ms的電平,記錄下此時的電平並且退出中斷,宣告學習結束。在這種情況下,對於傳送資訊中沒有超過94ms的紅外編碼格式,這個結束條件就永遠不會成立,這時,我就採用能學習的電平個數作為結束條件。分析大部分編碼格式,特別是不含有repeat code的編碼,到達第乙個stop bit 位,其中panasonic 紅外編碼格式,電平數達到100,所以,我設定自己用於學習電平的陣列大小為202。至於為什麼會翻倍呢,就跟第二個難點有關。第二個難點,學習電平時要能區分出紅外資訊中的碼字資訊和重發資訊,所以大前提是,學習時要長按按鍵。分析大部分編碼在按鍵長按時,並不是傳送完第乙個stop bit之後再傳送的資訊就是重發資訊。這其中還是有特例,像sharp紅外編碼格式,它的碼字資訊要包含兩個stop bit位,即它要學習到至少出現兩次stop bit 位,才能區分出碼字資訊和重發資訊。所以我把陣列大小定為出現第乙個stop bit位時,最大電平個數的兩倍多。

下面就是怎麼區分stop bit 和repeat code 或者 stop bit 和 第二個 stop bit

分析各種紅外編碼,發現大部分紅外編碼的stop bit 位時長都會大於15ms,當然也會有極個別特例,我的設計沒有對其進行考慮。而且在含有repeat code 的紅外編碼格式中,repeat code 中的最大電平時長和其stop bit 的電平時長都會相差很大,通常前者會大於後者至少20ms以上。所以,我在對學到的電平進行分析時,就可以依次檢測每個電平,第一次出現大於15ms的電平,它就是stop bit ,並記下其在陣列中的位置。再去檢測其它電平,若出現某個電平大於stop bit 電平20ms以上,則視其為repeat code,記下其在陣列中的位置;若沒有出現repeat code ,而是再次出現大於15ms 的電平,則說明是編碼中的第二個stop bit 位,並記錄其在陣列中的位置。這樣才算分析完成。

分析完之後,就是紅外傳送部分。傳送時,根據有無repeat code 進行區分。對於有repeat code 的編碼,短按時,只傳送到stop bit 位之前的資訊;長按時,只傳送stop bit 和 repeat code 之間的資訊。對於無repeat code 的編碼,短按時,傳送第二個stop bit 位之前的資訊;長按時,由於victor c8d8這種特殊的紅外編碼,不能簡單的再次傳送第二個stop bit 位之前的資訊。而是根據stop bit 和 第二個stop bit之間的電平個數差和stop bit 位所在的電平位數是否相等,來判斷長按時的重發資訊。若相等,則重發第二個stop bit 位之前的資訊;若不等,則重發stop bit 和 第二個stop bit之間的資訊。

以上是我個人對學習型紅外採取的方法,其中仍然有一些侷限,像對於stop bit 位電平時長小於10ms 的紅外編碼,我的方法會失效。因為nec紅外編碼的lead code 就有9ms 多,這也是我把stop bit 位定位15ms 的原因。雖然方法有一定的侷限,但大部分紅外編碼還是可以進行學習的。特拿出來與博友分享,這也是自己的第一篇技術型原創博文,願大家多多指點和鼓勵!!

學習型通用紅外遙控裝置(一)

1.1處理器 處理器為stm32,在其兩個系列的cpu上除錯通過,為stm32f103zet和stm32f103vbt。軟體平台 keil uvision4 電路設計 altium designer v6.9。1.2紅外通訊技術理論及示波器驗證 nec 標準規定,紅外通訊的載波頻率為38khz,占空...

學習型紅外遙控的實現 stm32

最近在做乙個智慧型家居的專案,其核心部分是使用紅外遙控各種家電,包括電視,風扇,空調等等。在製作學習型紅外遙控的過程中,遇到了許多問題,也頗有感悟,特此記錄下來與大家分享。紅外線傳送不同於一般的資料傳輸協議,在此與串列埠比較說明。串列埠是最簡單的資料傳輸協議,學過微控制器的人都知道,微控制器通過串列...

關於作乙個學習型機械人網頁 理論分析

作乙個學習型 機械人,再具體一點,就是學習型 聊天 機械人。雖然我知道,難,也許一輩子也作不出來。但是,既然我想到了,而且也想作,那我就認認真真的去作一次,用自己所有的知識和力量爭取作成功,當然,首先是設想。首先我談談作 學習型 聊天 機械人的思路 對於學習型聊天機械人的定位 我把這個學習型聊天機械...