Home> Note> Excavator> 挖土機維修 (一) 角度伺服馬達 (MG995)

挖土機維修 (一) 角度伺服馬達 (MG995)

2015.11.21

  這是受朋友委託維修的挖土機,挖土機有其中一軸壞掉,壞掉的馬達就是 MG995

Lose image

圖片來源:http://goo.gl/frqE62

也沒有維修過類似的東西,當時東西也不在我這裡,沒有想太多先買一顆馬達再說!!當天發現遙控器發出的訊號不一樣,就帶回家處理了。

挖土機拆開之後,出乎我意料的亂+簡單....

Lose image

就是一堆線插在接收器而已,每一個軸都單獨聽訊號而已,沒有所謂的中央控制器,後來想想也是,這樣是最簡單的作法。

接收器的狀況如圖

Lose image

因為當時手上買的是聽角度的 MG995就沒有想太多,利用Arduino 讀取訊號後,再轉換訊號,發出角度的訊號給馬達。

接線方式:

將收接器的訊號接到Arduino UNO pin10,MG995接到Arduino UNO pin9,Arduino 與接收器共地。

備註:當時沒拍到接上 MG995的照片,這是接收訊號的照片

Lose image

讀取、寫判斷式、發出訊號,這些事情已經熟到不能再熟,很快就完成了,程式碼如下

以下的程式碼是根據遙控器廳的訊號做改變的程式碼,與在Arduino上面常用的不同喔!!!

--------------------------------------------------------------------
              #include <Servo.h>  
              int value;
              int angle;
              Servo myservo;
              void setup(){
                myservo.attach(9);
                Serial.begin(9600);
                pinMode(10,INPUT);
              }
              void loop(){
                value= pulseIn(10, HIGH, 25000);
                Serial.print(value);
                Serial.print(",");
                if(value >= 1450 && value <=1550){
                  angle = angle+0;
                }
                else if( value >=1050 && value <=1250){
                  angle=angle+3;
                }
                else if (value >1250 && value <= 1450){
                  angle ++;
                }
                else if( value >1550 && value <= 1750){
                  angle --;
                }
                else if(value >1750 && value <= 2000){
                  angle = angle -3;
                }
              if(angle <= 0){
                  angle = 0;
                }
                else if(angle >= 180){
                  angle = 180;
                }
                Serial.println(angle);
                delay(10);
                myservo.write(angle);
              }
          -------------------------------------------------------------------------

這樣就可以動了,以為修好了!!皆大歡喜,結果發現0-180度太短了,這一定要用連續旋轉版本.....請看下一篇

挖土機維修-MG995 (連續)伺服機馬達



補充

我們常用的轉動伺服馬達的程式碼(角度),這是Arduino本身的範例程式,各位可以在Example 找到此程式

-------------------------------------------------------------------------
#include <Servo.h>  
 
Servo myservo;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 
 
void loop() 
{ 
  for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
}  
-------------------------------------------------------------------------

補充之2

MG995的扭力較大,所以需要的電壓電流較大,如果單純使用Arduino 會有可能發生,電腦一直重複讀到Arduino 的聲音,狀況就是,一下有抓到Arduino ,一下抓不到,感覺Arduino 很像一直在關機的感覺,其實這是Arduino 本身的保護機制,因為負載的電流太大了。

解決辦法: 將MG995 另外供電,提示一下,如果開迴路控制,一個控制器是無法完成控制的,所以要讓它們閉迴路控制,就讓各位去思考如何去接線吧

Top