电子设计大赛智能车技术报告.docx
《电子设计大赛智能车技术报告.docx》由会员分享,可在线阅读,更多相关《电子设计大赛智能车技术报告.docx(84页珍藏版)》请在冰豆网上搜索。
电子设计大赛智能车技术报告
电子设计大赛
技术报告
智能车
学校:
黑龙江科技学院
院系:
计算机学院
参赛队员:
吕兵斌杨广胜靳艳锋
指导老师:
郝维来冯福生
日期:
2011-6-17
摘要:
本智能车系统以Atmega128单片机为控制核心,实现智能车的多功能智能控制。
主要功能包括语音准确播放小车行驶长度、角度值和时间,寻迹爬坡,颜色识别,超声波测距,液晶显示等功能。
关键词:
Atmega128;颜色识别;电子罗盘;超声波测距
Abstract:
BasedonthemicrocontrollerATmega128,thesystemcanrealizetheintelligentcontroloftheIntelligentCar.Itisconsistofthefollowingfunctionalmodules,automatictrackfindingandclimbing,colorrecognition,ultrasonicranging,LCDdisplay,Voiceaccurateplaybackdrivinglength,angleandtimeetc.
Keywords:
ATmega128;Colorrecognition;DCgearedmotor;Ultrasonicranging
引言
智能作为现代的新发明,是以后的发展方向,它可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等用途。
智能电动小车就是其中的一个体现。
设计者可以通过软件编程实现它的行进、绕障、停止的精确控制以及检测数据的存储、显示,无需人工干预。
因此,智能电动小车具有再编程的特性,是机器人的一种。
根据本设计的要求,确定如下方案:
以ATmega128单片机为核心的控电路,采用模块化的设计方案,运用光电传感器、颜色传感器、超声波传感器,电子罗盘等组成不同的检测电路,实现小车在行驶中自动寻迹、自动转变角度、测距、语音播报、颜色识别等问题。
并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动小车的智能控制。
这种方案能实现对电动小车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足系统的各项要求。
目前国内外智能小车实现自动寻迹,金属检测,超声波测距或避障等一些功能。
有一些智能小车能实现图像识别,但硬件电路复杂,比如飞思卡尔的一些小车需要摄像头。
而我们的小车不仅能够实现自动寻迹,超声波测距等一些功能,还能实现根据地磁场精准转角度,利用Tcs230进行颜色识别,语音准确播放小车行驶长度、角度值和时间等功能。
本设计采用了比较先进的ATmega128为控制核心,功耗很低。
该设计具有实际意义,可以应用于考古、机器人、娱乐等许多方面。
尤其是在足球机器人研究方面具有很好的发展前景;在考古方面也应用到了超声波传感器进行检测。
所以本设计与实际相结合,现实意义很强。
我们智能车可以应用火灾现场进行现场抢救,因为我们的智能车能识别红色物质,还能利用超声波进行避障,电子罗盘精准控制小车的位置。
还有我们智能车还可应用到未来的智能汽车上,比如智能无人驾驶的汽车。
这是因为我们的智能车能利用颜色识别模块识别出交通灯的颜色,能利用超声波成功避开来往车辆及障碍物,利用电子罗盘精准控制汽车的转向。
第1章智能车结构设计
1、整体结构设计
本智能车的底盘由铝合金和覆铜板,经过丝钉固定而成。
智能车采用四轮驱动,这样既增强车体的稳定性,又增大智能车的驱动能力。
电机采用的是直流减速电机,并由L298N芯片控制驱动。
车身由三层电路板构成,分别为:
底层电机驱动板、中层为ATmega128最小系统板、上层传感器板,各个板之间由铜柱固定。
由于电子罗盘易受液晶、电机、语音芯片等磁性器件的电磁干扰,我们采用了两个铜柱将其架高,以减小角度测量误差。
模型如图1-1、图1-2、图1-3所示。
图1-1智能车测视图
2、爬坡要求与最佳车身计算
由于智能车对于爬坡的要求,车身不能太长。
根据题目中30°斜坡角,计算可得智能车两车轮之间的长度不能超过14cm,否则,智能车在经过斜坡与平台的交界点的时候,会被卡在斜坡上,小车爬坡结构图如图1-4所示。
若智能车刚好卡在斜坡上,则BC距离已知,角度
∠BAC=(180°-150°)/2=15°
智能车两个轮子之间长度L与BC以及∠BAC之间的关系为:
sin∠BAC=BC/(L/2);
故,L=2*BC/sin∠BAC=14(cm);
即,智能车两轮中心距不能超过14cm。
图1-2智能车后视图
图1-3智能车直视图
图1-4小车爬坡结构图
第2章智能车硬件电路设计
本章主要介绍智能车系统总体设计方案以及各单元模块的设计方案,同时介绍各个模块使用的主要器件,功能的实现以及电路原理图。
2.1系统总体设计方案
智能车系统总体设计方案框图如图2-1所示。
智能车共包括九大模块:
最小系统、电机控制模块、角度测量模块、长度测量模块、颜色识别模块、寻迹模块、超声波测距模块、语音播报模块、液晶显示模块。
图2-1智能车系统总体设计方案框图
2.2单元模块设计
本节介绍九大功能模块的详细设计方案以及主要元器件,功能的实现以及电路原理图的设计。
2.2.1ATmega128最小系统
最小系统是整个智能车系统的心脏,考虑到题目中需要实现多个功能的要求及各个模块引脚的数目,我们采用具有64引脚的ATmega128单片机为智能车的主控芯片。
1、ATmega128芯片简介
ATmega128是一款基于AVR内核,采用RISC结构,低功耗CMOS的8位单片机。
由于在一个时钟周期内执行一条指令,ATmega128可以到达接近1MIPS/MHz的性能。
ATmega128具有以下特点:
128KB的可在系统编程/应用编程(ISP/IAP)Flash程序存储器,4KBEEPROM,4KBSRAM,32个通用工作寄存器,53个通用I/O口,实时时钟计数器(RTC),4个带有比较模式灵活的定时器/计数器,2个可编程的USART接口,1个8位面向字节的TWI(IIC)总线接口,8通道单端或差分输入的10位ADC(其中一个差分通道为增益可调的),可编程带内部振荡器的看门狗定时器,一个SPI接口,一个兼容IEEE1149.1标准的JTAG接口(用于在线仿真调试和程序下载),6种可通过软件选择的节电模式。
ATmega128采用64脚TQFP表面贴片形式的封装,如图2-2所示。
图2-2ATmega128芯片引脚图
智能车以ATmega128最小系统为控制器,控制各种功能模块来实现题目中要求的功能。
ATmega128最小系统包括CPU(ATmega128单片机),时钟电路,复位电路,电源等部分电路组成。
ATmega128最小系统的电路图如图2-3所示。
2、最小系统电路设计
ATmega128单片机最小系统用3.3v电压供电,其他外部芯片及电路用5v电压供电,电机驱动模块用7.4v蓄电池供电。
图2-3ATmega128最小系统原理图
2.2.2电机控制模块
本智能车电机驱动芯片采用的是L298N。
L298N是一款承受高压大电流的全桥型直流/步进电压驱动器。
电机控制芯片L298N及其引脚排列如图2-4。
图2-4电机控制芯片L298N的引脚排列
电机控制逻辑如下:
以电机M1为例,当使能端ENA为高电平是,输入引脚IN1为高电平,IN2为低电平,电机A反转;如果使能ENA为高电平,输入引脚IN1为低电平,IN2为高电平,电机正转。
表2-1为电机驱动ENA/B的控制逻辑。
表2-1电机驱动A/B的控制逻辑
输入信号
电机运动方式
使能端ENA/B
输入引脚IN1/3
输入引脚IN2/4
1
1
0
前进
1
0
1
后退
1
1
1
紧急停车
1
0
0
紧急停车
0
X
X
自由转动
为了智能车能稳定行驶,角度、距离的精准控制,上坡下坡,我们采用了四轮驱动,用两片L298N控制四个直流减速电机。
同时为了保护ATmega128主控芯片不被L298N产生的瞬间高电平击穿,我们采用TLP521光电耦合器进行了隔离保护。
电机驱动的原理图如图2-5。
图2-5电机驱动原理图
2.2.3长度测量模块
长度测量我们采用的是光电编码器,其原理与槽型光电开关相同。
我们在智能车的后轮上安装一个光电编码盘,然后通过ATmega128的定时计数器的外部计数功能计数光电编码器产生的高电平次数,通过比较高电平次数与设定的目标值来控制智能车行驶的距离。
通过下面公式就可以计算出智能车要走的距离。
已知智能车轮子的周长为C=20.7cm,光电编码盘上编码孔为N=60。
设ATmega128的外部计数功能捕捉光电编码器产生的高电平的次数为Count,智能车行驶的距离为Length。
Length=
通过设定Count的值就可以的得到智能车要走的距离。
Count=
ATmega128的定时计数器外部计数功能很精准,理论上的误差将会非常微小,但由于减速电机有一定不稳定及智能车车轮与地面的摩擦因素,导致一定范围的偏差,因此我们将会对此做一定的补偿,在一定范围内微调Count的值。
2.2.4角度测量模块
本智能车的角度测量采用的是电子罗盘GY-26模块,下面对就介绍下该模块。
1、电子罗盘的概述
GY-26是一款低成本平面数字罗盘模块。
输入电压低,功耗小,体积小。
其工作原理是通过磁传感器中两个相互垂直轴同时感应地球磁场的磁分量,从而得出方位角度,此罗盘以RS232协议,及IIC协议与其他设备通信。
该模块具有重新标定的功能,能够在任意位置得到准确的方位角,其输出的波特率是9600bps,有连续输出与询问输出两种方式,具有磁偏角补偿功能,可适应不同的工作环境。
电子罗盘模块及引脚如图2-6。
图2-6电子罗盘模块
2、功能的实现
本智能车利用电子罗盘GY-26实时采集到的方位角的角度值与目标角度值进行比较来控制电机,使智能车转到目标角度,以达到题目中智能车转角度的要求。
由于电机,液晶12864及芯片对电子罗盘有一定电磁干扰,我们将电子罗盘架高,以避免那些电磁干扰。
电子罗盘的理论控制精度为0.1度,但由于智能车运动过程中惯性,智能车与地面的摩擦关系,如果快速转角度将会产生一定的偏差,因此我们采取智能车低速转角度。
智能车转完角度后,在各个点之间行驶过程中,为了使智能车能够行驶到目标点,我们通过电子罗盘控制电机调整智能车的行驶状态,让智能车始终在一条直线行驶。
2.2.5寻迹爬坡模块
寻迹爬坡模块我们使用的是红外对射管。
红外对射管分为发射管和接收管,发射管发出的光为红外线,而红外线照到白色物体上时被反射,当红外线照到黑色物体上时被吸收。
当接收管接到接收反射来的红外线时,接收管导通,否则不导通。
根据接收管的导通性,通过比较器LM339判断并处理接收管输出的高低电平,然后单片机处理LM339输出电平的高低,来控制电机模块,使智能车始终沿黑线行驶。
电路图如图2-7。
图2-7爬坡寻迹电路图
2.2.6超声波测距模块
距离测量我门采用的是超声波测距模块。
该超声波测距模块可提供3.0cm—350.0cm的非接触式距离感测功能。
该模块包括超声波发射器、接受器与控制电路。
其基本工作原理为:
此超声波测距模块接收到单片机一触发信号后发射超声波,当超声波投射到物体而反射回来时,模块输出一个回响信号,计算触发信号和回响信号间的时间差,来判断物体的距离。
超声波测距模块模型如图2-8。
图2-8超声波测距模块模型
超声波时序如图2-9表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40KHz周期电平并检测回波。
一旦检测到有信号输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:
距离=高电平时间*声速(340M/S)/2;我们测量的周期为60ms以上,以防止信号对回响信号的影响。
图2-9超声波时序图
由于ATmega128单片机具有外部电平捕捉功能,捕捉的高电平时间为微秒级别,再加上合理精准的程序算法,我们的超声波测距模块测的数据能精准到1毫米。
2.2.7语音播报模块
语音播报模块我们使用的是ISD1760芯片,如图2-10。
该芯片提供多项新功能,包括内置多信息管理系统,双运作模式(独立按键&SPI总线),以及可定制的信息操作指示音效。
芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。
图2-10ISD1760芯片及引脚图
这里我们采用的是SPI协议串行工作模式。
语音模块调试成功以后,我们事先录制了相应的语音,然后智能车行驶过程中通过主控器控制ISD1760,播报出所需要的信息。
智能车可以播放长度及其单位、角度值和时间,颜色类型和距离等。
2.2.8液晶显示模块
显示模块我们使用液晶LCD12864,下面对其做一些的介绍:
液晶LCD12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块。
其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
我们将智能车行驶过程中的一些信息在液晶LCD12864上显示,如智能车行驶的距离,方位角度,识别到的颜色,超声波测距测得的距离。
这便于我们直接观察智能车的行驶状态,有利于我们调试过程中对存在的误差做出一定的补偿,已达到题目的要求。
2.2.9颜色识别模块
颜色的识别我们使用的是TCS230颜色识别传感器,TCS230颜色识别传感器的电路图如图2-11,实物图如图2-12。
图2-11TCS230颜色识别传感器电路图
图2-12TCS230颜色识别传感器实物图
下面简要介绍TCS230芯片各个引脚的功能及它的一些组合选项。
S0、S1用于选择输出比例因子或电源关断模式;S2、S3用于选择滤波器的类型;OE反是频率输出使能引脚,可以控制输出的状态,当有多个芯片引脚共用微处理器的输出引脚时,也可以作为片选信号,OUT是频率输出引脚,GND是芯片的接地引脚,VCC为芯片提供工作电压,表1是S0、S1及S2、S3的可用组合。
表2-2S0、S1及S2、S3的可用组合
S0
S1
输出频率定标
S2
S3
滤波器类型
L
L
关断电源
L
L
红色
L
H
20%
L
H
蓝色
H
L
20%
H
L
无
H
H
100%
H
H
绿色
颜色有三原色(红、蓝、绿)组成的,每一种颜色的三原色色值都是特定的,并且不同颜色的三原色色值是不同的。
该颜色传感器能将被测物品中红、蓝、绿三原色色值转化对应的频率值,再根据其各个频率值所在比重来判断颜色。
这里我们就利用ATmega128单片机中定时器/计数器3中的输入捕捉功能,颜色识别传感器输出占空比50%的波形,所以我们就可以测量出三原色(红、蓝、绿)中的一或两种,例如红色。
由于其与被测物体的距离影响测量值,我们算出与距离直接的比例关系,从而计算出准确的频率值。
每种颜色中所占红色色值的比例是不同的,该颜色传感器检测到红色对应的频率值并输出,ATmega128单片机主控器做出相应的判断,最终识别出颜色。
第3章智能车程序的设计
3.1总程序流程图
3.2.1电机驱动程序
电机驱动电路是通过单片机控制光电耦合器的导通性,间接控制LM298N的输出信号,LM298N直接控制电机。
电机驱动程序流程图:
电机驱动程序源代码:
/*----------------------------------------------------------
-------电机控制函数
-------fx:
方向
-------M_L:
左轮PWM占空比调整
-------M_R:
右轮PWM占空比调整
-------time:
运行时间
-----------------------------------------------------------*/
voidMotor(unsignedcharfx,unsignedintM_L,unsignedintM_R,unsignedinttime)
{
OCR1A=M_L;
OCR1B=M_R;
switch(fx)
{
case0:
In1=1;In2=0;In3=1;In4=0;break;//右
case1:
In1=0;In2=1;In3=0;In4=1;break;//左
case2:
In1=1;In2=0;In3=0;In4=1;break;//后
case3:
In1=0;In2=1;In3=1;In4=0;break;//前
case4:
In1=0;In2=0;In3=0;In4=0;break;//停
default:
break;
}
delay_ms(time);
}
该过程用PWM控制LM298N的IN1-IN4的输出,控制电机的转速,其中IN1、IN2控制左轮的转动方向,IN3、IN4控制右轮的转动方向。
若给IN1=1,IN2=0时,相应电机正转,则IN1=0,IN2=1时,电机反转。
当用PWM控制LM298N的输出使能端时,电机则以PWM波形的占空比控制电机的转速。
改程序中,参数M_L,M_R分别是两路PWM的占空比调节参数,可以控制电机的转速。
3.2.2长度检测程序
智能车走过的长度利用光电编码器的输出信号来计算,光电编码器通过测量和检测固定在车轮上的编码盘来计算编码器产生的高电平或低电平数,来计算智能车所走过的距离。
长度检测
程序流程图:
长度检测程序源代码:
/*----------------长度计数--------------------------------
-----length:
智能车行走的距离,单位:
mm
-----JiaoDu:
智能车行走过程中方向角
---------------------------------------------------------*/
voidCount(floatlength,unsignedintJiaodu)
{
unsignedintLs=400,Rs=418;
//--Ls:
左轮速度,Rs:
右轮速度
unsignedintCount_Num=0,Shi_JD,flag=0;
//--Count_Num:
光电编码器计数值,
//--Shi_JD:
电子罗盘测得的实时速度
floatJD_cha;
length*=100;
length/=35.37;
length=(unsignedint)length;
length-=57;
TCNT2=0;//--定时计数器计数值清零
while(Count_Num{
if(TCNT2==10)
{
Shi_JD=Scan_JiaoDu();//--检测当前的角度值
flag++;
TCNT2=0;
}
Count_Num=flag*10+TCNT2;
JD_cha=(float)(Shi_JD-Jiaodu);//计算角度差值
if(JD_cha>12)//利用角度差调整智能车行走路线
Motor(3,Ls,Rs-20,1);
elseif(JD_cha<-12)
Motor(3,Ls-20,Rs,1);
else
Motor(3,Ls,Rs,1);
}
Motor(2,320,320,14);//电机反转,立即停车
Motor(4,0,0,1000);//停车1s
}
智能车的初始角度Jiaodu和实时测量的角度来调整智能车的行走路线,光电编码器输出的占空比为50%的方波信号输入单片机,通过定时计数器的外部计数功能计数产生的高电平的数量,来控制电机行走距离。
左后利用电机反转来实现让智能车立即停车,已达到准确行走固定距离的目的。
3.2.3液晶显示模块
该模块利用12864液晶,主要显示智能车运行时的技术参数以及超声波、电机罗盘等测量的数据。
液晶显示程序流程图:
液晶显示程序源代码:
//改程序主要显示系统的运行界面
voidJiemian()
{
Lcd_Write_Cmd(0x80);
Lcd_Write_Str("时间:
");
Lcd_Write_Cmd(0x90);
Lcd_Write_Str("角度:
");
Lcd_Write_Cmd(0x90+6);
Lcd_Write_Str("度");
Lcd_Write_Cmd(0x88);
Lcd_Write_Str("距离:
");
Lcd_Write_Cmd(0x88+6);
Lcd_Write_Str("mm");
Lcd_Write_Cmd(0x98);
Lcd_Write_Str("颜色:
");
delay_ms(60);
}
/*在第i行第j列开始写3位数据*/
voidLcd_WriteNum(unsignedchari,unsignedcharj,unsignedlongnumber)
{
unsignedchara,b,c,d,e,f,g;
a=number/1000000;
b=(number%1000000)/100000;
c=(number%100000)/10000;
d=(number%10000)/1000;
e=(number%1000)/100;
f=(number%100)/10;
g=number%10;
Lcd_Write_Cmd(addrlist[(unsignedchar)(8*i+j-9)]);
//Lcd_Write_Data(numlist[a]);
//Lcd_Write_Data(numlist[b]);
Lcd_Write_Data(numlist[c]);
Lcd_Write_Data(numlist[d]);
Lcd_Write_Data(numlist[e]);
Lcd_Write_Data(numlist[f]);
Lcd_Write_Data(numlist[g]);
}
//在坐标(x,y)处显示字符串
voidLcmPrint(unsignedcharx,
unsignedchary,
unsignedcharflash*adata)
{
if((y>3)||(x>7))
return;//如果指定位置不在显示区域内,则不做任何写入直