實(shí)現(xiàn)功能
第一功能:
小車(chē)從A點(diǎn)開(kāi)始出發(fā),行駛到B點(diǎn)停止。
第二功能:
小車(chē)從A點(diǎn)開(kāi)始出發(fā),然后沿跑道一直行駛。
下圖為黑色跑道,跑道為2mm的黑線,A、B、C、D四點(diǎn)為直徑4mm的黑圈。
設(shè)計(jì)方案
小車(chē)選用MSP430F5529做為主控芯片,TCRT5000紅外循跡模塊用來(lái)實(shí)現(xiàn)小車(chē)識(shí)別跑道功能,原理為紅外發(fā)射判斷黑白線以及區(qū)分黑線寬度,電機(jī)使用兩個(gè)直流電機(jī),電機(jī)驅(qū)動(dòng)模塊選用TB6612,來(lái)實(shí)現(xiàn)實(shí)時(shí)控制電機(jī)轉(zhuǎn)動(dòng)的幅度與轉(zhuǎn)速。
設(shè)計(jì)電路
接線詳解
將MSP430F5529的P3.0、P3.1、P3.2引腳分別與3個(gè)TCRT5000模塊的DO端相連,芯片實(shí)時(shí)檢測(cè)這3個(gè)端口的電平,當(dāng)發(fā)生電平跳變時(shí),電機(jī)運(yùn)行就會(huì)做出相對(duì)應(yīng)的調(diào)整,而控制電機(jī)轉(zhuǎn)速的是P1.3與P2.0引腳,它們與TB6612模塊的PWMA、PWMB引腳相連,原理是通過(guò)改變占空比來(lái)實(shí)現(xiàn)。P1.2、P1.4、P1.5三個(gè)引腳通過(guò)撥碼開(kāi)關(guān)與GND相連,用來(lái)實(shí)現(xiàn)對(duì)三個(gè)行駛模式的分開(kāi)控制,P2.2需要拉高(啟動(dòng)時(shí))所以圖中沒(méi)畫(huà)。
模式詳解
三個(gè)撥碼開(kāi)關(guān)分別控制三個(gè)模式,第一個(gè)模式為第一個(gè)實(shí)現(xiàn)功能即B點(diǎn)停,第二個(gè)模式為第二個(gè)實(shí)現(xiàn)功能即小車(chē)一直行駛,第三個(gè)模式為小車(chē)定時(shí)60秒后開(kāi)始一直行駛。
設(shè)計(jì)代碼
#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();
}
}
-
電機(jī)
+關(guān)注
關(guān)注
143文章
9273瀏覽量
148829 -
引腳
+關(guān)注
關(guān)注
16文章
1656瀏覽量
52579 -
小車(chē)
+關(guān)注
關(guān)注
0文章
55瀏覽量
21272 -
驅(qū)動(dòng)模塊
+關(guān)注
關(guān)注
0文章
65瀏覽量
14411 -
MSP430F5529
+關(guān)注
關(guān)注
12文章
54瀏覽量
20581
發(fā)布評(píng)論請(qǐng)先 登錄
怎樣去設(shè)計(jì)一種基于MSP430F5529的兩路尋跡小車(chē)
怎樣去設(shè)計(jì)一種基于MSP430F5529的紅外循跡小車(chē)
如何去實(shí)現(xiàn)一種基于MSP430f5529的紅外循跡小車(chē)設(shè)計(jì)
msp430f5529例程
msp430f5529數(shù)據(jù)手冊(cè)
TI培訓(xùn):MSP430F5529的使用與開(kāi)發(fā)

msp430f5529原理圖
基于MSP430F5529的紅外循跡小車(chē)

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

基于MSP430f5529的紅外循跡小車(chē)

評(píng)論