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的惡搞實驗研究記錄

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
















沒有留言:

張貼留言