打印

有关舵机转动的问题,搞不太懂...

[复制链接]
1246|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newkiwi|  楼主 | 2012-4-9 19:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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度,然后保持不动,同理keyleft。然后keystop让舵机保持0度,但我把程序烧到单片机里控制舵机,按keyright就会先向右转,然后再向左转超过0度一点点,然后又想右转。如此往复几次,最后停在0度。
舵机不是一定的占空比对应一定的角度吗?是不是一定角度所对应的占空比不是很精确,但我想至少不会出现我说的情况啊,应该只会向右转一定角度,然后停住啊?还是我的程序写错了,或者我对舵机理解错了。。。
还有舵机转动的速度可不可以调节?

相关帖子

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

本版积分规则

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

0

主题

52

帖子

0

粉丝