2012年10月25日 星期四

用 8051 和 IR 製作遙控音量模組

本文在 2012/10/25 20:03 發表於 Yahoo!奇摩部落格
因Yahoo!奇摩部落格將於2013年12月26日終止服務故遷移至此


今天我們來玩點自動控制的玩具
因為某些原因(?) 做了紅外線遙控的東西
所以就打算拿來應用一下

紅外線傳輸目前我看過的就兩種: IrDA, CIR
IrDA 是以前 PDA 用來和電腦傳資料的通訊協定, 目前已經很少用了
而 CIR 則是電視機或播放機的遙控器在使用, 仍然有大量新品產出
我們也做過 zigbee, 也知道其實有些新興起的無線傳輸投入市場
但是因為成本以及使用的便利性, 這些新興起的傳輸都沒能撼動 CIR 的地位
因為 CIR 實在太便宜了, 設計又簡單, 不用配對不用設定
對於家裡只有少少幾台接收設備的廣大用戶來說, 不容易產生衝突的問題
CIR 是光線信號, 所以不可以被檔住
這常常是其他家無線規格用來 highlight 說它們比 CIR 好的地方
但是能不能被擋住似乎也不是一般用戶會在意的問題
因為像是電視機, 播放器, 這些如果被擋住就沒用處了
電視被擋住還能看麼? 播放器被擋住還能換光碟麼?
所以在這樣的情境下 CIR 還是無所不在, 仍然是有許多的需求



CIR 通信協定最常見的是採用 NEC Protocol
SB-Projects : NEC Protocol
傻逼專案 XD
這篇網頁寫的非常詳細, 一點也不 SB (?)
基本精神就是傳送 4 個 byte, 前兩個 address, 後兩個 data
前後各兩個 byte 的有效資料只有一個 byte
前面的 byte 是資料, 後面的 byte 是前面 byte 的反向
也就是所有的 0 換成 1, 1 換成 0
前面 byte 是 0x5A, 後面的 byte 就是 0xA5
這可以用來檢查錯誤, 如果發現前後相加不等於 0xFF 或是前面做反轉後不等於後面的
那就表示傳出的信號可能因為反射或是干擾導致錯誤, 這資料就應該被丟棄

傳輸時 0 與 1 的表示是用發光間隔長短標記
採用 38KHz 載波, 當有 38KHz 震盪時 (也就是光線閃爍, 頻率 38KHz)
這信號代表有個 pulse 出現 , 這不是代表 1, 要繼續看
接著 pulse 結束, 等一段時間後會有另一個 pulse 出現
計算這兩 pulse 的時間間隔, 若時間接近 1.125ms 則此信號為 0, 若接近 2.25ms 則為 1
買紅外線接收零件時會需要注意買到的是哪種
若只是買感光 LED, 那你收到的就會是 38KHz 載波的弦波信號, 這是高手或是專用 IC 在用的XD
若是買到 IR 接收器, 那你收到的會是計算以及濾波過的 pulse 信號
可能還有第三種, 全部算完丟 byte 給你, 印象中有看到過, 不過這市場上不太容易找
所以最後我拿的是第二種, 收 pulse 信號的

就算是第二種接收器裡面還是分兩種, 沒錯, 很囉嗦XD
那就是高電位觸發或低電位觸發, 有些接收器拉高電位代表有 pulse, 有些則是拉低電位代表
使用前需使用示波器仔細觀察, VCC 和接地接上, 然後量測信號腳位
看看沒信號時是高是低, 接著拿一只遙控器按住任一按鈕, 看看信號變怎樣
如果出現震盪, 就表示應是可用的
這些資料都齊了不要急著關示波器, 還有另一個很麻煩的
那就是各家遙控器發射的信號都不盡相同
上面那個網頁是標準 NEC 的傳輸模式
實際上量測我看過兩種 NEC 風格的傳輸

