2009-10-20

測試Hitechnic IR Receiver的回傳狀態及行為





Hitechnic最近發表了新的IR Receiver sensor(IRRecv),具備了解析LPF RC Protocol IR信號的功能,目前PF系列的接收端裝置是L8884 PF IR-RX,L8884firmware同樣是解析來自PF 遙控器(L8885,L8879)以及NXT IR發送器(NRLinkPFMateIRLink)IR信號然後對於連接A’B兩個output portPF MotorPF LED進行控制.
IR Receiver sensor
的發表,NXT延伸PF系列的應用到接收端,而不只是使用原有之發送端裝置(NRLink’ PFMate’IRLink)來控制PF Motor而已,最直接的應用即是NXT可以讀取PF遙控器(L8885,L8879)的控制信號進而發展出更多樣有趣的用途(就如同Mindsensors PSP-NX),而在進階應用方面,更可以藉由IR發送器來建立NXTNXT之間的單向溝通途徑,而兩端間的通訊協定即是
LPF RC Protocol.
不過在開始發展應用之前,首先即須先瞭解IR Receiver回應回傳值的方式與更新行為,這樣才能充分掌握相關特性,所以本次測試的目的即在於此
.
而在IR Receiver發表之初原廠並未提供Internal register資料,雖然有NXT-G block不過總覺得部份的特性功能被封裝掉了無法充分的進行測試,還好不久藉由Nxtasy有人在討論這個新sensor之際,藉機請XanderHitechnic要求公布了資料,所以才有機會使用NXC來進行這一次的測試.


IR Receiver I 2C操作方式


IR ReceiverI 2C bus address0x02,它使用8registers (0x42~0x49)來回傳4channel的兩個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 modeForward/Backward7階的信號值,Forward+, Backward-,越高階絕對值越大,各階間的值差距14, 而若為Combo Direct Mode則有4種可能回傳值:-128, -100, 0, 100,之所以會這樣設計的原因推測是考量到三種應用:


1.    模擬LPF RC(L8885, L8879)兩種遙控器的控制功能: 就如同前面介紹的回傳值狀態, 若使用L8885即適用Combo Direct Mode3種回傳值(-100,0,100)(: L8885遙控器沒有Brake按鈕),而具速度控制功能的L8879則會有Combo PWM Mode16種回傳狀態,對於這兩種遙控器的回應行為.在後面的實測會有進一步的說明.


2.    容易將回傳值apply成為NXT MotorPower level, 亦即方便套用7階的輸出控制.


3.    可以同時接收到數個不同遙控器的控制信號: 由於IR Receiverfirmware已經將不同channel以及port的回傳值分別存放於8register, 經實測同時使用多個遙控器時(無論相同channel或不同)確實可以在個別暫存器中正確回應, 這個功能個人認為應該是最有趣的部分,不過若使用NXT-G Block則只能設定讀取特定channel的回傳值,NXC透過I 2C 操作則可以一次讀取全部8register的值,這樣才能充分運用這個功能.


LPF RC ProtocolL8885/L8879控制器簡介


在介紹觀察結果前, 首先對於要測試的兩種LPF RC mode做簡要說明, 根據LPF RC文件定義的5RC mode,可以同時控制A,B portsCombo mode有兩種:


l   Combo Direct Mode: 定義了Float,Forward,Backward,Brake4output command, L8885遙控器傳送的IR信號即是此種Modecommand, 透過L8884 LPF RC接收器firmware的解析轉換成為對於A, B ports的輸出控制,不過實際上L8885並沒有Brake按鍵.


l   Combo PWM Mode: 定義了Float,Brake以及Forward,Backward7階輸出指令,目前L8879具速度控制功能的遙控器即傳送此種Mode的信號,當旋轉遙控器轉盤時會改變Forward/Backward各階的輸出(順時針遞增),FloatStep 7,Brake信號則定義在紅色按鍵


對於L8884接收器firmware而言,以上兩種Mode都有Time out限制,即當接收器超過1.2秒收不到信號時會轉換成Float狀態.



實測觀察結果


本次測試分別以IRLinkL8885/L8879遙控器等兩種方式來測試IR Receiver解析LPF RC信號的功能,同時觀察其回應回傳值的方式:


n  IRLink to IRRecv


如下圖, 左邊的NXT+IRLink為發送端,透過程式分別傳送Combo Direct ModeCombo PWM ModeIR信號給右邊的NXT+IRRecv接收端, 然後觀察接收端NXT IRRecv 8register回傳值的變化情形.



在以IRLink發送Combo Direct Mode command,IRRecv會於對應Channel’ output portregister回應Forward,Backward,Float,Brakecommand的值為100, -100, 0, -128,而在切換command後約2,register的值即會歸0, 這樣的回應行為主要是模擬L8885的操作模式.


以下為部分之發送端與接收端NXT程式的截取畫面:


Combo Direct Mode, Channel 2, Out A:Forward, Out B:Backward



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



n  L8885(無速度控制功能) to IRRecv
以手動方式操作L8885遙控器時IRRecv回應的行為與使用IRLink時相同,L8885並無Brake按鍵


n  L8879 to IRRecv
以手動方式操作L8879遙控器時,IRRecvFloat時會回應0,此外若同時按下A’B兩個Brake鍵則IRRecvregister會先回應-128之後約2秒後變成0,其他則相同.


n  測試程式
發送端NXC程式, 收端NXC程式





  • 留言者: robotman
  • Email: tslinb@hotmail.com
  • 網址:
  • 日期: 2009-10-22 07:57:53

看來又多了一位高手出現囉!!以後我有啥新的感應器.你也幫我測試解說好囉..呵!!


                                              台南 林老師


[版主回覆10/22/2009 18:00:38]

Hi 林老師,
大家都是NXT的同好, 彼此分享資訊與交流都是好事
如果有什麼有興趣的主題, 也很樂意一起來探討,研究


沒有留言:

張貼留言