Home> Note> Excavator> 挖土機維修 (二) 連續伺服馬達 (MG995)

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

2015.11.25

  繼上一次修理挖土機,當時候使用0-180度的 MG995-伺服機馬達,根本無法完全的伸縮,過了幾天重買了馬達,這是連續旋轉的MG995,其實外觀沒有差別,唯獨有差的就是內部的齒輪,其中沒有擋片還有控制晶片聽PPM訊號

所有東西都沒有變,只有程式碼更動

------------------------主程式------------------------------------------------
  #include <Servo.h>
  Servo servo_up;
  int pin_up = 7;
  int read_up = 9;
  int value_up;
  int move_up;
  Servo myservo;
  void setup(){
    servo_up.attach(pin_up);
    Serial.begin(9600);
    pinMode(read_up,INPUT);
  }
  void loop(){
    value_up= pulseIn(read_up, HIGH, 25000);
    Serial.println(value_up);
    Serial.print(",");
    if(value_up >= 1450 && value_up <=1550){
      f_move_up(1500);
    }
    else if( value_up >=1050 && value_up <=1250){
      f_move_up(1800);
    }
    else if (value_up >1250 && value_up <= 1450){
      f_move_up(1650);
    }
    else if( value_up >1550 && value_up <= 1750){
       f_move_up(1350);
    }
    else if(value_up >1750 && value_up <= 2000){
      f_move_up(1200);
    }
    else{
      f_move_up(1500);
    }
    delay(10);
  }
  -------------------------------------END---------------------------------------


  --------------------------------副程式------------------------------------------
  void f_move_up(int time){
    servo_up.writeMicroseconds(time);
  }
  -------------------------------------END---------------------------------------

這個程式碼是將訊號讀進來後,一樣做判斷式處理,連續旋轉的伺服馬達是聽「脈衝訊號」,範圍「1000-2000 us」,所以使用副程式、servo library來驅動馬達。

傳入副程式「f_move_up」的「time」就是脈衝訊號長度。

我將讀到的訊號切成四等分,「很慢」、「慢」、「快」、「很快」,這樣遙控時就會有區別;燒入程式後,完成如下影片

相信如果懂得人一定很矛盾,為什麼要這麼麻煩?原本訊號就是聽PPM 那就可以直接連接馬達,不用多轉一次訊號

有兩個原因:
  第一:原本想要設定極限值,這樣馬達就不會過轉,最後把軸弄斷,如影片第一軸已經斷了
  第二:因為我忘記了,做完成功才想到......哈哈哈哈哈

最後一章就是修改遙控器的,因為發現慣用模式不一樣,所以需要修改,請連接:
    挖土機維修-(三) 修改遙控器(FS-CT6B)

Top