基于MSP430循迹小车报告源程序分享文档格式.docx

上传人:b****4 文档编号:16490601 上传时间:2022-11-24 格式:DOCX 页数:13 大小:254.70KB
下载 相关 举报
基于MSP430循迹小车报告源程序分享文档格式.docx_第1页
第1页 / 共13页
基于MSP430循迹小车报告源程序分享文档格式.docx_第2页
第2页 / 共13页
基于MSP430循迹小车报告源程序分享文档格式.docx_第3页
第3页 / 共13页
基于MSP430循迹小车报告源程序分享文档格式.docx_第4页
第4页 / 共13页
基于MSP430循迹小车报告源程序分享文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于MSP430循迹小车报告源程序分享文档格式.docx

《基于MSP430循迹小车报告源程序分享文档格式.docx》由会员分享,可在线阅读,更多相关《基于MSP430循迹小车报告源程序分享文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

基于MSP430循迹小车报告源程序分享文档格式.docx

检测距离为4-13mm。

本小车一共采用了5只ST188光电对管,一只位于黑线上方,两只位于黑线左右用于直走微调,最左最右端两只用于转弯。

我们在光电对管的发射端串联的一个电位器来调节发射管的电压,以便在不同的环境下进行调节。

循迹模块原理如图所示:

注意:

在实际制作中,光电对管应尽量靠近地面,以减少干扰。

二、电压比较模块

电压比较模块我们采用了3块LM393芯片,一块LM393芯片上有两个电压比较模块,我们只用到了其中的5个电压比较。

我们在LM393的同向输入给定一个参考电压,与在端光电对管的接收端的电压进行比较,若接收端电压比参考电压大,则输出一个,反之输出一个。

三、电机驱动模块

本次小车采用了由两个减速电机和一个万向轮制作的三轮移动平台,在电机驱动方面采用了L298来控制两个减速电机。

MSP430F149为芯片提供驱动信号,传至PWM控制各个电机的转速,从而调整小车的前进速度和转向。

L298模块的原理图如图所示。

制作L298模块时应注意在芯片后面留散热片的空间。

四、电源模块

采用了一块稳压芯片7805搭建的12V转5V的电路,如图:

五、控制模块

本次设计采用了一片MSP430F149为控制核心,主要用于循迹和电机PWM控制。

六、程序部分

程序开始运行便进入扫描状态,在直走时不断进行左右微调保证小车行走在线中间。

走迷宫的程序必须要有优先级,可左转优先或直走优先,在T字口,十字口一律左转或右转。

以左转优先为例,程序优先级顺序为:

左转>

直走>

右转>

左微调>

右微调>

原地转圈。

 

附录:

程序:

1初始化程序(具体PWM自己调):

#include"

main.h"

/*******************************************

函数名称:

CLK_Init()

功能:

时钟设置

参数:

返回值:

********************************************/

voidClk_Init(void)

{

uchari;

BCSCTL1=0x00;

//XT2振荡器、不分频

BCSCTL2=SELM_2+SELS;

//选择MCLK\SCLK的时钟源为高速时钟,不分频

do

{

IFG1&

=~OFIFG;

//清除振荡失效标志

for(i=0xff;

i>

0;

i--);

//等待

}

while((IFG1&

OFIFG)!

=0);

//等待振荡器工作正常

}

PWM_Init

初始化PWM

voiddelay_us(uinttime)

uchari=0;

while(time--)

while((i++)!

=8);

i=0;

}

//延时MS

voiddelay_ms(uchartime_1)

while(time_1--)

delay_us(1000);

voidPWM_Init()

P4DIR=0xff;

//P4PWM输出

P4SEL=BIT1+BIT2+BIT3+BIT5;

P4DIR=BIT1+BIT2+BIT3+BIT5;

TBCCTL1|=OUTMOD_7;

//捕获/比较控制寄存器,输出为模式7

TBCCTL2|=OUTMOD_7;

//PWMRESET/SET模式

TBCCTL3|=OUTMOD_7;

//TBCCRn--复位

TBCCTL5|=OUTMOD_7;

//TBCL0--置位

TBCCR1=0;

//P4.1L298NIN1

TBCCR2=0;

//P4.2IN2

TBCCR3=0;

//P4.3IN3

TBCCR5=0;

//P4.5IN4

TBCCR0=1000;

TBCTL|=TBSSEL_1+MC_1;

//TIMER_B工作于增计数方式

voidall_init(void)

PWM_Init();

Clk_Init();

P2DIR=0x00;

//P2.0---P2.4电压比较结果输入

P1DIR|=BIT0+BIT1;

//将P3口切换为输出状态

P1OUT|=BIT0+BIT1;

//ENA,ENB

voidSTRAIGHT(void)//------------全速前进

TBCCR2=400;

TBCCR1=0;

TBCCR5=350;

TBCCR3=0;

voidLEFT(void)//--------------左转

TBCCR2=0;

TBCCR1=250;

TBCCR5=250;

voidRIGHT(void)//---------------右转

TBCCR2=250;

TBCCR5=0;

TBCCR3=250;

voidLEFTS(void)//---------------左转微调

TBCCR2=100;

voidRIGHTS(void)//-------------------右转微调

TBCCR5=100;

voidSTOP(void)//---------------------停止

voidcircle(void)

TBCCR3=200;

//////////////////////////////////////////////////////////////////

2逻辑判断程序:

voidjudge(void)

while

(1)

if((data&

0x01)==0x01)//左优先

delay_us(100);

0x01)==0x01)

//LEFT();

//delay_ms(10);

STRAIGHT();

//冲出一段距离

delay_ms(10);

LEFT();

//左转到中间灯离开黑线

delay_ms(35);

//时间自己微调

while

(1)

0x04)==0x04)

0x04)==0x04)//转到中间的灯在线上

break;

//STRAIGHT();

0x04)==0x04)//优先级22黑直走

0x10)==0x10)//优先级3右转5黑

0x10)==0x10)

delay_ms(5);

RIGHT();

delay_us(10);

0x02)==0x02)//左转微调2黑

0x02)==0x02)

LEFTS();

break;

0x08)==0x08)//右转微调4黑

0x08)==0x08)

RIGHTS();

break

0x1f)==0x00)//优先级4原地转圈°

12345白

{

0x1f)==0x00)

circle();

0x1f)!

=0x00)

delay_us(100)//转到不为全白;

else

STOP();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1