Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 7397|回復: 5
打印 上一主題 下一主題

我用51去控制SERVO MG945 可是...不動

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-4-2 01:59:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我寫了一個程式,控制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 該用戶已被刪除
2#
發表於 2008-4-2 22:50:51 | 只看該作者
我也碰到過,輝盛系列的舵機就是怪,用測試儀可以驅動,用代碼就是不行。e_sky就沒有問題

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

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

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

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

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

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

[ 本帖最後由 TroyLee 於 2008-4-8 05:59 編輯 ]
5#
發表於 2008-4-23 08:48:35 | 只看該作者

??西?留?中介

08年春季??西?留?中介,GED?球教育機構?手??西?留?中介出??通??西?留???,旨在打造??一流的??"??西?留?直通?"服???西?留?中介,希望到海外??深造和?展的同?可以借此機??得??西?留?中介...



4mmo
nichal 該用戶已被刪除
6#
發表於 2008-10-15 17:23:56 | 只看該作者
有幾個重點要考慮

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 編輯 ]
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-4-29 10:33 , Processed in 0.208866 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表