智能循迹小车.doc_第1页
智能循迹小车.doc_第2页
智能循迹小车.doc_第3页
智能循迹小车.doc_第4页
智能循迹小车.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能循迹小车摘要设计分为五个模块:单片机最小系统 、电机驱动电源、电机驱动电路 、红外循迹模块、显示模块。电机驱动电路用于转向控制;红外循迹模块利用四个光电管,对黑色轨道进行循迹;电机驱动电源利用两个7805提供三路5v电压,一路供给最小系统,一路供给电机驱动电路,一路供给循迹模块。本设计中为了简化电路,减少小车的负载,利用软件编程的方法控制电机的转速从而控制小车的行驶速度,这是本设计的一大特色。一、 方案论证与比较1、 轨迹探测模块设计与比较方案一、使用简易光电传感器结合外围电路进行检测由于光电传感器对行驶过程中的稳定性要求非常高,而且容易受到光线环境和路面介质的影响,误测的几率非常大。在使用中极易出现问题,给检测和调试造成很大的困难,容易因为检测的失误导致整个系统的不正常工作,所以最终并未采用此方案。方案二、使用两只stl198光电管把两只光电管分别排列在黑色轨迹的两侧,根据其接收反射光的多少输出高低电平来控制小车的转向,以达到循迹的目的。但是调试表明,如果两只开关的距离很小,则以约束了小车的速度来达到检测轨迹的目的,如果两只开关的距离太大,则同时传来同一电平信号的几率很大,容易使小车的行驶路线偏离轨道,达不到循迹的目的。方案三、使用四只stl198光电管分左右两边各两只光电管一排排列,里面的两个距离靠的较远,外面的两个靠的比较近。当小车脱离轨道时即里面的两个光电管中有一个或者两个都偏离了轨道,等待外面的那两个光电管的任何一个检测到黑线时,做出相应的转向调整。直到中间的两个开关管的任何一个检测到黑线为止(即回到轨道上)再恢复正向行驶。现场调试表明,小车在行驶中虽然出现摇摆(各个光电管间的距离达到1厘米),但是基本上能准确地达到循迹目的。综合考虑实际中光电管的安装,考虑小车的行驶速度和循迹准确性,我们最终选择了方案三。2、单片机最小系统控制模块设计与比较方案一:采用MSP430系列的16位单片机,它是16位控制器,具有体积小、驱动能力强、可靠性高、功耗低、结构简单、具有语音处理、运算速度快等优点,但考虑到我们小组对这个方案采用的微处理器并不熟悉,使用起来并不是很方便。因此我们决定不再使用此方案,考虑其他方案。方案二:采用AT89S52单片机控制。AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8KB的系统可编程Flash 存储器。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路,能够满足题目设计的所有要求,而且我们对AT89S52也比较熟悉,因此我们选择方案二。3、电机驱动模块设计与比较方案一:常用的电机驱动集成电路L293D控制两只电机。L293D内含2个H桥的高电压大电流双全桥式驱动器,接收标准的TTL逻辑电平信号,可驱动36V,2A以下的电机。2,7,10,15接输入控制电平;3,6和11,14脚分别接两只电机,1,9脚接控制使能端,控制电机停转,单片机输出两组PWM信号,每一组PWM信号用来控制一个电机的转速。即可以对电机进行正转、反转和停止操作,亦能满足直流减速电机的要求,用该芯片作为电机驱动具有操作方便、稳定性好等优点。方案二:采用电机驱动芯片L298N控制,与L293D类似,不影响小车功能的实现,根据购买的方便,最终我们采用L298N作为电机驱动芯片。4、显示模块设计与比较方案一:采用1602液晶显示。液晶显示具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。方案二:采用数码管显示。数码管只能显示数字,比较单一,虽然能基本符合要求,但无论外观布局、画图做板麻烦,还是功能上都存在不足。综上,我们选择1602液晶显示。 5、电机驱动电源模块的选择与比较方案一:采用低压差的稳压芯片LM2940芯片。在电池损耗的情况下,虽然此芯片可以比较可靠的保证电压降低以后的稳定输出5V,但是由于我们对此芯片的需要量小,市场上比较难买到,在材料上的获取上有一定的麻烦。方案二:采用7805稳压芯片,此芯片的功能大同小异。在8V锂电池的输入供电下,也能实现5V的稳压输出。且78系列的稳压芯片在市场上非常普及,很容易获得。为了简化了电路,便于小车的组装,综合考虑最终我们采用两个7805的稳压芯片输出三路的5v电压。二、 硬件设计1、 总体设计设计模块图如下图-1所示液晶显示模块电机驱动模块单片机最小系统红外循迹模块驱动电源模块图1-12、控制系统 我们采用AT89S52单片机最小系统电路为整个系统的控制系统,它负责对各路传感信号的采集、处理、分析及对各部分硬件电路进行调整。通过各种电路,采集各种信息,以发出各种控制信号命令,来完成相应的操作。同时直接接上液晶显示电路和声音报警器。这样更有利于实际中小车的组装。AT89S52单片机最小系统电路如下图-2所示:AT89S52单片机控制原理图 图1-23.电机驱动模块的设计我们主要采用L298驱动两台直流电机电路如图-3所示,。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动两台直流减速电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。2,3,13,14四个脚连接直流减速电机。6,11脚接PWM信号(即EnA,EnB接控制使能端)控制电机的停转。四组光耦对输入、输出电信号起隔离作用。8脚接地。表1-1是L298N功能逻辑真值表图。Ven为6,11脚。IN1=IN3,IN2=IN4.IN1为5脚。 IN2为7脚。 IN3为10脚。 IN4为12脚。表1-1 L298驱动电路真值表ENA=ENB=1IN1=1IN2=0正转IN1=0IN2=1反转ENA=ENB=0IN1=IN2=1(或0)停止IN1=1(或0),IN1=IN2停止由表1-1可知同为低电平时,电机停止工作;ENA和ENB同为高电平时,电机正转或反转。L298驱动两台直流电机电路 图1-34、红外探测模块的设计红外光电开关其工作原理是根据发射头发出的光束,被物体反射,接收头据此做出判断是否有偏离轨道。当有光线反射回来时,输出高电平。当没有光线反射回来时,输出低电平。单片机根据接收头电平的高低做出相应控制,避免小车跑出轨道。四光电管循迹探测原理图如下图-4所示四光电管循迹模块原理图图1-45电源电路的设计:我们利用两个7805稳压管输出三路5v电压,一路供给最小系统,一路供给电机驱动电路,一路供给循迹模块。其原理图-5如下:图1-5三、软件设计 智能小车的控制器使用ATMEL公司的AT89C51单片机。程序设计上使用了时钟中断来控制小车行驶的状态检测,使用外部中断来记录小车行驶的距离,软件上设置了一个状态寄存器,来记录小车运行的状态,小车的运行为沿黑线行驶状态,避障碍物状态等。 在黑线上行驶时,控制器检测红外传感器的信号,如果小车行驶偏离轨道,则控制小车转向轮进行转向。 主程序流程图是否在弯道?开始延时3s提速行驶NY检测右传感器?电机反转小车左转黑线遮蔽检测左转传感器?器?白线遮蔽电机反转小车右转黑线遮蔽白线遮蔽四、 功能实现开机启动后,通过8.4V的直流电源给各部分模块供电,单片机延时3s后,小车开始沿着黑线轨迹行走。当左边的传感器检测到黑线时,把信号传给单片机系统,系统通过调整电机的转动,使小车沿着黑线右转;当右边的传感器检测到黑线时,同理通过单片机系统的工作,小车沿着黑线左转;当左右传感器没检测到黑线时,小车处在黑线的上方,小车快速行驶。当左右传感器都检测到黑线时,小车停止行驶。五、 结束语首先感谢电子系电子信息工程实验室给我们这样一次珍贵的锻炼机会,在这20多天的时间里,我们三个人同心协力,分工合作,共同完成了智能循迹小车的项目。在制作过程中遇到了很多困难与挫折,我们也一度灰心丧气,但是我们都一步步挺了过来,克服了一个又一个的困难,最终完成了制作。在这一次的大赛中,我们获益匪浅。其中不仅仅包括知识上的,也包括意志与精神上的。刚开始的我们在制作小车方面的知识几乎可以说是零,在制作过程中,由于缺乏经验和忽略细节问题,我们在调试的时候经常碰到很多奇怪的问题,但是我们通过耐心的调试,或者上网查阅资料,直到弄懂为止;遇到分歧,我们就在一块讨论,共同研究。参加此次培训对我们来说是一次宝贵经历,也是人生的一笔精神财富。当然由于知识能力与水平有限,我们也有做的不好与不完善的地方,恳请老师批评指正,希望下次我们能够做的更好。六、 附录#include#define uchar unsigned char #define uint unsigned intchar ReadyToGo=4;/倒计时char gewei,shiwei;uint count;float SpeedCount = 0; /测速计数脉冲float Speed = 0.0;float Distance = 0.0; sbit left1=P27; sbit left2=P26; sbit right1=P24; sbit right2=P25; sbit zuolungao=P10;sbit zuolundi=P11;sbit youlungao=P12;sbit youlundi=P13;sbit youlunen=P16;sbit zuolunen=P17;char jinshucount;sbit rs=P35;sbit lcden=P36;#define CircleLength0.132/小车转一轮的长度为.132mchar miao,fen;/shi,void DisplayDistance();void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void lcdinit()lcden=0;write_com(0x38);/初始化/write_com(0x0c);/关显示write_com(0x06);/显示光标write_com(0x01);/清屏幕write_com(0x0c);/开显示及光标设置/TMOD=0x01;void DisplaySingleChar(char x,char y,char cchar)if (y)x|=0x40;x|=0x80;delay(5);write_com(x);write_date(cchar);void DisplayString(char x,char y,char *str)while(*str)delay(5);DisplaySingleChar(x+,y,*str);str+;void Displaytime()/write_com(0x01);/DisplayString(0x03,0,steel:);/DisplaySingleChar(0x09,0,jinshucount+0x30);/DisplayString(0x04,1,00:0);shiwei=miao/10;gewei=miao%10;if(shiwei=0)DisplaySingleChar(0x08,1,fen+0x30);/DisplayString(0x09,1,:);if(gewei=0)DisplaySingleChar(0x0A,1,shiwei+0x30);DisplaySingleChar(0x0B,1,gewei+0x30);void intinit()EA=1; /开总中断IT0=1; /INTO边沿触发PX0=1; EX0=1; /INTO优先级为高级EX1=1; /开INT1中断IT1=1; /INT1边沿触发PX1=1; /INT1优先级为高级TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1; /T0/T1定时方式1void ComputeSpeedANDDistance(void);void main() jinshucount=0x00;zuolungao=0;zuolundi=0;youlungao=0;youlundi=0; delay(4); /延时等待LCD启动 lcdinit(); /初始化LCD intinit(); /初始化所有中断DisplayString(0x0,0,Ready!); while (ReadyToGo-) DisplaySingleChar(0x7,1,ReadyToGo+0x30);DisplaySingleChar(0x09,1,s);delay(1000);write_com(0x01);DisplayString(0x05,0,come on Go!);delay(1000);write_com(0x01);DisplayString(0x03,0,time:);DisplaySingleChar(0x09,0,jinshucount+0x30);/显示铁片的个数;DisplayString(0x04,1,00:00:00); TR0=1;while(1) /Displaytime();*/if(left1=0&left2=0&right1=0&right2=0)zuolungao=1;zuolundi=0;youlungao=1; youlundi=0;zuolunen=1;youlunen=1;delay(60);/230 zuolunen=0;youlunen=0;delay(40);else if(left1=0&left2=0&right1=1&right2=0) zuolungao=1;/右转zuolundi=0;youlungao=1; youlundi=0;zuolunen=1;youlunen=0;delay(25);/125 zuolunen=0;delay(60);/45 else if(left1=0&left2=1&right1=0&right2=0) zuolungao=1;/左转zuolundi=0;youlungao=1; youlundi=0;zuolunen=0;youlunen=1;delay(25); youlunen=0;delay(60);else if(left1=0&left2=0&right1=0&right2=1) zuolungao=1;/大右转zuolundi=0;youlungao=0; youlundi=1;zuolunen=1;youlunen=0;delay(20); zuolunen=0;delay(60);/55else if(left1=0&left2=0&right1=1&right2=1) zuolungao=1;/严重右转zuolundi=0;youlungao=0; youlundi=1;zuolunen=1;youlunen=0;delay(20); zuolunen=0;delay(60);/55 else if(left1=1&left2=0&right2=0&right1=0) zuolungao=0;/大左转zuolundi=1;youlungao=1; youlundi=0;zuolunen=0;youlunen=1;delay(20); youlunen=0;delay(60);else if(left1=1&left2=1&right1=0&right2=0) zuolungao=0;/严重左转zuolundi=1;youlungao=1; youlundi=0;zuolunen=0;youlunen=1;delay(20); youlunen=0;delay(60); void timer0() interrupt 1 /T0显示时间TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=18)/*ComputeSpeedANDDistance();*/count=0;miao+;if(miao=60)miao=0;fen+;/*if(fen=60)fen=0;shi+;if(shi=24)shi=0;*/Displaytime();/Displaytime(); /*void int1() interrupt 2 int i;jinshucount+;/DisplayString(0x03,0,steel:);/DisplaySingleChar(0x09,0,jinshucount+0x30);/显示铁片的个数;TR0=0;zuolunen=0;youlunen=0;for(i=0;i6;i+)write_com(0x01);DisplayString(0x03,0,steel:);DisplaySingleChar(0x09,0,jinshucount+0x30);/显示铁片的个数; DisplayDistance();delay(1000);write_com(0x01);DisplayString(0x03,0,steel:);DisplaySingleChar(0x09,0,jinshucount+0x30);/显示铁片的个数; Displaytime();delay(1000); TR0=1;Distance=0;zuolunen=1;youlunen=1;void int0() interrupt 0 SpeedCount+;void ComputeSpeedANDDistance(void)Speed=SpeedCount/4*CircleLength;/计算瞬时速度Distance+=Speed;/计算距离SpeedCount=0;void DisplayDistance()int Distance1=0x30;int Distance2=0x30;int Distance3=0x30;int Distance4=0x30;if (int)(Distance*100) 100 & (int)(Distance*100) 1000)Distance1+=(int)(Distan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论