Robofun 機器人論壇

標題: 我用51去控制SERVO MG945 可是...不動 [打印本頁]

作者: draw3299    時間: 2008-4-2 01:59
標題: 我用51去控制SERVO MG945 可是...不動
我寫了一個程式,控制SERVO轉向的。

我控制了其他顆(如towerpro 5010) 1.5MS為中立點,大於1.5MS與小於1.5MS都可以轉向。

可是我拿TOWERPRO MG945金屬齒來試試,他卻不會轉向了.....我是有把電源分開。

奇怪的是,我控制塑膠齒的可以,但是金屬齒的卻不行,請問有大大遇過這種問題嗎?

不曉得是不是這顆SERVO與其他部一樣

規格:Type:MG945
Dimension:40.5x19.8x37.8mm
weight:55.2g
Operating speed:0.24sec/60degree(6.0v)
stall torque: 13.0kg/cm(6.0)
Tmperature range : -20_60degree
Dead band width:4ms
Operating voltage:4.8V-7.2V

以下是我的程式 KEILC  石英振盪器12MHZ

#include<regx51.h>
sbit servo2=P2^1;

delay01s(int d)
{
int i,j,k;
for(i=0;i<d;i++)
  for(j=0;j<100;j++)
   for(k=0;k<120;k++);
}

delay01ms()
{
int i;
  for(i=0;i<12;i++);
}

srv2_ce()                      //置中1.5MS      
{
int i;
servo2=1;
for(i=0;i<15;i++) delay01ms();
servo2=0;
for(i=0;i<185;i++) delay01ms();
}

srv2_cw()                       //順轉1.0MS                       

int i;
servo2=1;
for(i=0;i<10;i++) delay01ms();
servo2=0;
for(i=0;i<190;i++) delay01ms();
}

srv2_ccw()                              //逆轉2.0MS            
{
int i;
servo2=1;
for(i=0;i<20;i++) delay01ms();
servo2=0;
for(i=0;i<180;i++) delay01ms();
}

cen()                                                         
}
int i;
for(i=0;i<40;i++) srv2_ce();                                 
}

right()
{
int i;
for(i=0;i<40;i++) srv2_cw();
}

left()
{
int i;
for(i=0;i<40;i++) srv2_ccw();
}

main()
{

while(1)
  {
  cen();
  delay01s(10);
  right();
  delay01s(10);
  cen();
  delay01s(10);
  left:
  delay01s(10);
  }
}

動作為:置中(延遲1秒)→順時針(延遲1秒)→置中(延遲1秒)→逆時針(延遲1秒)
作者: llyyzz    時間: 2008-4-2 22:50
我也碰到過,輝盛系列的舵機就是怪,用測試儀可以驅動,用代碼就是不行。e_sky就沒有問題

一種可能就是舵機不是數字的。是模擬信號的。還有一種可能就是舵機驅動結構有差別。。。具體什麼差別就不知道了。
作者: draw3299    時間: 2008-4-4 19:54
我只會單純的控制1和0而以,這顆SERVO便宜,可是我不會用

,可能他不能用我這樣的方式控制吧。

我用NE555接出來的電路可以控制轉向,可是軟體就不行。

大概這種方式他不能接受吧  ^^"
作者: TroyLee    時間: 2008-4-8 05:57
你的控制方式錯誤!!
伺服馬達的波形要不停的送
就算你延遲一秒,在那一秒鐘也要送相同的波形!!!

不這樣的話馬達會抖來抖去
用 555 可以是因為他會每20ms送一次波形, 但你的程式不會

另外數位伺服機的控制頻率好像不只50hz, 好像可以到200hz,
不過要確定一下, 以免燒掉

[ 本帖最後由 TroyLee 於 2008-4-8 05:59 編輯 ]
作者: tuvw356    時間: 2008-4-23 08:48
標題: ??西?留?中介
08年春季??西?留?中介,GED?球教育機構?手??西?留?中介出??通??西?留???,旨在打造??一流的??"??西?留?直通?"服???西?留?中介,希望到海外??深造和?展的同?可以借此機??得??西?留?中介...



4mmo
作者: nichal    時間: 2008-10-15 17:23
有幾個重點要考慮

1. 金屬齒的SERVO啟動電流較大, 如果不能提供較大的瞬間電流, 有可能會死機
2. 用示波器檢查一下送給SERVO的波形, 如果不是連續的pulse, 或pulse的寬度一直在變, 那也有問題

所以大大提到用塑膠齒的可以, 可是金屬齒的不行, 原因是第一項所提到的
而用555可以動而8051卻不行, 原因是第二項所提到的

另外
對TowerPro的servo來說
信號的電壓也是關鍵的問題
因為TowerPro所用的內部電壓是3.3V
觀察一下當SERVO轉動時
信號的準位有沒有掉下來或是在飄
這也很可能會造成SERVO不動作

如果覺得內部的驅動電路真的很糟糕
不妨自己把驅動板改造一下再試試
在OpenServo的網站上有不少相關的介紹唷~~

http://www.openservo.com/

[ 本帖最後由 nichal 於 2008-10-15 17:56 編輯 ]




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2