|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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)小车循迹不灵敏
恳求有高人能指出问题所在,小弟不胜感激! |
|