在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 6617|回复: 3

[讨论] 请教智能小车循迹程序问题

[复制链接]
发表于 2011-8-24 08:30:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
以下是智能小车循迹的一段程序,小车采用光开关,5路循迹,当检测到黑线时产生低电平。
#include  <msp430x16x.h>
unsigned int per;
unsigned long count=0;

void  Motor(unsigned char motor_num,unsigned char event,unsigned char speed)
{
  count=60000;       //计时脉冲个数=80*times;
  TBCCR0 = count;
  per=count*speed/100;     //正脉冲计时个数

  if(motor_num==0)   
  {
   
   
    switch(event)
    {
    case  0:  P4OUT=0x00;   //停止
      break;
    case  1:  P4OUT=0x40; //前进
      break;
    case  2:  P4OUT=0x80; //后退
      break;
    default:
      break;
    }
    TBCCTL1 = OUTMOD_7;                         // CCR1 toggle/set
    TBCCR1 = per;                                // CCR1 PWM duty cycle
   
  }
   else if(motor_num==1)
  {
    switch(event)
    {
    case  0:  P4OUT=0x00;   //停止
      break;
    case  1:  P4OUT=0x20; //前进
      break;
    case  2:  P4OUT=0x10; //后退
      break;

    default:
      break;
    }
    TBCCTL2 = OUTMOD_7;                         // CCR2 toggle/set
    TBCCR2 = per;                                // CCR2 PWM duty cycle  
    }
}


void main(void)
{  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P4DIR |= 0xFF;                            // P1.2 and P1.3 output
  P4SEL |= 0x06;                            // P1.2 and P1.3 TA1/2 otions
  TBCTL = TBSSEL_2 + MC_1;                  // ACLK, up-down mode
  P2DIR |= 0x00;                            // P1.2 and P1.3 output
  P2SEL |= 0x00;                            // P1.2 and P1.3 TA1/2 otions
  
  
  while(1)
  {
     if(P2IN==0x1B)   
     { Motor(0,2,60);   
       Motor(1,2,60);
     }                   //小车前进
     
     else if(P2IN==0x1D)
     {Motor(0,2,30);
      Motor(1,2,50);   //小车一级左拐
     }
     
     else if(P2IN==0x1E)
     { Motor(0,1,20);
       Motor(1,2,70);    //小车二级左拐
     }
   
     else if(P2IN==0x17)
     {Motor(0,2,50);
      Motor(1,2,30);    //小车一级右拐
     }
     
     else if(P2IN==0x0F)
     {Motor(0,2,70);
      Motor(1,1,20);    //小车二级右拐
     }
     
     else if(P2IN==0x1F)
     {Motor(0,1,40);
      Motor(1,1,40);    //小车后退
     }
     else   
     { Motor(0,2,40);   
       Motor(1,2,40);
     }                  
                     
}
}
产生的问题有:(1)程序中的周期和占空比已经很大了,但是小车速度还是不大,如何提速?
              (2)小车循迹不灵敏
恳求有高人能指出问题所在,小弟不胜感激!
发表于 2014-8-31 14:06:05 | 显示全部楼层
谢谢 !!!!!!
发表于 2014-10-23 20:25:14 | 显示全部楼层
加大MOTOR驱动电路的驱动能力
发表于 2014-10-23 20:26:27 | 显示全部楼层
具体的说就是提供全桥或者半桥的电压值,如果是DC电机的话
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-25 22:00 , Processed in 0.031314 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表