實現(xiàn)功能
第一功能:
小車從A點開始出發(fā),行駛到B點停止。
第二功能:
小車從A點開始出發(fā),然后沿跑道一直行駛。
下圖為黑色跑道,跑道為2mm的黑線,A、B、C、D四點為直徑4mm的黑圈。
設(shè)計方案
小車選用MSP430F5529做為主控芯片,TCRT5000紅外循跡模塊用來實現(xiàn)小車識別跑道功能,原理為紅外發(fā)射判斷黑白線以及區(qū)分黑線寬度,電機使用兩個直流電機,電機驅(qū)動模塊選用TB6612,來實現(xiàn)實時控制電機轉(zhuǎn)動的幅度與轉(zhuǎn)速。
設(shè)計電路
接線詳解
將MSP430F5529的P3.0、P3.1、P3.2引腳分別與3個TCRT5000模塊的DO端相連,芯片實時檢測這3個端口的電平,當發(fā)生電平跳變時,電機運行就會做出相對應(yīng)的調(diào)整,而控制電機轉(zhuǎn)速的是P1.3與P2.0引腳,它們與TB6612模塊的PWMA、PWMB引腳相連,原理是通過改變占空比來實現(xiàn)。P1.2、P1.4、P1.5三個引腳通過撥碼開關(guān)與GND相連,用來實現(xiàn)對三個行駛模式的分開控制,P2.2需要拉高(啟動時)所以圖中沒畫。
模式詳解
三個撥碼開關(guān)分別控制三個模式,第一個模式為第一個實現(xiàn)功能即B點停,第二個模式為第二個實現(xiàn)功能即小車一直行駛,第三個模式為小車定時60秒后開始一直行駛。
設(shè)計代碼
#include
int liftbi=0,rightbi=0;
unsigned int temp=0;
void GPIO_init(void)
{
P3DIR &=~(BIT0+BIT1+BIT2+BIT3);
P3REN |= (BIT0+BIT1+BIT2+BIT3);
P3OUT &=~(BIT0+BIT1+BIT2+BIT3);
P2DIR &=~(BIT2);
P2OUT &=~(BIT2);
P1DIR |= BIT0;
P1OUT |= BIT0;
P1REN |= (BIT1+BIT2+BIT4+BIT5);
P1OUT |= (BIT1+BIT2+BIT4+BIT5);
P1DIR &=~(BIT1+BIT2+BIT4+BIT5);
P1DIR |= BIT6;
}
void Motor_L(float left)
{
TA0CCR2 = left;
}
void Motor_R(float right)
{
TA1CCR1 = right;
}
void MotorSet(float L, float R)
{
Motor_L(L);
Motor_R(R);
}
void mode_0()
{
long i,j;
if((P3IN|0xf0)==0xf0)
MotorSet(37,23);
if((P3IN|0xf0)==0xf1)
MotorSet(37,0);
if(((P3IN|0xf0)==0xf2))
MotorSet(37,23);
if((P3IN|0xf0)==0xf4)
MotorSet(0,23);
if((P3IN|0xf0)==0xf3)
{
MotorSet(37,23);
for(i=0;i<30000;i++);
MotorSet(0,0);
}
if((P3IN|0xf0)==0xf6)
{
MotorSet(37,23);
for(j=0;j<30000;j++);
MotorSet(0,0);
}
}
void mode_1()
{
while(1)
{
if((P3IN|0xf0)==0xf0)
MotorSet(37,23);
if((P3IN|0xf0)==0xf1)
MotorSet(37,0);
if(((P3IN|0xf0)==0xf2))
MotorSet(37,23);
if((P3IN|0xf0)==0xf4)
MotorSet(0,23);
if((P3IN|0xf0)==0xf3)
MotorSet(38,23);
if((P3IN|0xf0)==0xf6)
MotorSet(38,23);
}
}
void P12_Onclick()
{
while(1)
{
mode_0();
}
}
void P14_Onclick()
{
while(1)
{
mode_1();
}
}
void P15_Onclick()
{
TA2CCR0 = 32760;
TA2CCTL0 = CCIE;
TA2CTL = TASSEL_1 + MC_1 + TACLR;
// _enable_interrupts();
_BIS_SR(LPM3_bits + GIE);
while(1)
{
}
}
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD;
P1DIR |=BIT3;
P1SEL |=BIT3;
P2DIR |=BIT0;
P2SEL |=BIT0;
TA0CCR0 = 50;
TA0CCTL2 = OUTMOD_7;
TA1CCR0 = 50;
TA1CCTL1 = OUTMOD_7;
TA0CTL= TASSEL_2 +MC_1;
TA1CTL= TASSEL_2 +MC_1;
TA0CCR2=liftbi;
TA1CCR1=rightbi;
GPIO_init();
// _bis_SR_register(LPM3_bits);
while(1)
{
if((P2IN|0xFB)==0XFF)
P2OUT &=~BIT2;
if((P1IN&0x04)==0x00)
{
if((P2IN|0xFB)==0XFF)
{
P12_Onclick();
}
}
if((P1IN&0x10)==0x00)
{
if((P2IN|0xFB)==0XFF)
P14_Onclick();
}
if((P1IN&0x20)==0x00)
{
if((P2IN|0xFB)==0XFF)
P15_Onclick();
}
}
}
#pragma vector = TIMER2_A0_VECTOR
__interrupt void Timer_A(void)
{
temp++;
if(temp>=60)
{
mode_1();
}
}
-
電機
+關(guān)注
關(guān)注
143文章
9221瀏覽量
148014 -
引腳
+關(guān)注
關(guān)注
16文章
1498瀏覽量
52072 -
小車
+關(guān)注
關(guān)注
0文章
55瀏覽量
21205 -
驅(qū)動模塊
+關(guān)注
關(guān)注
0文章
65瀏覽量
14340 -
MSP430F5529
+關(guān)注
關(guān)注
12文章
54瀏覽量
20491
發(fā)布評論請先 登錄
怎樣去設(shè)計一種基于MSP430F5529的兩路尋跡小車
怎樣去設(shè)計一種基于MSP430F5529的紅外循跡小車
如何去實現(xiàn)一種基于MSP430f5529的紅外循跡小車設(shè)計
msp430f5529例程
msp430f5529原理圖
基于MSP430F5529的紅外循跡小車

基于MSP430F5529的兩路尋跡小車附OLED顯示代碼

基于MSP430f5529的紅外循跡小車

評論