基于MSP430循迹小车报告源程序分享.docx
- 文档编号:12679813
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:13
- 大小:254.59KB
基于MSP430循迹小车报告源程序分享.docx
《基于MSP430循迹小车报告源程序分享.docx》由会员分享,可在线阅读,更多相关《基于MSP430循迹小车报告源程序分享.docx(13页珍藏版)》请在冰豆网上搜索。
基于MSP430循迹小车报告源程序分享
智能循迹小车报告
摘要:
本设计由寻迹信息采集电路,电机驱动电路以与MCU控制模块四大部分构成。
MCU控制模块是本设计的核心部分,该部分以一片TI公司的MSP430F149为控制中心,实现对各个模块的控制。
寻迹信息采集部分以反射式光电传感器和比较器组成,将采集到的数据处理后送至单片机。
电机由以L298N为核心部件的电路驱动。
该小车具有自动寻迹起始点检测功能。
基于稳定的硬件电路设计以与精确可靠的软件算法,小车能够实现预期功能。
关键词:
MSP430,L298N,寻迹。
一、循迹信息采集模块
小车在前进时,要实现寻迹功能,可以采用高灵敏度的反射式光电传感器
对地面进行扫描,再将采集到的数据经过比较器后输出高低电平,最后送入单片机处理。
经过对一只ST188的测试,发现ST188接收管输出端的低电平输出大致为0.78V,高电平的输出大致为2.85V,经过比较器后输出低电平为0.03V,高电平为3.26V,能够被单片机所识别。
小车在白色地面行驶时,红外发射管发出的红外信号被反射,接收管收到信号后,输出端为低电平。
而当红外信号遇到黑色导轨时,红外信号被吸收,接收管不能接收到信号,输出端为高电平。
单片机通过采集每个红外接收管的输出端电压,便可以检测出轨道的位置,从而控制小车的转向,使小车一直沿轨道前进。
ST188采用高发射功率红外光电二极管和高灵敏度光电晶体管组成。
检测距离为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;
TBCCR3=0;
}
voidRIGHT(void)//---------------右转
{
TBCCR2=250;
TBCCR1=0;
TBCCR5=0;
TBCCR3=250;
}
voidLEFTS(void)//---------------左转微调
{
TBCCR2=100;
TBCCR1=0;
TBCCR5=250;
TBCCR3=0;
}
voidRIGHTS(void)//-------------------右转微调
{
TBCCR2=250;
TBCCR1=0;
TBCCR5=100;
TBCCR3=0;
}
voidSTOP(void)//---------------------停止
{
TBCCR1=0;
TBCCR2=0;
TBCCR3=0;
TBCCR5=0;
}
voidcircle(void)
{
TBCCR2=250;
TBCCR1=0;
TBCCR5=0;
TBCCR3=200;
}
//////////////////////////////////////////////////////////////////
2逻辑判断程序:
#include"main.h"
voidjudge(void)
{
while
(1)
{
if((data&0x01)==0x01)//左优先
{
delay_us(100);
if((data&0x01)==0x01)
{
//LEFT();
//delay_ms(10);
STRAIGHT();//冲出一段距离
delay_ms(10);
LEFT();//左转到中间灯离开黑线
delay_ms(35);//时间自己微调
while
(1)
{
LEFT();
if((data&0x04)==0x04)
{
delay_us(100);
if((data&0x04)==0x04)//转到中间的灯在线上
break;
}
}
//STRAIGHT();
break;
}
break;
}
if((data&0x04)==0x04)//优先级22黑直走
{
delay_us(100);
if((data&0x04)==0x04)
{
STRAIGHT();
break;
}
break;
}
if((data&0x10)==0x10)//优先级3右转5黑
{
delay_us(100);
if((data&0x10)==0x10)
{
STRAIGHT();
delay_ms(5);
while
(1)
{
RIGHT();
if((data&0x04)==0x04)
{
delay_us(10);
if((data&0x04)==0x04)
break;
}
}
//STRAIGHT();
break;
}
break;
}
if((data&0x02)==0x02)//左转微调2黑
{
delay_us(100);
if((data&0x02)==0x02)
LEFTS();
break;
}
if((data&0x08)==0x08)//右转微调4黑
{
delay_us(100);
if((data&0x08)==0x08)
RIGHTS();
break
}
if((data&0x1f)==0x00)//优先级4原地转圈°12345白
{
delay_ms(10);
if((data&0x1f)==0x00)
{
while
(1)
{
circle();
if((data&0x1f)!
=0x00)
{
delay_us(100)//转到不为全白;
if((data&0x1f)!
=0x00)
break;}
}
break;
}
break;
}
else
{
STOP();
break;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MSP430 小车 报告 源程序 分享