task main()
{ClearScreen( ); //要先清空螢幕
int t1 = CurrentTick( ); //取時間點t1
OnFwd(OUT_A, 100);
Wait(60000); //讓馬達轉1秒=1000
Off(OUT_A); //停止馬達
int angle = MotorRotationCount(OUT_A); //讀取馬達角度
int t2 = CurrentTick( ); //讀取時間點t2
while(1){
TextOut(0,LCD_LINE1,"angle="); //LCD第一行顯示文字「angle=」
NumOut(50,LCD_LINE1,angle); //LCD第一行中間顯示馬達轉角
TextOut(0,LCD_LINE2,"time="); //LCD第二行輸出文字
NumOut(50,LCD_LINE2,t2-t1); //LCD第二行中間顯示經過時間
}
}
解說:
OnFwd(OUT_A, 100); 以100%電力輸出
Wait(60000); 60000等於1分鐘
angle = -12009
time = -5536
一分種轉12009度 12009/360=33.3583 一分鐘轉33圈
看看上面圖片第一行的 33 rpm 的數值
(PS:更正 發現到MotorRotationCount讀的數值 ~ 只能讀到12000多數值就掛了
為什麼會發現呢? 因為看實際去轉並沒有那麼慢 ~ 然後用一秒去測為816度
816/360= 2.2666圈 ~ 等於1秒至少會轉2圈 ~ 意味 60*2=120 一分鐘至少要120圈左右 真正2.666*60=136圈
所以實際等於一分鐘360圈 ~ 有可能跟電壓跟電源有關 ~ 要實際用三用電表去測才知道)
另外可以參考
轉動的數值比較不會那麼吃驚
吃驚是時間 竟然有5536 換算下來有5秒
究竟5秒是怎麼來的 ~ 是因為要停馬達A所以花了5秒嗎? Off(OUT_A); //停止馬達
著點要再看看為什麼原因導致誤差5秒 ~ 自己在看轉動的時候要到1分鐘的時候
馬達好像在前5秒就開始轉慢了 ~ 給我的感覺像下面圖片的01
我本來期待是02的圖式 ~可以瞬間停下來的說
建議注意int的溢位問題,如果馬達長時間運轉,數值會超過int的範圍,改為long會比較正確。
回覆刪除非常感謝您的回覆 ~ 我在之前測式的時候有用long 還是一樣的情況
回覆刪除照理說int的值 應該從-32768到+32767
但是int到12000就掛掉了 ~ 讓我百思不解
而且我在想是不是本身軟體就有問題 ~ 因為Bricx C++無法用float
如果我有說錯 ~ 非常歡迎指正我 ~ 而且我也非常高興您的回覆
順便問一下 ~ 你知道台灣哪邊有在單單賣一大包齒輪的說
你好:
回覆刪除我用long測試你的程式是正確的。
時間剛好是60000,int溢位後很符合你的-5xxx
角度在52200左右,int溢位後很符合你的-12000
若是需要我可以將程式寄給你測試。
另外NXC已經支援float,請更新韌體及BricxCC新版本。
如果要單買齒輪,請直接到露天拍賣找林老師詢問。
探奇 邱信仁
http://tw.myblog.yahoo.com/touch_classroom/
touch_classroom@yahoo.com.tw
謝了 ~ 不過露天拍賣 ~ 我有找過沒有我想要的齒輪
回覆刪除不好意思 ~ 我沒有比較詳細說我想要的齒輪圖 ~我的錯(K我的頭)
我不知道台灣有沒有再賣 LEGO 10076
http://www.toysperiod.com/lego-set-reference/bulk/technic/lego-10076-technic-gear-wheels/
你好:
回覆刪除這一包應該已經絕版,
不過除了41667及41666外,
我想其他齒輪滑輪及蝸桿Turn Table都可以取得,
9797裡面就有大多數的齒輪類零件。
台南林老師那邊也都可以買得到,
http://class.ruten.com.tw/user/index00.php?s=tslinb
祝你順利取得零件
探奇 邱信仁
恩 ~ 非常感謝您的回覆跟幫忙 ^.^
回覆刪除