2013年1月9日 星期三

一般伺服馬達的簡單控制

今天要跟大家介紹控制伺服馬達的方法

一般伺服馬達有三條線  分別為 : 紅  黑  黃

紅與黑分別代表馬達接上電源的正極與負極

例如你手邊有一顆吃5V的伺服馬達  供給他電源的方法就是

將它的紅色電線接上5V電池的正 黑色電線接上負就行了

而剩下的那條黃色的電線則是代表訊號線

接上控制板上輸出PWM的訊號PIN腳就行了

如果控制板像Roboard那樣能直接供給馬達電源 那接線時會簡單很多

以下以圖示分別介紹伺服馬達直接接在控制板跟另外外接電源的方法

a. Roboard 提供伺服馬達電源  將之直接插在上面

   黑色線接1  紅色線接2  黃色線接3

   注意  如果你使用的是 RB-100   Robard的電源就只能供給5V (假設馬達是5V的)

   因為 RB-100 的電源與供給馬達的電源是相通的!!






b. 伺服馬達的電源另外接在其它的電池上

   比較特別的地方就是  馬達的黑色線不只要接到電池的負端
  
  也要接到 Roboard 的負端(上圖1的位子)




馬達接好後打開 visual c++ 開始來寫程式控制馬達啦~

在"伺服馬達簡介"時跟大家說過伺服馬達的運作原理

是依據送出的PWM訊號的高低比例來控制轉動的角度位置

然而在 Roboard 的函式庫裡有很多已經寫好的函式

你只要輸入 角度  時間  之類的參數就能夠簡單的控制馬達

不過我個人比較喜歡直接給PWM訊號來控制馬達

因為這樣感覺不用走在別人已經寫好的函式裡

可以較自由  以自己的方式控制伺服馬達

以下貼個簡單的程式做範例

--------------------------------------------------------------------------------------------------

#include "stdafx.h"       // visual c++ 一開始已經附好的標頭檔
#include "roboard.h"    // 匯入roboard的函式庫


int  main()    //  主程式開始
{

   roboio_SetRBVer(RB_100RD);

   rcservo_SetServo(RCSERVO_PINS1, RCSERVO_SERVO_DEFAULT_NOFB);

   if(rcservo_Init(RCSERVO_USEPINS1 + RCSERVO_USEPINS2 + RCSERVO_USEPINS3) == false)
   {
  printf("ERROR");
  return -1;
   }

    //   之前提過的基本開始寫法   輸入版子的型號   要用哪隻腳位  和初始化之類的

   //--------------------------以下開始輸出PWM控制馬達的轉動----------------------------



     printf("Enter to 1000");   //在螢幕顯示 Enter to 1000 提示自己按下Enter 馬達會轉到1000的位子
     getchar();                       //按下Enter鍵會繼續接下來的動做的敘述 
     rcservo_SendCPWM(RCSERVO_PINS1 , 18000L , 1000L );

     /*  rcservo_SendCPWM(RCSERVO_PINS"a" , "b"L , "c"L  )是一個 roboard 的PWM的

          函式庫裡的一個函式   在"a"填上要送出PWM的角位   在"b"填上周期(微秒us)

          在"c"填上high起來的時間(微秒us)   roboard就會連續的送出你設定的PWM訊號 */

         


     printf("Enter to 1500");
     getchar();
     rcservo_SendCPWM(RCSERVO_PINS1 , 18000L , 1500L );   




     printf("Enter to 2000");
     getchar();
     rcservo_SendCPWM(RCSERVO_PINS1 , 18000L , 2000L );





     printf("Enter to close"); // 在螢幕顯示 Enter to close 提示自己按下Enter 程式即關閉
     getchar();
     rcservo_Close();   // 關閉  rcservo 函式庫

     return 0;   // 結束主程式
}



-----------------------------------------------------------------------------------------------

以上為一個簡單的控制伺服馬達的程式

執行之後按下 Enter 馬達會轉到 "1000" 的位置

再按一次 Enter 馬達會轉到 "1500" 的位置

