资源描述
2013年 7 月12日一、绪论.4 1.1智能小车的作用和意义.4 二、方案设计与论证 . 4 2.1 总体方案设计 .4 2.2主控系统 .52.3传感器选择方案 .6 2.4电机驱动芯片选择方案.6 2.5电机方案选择.62.6电源方案选择.7 三、主要器件介绍 .73.1 STC89C52的介绍 .7 3.2 L298N的介绍 .83.2.1 L298N的引脚功能 . 9 3.2.2 L298N的运行参数 .103.2.3 L298N的逻辑控制 . 10 3.3 TCRT5000的介绍 . 113.4LM339的介绍 .123.5 L7805CV和L7806CV的介绍.12四、硬件设计 . 14 4.1 主控芯片STC89C52单片机最小系统板电路 . 14 4.2 电机驱动模块电路.154.3红外对黑线检测模块电路.16 4.4稳压电源电路.18五、程序设计 . 19 5.1主程序 .19六、调试. 28 6.1硬件调试 .286.1.1元件的固定 . 286.1.2TCRT5000探头 . 29 6.1.3 L298N马达驱动模块 . 29 6.2软件调试 . 29 6.2.1调试平台介绍 . 296.2.2程序调试.296.3 测试结果与分析 . 30七、心得体会. 30附件 元件清单 参考文献一、绪论1.1智能小车的作用和意义 自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。随着科学技术的发展,机器人的感系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航一种实用有效的方法。 机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVGauto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。 该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、CPU、执行部分。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。 二、方案设计与论证2.1 总体方案设计 本系统基于AT89C52单片机的小车寻迹系统,该系统采用两组高灵敏度的红外反射式光电传感器,对路面的黑色轨迹进行检测,将检测的数据送入单片机进行处理,并利用单片机产生PWM波,并以最短时间完成寻迹。同时采用红外传感器对障碍物进行躲避功能,遇到对于交通灯的检测采用固定频率的红外线信号表示不同的交通指示灯,使控制系统更加智能。在软件程序上采用一定的控制算法,使得小车在通道上第一次遇到十字黑线时候减速行驶,在第二次遇到十字黑线可以实现减速转弯,因此,本系统由红外光电传感器,单片机和驱动单元共同作用,保证小车能在预先设定的轨迹上行驶。 本设计的主要特色本设计的主要特色本设计的主要特色本设计的主要特色: 1.自制的四个轮结构小车,采用PWM调速。2.采用6V电池供电,直流稳压电路工作稳定。 3.采用红外发射传感器接收对黑线标志进行识别,具有高精度和高灵敏度。 2.2主控系统 根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。据此,拟定了以下两种方案并进行了综合的比较论证,具体如下: 方案一: 选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。但CPLD在控制上较单片机有较大的劣势。同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。若采用该方案,必将在控制上遇到许许多多不必要增加的难题。为此,我们不采用该种方案,进而提出了第二种设想。 方案二: 采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。 针对本设计特点多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。根据这些分析,我选定了STC89C52RA单片机作为本设计的主控装置,52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是52单片机价格非常低廉。 在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用STC89C52单片机的资源。2.3传感器选择方案 方案一:采用发光二极管发光,用光敏二极管接收; 发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏二极管为检测到信号。呈高阻抗,使输出端为低电平。当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到,其阻抗迅速降低,此时输出端为高电平。但是由于光敏二极管受环境中可见光影响较大,电路的稳定性很差,但可以通过运放对检测信号进行处理。方案二: 采用反射式红外光电传感器。 用TCRT5000型反射式红外对管组成的路径识别传感器模块,检测距离和灵敏度均能达到系统要求,该器件具有如下特点:当发光二极管发出的光反射回来时,三极管导通输出低电平,该光电对管调理电路简单,工作性能稳定。 综上所述,本设计采用发光二极管进行检测,原因是性价比较合理。2.4电机驱动芯片选择方案方案一:采用分立元件的H桥驱动电路。 方案二:采用集成的H桥驱动电路芯片。 由于集成的H桥驱动电路芯片体积小,稳定性高,因此选用集成的驱动电路芯片作为电机的驱动芯片,型号为L298N。2.5电机方案选择 方案一: 采用步进电机,步进电机的一个显著特点就是具有快速启停能力可实现电机正反转及调速,启动性能好,启动转矩大。工作电压可达到36V,4A。可同时驱动两台直流电机。适合应用于机器人设计及智能小车的设计中,如果符合不超过步进电机所能提供的动态转矩值,就能够立即使步进电机的启功或者反转。调速方式:直流电动机采用PWM信号平滑调速。方案二: 采用普通直流减速电机,直流电动机具有优良的调速特性,调速平滑,方便,调整范围广,过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动,制动,和反转,能满足各种不同的特殊运行要求。 综上所诉,我们选择直流减速电机。2.6电源方案选择方案一: 直接使用AA干电池进行供电它的结构十分简单,但是供电能力差,不易长时间供电。 方案二: 使用3500mA干电池配合直流稳压整流电路输入端口接9mA的干电池,经电容滤波和L7805和L7806稳压后输出约5V,6V电压。可保证长时间稳定的输出电压。这样可以提供持久稳定的电流,稳压后给单片机系统和其他芯片供电。考虑到系统稳定工作的要求,所以选择方案一。三 主要器件介绍3.1 STC89C52的介绍 STC89C52引脚功能说明VCC(40引脚):电源电压 VSS(20引脚):接地P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:在对Flash ROM编程和程序校验时,P1接收低8位地址。表XX P1.0和P1.1引脚复用功能在对Flash ROM编程或程序校验时,P3还接收一些控制信号。 P3口除作为一般I/O口外,还有其他一些复用功能,如下表所示: 表XX P3口引脚复用功能来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。 特殊功能寄存器3.2 L298N的介绍L298N是一种高电压、大电流电机驱动芯片。该芯片的主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。3.2.1 L298N的引脚功能3.2.2 L298N的运行参数 3.2.3 L298N的逻辑控制主要采用L298N,通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,输入引脚与输出引脚的逻辑关系图为表3.3 L298N对直流电机控制的逻辑真值表3.3 TCRT5000的介绍TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光电开关。传感器采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,输出信号经施密特电路整形,稳定可靠。+:接直流DC5V正极-:接直流DC5V负极S:信号输出端,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。应用场合:电度表脉冲数据采样、传真机碎纸机纸张检测、障碍检测黑白线检测基本参数:外形尺寸:长32mm37mm;宽7.5mm;厚5mm工作电压:DC3V5.5V,推荐工作电压为5V检测距离:1mm8mm适用,焦点距离为2.5mm传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。灵敏度可调的循迹电路。当比较器的正向输入端电压低于反向输入端的电压时输出低电平,LED亮,表示接收到反射光。3.4 LM339的介绍智能小车中运用于电路分析模块LM339引脚图与功能简介LM339集成块内部装有四个独立的电压比较器。LM339类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输出端。两个输入端一个称为同相输入端,用“+”表示,另一个称为反相输入端,用“-”表示。用作比较两个电压时,任意一个输入端加一个固定电压做参考电压(也称为门限电平,它可选择LM339输入共模范围的任何一点),另一端加一个待比较的信号电压。当“+”端电压高于“-”端时,输出管截止,相当于输出端开路。当“-”端电压高于“+”端时,输出管饱和,相当于输出端接低电位。两个输入端电压差别大于10mV就能确保输出能从一种状态可靠地转换到另一种状态,因此,把LM339用在弱信号检测等场合是比较理想的。LM339的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只电阻(称为上拉电阻,选3-15K)。选不同阻值的上拉电阻会影响输出端高电位的值。因为当输出晶体三极管截止时,它的集电极电压基本上取决于上拉电阻与负载的值。另外,各比较器的输出端允许连接在一起使用。3.5 L7805CV和L7806CV的介绍L7805L7805是我们最常用到的稳压芯片了,他的使用方便,用很简单的电路即可以输入一个直流稳压电源他的输出电压恰好为5v,刚好是51系列单片机运行所需的电压,他有很多的系列如ka7805,ads7805,cw7805等,性能有微小的差别,用的最多的还是LM7805,下面我简单的介绍一下他的3个引脚以及用它来构成的稳压电路的资料。 其中1接整流器输出的+电压,2为公共地(也就是负极),3就是我们需要的正5V输出电压了.L7806L7806为固定正电压稳压电路,属三端正电源稳压电路系列(3Terminals positive Voltage Regulator Series)。产品应用非常广泛,涉及到各种稳压电源、充电器、数码产品以及家电领域等。L7806芯片参数:封装四、硬件设计.4.1 主控芯片AT89C52单片机最小系统板电路本智能小车采用的单片机最小系统板是自己制做的AT89C52单片机最小系统板,它具有体积小,质量轻,使用方便等优点,能够很好的放置在智能小车中。原理图如下。 小系统PCB板4.2 电机驱动模块电路电机驱动模块采用专用驱动芯片L298N作为电机的驱动芯片。L298N是一种具有高电压大电流的全桥驱动芯片,它的响应频率高,一片L298N可以分别控制两个直流减速电机,而且还带有控制使能端,用它作为驱动芯片,操作方便,稳定,性能优良。L298N的5、7引脚为一个电机的控制信号输入端,10、12引脚为另一个电机的控制信号输入端,2、3引脚为一个电机的控制信号输出端,13、14引脚为另一个电机的控制信号输出端,通过单片机对L298N的输入端进行指令控制,就能实现直流减速电机的正转和反转,从而控制小车前进和后退。电机驱动电路原理图如下。驱动模块PCB板4.3红外对黑线检测模块电路由于有6个红外传感器排成一排均匀的安装在小车底部,当光线照射到路面并反射,由于黑线和白纸的反射系数不同,根据接收到的反射光强度判断是否眼黑线前进。在一般情况下,当黑线位于中间的两个红外传感器之间,不管小车偏向哪一边,都能检测出小车的偏移方向。或者当小车偏向左边时,右边的传感器检测到黑线,输出低电平给电机,否则,输出高电平。红外作循迹电路原理图红外作循迹PCB板 采用红外对管制作循迹电路,当检测到黑线时,红外接受管导通,否则红外对管截止,通过比较器LM339电压比较,把电平状态送给单片机进而单片机处理。原理图如下。 电路分析原理图红外电路分析PCB板4.4稳压电源电路电机驱动电路模块:本题目要求小车的机械系统稳定、灵活、简单,可选用两轮式,考虑到现在的汽车多采用两轮式我选用两轮式的设计,使设计更贴近生活需求。驱动部分:直流驱动电机,由L298N双通道马达驱动模块驱动前后两个马达,其力矩完全可以达到模拟效果。 电池的安装:将电池放置在车体的下面,降低车体重心,提高稳定性,同时可增加驱动轮的抓地力,减小轮子空转所引起的误差。 电源模块:采用2支3500mA电池给电机供电,再用稳压芯片对电池电压进行降压给单片机。采用一套电源可减少小车的负重。电机动力电路应用说明:基本思路为使能端输入使能信号,即接高电平,控制输入端A端输入PWM 信号,控制输出端B输入方向信号,在一个PWM周期内,电动机只承受单极性的电压,电机的选择方向由控制信号决定,电机的速度由PWM决定,PWM占空比为0%-100%对应于电机转速0-MAX。因此,当接收到由检测模块的信号时,单片机处理该信号,根据该信号产生对应的PWM 波,从而可以根据调节电机的转速与方向。稳压电源电路图稳压电源PCB板五、程序设计 5.1主程序 #include#defineuchar unsigned char#defineuint unsigned intuchar pwm_left =0;/变量定义,与速度比较的变量uchar push_left =0;/ 左电机占空比N/10 调速uchar pwm_right =0;/与速度比较的变量uchar push_right=0;/ 右电机占空比N/10 调速bit Right_moto_stop=1;bit Left_moto_stop =1;uint time=0;uint a=0,flag=0,flag1=0; sbit Left_1_led=P10; /四路寻迹模块接口第一路sbit Left_2_led=P11; /四路寻迹模块接口第二路sbit Right_1_led=P12; /四路寻迹模块接口第二路sbit Right_2_led=P13; /四路寻迹模块接口第三路uint a,d,y,z,q,w,c;sbit out1 = P20;sbit out2 = P21;sbit out3 = P22;sbit out4 = P23;sbit ena = P16;sbit enb = P17;sbit inright = P24;sbit inleft = P25;delay(uint a);intturnleft(uint z) ena=1; enb=1; out1=1; out2=0; out3=1; out4=0; delay(z); return 0;int turnright(uint y) ena=1; enb=1; out1=0; out2=1; out3=0; out4=1; delay(y); return 0;int dengdai (uint d) ena=0; enb=0; out1=0; out2=0; out3=0; out4=0; delay(d); return 0;void go(uint q) ena=1; enb=1; out1=0; out2=1; out3=1; out4=0; delay(q);intback(uint w) ena=1; enb=1; out1=1; out2=0; out3=0; out4=1; delay(w); return 0; int backright(int c) ena=0; enb=1; out1=0; out2=0; out3=0; out4=1; delay(c); return 0; voidbizhang()if(inright=1&inleft=1)go(50); if(inright=0)turnright(50);if(inleft=0)turnleft(50);if(inright=0&inleft=0)backright(2000);void xunji() if(Left_1_led=0&Left_2_led=0&Right_1_led=0&Right_2_led=0) /0 go(50); else if(Left_1_led=0&Left_2_led=0&Right_1_led=0&Right_2_led=1)/0001 turnright(20);delay(5); else if(Left_1_led=0&Left_2_led=0&Right_1_led=1&Right_2_led=0)/0010 turnright(20); /(9,6) delay(1); else if(Left_1_led=0&Left_2_led=0&Right_1_led=1&Right_2_led=1) /0011 turnright(20); delay(3);else if(Left_1_led=0&Left_2_led=1&Right_1_led=0&Right_2_led=0) /0100turnleft(30);delay(3);else if(Left_1_led=0&Left_2_led=1&Right_1_led=0&Right_2_led=1) /0101turnright(30); delay(2);else if(Left_1_led=0&Left_2_led=1&Right_1_led=1&Right_2_led=1) /0111turnleft(30);delay(1);else if(Left_1_led=1&Left_2_led=0&Right_1_led=0&Right_2_led=0) /1000 turnleft(30); delay(3);else if(Left_1_led=1&Left_2_led=0&Right_1_led=0&Right_2_led=1) /1001go(30);delay(3); /本来延时6else if(Left_1_led=1&Left_2_led=0&Right_1_led=1&Right_2_led=0) /1010turnleft(30);delay(3);else if(Left_1_led=1&Left_2_led=0&Right_1_led=1&Right_2_led=1) /1011 turnright(20); delay(3); else if(Left_1_led=1&Left_2_led=1&Right_1_led=0&Right_2_led=0) /1100turnleft(20);delay(5); else if(Left_1_led=0&Left_2_led=0&Right_1_led=0&Right_2_led=1) / 1101turnleft(20); delay(5);else if(Left_1_led=1&Left_2_led=1&Right_1_led=1&Right_2_led=0) / 1110turnleft(20); delay(5); /else if(Left_1_led=1&Left_2_led=1&Right_1_led=1&Right_2_led=1) / 1111/ /tiaosu();/ go(20);/ delay(5);/ int delay(uint a)uint x,y;for(x=a;x0;x-)for(y=110;y0;y-);return 0;/*/* PWM调制电机转速 */*/* 左电机调速 */*调节push_val_left的值改变电机转速,占空比 */void pwm_out_left_moto(void) if(Left_moto_stop) if(pwm_left=100)pwm_left=0; else ena=0;/*/* 右电机调速 */ void pwm_out_right_moto(void) if(Right_moto_stop) if(pwm_right=100)pwm_right=0; else enb=0;/*/* */* 定时器初值化 */*/void init0(void)TMOD=0X01;TH0= 0XF8; /1ms定时TH0= 0XF8; TL0= 0X30; TL0= 0X30;TR0= 1;ET0= 1;EA = 1;void init1(void)TMOD=0 x10; /设置定时器0工作模式1TH1=(65536-50000)/256; /定时器装初值TL1=(65536-50000)%256;IT0=1; IT1=1;EX0=1;/开外部中断0EX1=1;/开外部中断1ET1=1;/开定时器0中断TR1=1;/启动定时器0EA=1;/开总中断/*/*TIMER0中断服务子函数产生PWM信号*/ void timer0()interrupt 1 using 2 TH0=0XF8; /1Ms定时 TL0=0X30; time+; pwm_left+; pwm_right+; pwm_out_left_moto(); pwm_out_right_moto(); void run(int m,int n) push_left =m; /PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 push_right =n; /PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度 out1=0; /左电机前进 out2=1; out3=1; out4=0; /右电机前进 void tiaosu() while(flag=1)run(30,30); delay(30); xunji(); if(Left_1_led=1&Left_2_led=1&Right_1_led=1&Right_2_led=1) a=1;flag=0; while(a=1)run(99,99); delay(30); xunji(); if(Left_1_led=1&Left_2_led=1&Right_1_led=1&Right_2_led=1) a=2; void main() init0();init1();P1=0 xff;P2=0 xff; while(1) if(Left_1_led=1&Left_2_led=1&Right_1_led=1&Right_2_led=1) flag=1; /1111 else flag=0; delay(3); if(flag=0) xunji(); else tiaosu();六、调试: 6.1硬件调试 6.1.1 元件的固定 小车主要有5大模块的电路板组成的,板和板之间是靠导线连接。小车在循迹运动的时候时常颠簸,导致电路板移位致使电路板上面的元件受到干扰,使小车不稳定运动,特别是L298N.所以我们除了在板上打孔锁上螺丝,还在板和板之间用热熔胶再固定,减少震动。 6.1.2 TCRT5000探头 由TCRT5000组成的轨迹识别电路是本次设计成败的关键,在初次调试时小车的摇头动作(即转向)时常出现不灵的情况。后来用电压表测量了电压比较器量输入端的电压发现基准电压到了3.5V,而红外探头在检测到黑线时才3.6V。两者电压相差无几,所以遇到黑线颜色较浅或反光的区域单片机会发生误判的现象。于是我们测量了红外探头在黑白两种极限情况下的电压输出情况。在测量了红外探头在黑色和白色两种极限情况下的电压后,调节电阻我把基准电压调到5V,这个电压值距黑色或白色情况下输出的电压值都很大,单片机会减少误判的现象。改良过后测试正常,小车能灵活的摇头,更功能实现。6.1.3 L298N马达驱动模块 第一次给L298N马达驱动模块通电实现简单的马达单向驱动,发现马达时跑时不跑。经过检测发现是一根信号线接触不良,重新接好后运行正常。此模块是用的市面上可以买到的模块所以性能比较稳定,调试很成功。6.2软件调试 6.2.1调试平台介绍 此次编程采用了keil V4。KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision4还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision4提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。其界面如下图 所示。6.2.2程序调试 在调试好硬件之后我第一次把软件下载到系统里面进行实际测试,发现小车在弯道比较急的地方没办法绕过去,会发生脱轨现象。后来仔细分析了自己的算法,原本我是设定小车在遇到弯道后全力转向绕过弯道,但是有些急得弯道小车无法绕过。此时我就想如何去解决在转向角度有限的情况下解决转急弯的问题。联想到日常汽车在狭窄的小路上转弯的情景我想到了倒退调整车体位置的方法。即在发现小车以现有的转向角度无法完成转弯时使小车反相倒退,这样即可很很快的调整小车的位置。改进算法后我在进行了一次测试,这次小车成功的绕过了90度的弯道。根据测试结果,可以看出小车循迹避障功能基本实现。但是测试还是存在失败的现象。分析其原因有两点。一,小车熟读过快在转弯时未及时刹车。二,画在纸上的跑道会存在褶皱的地方,而这些地方容易产生误判的现象。得知这些原因以后我降低现车速度,再次进行了测试。结果表明,小车能很好的完成循迹,即使循迹轨道发生改变也不影响。但是小车不能根据赛道的情况自主的改变速度。这也是本次设计的一个缺陷。在实际调试过程中小车发生过程序跑飞的情况,经调整改进程序后,小车运行状态稳定。能很好的完成沿黑色轨道前进,改变轨道的形状及转弯角度,小车仍可完成循迹。七、心得体会在智能小车系统的设计、调试及论文的写作过程中,感谢很多同学给予了无数的指导和大力的支持。在这个过程中我们不仅学会了知识,还学会了治学的态度,那就是严谨,把知识变为己有,弃其糟粕留其精华,用自己的方式去解决问题,而不是人云亦云。智能小车是传感技术和自动化控制技术飞速发展的产物,使得机械和电子信息不再明显分家,自动控制在工业领域中得地位越来越重要,智能这个词是我们科技发展的重要产物。这次实践中涉及的主要部分有传感器检测车部分、驱动部分、单片机为核心的控制芯片部分稳压及电路分析部分。各个部分的涉及,相互之间的连接协调等得成功,都是要建立在系统的阅读大量资料,并且认真的分析课题的需求,还系统的学习的单片机的工作原理及其使用方法。并且学习了相关软件,如仿真、程序烧写等得应用。通过本次课题设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。我们对一个项目的整体设计有了初步认识并能独立设计出其接口电路,再有对电路板的制作有了一定的了解,并学会了使用Protel99设计电路。课程设计使我们意识到了实验的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个很模糊的概念,通过这次的课题设计使我对程序完全有了一个新的认识,并能使用C熟练的进行编程了。通过本次课题设计,极大的锻炼了我们的思考和分析问题的能力,并对单片机有了一个更深的认识。小车的设计制作工作量饱满,体现了团队合作精神。在这次设计中也有很多的不足之处,我们缺少实际经验,更多的是依靠网络资源来解决问题,特别是各模块的程序编写,在软件设计方面花费了很多的时间。特别是在最后调试阶段,程序的控制问题给我们带来了很大的困难,小车设计的硬件部分完成相对顺利些,在软件领域显得不足,今后会更多的学习软件。设计过程中单片机知识颇有设计,我们还应加强理论知识的学习。本次设计涉及到了一系列光机电一体化的技术。其中机械结构是小车能否稳定运行的基础,硬件电路决定了小车实现的功能,软件部分是控制的灵魂,而同伴们锲而不舍的精神则是整个设计的支柱!总之,在课题设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。附件元件清单:1. 电机驱动芯片L298N 2. 稳压芯片L7805一个,L7806一个 3. 单片机STC89C52 4. 晶振12M5. 轻触开关和点触开关各一个6.电解电容220uF/25v、100uf/16v若干, 电容104若干,103电容若干7. 10K滑动变阻器、470欧电阻若干8. 电阻330欧若干,1K的若干个,9.上拉电阻472欧一个10. 红外线传感器TCRT5000 4个11. 散热片一个12.杜邦线若干(杜邦头,焊片,包括线)13. 万用表14. 插针和插排若干15. 发光二极管若干 16. 二极管IN4007八个17.车底盘模具 18. LM339芯片19.TR18650 3000mAh 3.7v电源20. 各种芯片底座若干21.驱动直流电机4个参考文献1郭惠,吴迅.单片机C语言程序设计完全自学手册M.电子工业出版社,2008.10:1-200. 2王东锋,王会良,董冠强. 单片机C语言应用100例M. 电子工业出版社,2009.3:145-300. 3韩毅,杨天. 基于HCS12单片机的智能寻迹模型车的设计与实现J.学术期刊,2008,29(18):1535-1955. 4 王晓明. 电动机的单片机控制J. 学术期刊,2002,13(15):1322-1755. 5宏晶科技,STC89C51RC/RD+系列单片机器件手册,2011年9月8号更新版本6求是科技,单片机典型模块设计实例导航(第2版),人民邮电出版社,2008年7月出版7李全利,单片机原理及应用技术,高等教育出版社,2009年1月出版8丁明亮,51单片机应用设计与仿真-基于keilC与Proteus,北京航空航天大学出版社,2009年2月出版9张鑫,单片机原理及应用(第2版),电子工业出版社,2010年出版6.张毅刚,单片机原理与应用设计,电子工业出版社,2008年出版31
展开阅读全文