1. 程式人生 > >【掃盲貼】淺談38K紅外發射接受編碼(非常好)

【掃盲貼】淺談38K紅外發射接受編碼(非常好)

http://blog.sina.com.cn/s/blog_4ca9659e0101i9nn.html

轉自Doctor_A 壇友的筆記!
之前做接觸過一次紅外遙控器,現在有空想用簡單的話來聊一聊,下面有錯誤的地方歡迎改正指出:
1:紅外的概念不聊,那是一種物理存在。以下聊38K紅外發射接收,主要講可程式設計的紅外編碼。
2:紅外遙控
    紅外遙控首先需要用來發“光”的紅外發光管,還有一個接收光線的“接收管”(不是那種觸發的紅外對管),還有一個產生38K的訊號源(可以是MCU中斷實現還有就是市場上大把的紅外編碼IC),只需要簡單的外圍電路即可。
    就微控制器而言,為了增大紅外發光管電流,需要用一個三極體驅動。紅外編碼IC也只需要幾個外圍電路,規格書上都有提供,這裡不提。


3:紅外接收頭(有不理解的地方可以在後面找到你想要的答案或者繼續“百度”“谷歌")
    有必要可以看一下紅外接收頭內部組成的詳細介紹。
    接收收頭分為電平頭還有脈衝頭。
    電平型的:接收連續的38K訊號,可以輸出連續的低電平,時間可以無限長。其內部放大及脈衝整形是直接耦合的,所以能夠接收及輸出連續的訊號。 
   脈衝型的:只能接收間歇的38K訊號,如果接收連續的38K訊號,則幾百ms後會一直保持高電平,除非距離非常近(二三十釐米以內)。其內部放大及脈衝整形是電容耦合的,所以不能能夠接收及輸出連續的訊號。
    一般遙控用脈衝型的,只有特殊場合,比如串列埠調製輸出,由於串列埠可能連續輸出資料0,所以要用電平型的。

4:紅外遙控中的載波到底是什麼?(不要影響到你對其它載波的理解)
    第一次接觸紅外我看到’載波‘這個詞就覺得生澀。網上很多資料五花八門都描繪得很厲害、
    我們就從一下幾點開始描述,相信的等會就懂:
     (1)38K怎麼來的?
      這裡只談微控制器給出,38K脈衝訊號,佔空比(脈衝的高電平比周期的值就是佔空比)自己決定,既然是38K,那麼脈衝的週期就是1/38000 S,記住這個不是高電平的時間長度,這個是一個脈衝的時間長度也就是一個週期,例如我們利用一箇中斷產生38K脈衝,佔空比是1/2,我們的中斷時間就要設定為 1/38000/2 S中斷一次,然後通過相隔一次中斷電平翻轉一次就形成了一個頻率為38K佔空比1/2的脈衝。

      另外i!在這裡想說一下我在學習紅外的時候遇到的兩個錯誤:
      一、當第一次接觸紅外遙控的時候,在網上下載了很多資料中斷時間居然是1/38000S,產生的是19K的脈衝訊號,紅外肯定接收不了,更不要談編碼了。而且還是大部分被人的程式都是19K.對於剛接觸的人可能就暈乎乎地忽悠過去了。
      二、就是我們用微控制器的時候是用了微控制器的查詢模式還是中斷模式的問題。
          我們利用中斷時候,在時鐘比較快的條件下可以產生比較準確的時間基準,來產生相對正確的脈衝。而利用查詢方式,如果用51微控制器,12M的晶振,利用查詢溢位來產生的38K脈衝,那就犯了一個大錯,因為利用查詢的方式查詢這個動作浪費的時間可不是一個或兩個的機器週期,它浪費了大把的微控制器時間,誤差大得離譜。如果你用中斷試過成功過,不妨試一下查詢方式失敗的感覺。
      雖然利用查詢方式程式設計是簡單了很多,可是誤差大得更多了多。我就是偷懶犯過了錯誤。
5:什麼是紅外38K的載波訊號(其實我更想說成什麼是38K編碼訊號(一下詳解))
     (1)記住38K的紅外不單單隻接受38K訊號,它有個頻偏(頻率偏差左右波動)的範圍,但記住範圍不大。
     (2)說是三極體驅動,其實三極體是作為一個開關,共射的方式。於是有兩種通斷方式,三極體用的是PNP呢還是NPN。
          一般我們採用PNP作為開關管,NPN是利用高電平時候導通,但微控制器開機時候,所有IO口的狀態為高電平,這個時候就觸發了開關管,雖然我們在初始化的時候可以把它關斷,但即使此處實際上可以的問題為了以後設計其它東西可能因此犯了不該犯的錯誤還是選用PNP管好了。
     (3)那麼我們就用"0"表示紅外管導通。。。。"1"表示紅外管截至
          驅動紅外發光的"IO"口的狀態便是38K脈衝訊號從IO口發出來的觸發訊號,脈衝中的低電平就是導通,高電平就是截至。我們會看到,如果單單用38K,那麼如前面摘錄部分講到的,我們會在接收端會接受到一個低電平的訊號。
          或者我們可以再這麼理解吧:紅外接收頭只接受38K訊號(誤差範圍內),我們把接收頭看出一個轉換器。遇到38K就輸出低電平,沒有遇到38K就被上拉成高電平。
          於是所謂的“編碼”的概念就這樣產生了,我們利用有38K訊號 跟 沒有38K訊號 這兩種狀態,利用紅外接收頭就翻譯成低電平、高電平的訊號。。。。這就是最主要的東西。
          什麼時候有38K。。什麼時候沒有38K,一切都由我們程式設計來實現。我們可以靈活地操控有跟沒有,有的時間長度就是"接收方"低電平的時間長度。沒有的脈衝的時間長度就是接收方高電平的時間長度。我們只需要在接收方讀取高低電平的時間長度與高低電平的各種組合來讀取發射方所提供的資訊。這種就是所謂的“協議”,協議就是我們說好了,你照辦的意思。協議內容明確我發什麼的時候代表什麼意思,接收方你懂的。

          於是就有各種紅外編碼,NEC/飛利浦等紅外編碼是比較常見的,而我們根據需要我們可以自己設定自己的編碼。如果想做遙控玩一玩的就沒必要研究人家的紅外編碼協議,自己編幾個容易程式設計的就可以了。像想NEC紅外協議裡面談到的接受頭輸出的 高電平幾毫秒低電平幾毫秒就是代表“1”,高電平幾毫秒低電平幾毫秒就是代表“0”,高電平幾毫秒低電平幾毫秒就是代表“引導碼或者使用者識別碼”,這些都是人家NEC裡面的標準,我們可以自己定我們自己的標準。我可以說 10ms低電平後10ms高電平就代表允許接受,然後5ms低後5ms高就代表“1”,15ms低後15ms高就代表“2”,25ms低25毫秒高就代表“0”,當然這裡只打個比方,因為編碼長度要是太大的話對其它程式處理不是很靈活。因為我們解碼的時候最好不要被中斷。像空調那種一百多位編碼的一般很少。少。至於多少合適,自己酌情考慮。編碼的形式也自己決定。
          於是乎,上面的東西並沒有說到“載波”兩個字,好了下面就說說載波吧。
          我們把“有38K訊號”這種狀態(“資訊”)當做“1”,把“沒有38K的訊號”這種狀態(“資訊”)當作“0”,我們可以看成其實我們要發出去的就是 1 跟 0 兩種狀態的組合。
          而 1 跟 0兩種狀態的另外一種意思就是 38K 的“有”跟“沒有”
          於是 38K 就帶上了 1 跟 0 的這兩種訊號的資訊。
          我們就把38K理解成載波訊號,載放這資訊的訊號,其實就是斷斷續續的38K訊號而已,如果我們說成載波那麼就是載波。不過我更喜歡把這種訊號看成一種編碼訊號。

好了,總結一下。紅外遙控就是這麼簡單, MCU控制有沒有38K訊號  紅外管就是把利用通斷來把微控制器的訊號發出去  接收頭就是把38K翻譯成有跟沒有 接收頭那邊的MCU就是把有跟沒有的時間長度與組合計算出來(解碼)。然後按照事先我們約定的編碼執行相對應的動作。

還有一點需要補充一下。
那就是接收頭的供電
這個很主要,接收頭的供電就好根據解碼的MCU的供電保持一致,這樣接收頭的輸出的高低電平就可以被微控制器IO識別相容。同時接收頭有很多種,有一些只能3V供電接受管就不要跟5V的MCU一起用,免得浪費電路資源。另外接收頭的有些是中間是電源腳有些中間的地腳,如果來玩玩的最好看清楚順便買的時候預留多一個免得燒了之後又得跑一趟。

至於學習型的紅外遙控,有的只需要學習編碼,有個則需要學習載波頻率。後者比較不好弄。歡迎接貼....


下面是紅外發射、接收頭(紅外基礎知識)

目前市售紅外一體化接收頭有兩種:電平型和脈衝型,絕大部分的都是脈衝型的,電平型的很少。 
電平型的,接收連續的38K訊號,可以輸出連續的低電平,時間可以無限長。其內部放大及脈衝整形是直接耦合的,所以能夠接收及輸出連續的訊號。 
脈衝型的,只能接收間歇的38K訊號,如果接收連續的38K訊號,則幾百ms後會一直保持高電平,除非距離非常近(二三十釐米以內)。其內部放大及脈衝整形是電容耦合的,所以不能能夠接收及輸出連續的訊號。一般遙控用脈衝型的,只有特殊場合,比如串列埠調製輸出,由於串列埠可能連續輸出資料0,所以要用電平型的。一般遙控器用455K經12分頻後輸出37917HZ,簡稱38K,10米接收頻寬為38+-2K,3米為35~42K。在沒有環境反射的空曠空間,距離10米以上方向性會比較強。在室內,如果牆是白色的,則在15米的空間基本沒有方向性。  

接收頭要有濾光片,將白光濾除。在以下環境條件下會影響接收,甚至很嚴重:  
1、強光直射接收頭,導致光敏管飽和。白光中紅外成分也很強。  
2、有強的紅外熱源。  
3、有頻閃的光源,比如日光燈。  
4、強的電磁干擾,比如日光燈啟動、馬達啟動等。  

38K訊號最好用1/3佔空比,這個是最常用的,據測試1/10佔空比靈敏度更好。實際調製時間要少於50%。最好有間歇。  

電平型的接收頭只要接收到38K紅外線就輸出持續低電平,用起來非常爽,以前的老式接收頭多半是這種型別,但其有個致命弱點:抗干擾性太差,傳輸距離短(小於1m)。

而脈衝型一體化紅外線接收頭必須接受一定頻率38K的載波的基帶訊號才有正常輸出,如傳送500HZ的38K載波,脈衝型一體化紅外線接收頭輸出500HZ方波,而如果傳送連續的38K載波就會出項有瞬間低電平其後為高電平的現象。這種脈衝型一體化紅外線接收頭克服了傳統電平型接收頭的不足:傳輸距離相對更遠,穩定性大大增加,抗干擾性更強。因此已經完全取代了老式的電平型接受頭,在電子市場如不說明店主給你的絕對是脈衝性的。

手機拍照時可以檢視紅外發射管是否處於發射狀態
紅暴問題 
  有些廠家把能不能製造出無紅暴紅外燈當做一個技術問題來宣傳,好像有紅暴就是低技術,無紅暴就是高技術。其實,有無紅暴只是一個選擇問題,並不是技術問題,波長超過700nm的光線叫做紅外線,900nm以上的紅外線基本無紅暴,波長越短,紅暴越強,紅外線感應度也越高。現在市場上有兩種主流紅外燈,一種是有輕微紅暴的,波長在850nm左右,一種是無紅暴的,波長在940nm左右。同一款攝像機,在850nm波長的感應度,比在940nm波長的感應度好到10倍。所以850nm這種有輕微紅暴的紅外燈擁有更高的效率,應當做為紅外夜視監控的首選項。 
這說的有道理嗎?

紅暴是對紅外燈工作狀態的一個描述。工作燈在工作時,如果有紅暴就會在管芯出現紅色小點。如果沒有紅暴的話,工作和不工作人眼看不出來。沒有紅點

850nm和940nm都有紅爆,只不過940要比較弱一點

常見的紅外發射管有940nm波長和850nm波長兩種,940nm波長的紅外發射管主要使用於調製編碼及訊號傳輸,而850nm波長的主要用於安防等紅外光源上,接收管則有850nm~950nm通用的型號。850的管和940的管區別在於他們的功率大小。850是屬於大功率的,它的特點是:發射距離短,靈敏度高,適合用於攝象監控那塊。940是屬於小功率的,它的特點是:發射距離遠,靈敏度低,主要用搖控器上

850發射管的選擇

    一般的一體機設計距離較近,一般適用較大角度的IR發射管,市場上最通用45、60度角,可選擇一般晶片,最好還是選擇日本和臺灣的,市場上用12Pcs、14Pcs、18Pcs、24Pcs發射管的一體機,常用此類產品一般開發距離在5-20米,若開發20米以上的一體機,必需建議使用日本和臺灣晶片,如28Pcs、36Pcs、48Pcs、64Pcs等產品,同時需選用較小角度的效果會更好。

如果你的調製波形是高電平有效,38KHz接收頭輸出的肯定是低電平;幾乎所有的紅外線接收頭的輸出訊號都是反相的。
接收頭一般都有好多種,時間一久就分不清三腳是怎麼排列的?
     方法是分別用機械錶測其中兩個腳的電阻,找到其中兩腳阻值最小的一個,這時表棒不要動,答案出來了:紅表棒接的是Vcc,黒表棒接的是地  呵呵   不用說另一個腳就是訊號腳(IR)了。