再按一次 Enter 馬達會轉到 "2000" 的位置

再按一次 Enter 則結束程式




這樣就是一個簡單的控制伺服馬達的方法

而機器人就只是把10幾個馬達接一個人的形狀

再分別去寫每個馬達的轉動方式而已

如此一來  現在想做一個自己的機器人已經不是什麼難事了

不過雖說把馬達接成一個人的形狀   可以接的很容易也可以接得很複雜

有關機構設計或使用材料的嘗試我歸類在另一篇部落格 --  GIO的惡搞實驗研究記錄

有空大家可以去逛逛喔  謝謝大家~!!
















2012年7月18日 星期三

伺服馬達簡介

這一篇主要要來跟大家介紹伺服馬達~

伺服馬達為多數小型機器人常用的馬達   他的體積不會很大   重量也輕   且能精確地控制旋轉角度

一個典型的伺服馬達主要分成四個部分

     1. 控制電路晶片

     2. 直流馬達

     3. 減速齒輪組

     4. 可變電阻



伺服馬達裡面也是以一顆直流馬達來做驅動的   不過齒輪變速箱也一起裝在裡面了

一般馬達的力量其實都很小但速度卻很快     所以馬達通常都會再搭配所需的齒輪組

例如像小時候玩的四驅車裡馬達到輪子間的轉動也是經過一組齒輪傳遞的

目的也是為了能將扭力提高   不然其實馬達本身的扭力並不怎麼高

所以一般機器人在用的伺服馬達也都已經將所需的減速齒輪組放進去了

可能有人會問為什麼要特意讓馬達要減速呢    因為馬達的速度和扭力是有相對關係的

同樣的馬達   若變速齒輪組使他的轉速提高的話向對的扭力就會變小   反之易然

兩者的關係剛好成反比    至於是需要高轉速還是高扭力這就看你要用在什麼地方摟




一般伺服馬達所吃的是 PWM 訊號  (Pulse Width Modulation)

PWM 訊號是像方波一樣  high-low  high-low 的擺盪




一般的 PWM 訊號 high 是 5V  low是 0v

而以 PWM 控制伺服馬達的原理大致是以下這樣


上圖當18毫秒為週期 的PWM 訊號中有1毫秒是 high 的狀態時   伺服馬達轉向9點鐘方向的位子

有 1.5 毫秒是 high 的時候轉到12點鐘的位子    2毫秒是 high 時轉到3點鐘的位子

換句話說伺服馬達的轉向則是由 PWM 訊號的一個周期裡 high 所佔的比例來控制的

而將接收這樣的訊號並將之轉換給伺服機內的直流馬達就是控制電路晶片在做的工作


而且當馬達轉動到不同的角度時也會跟著帶動伺服機內的一個可變電阻

可變電阻就會因為馬達的角度不同而產稱不同的電阻值   

傳給控制電路晶片後就能夠知道馬達現在的角度在什麼地方了


以下就來放些伺服馬達的圖片吧~









那麼關於伺服馬達要如何採購呢?    

我聽過的廠家有  Kondo  Hitec  Parallax GWS  等   去這些廠牌的網頁或找專門的代理商應該是可以買的到

但一般而言像我們這種學生的馬達來源就是和學校實驗室有往來的廠家訂購   因為價錢似乎有落差...   

所以如果你只是想買個一兩顆玩玩   大概沒什麼人會直接去向廠商購買的   買個一整組機器人套件回來組會比較划算
  
但如果你只想買個兩顆來式式    可以去露天拍賣網或大一點的遙控模型店找找看   一般也都會有一些不錯用的

那麼接下來就祝你找到不錯用的好馬達摟~    




















實做應用 -- 直流馬達的轉速控制

這篇接續上一篇的 Led 燈控制     要用一樣的程式來教大家簡單地控制直流馬達喔 ~


2012年6月10日 星期日

開始撰寫程式 -- 匯入 Lib 篇

在 Roboard上灌好作業系統後   接下來要做的就是把寫好的程式丟進 Roboard 執行   

接上馬達後   就能夠依照執行的程式使馬達轉動