guang.docx
- 文档编号:9091200
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:16
- 大小:94.24KB
guang.docx
《guang.docx》由会员分享,可在线阅读,更多相关《guang.docx(16页珍藏版)》请在冰豆网上搜索。
guang
四路循迹小车
姓名:
白富龙
班级:
光-126
学号:
201257506108
目录
摘要······································3
Abstract··································3
第1章····································4
第2章····································5
第3章····································5
第4章····································6
第5章····································9
第6章····································10
总结······································13
智能循迹避障小车(四路)
摘 要:
利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。
其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。
关键词:
智能小车;STC89C52单片机;L298N;红外对管
Intelligenttrackingandobstacle-avoidcar
Abstract:
Basedinfrareddetectionofblacklinesandtheroadobstacles,anduseaSTC89C52MCUasthecontrollingcoreforthespeedanddirection,Aelectronicdrived,whichcanautomatictrackandavoidtheobstacle,wasdesignedandfabricated.Inwhich,thecarisdrivedbytheL298Ncircuit,itsspeediscontrolledbytheoutputPWMsignalfromtheSTC89C52.
Keywords:
SmartCar;STC89C52MCU;L298N;InfraredEmittingDi
第一章绪论
1.1智能小车的意义和作用
自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。
近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。
人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。
随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。
视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。
视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。
但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。
机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。
避障控制系统是基于自动导引小车(AVG—auto-guidevehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。
使用传感器感知路线和障碍并作出判断和相应的执行动作。
该智能小车可以作为机器人的典型代表。
它可以分为三大组成部分:
传感器检测部分、执行部分、CPU。
机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。
可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。
基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可,所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当。
智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。
单片机驱动直流电机一般有两种方案:
第一,勿需占用单片机资源,直接选择有PWM功能的单片机,这样可以实现精确调速;第二,可以由软件模拟PWM输出调制,需要占用单片机资源,难以精确调速,但单片机型号的选择余地较大。
考虑到实际情况,本文选择第二种方案。
CPU使用STC89C52单片机,配合软件编程实现。
1.2智能小车的现状
现智能小车发展很快,从智能玩具到其它各行业都有实质成果。
其基本可实现循迹、避障、检测贴片、寻光入库、避崖等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。
比较出名的飞思卡尔智能小车更是走在前列。
我此次的设计主要实现循迹避障这两个功能。
第二章方案设计与论证
根据要求,确定如下方案:
在现有玩具电动车的基础上,加装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。
这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
2.1主控系统
采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。
充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。
这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。
因此,这种方案是一种较为理想的方案。
针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。
根据这些分析,我选定了P89C51RA单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。
在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用STC89C52单片机的资源。
(比照此图进行焊接)
2.2电机驱动模块
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。
采用功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,加速能力强这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。
因此决定采用使用功率三极管作为功率放大器的输出控制直流电机。
2.3循迹模块
采用四只红外对管,两只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。
现场实测表明,小车在寻迹过程中有一定的左右摇摆不定,虽然可以正确的循迹但其成本与稳定性都次与第二种方案。
2.4机械系统
本题目要求小车的机械系统稳定、灵活、简单,而三轮运动系统具备以上特点。
驱动部分:
由于玩具汽车的直流电机功率较小,而小车上装有电池、电机、电子器件等,使得电机负担较重。
为使小车能够顺利启动,且运动平稳,在直流电机和轮车轴之间加装了三级减速齿轮。
电池的安装:
将电池放置在车体的电机前后位置,降低车体重心,提高稳定性,同时可增加驱动轮的抓地力,减小轮子空转所引起的误差。
简单,而三轮运动系统具备以上特点。
2.5电源模块
第三章硬件设计
3.1总体设计
智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。
将循迹光电对管分别装在车体下的左右。
当车身下左边的传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。
避障的原理和循线一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。
3.2信号检测模块
小车循迹原理是小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。
笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。
红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。
在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。
3.3主控电路
本模块主要是对采集信号进行分析,同时给出PWM波控制电机速度。
第四章软件设计
4.1电机驱动程序
voidstraight()
{
left1=1;
left2=0;
right1=1;
right2=0;
speedLeft=100;
speedRight=100;
}
voidturnLeft()
{
left1=1;
left2=0;
right1=1;
right2=0;
speedLeft=50;
speedRight=100;
}
voidturnRight()
{
left1=1;
left2=0;
right1=1;
right2=0;
speedLeft=100;
speedRight=50;
}
voidmain()
{
initTimer0();
hongwai1=1;
hongwai2=1;
hongwai3=1;
hongwai4=1;
4.2循迹框图:
4.3循迹程序:
if(hongwai3==0&&hongwai2==1||hongwai3==0&&hongwai4==0||hongwai3==1&&hongwai4==0)
{
left1=1;
left2=0;
right1=1;
right2=0;
speedLeft=50;
speedRight=100;
}
}
if(hongwai2==0&&hongwai3==1||hongwai2==0&&hongwai1==0||hongwai2==1&&hongwai1==0)
{
left1=1;
left2=0;
right1=1;
right2=0;
speedLeft=100;
speedRight=50;
}
if(hongwai2==0&&hongwai3==0)
{
left1=1;
left2=0;
ight1=1;
right2=0;
speedLeft=100;
speedRight=100;}
Delay100ms();
Delay100ms();
Delay100ms();
第五章制作安装与调试
5.1小车调试
通过改变循迹板滑动变阻器器的大小来调试红外对管的灵敏度,通过改变延时程序来改变速度的大小。
第六章程序
#include
#include
//设置驱动模块的高低电平
#defineSet1
#defineReset0
//定义变量
#defineucharunsignedchar
#defineuintunsignedint
//分别定义驱动模块右边左边的使能端
sbitenRight=P1^2;
sbitenLeft=P3^2;
//在单片机定义驱动模块的左右驱动端口
sbitright1=P1^0;
sbitright2=P1^1;
sbitleft1=P3^0;
sbitleft2=P3^1;
//在单片机管脚上定义红外模块的管脚
#definehongwai1P1^3
#definehongwai2P1^4
#definehongwai3P1^5
#definehongwai4P1^6
//定义时间变量和左右轮的速度
uchart1=0;/*中断计数器*/
uchart2=0;
ucharspeedLeft=100;/*电机1速度值*/
ucharspeedRight=100;
//声明时间,驱动和延时函数
voidinitTimer0(void);
voidMotor_move(unsignedintleft_speed,unsignedintright_speed);
voidDelay_us(unsignedintus);
voidDelay_ms(unsignedintms);
//主函数
voidmain()
{
initTimer0();
while
(1)
{
if((hongwai3==1&&hongwai2==0)||(hongwai3==0&&hongwai4==0)||(hongwai3==1&&hongwai4==0))
{
Motor_move(40,100);
}
Delay_ms(200);
if((hongwai2==0&&hongwai3==1)||(hongwai2==0&&hongwai1==0)||(hongwai2==1&&hongwai1==0))
{
Motor_move(100,40);
}
Delay_ms(200);
if(hongwai2==0&&hongwai3==0)
{
Motor_move(100,100);
}
Delay_ms(100);
}
}
//微秒延时
voidDelay_us(unsignedintus)
{
unsignedinti;
while(us--)
{
for(i=110;i>0;i--);
}
}
//毫秒延时
voidDelay_ms(unsignedintms)
{
unsignedinti;
for(i=ms;i>0;i--)
Delay_us
(1);
}
//驱动小车
voidMotor_move(unsignedintleft_speed,unsignedintright_speed)
{
left1=Set;
left2=Reset;
right1=Set;
right2=Reset;
speedLeft=left_speed;
speedRight=right_speed;
}
//开中断
voidinitTimer0(void)
{
TMOD=0x02;/*设定T0的工作模式为2*/
TH0=0x9B;/*装入定时器的初值*/
TL0=0x9B;
EA=1;/*开中断*/
ET0=1;/*定时器0允许中断*/
TR0=1;/*启动定时器0*/
}
//产生PWM信号
voidtimer0()interrupt1/*T0中断服务程序*/
{
if(t1 enLeft=Set; else { enLeft=Reset;/*产生电机1的PWM信号*/ t1++; if(t1>=100) t1=0;/*1个PWM信号由100次中断产生*/ } if(t2 enRight=Set; else { enRight=Reset;/*产生电机1的PWM信号*/ t2++; if(t2>=100) t2=0;/*1个PWM信号由100次中断产生*/ } } 结束语 整个系统的设计以单片机为核心,利用了多种传感器,将软件和硬件相结合。 本系统能实现如下功能: 自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进。 若有偏离,能够自动纠正,返回到预设轨道上来。 总结: (1)在软件方面: a: 深感自己的C语言较差,写出的程序将结构并不严谨,逻辑不清晰。 b: 在把红外对管采集到的信息下入单片机时,需要在主程序中对四个红外对管进行使能,之前未使能而未达到预期的效果。 c: 在写入红外对管的程序时,在主程序中需要对每一种情况进行延时。 (2)在硬件方面: 在第一遍焊接最小系统时由于不仔细,把电容和电阻的串并联焊接错误,焊好最小系统利用驱动模块进行调试时,由于找的程序有问题,以为是单片机的底座有问题,又走了一些弯路。 (3)调试方面: 焊好最小系统在对红外模块和驱动模块进行调试时,逐步进行。 尤其是对直流电机的PWM调试,其中引入中断,通过控制左右轮转速的不同控制小车的转弯。 通过本次设计我掌握了很多以前不熟练的东西,认识了很多以前不熟悉得东西,认识到很多的不足。 结课感悟: 这学期开始光通信这门课后,我接触了一些之前未曾涉及的领域。 刚开始由于4G挺热门,所以想研究下3G,现在回想当时在图书馆抱回几本3G的书硬啃,最终还是接触了皮毛,且3G不是小团队可以做的。 之后是十月一,听从上课老师您讲的,缩小知识面,做的细。 于是跑到图书馆,在TN附近转,DSP,MIMO,局域网,编码,安全解密,人机交互,交互设计,智能机器人,码分多址,天线···之后选择了智能天线,最后选择了天线。 于是假期把西电的那本书为主教材看了下天线。 开学回来,一次偶然机会认识了学长,于是用单片机开发板先学习单片机。 同时,老师您建议看SL-TGIS,于是翻译后看了下,测量轮胎花纹和凹凸程度,去钟楼研究生那交流了一下,感觉自己现有的能力不足以涉足,因而放弃了,选择了先学单片机,做个简单的循迹小车。 在做小车期间让我感觉很难的是单片机的底座不好放在PCB板上和中断问题。 至于中断问题,是这样的: 那晚学长知道我写中断程序,正好那天精神不振,由于之前看过中断,我以为自己掌握的理解了差不多了,但是一反映到程序上,发现不是那回事,和自己理解的不一样,于是学长引导着好多遍,但是我就是不能接受他的点,以为自己看了好多遍自己是对的,弄得学长很恼火,我也很急。 最后,是我把中断中的初值和主程序的初值在程序中执行的次数当成一样的。 其实写入中断就是: 赋初值,开总中断,开定时器,进入中断,中断中再赋初值和写入语句。 这是我第一次独立实验。 的确单纯的理论也许可以考到高分,但是未经过实践的理论总是显得那么枯燥和无趣。 这可能也是我兴趣广泛的一个原因吧! 用暂时的逃脱来换回对理论的热情。 且不说理论必须回归现实,也不说这是我所痴迷的,只是感觉走了弯路而倍感惋惜,后悔已晚,为今只有全力以赴。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- guang