打印

有关舵机转动的问题,搞不懂啊。。。

[复制链接]
2649|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newkiwi|  楼主 | 2012-4-9 19:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define Stop 0    //宏定义,停止
#define Left 1   //宏定义,左转
#define Right 2   //宏定义,右转

sbit ControlPort = P1^1;  //舵机信号端口
sbit KeyLeft = P3^2;   //左转按键端口
sbit KeyRight = P3^3;   //右转按键端口
sbit KeyStop = P1^3;   //归位按键端口
unsigned char TimeOutCounter = 0,LeftOrRight = 0;  //TimeOutCounter:定时器溢出计数   LeftOrRight:舵机左右旋转标志
void InitialTimer (  )  
{
    TMOD=0x10;   //定时/计数器1工作于方式1
    TH1 = ( 65535 -87 ) / 256;   //0.1ms
TL1 = ( 65535 - 87 ) % 256;
    EA=1;        //开总中断
    ET1=1;       //允许定时/计数器1 中断
    TR1=1;       //启动定时/计数器1 中断
}
void ControlLeftOrRight (  )   //控制舵机函数
{
if( KeyStop == 0 )
{
  while ( !KeyStop );    //使标志等于Stop(0),在中断函数中将用到
  LeftOrRight = Stop;
}
if( KeyLeft == 0 )
{
  while ( !KeyLeft );    //使标志等于Left(1),在中断函数中将用到
  LeftOrRight = Left;
}
if( KeyRight == 0 )
{
  while ( !KeyRight );   //使标志等于Right(2),在中断函数中将用到
  LeftOrRight = Right;
}
  //return -1;  
}
main (  )  //主函数
{   
    InitialTimer();
for(;;)
{
  ControlLeftOrRight();
}
}
void Timer1 ( void ) interrupt 3  //定时器中断函数
{
    TH1 = ( 65535 - 87 ) / 256;
TL1 = ( 65535 - 87 ) % 256;
TimeOutCounter ++;

switch ( LeftOrRight )
{  
     
  case 0 :   //为0时,舵机归位,脉宽1.5ms
  {
   
     if( TimeOutCounter <= 15 )
       {
      ControlPort = 1;
       }
     else
       {
    ControlPort = 0;
        }
   
   break;
  }
  case 1 :     //为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出
  {
   if( TimeOutCounter <= 6)
   {
    ControlPort = 1;
   }
   else
   {
    ControlPort = 0;
   }
   break;
  }
  case 2 :   //为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出
  {
   if( TimeOutCounter <=25 )
   {
    ControlPort = 1;
   }
   else
   {
    ControlPort = 0;
   }
   break;
  }
  default : break;
}

if( TimeOutCounter == 200 )  //周期20ms(理论值),比较可靠,最好不要修改
{
  TimeOutCounter = 0;
}

}我想知道我的这个程序是不是再按keyright时舵机向右转90度,并保持在90度,keyleft同理,keystop则是保持在0度。
但我把这个程序烧到单片机里控制舵机,按keyright舵机就会先向右转,然后再向左转超过0度一点点,然后再向右转,如此往复,最后停在0度,
舵机是不是一定的占空比对应一定的角度,是不是其实一定的角度对应的占空比不是特别精确,但也不应该是我现在这种情况啊,至少应该保持在那里啊。
是我程序写错了还是我对舵机理解错了。。。
还有怎么控制舵机旋转速度啊?

相关帖子

沙发
newkiwi|  楼主 | 2012-4-9 19:26 | 只看该作者
网络有问题。。。多发了,怎么删帖啊。。。

使用特权

评论回复
板凳
inzaghian| | 2012-4-23 17:08 | 只看该作者
看看你的波形对不对 和舵机pdf上的要求一样不
还有你的输出是不是推挽输出 要有一定驱动能力的

使用特权

评论回复
地板
r207| | 2012-6-2 10:55 | 只看该作者
学习了....

使用特权

评论回复
5
qinhuan7| | 2012-6-2 16:41 | 只看该作者
最好用示波器量一下波形  舵机的控制对波形的精度要求很高,要很准确才能达到理想的效果。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:No road of flower leads to glory.

0

主题

52

帖子

0

粉丝