您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 循迹小车课程设计报告
1智能循迹小车设计与制作课程设计报告系别:专业:班级:成员:指导老师:时间:二〇一一年6月30日2一、设计目的:1、学会智能电子产品的功能设计与任务分析,能进行小型电子产品方案设计;2、掌握基于51单片机、FPGA模数混合硬件系统设计和程序设计;3、熟悉电子信息类企业项目完整的运作过程及管理规范,培养团队协作能力、沟通能力、创新能力和组织能力。二、智能循迹小车任务分析这是一种基于STC89C51单片机的小车寻迹系统。该系统采用两组高灵敏度的光电对管,对路面黑色(白色)轨迹进行检测,并利用单片机产生PWM波,控制小车速度。测试结果表明,该系统能够平稳跟踪给定的路径。整个系统基于普通玩具小车的机械结构,并利用了小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行三、智能循迹小车循迹原理该智能小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。利用了简单、应用比较普遍的检测方法—发光二极管+光敏电阻。发光二极管+光敏电阻,即利用光线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射白光,当白光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。3四、智能循迹小车总体方案整个电路系统分为检测、控制、显示、驱动四个模块。首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,然后显示小车的运行状态,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。系统方案方框图如图1所示。图1智能小车寻迹系统框图五、智能循迹小车各模块方案1、循迹模块设计方案1:用红外发射管:接收管自己制作光电对管循迹传感器。红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射出的光线则测出黑线继而输出高电平。这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳定,且容易受外界光线的影响,因此我们放弃了这个方案。方案2:发光二极管+光敏电阻组成光敏探测器,光敏电阻的阻值可以根跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射检测(黑线)软件控制控制小车显示状态4到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。该方案虽然有明显的光线的车前但灵敏度好。因此我们采用这种方案。如理图如下:R61限制发射二极管的电流,发射管的电流和发射功率成正比,但受其极限输入正向电流50mA的影响,用R1=150的电阻作为限流电阻,Vcc=5V作为电源电压,测试发现发射功率完全能满足检测需要;可变电阻RP61可限制接收电路的电流,一方面保护接收红外管;另一方面可调节检测电路的灵敏度。因为传感器输出端得到的是模拟电压信号,所以在输出端增加了比较器,先将LM339输出电压与2.5V进行比较,再送给单片机处理和控制。传感器的安装正确选择检测方法和传感器件是决定循迹效果的重要因素,而且正确的器件安装方法也是循迹电路好坏的一个重要因素。从简单、方便、可靠等角度出发,同时在底盘装设5个光敏二极管,进行两级方向纠正控制,将大大提高其循迹的可靠性,具体位置分布如图3所示。5图3光敏电阻的分布图图中循迹传感器全部在一条直线上。其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。小车前进时,始终保持(如图3中所示的行走轨迹黑线)在X1和Y1这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。第二级方向探测器实际是第一级的后备保护,它的存在是考虑到小车由于惯性过大会依旧偏离轨道,再次对小车的运动进行纠正,从而提高了小车循迹的可靠性。2、控制模块设计此部分是整个小车运行的核心部件,起着控制小车所有的运行状态作用。控制方法很多,大部分都采用单片机控制。这里选择了ATMEL公司的AT89C52作为控制芯片,在芯片体积小、集成度高、可靠性好、容量足够、驱左X2右Y1左X1右Y2左轮右轮6动能力强、运用方便、经济廉价。3、电机驱动模块从单片机输出信号功率很弱,即使在没有其它外在负载是也无法带动电机,所以在实际电路中我们加入了电机驱动芯片提高输入电机信号的功率,从而能够根据需要控制电机转动。根据驱动功率大小以及连接电路的简单化要求选择L298为直流电机驱动芯片。电路图如下:74、FPGA系统软件设计原理图:84.1寻迹模块寻迹板送过来的4路检测信号送到FPGA板,FPGA将此4路信号送出至4个LED灯显示状态(检测至黑线亮,否则灭);同时将此4路信号送到单片机。显示模块及要求(采用1602)小车启动:小车启动时,显示“Start”。小车左拐:小车左拐时,显示“Left”。小车右拐:小车右拐时,显示“Right”。小车前进:小车前进时,显示“Running”。小车后退:小车后退时,显示“Back”。停车:小车停车时,显示“Stop”。94.2提示音模块(1)小车启动小车启动前发出3声“嘟、嘟、嘟”的声音,提示音结束后,FPGA发出一个启动信号给单片机,从而启动小车。(2)停车小车停车时,FPGA播放一首音乐,音乐播放结束即表示小车完成了任务。104.3FPGA设计总原理图如下:115、单片机控制模块5.1启动小车小车在接收到FPGA送过来的启动指令后,读取寻迹信号,根据寻迹信号确定小车的运行状态,将小车的运行状态送至FPGA,同时根据相应算法,驱动小车的左右电机前进。由于其实跑道与正常跑道有一段路程不好处理,所以需要冲一段路程才能使跑到正常轨道。5.2正常前进当寻迹板中间两个传感器检测到黑线,小车都正常前进。5.3左拐弯当最左端的两个传感器同时检测到黑线,或只有一个检测到黑线时,右端其它传感器检测到白色时,小车应左拐弯。但是根据跑道要求,当循迹板第一次检测到全黑时,小车应左转。125.4右拐弯当最右端的两个传感器检同时测到黑线,或只有一个检测到黑线时,左端其它传感器检测到白色时,小车应右拐弯。135.5后退当4个传感器都检测到白色,小车后退。5.6停车当4个传感器同时第六次检测到黑线,小车停车。小车停车后,发出一个停车标志信号送给FPGA,使FPGA播放音乐。5.7中断模块145.8电机控制模块5.9小车速度的PWM调制PWM基本原理PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。15六、心得体会这次循迹小车课程设计不得不说是个大工程,让我们从中学会了许多东西,特别是分工与合作。从最开始的买元器件,到焊接、调试循迹板,再到FGPA的VHDL程序和C语言程序的编写,都不简单。我们的循迹板在第一次焊接完毕,经过调试后,能正常工作。但是,当我们把它装在小车上让它去跑时,问题就来了,有个灯就不亮了。后来经过检测后,终于又弄好了。然后在写C语言时,主要就是调节小车的速度和转弯时的角度。而最难的是FPGA程序的编写,特别是音乐的编程,真的很复杂,花了我们很多时间才把它写好。而1602液晶的编写,用到了我们没有学过的状态机,经过查找资料后,才弄清楚状态机到底是什么回事。由于这次课程设计的工作量很大,所以我们组这次的分工非常明确。一个人写C语言程序,一个人写VHDL程序,一个人负责循迹板的焊接与调试,还16有一个负责资料的收集和报告的书写。最后,经过我们组的分工协作,终于把循迹小车的制作完成了。这次课程设计,收获最大的,还是告诉了我们要主动去学习新的知识。附录一:循迹板原理图17附录二:单片机C语言程序#includereg52.h/*********************第一部分***************************************///以下是点击驱动芯片L298管脚位声明sbitPWM1=P1^0;//电机使能端sbitPWM2=P1^1;sbitIN1=P1^2;//电机控制端sbitIN2=P1^3;sbitIN3=P1^4;sbitIN4=P1^5;sbitstart=P0^0;//小车启动信号sbitstop=P0^1;//小车停止信号sbitRP1=P2^3;//此处是传感器管脚位声明sbitRP2=P2^2;sbitRP3=P2^1;sbitRP4=P2^0;intcount1,count2;//用于中断计数//延时函数,延时z秒voiddelay(intz){intx,y;18for(x=z;x0;x--)for(y=124;y0;y--);}/*********************第二部分电机控制子函数****************************/voidforward1()//电机1前进{IN1=0;IN2=1;}voidforward2()//电机2前进{IN3=0;IN4=1;}voidback1()//电机1后退{IN1=1;IN2=0;}19voidback2()//电机2后退{IN3=1;IN4=0;}/***************电机的速度控制用PWM调速************************/voidspeed(intcnt1,intsd1,intcnt2,intsd2){if(cnt1sd1)//电机1PWM调速PWM1=1;elsePWM1=0;if(cnt2sd2)//电机2PWM调速PWM2=1;elsePWM2=0;}/***************电机的前进、左转、右转控制************************/voidturn(intcnt1,intsd1,intcnt2,intsd2){forward1();forward2();speed(cnt1,sd1,cnt2,sd2);}20/***************电机的后退控制************************/voidback(intcnt1,intsd1,intcnt2,intsd2){back1();back2();speed(cnt1,sd1,cnt2,sd2);}/*********************第三部分主函数****************************/voidmain(){intnum=0;stop=0;TMOD=0x01;//中断模式设置EA=1;TH0=(65536-1000)/256;//定时1msTL0=(65536-1000)%256;ET0=1;TR0=1;start=1;//给FPGA发送START信号delay(3000);//等待FPGA发送循迹信号delay(3000);等待FPGA发送循迹信号21start=0;turn(count1,250,count2,250);//使小车冲上黑色轨道delay(350);//延时等待小车冲上黑色轨道while(1){if(RP1==1&&RP2==1&&RP3==1&&RP4==1)back(count1,50,count2,50);//1111当四个LED检测到黑线时,小车后退if(RP1==1&&RP2==0&&RP3==0&&RP4==1)turn(count1,200,count2,200);//1001当第二三格LED检测到黑线时,小车前进if(RP1==0&&RP2==1&&RP3==1&&RP4==0)turn(count1,150,count2,150);//0110当第一、三个LED检测到黑线时,小车
本文标题:循迹小车课程设计报告
链接地址:https://www.777doc.com/doc-4324875 .html