關於我自己

2012年2月26日 星期日

齒輪比跟圓弧長跟RPM跟馬達極數

1.齒輪比:

1圈所謂360度 ~ 假設10個齒鋸 360/10=36

假設A轉一圈 ~ D會轉多少度呢?          由上面齒輪比公式16分之1度

360/16= 22.5度

2.圓弧長

假設我有一臺車 ~ 輪胎半徑為5公分 ~ 我要如何算我的移動距離呢?



所以輪胎移動90度代表車子移動了7.85公分

180度 = 15.7公分

1圈 = 360度 =  31.4公分

3.RPM                                                                                                      

RPM = 每分鐘轉速,英文RPM,全寫是Revolution(s) Per Minute

假設 RPM = 3600

意味1分鐘轉3600圈

1圈代表360度

如果我要算1秒呢?

1分鐘=60秒

所以3600/60=60圈

1秒轉60圈

套上面的弧長移動距離

那麼60*31.4=1884公分

1公尺=100公分

所以1884/100=18.84公尺

(PS:Lego轉速沒那個快 ~ 看之前篇就知道了)

馬達極數
每分鐘轉速(rpm)=頻率(Hz) X 60 (sec/min) X 2  / 極數

1Hz * 60S *2 /極數
1*60*2/2=60
1*60*2/4=30
1*60*2/6=20
1*60*2/8=15
1*60*2/12=10

2P=1HZ為60 RPM  
4P=1HZ為30 RPM  
6P=1HZ為20 RPM
8P=1HZ為15 RPM  
12P=1HZ為10 RPM 

假設用6P ~ 在程式下指令80Hz
80*60*2/6=1600
所以一分鐘轉1600圈

2012年2月25日 星期六

LEGO NXT Motor Bricx

 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的圖式 ~可以瞬間停下來的說