Encode Motor

Encode Motor 除了能做出一般 Motor 的轉動功能外 , 它還能精準地將 Motor 的位置、速度和旋轉方向的準確回饋 ,
並且將這些 Motor 的運動轉換成訊號(digital signal) , 在 robo pro coding 上會以 step , counter 等數值呈現 (encode)
回饋給 TXT 4.0 Controller 進行精確的編程控制。
專題目的 :

- 學習利用 Encode Motor 的 Counter 準確地轉動至特定位置
- 學習 fischertechnik 轉盤結構
- 使用 Display Screen 顥示 Encoder motor 的 counter 數值
- 同步多組 Encode Motor
所需用料 :
TXT 4.0 Controller x 1
Switch (input) x 1
Encode Motor x 1
電線 x 2
3-Pin Encode Motor 電線 x 1
電源 x 1
轉盤結構 x 1
轉盤結構的建構方法 :
電線接駁方法 :
Switch > I1
Encode Motor 2Pin > M1 (O1,O2)
Encode Motor 3Pin Black > C1
Encode Motor 3Pin Red > 9V Out +
Encode Motor 3Pin Green > 9V Out -
Controller Configuration :

先取出「TXT 4.0 Controller」

在「Input 」取出「Mini Switch」
分別在「Motor」取出「Encodermotor」及「Counter」取出「Encodermotor counter」

將「Encodermotor」加至「Motor」, 會默認變成「M1」 ;
將「Encodermoter counter」加至「Counter/Digital Input」 ; 會默認成「C1」
將「Mini switch」加至「Input」, 會默認成 「I1」
請相應自己的電線接駁位置
Display Configuration :

加入「TXT_Display」

將「TEXT」留空用作顯示 Encode motor counter 的數值 ,
Font Size 建議改大以更清楚顯示文字內容。
TEST INTERFACE 測試 :

拖拉 M1 改變紅圈的數值去讓 Motor 轉動 , 數值為 0 - 512 ; 數值愈大 轉速愈大 ,
Counter 的數值代表 Encode Motor 內的 encode sensor 觸發的次數 (不代表 motor 轉動周數) ,

試以 M1 512 為例子 , 測試轉台由起點轉動一周的 counter 數值是多少 ?
你會得出 counter 的數值約為 3600 , 可推斷出 1/4 cycle = 900 , 1 cycle = 3600
透過測試出來的 counter 數值來進行稍後的編程。
在較高的轉速和較長的運作時間下,移動的位置會比慢速的稍微不準確。
利用 Counter 控制轉動幅度 | 編程教學 :

首先從「Counter」取出這3組command , 接下來會說明每個commnad的用處。

將「reset counter」放至「program start」的下方 , 在每次編程開始時都先將 counter 的數值歸 0 ,
以確保執行接下來的編程時 counter 都會是由 0 開始計算

從「Logic」取出「if do」作為 Input的檢測及觸發output

前往「Input」將「is mini switch ___ open」拖拉出來 , 以檢測 switch 的狀態
將「is mini switch closed」加入至「repeat forever」裡的「if」中,
並將 switch 的狀態改成 closed , closed 代表 switch 被按下的狀態

在「Motor」取出「set motor speed」及「stop motor」

將「set motor speed 512」放至 do 的後方 , 意思是當按下 switch 時 , 啟動 Encode Motor

在「loops」中取出「repeat while」以檢測 counter 的數值

在「logic」取出「=」 , 「Math」取出「0」 , 作檢測 counter 數值之用
加入「get counter value < 900」至「repeat while 」裡面 ,
目的是當 counter 數值未達 900 時 , 前面「set motor speed 512」都會繼續執行 ,
換言之當達到 900 時再停止 motor 便會是 encode motor 轉動「 counter = 900」的距離
i.e. 900 是在 Interface Test 測試時得出的 1/4 轉台 cycle
在「Display」取出「set input text」以及在「Until」取出「wait _ s」

放至 while loop , 將 「set txt_input」設定成「get counter value」讓 Display Screen 顯示當下的 counter 數值 ,
「wait 1 ms 」的用意是讓顯示的數值以較慢的速度呈現

最後加入「stop motor」至「while loop」的後方 , 完成 while loop 內的 < 900 counter 後 關上 Encode Motor
按下「start program」傳送並啟動編程

按下 Switch , Encode Motor 會開啟轉動並推動轉台 ,
當 TXT 4.0 Controller 上的 Display Screen 數值至 899 (<900)時 ,
Motor 便會停止轉動 , 而轉台則會在移動1個quarter (1/4 CYCLE)
示範影片 :
同步控制多個 Encode Motor :

在工業世界中很多時候需要控制超過一組的 Motor , 例如汽車的運行、機械人的走路等等
它們都需要多組的 Motor 同時做出一樣的動作才能做出效果 eg 2組 Motor 同時啟轉做出向前行駛
我們會以剛才的轉台作例子向大家介紹 "sync" 這個 command 來同時控制多個 fischertechnik encode motor
電線接駁方法 :

加入另一個 Encode Motor :
Encode Motor 2Pin > M2 (O3,O4)
Encode Motor 3Pin Black > C2
Encode Motor 3Pin Red > 9V Out +
Encode Motor 3Pin Green > 9V Out - (C3左面)
注意2個encode motor的3pin sensor wire都需插至 Controller
將另一個 Encode Motor 加入 Controller 的 Configuration :

只需加入 Motor 即可 , "sync"同步無需用到「counter」功能
編程教學 :
點擊 「set motor」及「stop motor」 command 上的「+」 , 會出現 「sync with motor M2 」
按下「+」後 , Encode Motor (M2) 便會跟原本的M1 Motor 同步所有動作 (速度、開關)
唯獨方向可以不一樣 , 可點擊「ccw」來改變 Motor 的方向
影片示範 :
Step Size + 簡單同步編程 :

在「Motor」取出「set motor...step size」
透過 step size command 可以控制 Encode Motor 的轉動距離 , 與早前用過的 counter 相似
同樣按「+」使2組 Encode Motor 同步運行 , 改變 step size 的數值以改變轉動距離
step size 的最大值為 65536