上圖上面是標準 NEC, 有載波時代表 pulse, 每個 pulse 長度相同
上圖下面則是相反的 NEC, 有載波時代表信號長度, 沒載波的部分才是長度相同
遇到下面這種, 用標準 NEC 方式去收會全部都是 0, 因為沒載波時間隔一樣長, 都是短的, 代表 0
不過也不是不能抓, 那就要上下緣信號都要算時間, 然後取有值的當資料
可惜廠商為了規避專利或是獨佔銷售, 就算這樣你還是會有不能收的遙控器XD
我就遇過, 忘記哪家的, 上下收資料都有值, 都不相同, 超靠杯
有可能是用不同載波, 例如 30KHz, 那麼計算時間的參數就要換
如果不考慮這種怪遙控器, 用最便宜的類比示波器接上接收器接腳通常就能觀察出是哪種的
像我就只有一台古董類比示波器, 接上接收器後多按幾下遙控器按鈕
觀察信號上緣等長比較多還是下緣等長較多即可了解其特性
若是要看怪遙控器就一定要數位示波器, 可以截取一段信號下來計算時間
不過對於那種產品我會選擇無視, 我不願意為了一個爛遙控器買新示波器
而且下次絕不再買那家產品, 這種封閉系統就像某消費電子大廠(?)一樣, 太爛了

資料都準備好後就可以開始動手了
這工作量不大, 8051 就可以搞定, 用本實驗室產品 WT-02 製作XD

這是一張 8051 的核心版, 用 TQFP44 的 8051
上面裝有晶體震盪器, reset 電路, ISP 接口, P0 pull-high 電阻, 所有 port 引出 2mm pitch 接頭
全部用 SMD 電料, 整張體積只有 DIP40 8051 的 1.5 倍左右
由於這張當初是和別的板併板輸出, 所以電路圖沒法獨立抽出, 就暫時不提供電路圖了
不過這板上只有基本電路, 並沒有額外的 I/O 擴充
對於有自己組裝過 8051 的人來說只要看了前幾句的描述就一定能想像出電路圖是怎樣的
這種產品外面也是有人在賣, 我只是想看到我的 ID 在上面才做的XD

接著接線


實際的樣子



把紅外線接收器接上 PNP 電晶體後接入 P2.0
然後 P2.1, P2.2 接上 H 橋後連接自動音量模組
這音量模組上面有個兩聲道的音量 VR, 轉軸接上齒輪後接了個直流馬達
只要通電給直流馬達, 音量 VR 就會旋轉, 達到控制音量的目地
再加上紅外線就成了遙控音量模組

關於 H 橋的原理可參考前篇 用 8051 控制四線式步進馬達
前篇四線式要兩組, 直流馬達只有兩隻腳, 用一半的電路可以正反轉就夠了
一開始也是用電晶體去兜, 結果一接上就發出高熱, 看來用小晶體不太給力
於是就拿了大玩具 L298 來, 可承受 3A, 一接上就圓滿了(?)
L298 的應用可參考前篇 製作掃描式感光電路板曝光機 Part-2 控制部份, 有附線路
不過我覺得這樣有點殺雞用牛刀, 有空再找點便宜的料來偷一下XD

附上程式供參考, GPL Licence ! XD
ir-vol-ctrl.zip

執行後接上 UART, 速度為 115200 8n1
每個按鈕都按一下可以收到:

WuKC IR Receiver
* 00FF45BA
* 00FF46B9
* 00FF47B8
* 00FF44BB
* 00FF40BF
* 00FF43BC
* 00FF07F8
* 00FF15EA
* 00FF09F6
* 00FF16E9
* 00FF19E6
* 00FF0DF2
* 00FF0CF3
* 00FF18E7
* 00FF5EA1
* 00FF08F7
* 00FF1CE3
* 00FF5AA5
* 00FF42BD
* 00FF52AD
* 00FF4AB5

========================================================================
更新 :
低成本方案 !!

加串上 10K 電阻即可解決發燙問題
使用的晶體單價都 10 元台票上下, 量大一定更便宜



能用 !

3 則留言:

  1. 您好~~請問程式的UART用在哪個部分,怎麼沒看到呢? 麻煩解惑了~~謝謝!!

    回覆刪除
    回覆
    1. 用在傳回收到的 IR 資料, 當收到 IR 資料後把它寫成字串丟在 irstr[]
      主迴圈每次檢查後若發現有資料要發
      就用 uart_send() 丟一個 byte 給 UART 然後繼續做其他事

      刪除
    2. 謝謝您~~

      您真的好厲害!! great~

      刪除

注意:只有此網誌的成員可以留言。