智能车论文.docx
- 文档编号:6003362
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:31
- 大小:902.69KB
智能车论文.docx
《智能车论文.docx》由会员分享,可在线阅读,更多相关《智能车论文.docx(31页珍藏版)》请在冰豆网上搜索。
智能车论文
小组成员:
黄翔庞钧元李晨辉
时间:
2012年8月23日
摘要
(关键词:
智能车Launchpad和89S52单片机光电传感器霍尔元件1602LCD)
智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
智能电动车就是其中的一个体现。
本次设计的简易智能电动车,采用MSP430单片机作为小车的检测和控制核心;采用光电传感器来检测路上黑带,从而把反馈到的信号送MSP430单片机,使MPS430单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且MSP430单片机选择的工作模式不同也可控制不同方向行驶;采用霍尔元件A44E检测小车行驶速度;采用1602LCD实时显示小车行驶的时间,小车停止行驶后,轮流显示小车行驶时间、行驶距离以及各速度区行驶的时间。
本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。
目录
1设计任务………………………………………………………………………………3
1.1要求………………………………………………………………………………3
2方案比较与选择………………………………………………………………………4
2.1路面检测模块………………………………………………………………………4
2.2LCD显示模块………………………………………………………………………5
2.3测速模块……………………………………………………………………………5
2.4驱动控速模块………………………………………………………………………6
2.5模式选择模块……………………………………………………………………7
2.6控制系统选择模块…………………………………………………………………7
3程序框图………………………………………………………………………………7
4系统的具体设计与实现………………………………………………………………9
4.1路面检测模块………………………………………………………………………9
4.2LCD显示模块………………………………………………………………………9
4.3测速模块……………………………………………………………………………9
4.4驱动控速模块………………………………………………………………………9
4.6模式选择模块……………………………………………………………………9
4.7复位电路模块………………………………………………………………………9
4.8控制系统选择模块…………………………………………………………………9
5最小系统图……………………………………………………………………………10
6最终PCB板图…………………………………………………………………………12
7系统程序………………………………………………………………………………13
8致谢……………………………………………………………………………………46
9参考文献……………………………………………………………………………47
10附录…………………………………………………………………………………48
1.设计任务:
设计并制作了一个智能电动车,其行驶路线满足所需的要求。
1.1要求:
1.1.1基本要求:
(1)分区控制:
如(图1)所示:
(图1)
车辆从起跑线出发(出发前,车体不得超出起跑线)。
在第一个路程C~D区(3~6米)以低速行驶,通过时间不低于10s;第二个路程D~E区(2米)以高速行驶,通过时间不得多于8秒,终点后原路返回到起止点;
(2)小车能自动记录、显示行驶时间、行驶距离,还能记录每段所走的时间,从而判断是否符合课程设计要求。
(记录显示装置要求安装在车上)。
小车自动停止,并记录行驶时间,路程,LCD显示出来。
2.方案比较与选择:
根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可分为几个基本的模块,框图如(图3)所示:
(图3)
2.1路面检测模块:
采用光电传感器来检测路面上黑带从而给单片机中断脉冲。
如(图4)所示:
(图4)
2.2LCD显示模块:
采用1602LCD,由51单片机的总线模式连接。
路程由霍尔传感反馈回来的进过MPS430处理再送给51单片机显示!
同样时间也是由光电传感反馈PS430处理再送给51单片机显示!
2.3测速模块:
2.3.1方案1:
采用采用霍尔开关元器件A44E检测轮子上的小磁铁从而给单片机中断脉冲,达到测量速度的作用。
霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。
霍尔开关只对一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件安装在固定轴上,通过对脉冲的计数进行车速测量。
2.3.2方案2:
采用红外传感器进行测速。
但无论是反射式红外传感器还是对射式红外传感器,他们对都对外围环境要求较高,易受外部环境的影响,稳定性不高,且价格较为昂贵。
通过对方案1、方案2的比较其优缺点,综合多方面因素决定选用方案1,其原理图接线如(图5)所示:
(图5)
2.4驱动控速模块:
2.4.1方案1:
使用功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻R的电流大,发热厉害,损耗大,对于小车的长时间运行不利。
2.4.2方案2:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。
2.4.3方案3:
采用L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。
L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。
。
L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动二台电动机。
EnA,EnB接控制使能端,控制电机的停转。
电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。
综合3种方案的优缺点,决定选择方案3,其电路原理图如(图6)所示:
(图6)
2.5模式选择选择:
小车走动的模式选择有:
(1)直线型:
满足设计任务的基本要求,能稳定的走完全程。
之后按顺序循环不断的显示走完全程所用的时间、走完高速区所用的时间和走完低速区所用的时间这三个时间;或者可以通过两个按钮以及LCD显示的菜单选择所要看的内容如全程距离以及那三个时间。
(1)自动型:
小车先以一定的速度走完全程,之后再以一定的速度倒退回起点,再调整速度在一定的时间内走完全程。
走完后LCD显示的内容与直线型显示的内容一样。
2.6最小系统选择:
2.6.1方案1:
(1)传统51单片机也是很强大了,也可以做到的。
但是其PWM输出难控制,还有现在是节能时代,我们电池供电也有限。
2.6.2方案2:
(2)MSP430处理能力强,运算速度快,超低功耗,片内资源丰富外设看门狗(WDT)、模拟比较器A、定时器A0(Timer_A0)、定时器A1(Timer_A1)、定时器B0(Timer_B0)、UART、SPI、I2C、硬件乘法器、液晶驱动器、10位/12位ADC、16位Σ-ΔADC、DMA、I/O端口、基本定时器(BasicTimer)、实时时钟(RTC)和USB控制器等若干外围模块的不同组合。
其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出A/D转换器;16位定时器(Timer_A和Timer_B)具有捕获/比较功能,大量的捕获/比较寄存器,可用于事件计数、时序发生、PWM等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的I/O端口,P0、P1、P2端口能够接收外部上升沿或下降沿的中断输入;10/12位硬件A/D转换器有较高的转换速率,最高可达200kbps,能够满足大多数数据采集应用;能直接驱动液晶多达160段;实现两路的12位D/A转换;硬件I2C串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用的DMA模块。
MSP430系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。
综合比较还是选择方案2MSP430单片机做主控制系统,51可以用来做液晶显示部分驱动。
3.程序框图:
单片机主程序框图、速度感应程序框图和黑带检测程序框图分别如(图7)所示。
(图7)
4.系统的具体设计与实现:
4.1路面检测模块:
应用一个光电传感器,安装在车盘下,离地略小于或约四毫米。
当光电传感器检测到黑带时将对单片机发送中断信号,单片机运行中断,改变输给电机驱动信号的电压占空比来控制小车的速度同时也是控制时间起末。
4.2LCD显示模块:
采用1602LCD,由单片机的总线模式连接。
通过51单片机连接易与控制显示时间路程。
4.3测速模块:
通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高电平,其它时候是低电平),一个车轮均匀放二个小磁铁,计算一秒所得的脉冲数,从而计算出一秒小车轮子转动圈数,再测量出小车车轮周长即可计算出小车当前路程。
4.4控速模块:
通过MPS430单片机控制IO口占空比来控制速度,同时通过霍尔反馈一起协调控制
4.5复位电路模块:
单片机的复位电路通过手动来实现,复位电路图如(图8)所示。
(图8)
5.最小系统图:
该系统主要用到的是MPS430单片机,所以主要的部分是最小系统图,该最小系统图如(图10)所示:
6.最终PCB板图:
最终PCB板图(包括LCD接口51单片机以及其他的外部扩展电路部分,考虑到最小系统的简洁以及容易看懂MPS430就不显示下面了,分别划分模块如下。
)分别如(图11)、(图12)(图13)所示:
(图11电机驱动电路)
(12图LED液晶显示驱动电路)
(图13光电传感电路)
7.系统程序:
按照预定的功能,系统实现预定的功能的程序如下所示:
1小车驱动控制程序:
//
//DATE:
2012-08-
//
//MSP430G2553
//VCCGND
//P1.0<-霍尔-AXIN
//P1.1<-霍尔-BXOUT
//P1.2->PWM-ATES
//P1.3<-黑带-ARST
//P1.4<-黑带-BP1.7
//P1.5->霍尔脉冲PWM-A<-P1.6
//P2.0->黑带脉冲P2.5
//P2.1->PWM-BP2.4
//P2.2->PWM-BP2.3
//
//A轮比较紧,所以只想调节B轮已达到控制的目的
//由于本L298电路,占空比越小车速越快
//
//黑带检测只利用了A轮,霍尔脉冲只从A轮传出
//
//LCD1602显示路程,时间在51单片机内
//
#include"msp430g2553.h"
//两个定时器的周期
#definewheel_A_T1000
#definewheel_B_T1000
//gofast
#definewheel_A_FW(1000-630)//A轮
#definewheel_B_FW(1000-668)//B轮
//goslow
#definewheel_A_SW(1000-480)
#definewheel_B_SW(1000-545)
//backup
#definewheel_A_BKwheel_A_FW
#definewheel_B_BKwheel_B_FW
//stop
#definewheel_A_STOP(1000)
#definewheel_B_STOP(1000)
//反馈量
#defineADJ_VAL55
volatileunsignedintk,l,i;
volatileunsignedintA_cnt,B_cnt;
volatileunsignedcharWIRE_B,WIRE_A;
volatilesignedintadj;
voidgof(void);//gofast
voidgos(void);//goslow
voidback_up(void);//backup
voidTAinit(void);//初始化PWM
voidInitSys(void);//初始化系统
voidIN_init(void);//初始化IO口
voidADJ(void);//反馈
voidstop(void);//stop
voiddelayms(unsignedintms);
voiddelays(unsignedchars);
voidmain(void)
{
InitSys();
TAinit();
delayms(10);//10ms
adj=0;
i=0;
IN_init();
_BIS_SR(GIE);//打开全局中断控制
delayms(500);//开电源后延时5秒启动小车
while
(1){
gof();
gos();
gof();
stop();
delayms(1000);
back_up();
stop();
__bis_SR_register(LPM0_bits);//进入低功耗,停止。
}
}
voidADJ(void)
{
inttmp_AB=0;
tmp_AB=A_cnt-B_cnt;
if(tmp_AB>0)//右偏,B要加点
{
adj=ADJ_VAL;
}
elseif(tmp_AB<0)//左偏,B要减点
{
adj=-(ADJ_VAL+120);
}
else{
adj=0;
}
}
voidTAinit(void)
{
P1DIR|=BIT2+BIT6;//P1.2和P1.6设为IO输出内部的PWM信号。
CCR0=wheel_A_T;//PWMPeriod
CCTL1=OUTMOD_7;//CCR1reset/set
TACTL=TASSEL_1+MC_1;//sourceselACLK,uptoCCR0
P2DIR|=BIT1+BIT2;//P2.1andP2.2output
TA1CCR0=wheel_B_T;//PWMPeriod
TA1CCTL1=OUTMOD_7;//CCR1reset/set
TA1CTL=TASSEL_1+MC_1;//sourceselACLK,uptoCCR0
}
voiddelayms(unsignedintms)//z=1时,1Mhz下延时1ms
{
intx,y;
for(x=ms;x>0;x--){
for(y=1000;y>0;y--)
_NOP();
}
}
voiddelays(unsignedchars)//1MHz~1s
{
charx;
for(x=s;x>0;x--){
delayms(1000);//5s
}
}
voidInitSys(void)
{
WDTCTL=WDTPW+WDTHOLD;
if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF){
while
(1);//Ifcalibrationconstantserased,trapCPU!
!
}
BCSCTL1=CALBC1_1MHZ;//Setrange
DCOCTL=CALDCO_1MHZ;//SetDCOstep+modulation
BCSCTL2|=SELM_3+DIVM_0+DIVS_0;//SetACLK
}
voidback_up(void)
{
P1SEL&=~BIT6;//把P1.6清0,表示P1.6为数字IO
P1OUT|=BIT6;//P1.6输出寄存器位置位
P1SEL|=BIT2;//把P1.2置位,表示P1.2为内部输出脚//P1.2第二功能置位,P1.6为IO输出低电平,这个状态为前进。
CCR1=wheel_A_BK;
P2SEL&=~BIT1;//P2.1清0,表示P2.1为数字IO
P2OUT|=BIT1;//P2.1输出寄存器位置位
P2SEL|=BIT2;//P2.2置位,表示P2.2为内部输出引脚
TA1CCR1=wheel_B_BK-adj-33;
__bis_SR_register(LPM0_bits);
}
voidIN_init(void)
{
P1DIR|=BIT5;//霍尔脉冲
P2DIR|=BIT0;//黑带脉冲
P1OUT|=BIT5;
P2OUT&=~BIT0;
P1DIR&=~(BIT0+BIT1+BIT3+BIT4);//input
P1REN|=BIT0+BIT1+BIT3+BIT4;//pullup
P1IE|=BIT0+BIT1+BIT3+BIT4;//interruptenabled
P1IES|=BIT0+BIT1;//P1.0P1.1L电平触发
P1IES&=~(BIT3+BIT4);//P1.3P1.4H电平触发
P1IFG&=~(BIT0+BIT1+BIT3+BIT4);//IFGcleared
}
voidstop(void)
{
P1SEL&=~BIT2;//把P1.2清0,表示该口切换成普通IO口。
P1SEL|=BIT6;//把P1.6置位,表示把该位切换成内部输出口。
P1OUT|=BIT2;//P1.2IO口输出低电平,两个脚都是低电平,轮子不动。
CCR1=wheel_A_STOP;//输出的内部东西都是0
P2SEL&=~BIT2;//P2.1清0,切换成普通IO
P2OUT|=BIT2;//P2.1输出寄存器清0,表示输出0
P2SEL|=BIT1;//P2.2置位成内部引脚输出
TA1CCR1=wheel_B_STOP;//输出的P2.2值为0
//__bis_SR_register(LPM0_bits);
}
voidgof(void)
{
P1SEL&=~BIT2;//把P1.2清0,表示P1.2为数字IO
P1OUT|=BIT2;//P1.2输出寄存器位置位
P1SEL|=BIT6;//把P1.6置位,表示P1.6为内部输出脚
P2SEL&=~BIT2;//P2.2清0,表示P2.2为数字IO
P2OUT|=BIT2;//P2.2输出寄存器位置位
P2SEL|=BIT1;//P2.1置位,表示P2.1为内部输出引脚
CCR1=wheel_A_FW;
TA1CCR1=wheel_B_FW-adj;
__bis_SR_register(LPM0_bits);
}
voidgos(void)
{
P1SEL&=~BIT2;//把P1.2清0,表示P1.2为数字IO
P1OUT|=BIT2;//P1.2输出寄存器位置位
P1SEL|=BIT6;//把P1.6置位,表示P1.6为内部输出脚
P2SEL&=~BIT2;//P2.2清0,表示P2.2为数字IO
P2OUT|=BIT2;//P2.2输出寄存器位置位
P2SEL|=BIT1;//P2.1置位,表示P2.1为内部输出引脚
CCR1=wheel_A_SW;
TA1CCR1=wheel_B_SW-adj;
__bis_SR_register(LPM0_bits);
}
/*****************************************************************************
端口1中断函数
多中断中断源:
P1IFG.0~P1IFG7
进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断
******************************************************************************/
#pragmavector=PORT1_VECTOR
__interruptvoidPort1()
{
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
if((P1IFG&BIT0)==BIT0){
P1OUT&=~BIT5;//给51单片机一个低脉冲,检测霍尔以显示路程
delayms(10);
P1OUT|=BIT5;
A_cnt++;
ADJ();
P1IFG&=~BIT0;//清除中断标志
}
elseif((P1IFG&BIT1)==BIT1){
B_cnt++;
ADJ();
P1IFG&=~BIT1;//清除中断标志
//以下填充用户代码
}
elseif((P1IFG&BIT2)==BIT2){
//处理P1IN.2中断
P1IFG&=~BIT2;//清除中断标志
//以下填充用户代码
}
elseif((P1IFG&BIT3)==BIT3){
P2OUT|=BIT0;//给51单片机一个高脉冲,检测黑带以计算时间
delayms(10);
P2OUT&=~BIT0;
i++;
if((i==2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 论文