2010-06-11

Mindsensors NXTMMX的功能特性

Mindsensors NXTMMX的主要功能是提供NXT可以增加兩個馬達的輸出。
這是一個I 2C裝置,外觀上共具有四個RJ12 Ports以及一個外部電源輸入端子:



用途分別為:


l   M1/M2:連接兩個馬達輸出。
NXTMMX
所設計的輸出控制功能主要是以NXT Servo Motor為對象,提供運轉角度、時間與速度的控制,而同時也適用於Firgelli L12-NXT線性致動器,此外,透過適當的轉接線,PF MotorLampTechnic Motor等同樣都可以連接使用,差別只在於沒有角度控制功能,所以,在運用上具有如同NXT Output Ports一樣的彈性。


l   NXT:連接NXT Input Ports
NXT透過I 2C通訊方式操控裝置。


l   Sensor:串接其他I 2C裝置(數位感應器)
NXTMMX
出廠預設I 2C Address0x06,而串接在同一個Input Port的裝置位址須不一樣,還好除了NXTMMX之外,應該沒有其他數位裝置的位址是0x06,而若需要變更I 2C位址設定,可以使用Mindsensors所提供的程式修改。


l   9V電源輸入端子:連接外部電源供電給M1/M2 Ports的馬達。
外部電源的連接方式,在Mindsensors NXTMMX產品網頁上有9V電池盒供選購,而我是使用舊款的Technic電源線


再加上
PF電源延長線(L8886)連接PF電池盒(L8881)作為供電


電源輸入的極性必須正確,否則無法正常供電,所以若
NXTMMX能夠提供電源指示燈,使用上應該會更便利。


NXTMMX的馬達操控


比較NXT Output Module對於Servo Motors的控制功能,NXTMMX同樣可以分別控制連接在M1/M2 Ports兩個Servo Motors的運轉角度與輸出速度,此外還增加了運轉時間的設定。
而不同於Output Module所使用的OnFwd()RotateMotor()等指令, NXTMMX是透過I 2C通訊方式來操控馬達;在撰寫程式時,也許沒有那麼直覺與精簡,不過,若能瞭解清楚NXTMMX的特性與用法,相較於Output Module的主要功能大都具備了,同時還多了一些友善的輔助設計,所以應該是相當實用且好玩的裝置。
而運用I 2C通訊操控NXTMMX,首先即須要瞭解裝置的Register Layout與內建指令的用法。


NXTMMX Register Layout 指令用法


NXTMMX Register的主要用途為提供對兩個Output Ports的控制功能所需之設定值與馬達運轉過程中回饋的狀態值,所以用到的Registers數目並不少,因此須要先組織與整理Register Layout的配置與用法,這樣才有助於掌握各種運用情況下所相關之Register的設定方式以及內建指令的使用時機。
NXTMMX Register Layout
說明文件可以參考Mindsensors所提供之Users Guide Page 57,而以下為依據用途所作的整理分類:


l   讀取裝置狀態值 / 寫入指令:
0x41 -
存放目前外部電源的電壓值(Voltage) 寫入所要執行的控制指令
讀取這個位址可以判斷外接電源的供電狀態,若極性接錯,回傳值為0,馬達即無法運轉。
目前已提供的控制指令清單在Users GuidePage7,而較常用的是:
R
Reset所有馬達參數設定值與狀態值,可以作為初始化Ports的動作。
S
:讓兩個Motor的參數設定值同時生效,用來啟動同步運轉。


l   設定M1/M2 Port馬達運轉參數
透過將馬達運轉設定值寫入以下控制參數的Registers位址,可以對馬達進行運轉控制:
旋轉角度設定參數 - M1 0x420x45M2 0x 4A0x4D
輸出速度設定參數 - M1 0x46     
M2 0x4E
運轉時間設定參數 - M1 0x47      M2 0x4F(以秒為單位
)
控制功能設定參數 - M1 0x49      M2 0x51(參考Users GuidePage8)

控制功能設定參數的作用就如同NXT Output ModuleUpdateFlags Field Constant,用來確認所要使用的馬達控制方式,如:速度控制(bit 0)、角度控制(bit 3)、時間控制(bit 6)等。
必須要將對應的控制位元設成ON(1),馬達才會依據設定的目標值運轉,若同時設定角度與時間目標,則會以時間為優先,亦即如果沒有在指定的時間期限內旋轉至設定的角度目標,就會中止運轉的工作;而若同時將角度與時間控制位元設成OFF(0),則會連續運轉直到下一次改變設定值為止。
bit 7
為設定讓控制方式生效,也可以使用S指令來讓M 1’ M 2個控制功能設定參數同時生效
而由控制功能設定參數,可以使用兩個NXT Output Module所沒有的輔助功能:

相對位置旋轉(bit 2) – 設定以目前位置作為參考點進行相對位移運轉。
守住目前位置(bit 5) – 設定記住前次旋轉後位置,下次運轉前若有因外力影響而移位時,會先回復後再運轉。
M1M 2Ports所有運轉參數的Registers位址正好連續(0x420x51) 且為16Bytes,符合NXT I 2C Buffer的最大資料寫入量,因此可以全部一次寫入,然後執行S指令,來同步生效並啟動M1M2 Port的馬達運轉。


l   回饋M1/M2運轉工作狀態:
透過讀取以下回應值所存放之Registers位址,可以取得馬達目前的執行狀態:
旋轉角度位置 - M1 0x620x65M2 0x660x69
■馬達運轉狀態 - M1 0x72      M2 0x73(參考
Users GuidePage9)
工作執行狀態 - M1 0x76      M2 0x77
旋轉角度位置回應值就如同NXT Output ModuleMotorRotationCount()函數。

而運轉回饋狀態則讀取目前馬達運轉工作的執行情形,一旦按照設定目標完成,則所有的bit都會設成0,所以較為實用的用法是作為判斷馬達是否處於遲滯狀態(Stalled),詳細說明可以參考Users GuidePage11
而工作執行狀態則作為判斷馬達是否按照目標設定完成運轉,功能有點重複。


l   PID控制設定值:
分別有對於角度位置與輸出速度的PID控制參數以及微調參數,至於實際用法有待測試,希望Mindsensors能夠有進一步的說明文件。


簡單的測試結論


相較於NXT Output Module的四種控制模式,較確定的是synchronized mode沒有提供,而speed regulation mode因為沒有回饋Actual Speed,所以無法檢測,除此之外Tachometer limited Mode對於NXT Servo Motor的控制相當精確。
唯一到目前還沒搞定的是Firgelli L12-NXT線性致動器的位置控制功能不太正常,以50mm為例,完全伸展的設定值應該是-100,不過這樣的設定只伸展到-90就停止了,須要設成-125才會完全伸展,而且不同Speed狀況還不一樣,有待將問題回報原廠解決。


範例程式:NXTMMX-tst01.nxc


<<>>  


 



  • 留言者: !....QOO....!
  • Email:
  • 網址:
  • 日期: 2011-05-11 13:34:06
馬達問題雖然解決了..但我還是搞不懂Sensor Port 怎麼用.....

只能接另一塊MMX 還是能接其他Sensors??
[版主回覆05/11/2011 23:15:08]這我還沒試過,
依據NXTMMX使用手冊的說明, Sensor port可以串接的為數位感應器,
所以, 使用上就如同接在NXT 的Input port一樣,
唯一的限制應該就是所串接的數位感應器, 它的I2C位址不能和NXTMMX一樣(x06),
因為它與NXTMMX使用NXT的同一個Input port.





  • 留言者: !....QOO....!
  • Email:
  • 網址:
  • 日期: 2011-04-26 14:22:09
使用時....發現裝在擴充的馬達 扭力嚴重不足 是正常現象嗎??
[版主回覆04/26/2011 23:26:51]

應該不致於才是, 
建議先檢查一下外接電源, 可以讀 0x41位址的值, 乘以 37 就等於它的電壓值,
我使用 9V 的電池盒, 並不會有出力不足的情形(Speed設成最大 100) 







  • 留言者: 瘋ㄍ
  • Email: a901300@yahoo.com.tw
  • 網址:
  • 日期: 2011-04-21 09:00:13
想請問~馬達運轉的方面只有前後嗎??
因為我想要兩顆馬達一起動作
可是方向是不同的
請問要怎麼做呢??
[版主回覆04/21/2011 22:18:05]

NXTMMX兩個Motor Port各有5個控制參數且長度為8 Bytes
它的位址連續,總長度16 bytes,剛好符合NXT I2C buffer的長度限制,
所以可以同時設定並且一起寫入NXTMMX
接著對於 Command register(0x41) 寫入”S”指令,
這樣就可以做到兩個馬達以不同方向同時運轉的動作。
以你的需求,需要設定的參數分別為:


(1)   輸出速度參數:Motor 1 - 0x46, Motor 2 - 0x4E
將這兩個參數分別設成不同方向,如: 100 -100


(2)   控制功能參數的:Motor 1 - 0x49, Motor 2 - 0x51
將這兩個參數的 bit0設成1


沒有留言:

張貼留言