Hitechnic最近發表了新的IR Receiver sensor(IRRecv),具備了解析LPF RC Protocol IR信號的功能,目前PF系列的接收端裝置是L8884 PF IR-RX,而L8884的firmware同樣是解析來自PF 遙控器(L8885,L8879)以及NXT IR發送器(NRLink’ PFMate’IRLink)的IR信號然後對於連接A’B兩個output port的PF Motor或PF LED進行控制.
IR Receiver sensor的發表,讓NXT延伸PF系列的應用到接收端,而不只是使用原有之發送端裝置(NRLink’ PFMate’IRLink)來控制PF Motor而已,最直接的應用即是NXT可以讀取PF遙控器(L8885,L8879)的控制信號進而發展出更多樣有趣的用途(就如同Mindsensors PSP-NX),而在進階應用方面,更可以藉由IR發送器來建立NXT與NXT之間的單向溝通途徑,而兩端間的通訊協定即是LPF RC Protocol.
不過在開始發展應用之前,首先即須先瞭解IR Receiver回應回傳值的方式與更新行為,這樣才能充分掌握相關特性,所以本次測試的目的即在於此.
而在IR Receiver發表之初原廠並未提供Internal register資料,雖然有NXT-G block不過總覺得部份的特性功能被封裝掉了無法充分的進行測試,還好不久藉由Nxtasy有人在討論這個新sensor之際,藉機請Xander向Hitechnic要求公布了資料,所以才有機會使用NXC來進行這一次的測試.
IR Receiver I 2C操作方式
IR Receiver的I 2C bus address為0x02,它使用8組registers (0x42~0x49)來回傳4個channel的兩個A’B output ports所偵測到的IR信號(詳細請參考原廠網頁),而每一個register都有16種可能的回傳值,分別是: -128, (-100, -86, -72, -58, -44, -30, -16), 0, (16, 30, 44, 58, 72, 86, 100)等,其中-128代表收到Brake信號, 0代表無信號或Float,而其他14個值則分別是LPF Combo PWM mode時Forward/Backward各7階的信號值,Forward為+, Backward為-,越高階絕對值越大,各階間的值差距14, 而若為Combo Direct Mode則有4種可能回傳值:-128, -100, 0, 100,之所以會這樣設計的原因推測是考量到三種應用:
1. 模擬LPF RC(L8885, L8879)兩種遙控器的控制功能: 就如同前面介紹的回傳值狀態, 若使用L8885即適用Combo Direct Mode的3種回傳值(-100,0,100)(註: L8885遙控器沒有Brake按鈕),而具速度控制功能的L8879則會有Combo PWM Mode的16種回傳狀態,對於這兩種遙控器的回應行為.在後面的實測會有進一步的說明.
2. 容易將回傳值apply成為NXT Motor的Power level, 亦即方便套用7階的輸出控制.
3. 可以同時接收到數個不同遙控器的控制信號: 由於IR Receiver的firmware已經將不同channel以及port的回傳值分別存放於8個register中, 經實測同時使用多個遙控器時(無論相同channel或不同)確實可以在個別暫存器中正確回應, 這個功能個人認為應該是最有趣的部分,不過若使用NXT-G Block則只能設定讀取特定channel的回傳值,而NXC透過I 2C 操作則可以一次讀取全部8個register的值,這樣才能充分運用這個功能.
LPF RC Protocol及L8885/L8879控制器簡介
在介紹觀察結果前, 首先對於要測試的兩種LPF RC mode做簡要說明, 根據LPF RC文件定義的5種RC mode中,可以同時控制A,B ports的Combo mode有兩種:
l Combo Direct Mode: 定義了Float,Forward,Backward,Brake等4種output command, 而L8885遙控器傳送的IR信號即是此種Mode的command, 透過L8884 LPF RC接收器firmware的解析‘轉換成為對於A, B ports的輸出控制,不過實際上L8885並沒有Brake按鍵.
l Combo PWM Mode: 定義了Float,Brake以及Forward,Backward的7階輸出指令,目前L8879具速度控制功能的遙控器即傳送此種Mode的信號,當旋轉遙控器轉盤時會改變Forward/Backward各階的輸出(順時針遞增),從Float到Step 7,而Brake信號則定義在紅色按鍵
對於L8884接收器的firmware而言,以上兩種Mode都有Time out限制,即當接收器超過1.2秒收不到信號時會轉換成Float狀態.
實測觀察結果
本次測試分別以IRLink及L8885/L8879遙控器等兩種方式來測試IR Receiver解析LPF RC信號的功能,同時觀察其回應回傳值的方式:
n IRLink to IRRecv
如下圖, 左邊的NXT+IRLink為發送端,透過程式分別傳送Combo Direct Mode及Combo PWM Mode的IR信號給右邊的NXT+IRRecv接收端, 然後觀察接收端NXT IRRecv 8個register回傳值的變化情形.
在以IRLink發送Combo Direct Mode command時,IRRecv會於對應Channel’ output port的register回應Forward,Backward,Float,Brake等command的值為100, -100, 0, -128,而在切換command後約2秒,原register的值即會歸0, 這樣的回應行為主要是模擬L8885的操作模式.
以下為部分之發送端與接收端NXT程式的截取畫面:
Combo Direct Mode, Channel 2, Out A:Forward, Out B:Backward
n L8885(無速度控制功能) to IRRecv n L8879 to IRRecv
Combo Direct Mode, Channel 4, Out A:Brake, Out B:Brake
此模式會清除register中前次接收到的信號回傳值 (歸0)
接著以IRLink發送Combo PWM Mode command時, IRRecv同樣的會於對應的register回應各別output command的回傳值,惟Float的回傳值是2而不是0,剛好是Step1的值16扣除各階間的差距值14,此外與Combo Direct Mode最大的差異在於原register所存的值不會因切換成其他channel/port 的command而歸0,會維持原來的值, 這樣的回應行為就如同L8879的操作模式.
以下為部分之發送端與接收端NXT程式的截取畫面
Combo PWM Mode, Channel 1, Out A:Forward Step 7, Out B:Backward Step 7
Combo PWM Mode, Channel 4, Out A:Forward Step 4, Out B:Backward Step 4
前幾次接收到的信號回傳值仍保留於register而未被清除(歸0)
Combo PWM Mode, Channel 4, Out A:Float, Out B:Float
可以觀察到IRRecv Ch4的回傳值為2而非預期的0
以手動方式操作L8885遙控器時IRRecv回應的行為與使用IRLink時相同,但L8885並無Brake按鍵
以手動方式操作L8879遙控器時,IRRecv在Float時會回應0,此外若同時按下A’B兩個Brake鍵則IRRecv的register會先回應-128之後約2秒後變成0,其他則相同.
- 留言者: robotman
- Email: tslinb@hotmail.com
- 網址:
- 日期: 2009-10-22 07:57:53
看來又多了一位高手出現囉!!以後我有啥新的感應器.你也幫我測試解說好囉..呵!!
台南 林老師
[版主回覆10/22/2009 18:00:38]
Hi 林老師,
大家都是NXT的同好, 彼此分享資訊與交流都是好事
如果有什麼有興趣的主題, 也很樂意一起來探討,研究
沒有留言:
張貼留言