资源描述
项目实训报告 目 录1.1 项目概述 11.2 设计要求 11.3 系统设计 11.3.1 设计方案 21.3.2 知识点 21.4 硬件模块介绍 21.4.1 STC89C52RC单片机 21.4.2 电机驱动L293D 31.4.3 寻迹模块 41.4.4 避障模块 51.4.5 电源模块 51.5 机械系统设计 51.6 硬件设计 51.6.1 小车工作原理 51.6.2 电路框图设计 51.6.3 知识点 61.6.4 元件清单 61.6.5 信号检测模块设计71.7 软件设计 91.7.1寻迹避障程序 91.7.2 红外遥控程序 151.8 系统调试 17心得体会 17参考文献 181.1 项目概述自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVGauto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。现智能小车发展很快,从智能玩具到其它各行业都有实质成果。其基本可实现循迹、避障、检测贴片、寻光入库、避崖等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。比较出名的飞思卡尔智能小车更是走在前列。我们小组此次的设计主要实现循迹、避障、无线遥控这三个功能。该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、执行部分、CPU。机器人要实现自动避障、循迹、无线遥控等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可,所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。单片机驱动直流电机一般有两种方案:第一,勿需占用单片机资源,直接选择有PWM功能的单片机,这样可以实现精确调速;第二,可以由软件模拟PWM输出调制,需要占用单片机资源,难以精确调速,但单片机型号的选择余地较大。考虑到实际情况,本文选择第二种方案。CPU使用STC89C52单片机,配合软件编程实现。关键词:智能小车 STC89C52RC单片机 L293D驱动 寻迹 避障 遥控1.2 设计要求:整个系统的设计以单片机为核心,利用了多组红外线对管,将软件和硬件相结合。本系统能实现如下功能:(1)自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进。若有偏离,能够自动纠正,返回到预设轨道上来。(2)当小车探测到前进前方的障碍物时,可以自动报警调整,躲避障碍物,从无障碍区通过。小车通过障碍区后,能够自动循迹。(3)无线遥控小车左转、右转、前进、后退、停止。19 第 页 共 17 页1.3 系统设计根据要求,确定如下方案:在车体上加装光电检测器,实现对电动车的速度、位置、运行状况的实时检测,并将检测到的开关量信号传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。1.3.1 设计方案采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势 控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。针对本设计特点 多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。根据这些分析,我选定了51单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片STC89C52单片机(如图1-1),充分利用单片机的资源。1.4 硬件模块介绍1.4.1 STC89C52RC单片机STC89C52RC单片机结构图如 图1-4-1所示。图1-4-1 STC89C52RC单片机结构图STC89C52RC单片机的特点如下:(1)增强型6时钟/机器周期、12时钟/机器周期任意设置。(2)工作电压:5.5V3.4V(5V单片机)/2.0V3.8V(3V单片机)。(3)工作频率:040MHZ,相当于普通80C51单片机;实际使用范围080HZ。(4)8KB片内程序存储器,擦写次数10万次以上。(5)片上集成512B RAM数据存储。(6)通过I/O(32/36个),复位后为:P1、P2、P3、P4是弱上拉/准双向口(与普通MCS51 I/O口功能一样);P0口是开漏输出口,作为总线扩展时用,不用加上拉电阻;P0口作为I/O口用时,需加上拉电阻。(7)ISP在系统可编程,无需专用编程器/仿真器,可通过串口直接下载用户程序,8KB程序3S即可完成一片。(8)芯片内置EEPROM功能。(9)硬件看门狗(WDT)。(10)共3个16位定时器/计数器,兼容普通MSC-51单片机的定时器,其中定时器T0还可以当成2个8位定时器时用。(11)外部中断4路,下降沿中断或低电平触发中断,掉电模式可有外部中断唤醒。(12)全双工异步串行口(UART),兼容普通的80C51单片机的串口。(13)工作温度范围:075/-40+85摄氏度。1.4.2 电机驱动L293D采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的 H型桥式电路(如图1-4-2)。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。所以这里我们选用L293D。图1-4-2 H型桥式电路L293D(图1-4-3)采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成N型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微图1-4-3 L293D驱动芯片振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区;低速平稳性好等。L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D将2个H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。每1个电机需要3个控制信号EN12、IN1、IN2,其中EN12是使能信号,IN1、IN2为电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。1.4.3 循迹模块采用五只红外对管(如图1-4-4)模块,分别置于小车车身前排,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好两只光电开关的位置就可以很好的实现循迹的功能。图1-4-4 红外对管(TCRT5000)实物图1.4.4 避障模块采用两块只红外对管模块置于小车前方。通过测试此种方案就能很好的实现小车避开障碍物,且充分的利用资源而不浪费。1.4.5 电源模块方案:智能小车系统需要5V6V电源才能正常工作,所以采用1支1.5V与1支4V电池混合并联使用。1.5 机械系统设计本题目要求小车的机械系统稳定、灵活、简单,而三轮运动系统具备以上特点。但为了车体运动过程中更加稳定,前后分别用一个万向轮,左、右轮子由电机驱动转向。驱动部分:智能小车的直流电机功率较小,而小车上装有电池、电机、电子器件等,使得电机负担较重。为使小车能够顺利启动,且运动平稳,在直流电机和轮车轴之间加装了三级减速齿轮。电池的安装:将电池盒尽量安置在车体的电机前或后位置,降低车体重心,提高稳定性,同时可增加驱动轮的抓地力,减小轮子空转所引起的误差。1.6 硬件设计1.6.1 小车工作原理智能小车采用左右轮两边各用一个电机驱动,调制左右两个轮子的转速起停从而达到控制转向的目的,前、后轮是万象轮,起支撑的作用。将五路循迹光电对管模块分别装在车头下的前排(贴地面稍近效果更佳)。例如:当车身下的1号传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正,当车身下右边5号传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正。小车各种运动状态如表1-6-1。表1-6-1 小车工作状态表状态号1号2号3号4号5号左轮电机右轮电机小车状态101111快速正转不转右转弯210111慢速正转不转右微转弯311011快速正转快速正转快速前进411101不转慢速正转左转弯511110不转快速正转左微转弯避障的原理和循线一样,在车身右边装一个光电对管模块,当其检测到障碍物时,主控芯片给出信号控制小车倒退,转向,从而避开障碍物。1.6.2电路框图设计由以上设计思路可设计出智能小车电路框图(图1-6-1)蜂鸣LED数显驱动电机寻迹、避障模块时钟电路复位电路红外遥控接收电路STC89C52图1-6-1 电路设计框图1.6.3知识点本实训项目需要通过学习和查阅资料,了解和掌握以下知识。(1)电路原理图设计。(2)单片机复位电路工作原理设计。(3)单片机晶振带工作原理设计(4)驱动器L293D直流电机驱动的特性及使用。(5)4位共阴极数显的使用方法(6)STC89C52RC单片机引脚。(7)Keil uVision3编程工具的使用方法。(8)单片机C语言程序设计。(9)PCB板的设计。(10)SPI程序下载工具的使用。(11)红外对管的原理。(12)无线遥控电路设计。1.6.4 元件清单基于STC89C52RC单片机智能小车的设计元件清单如表1-6-2所示。表1-6-2 智能小车元件清单表元件名称型号数量用途单片机STC89C52RC1个控制核心晶振12.0598MHz1个晶振电路三极管S80504个数码管显示电路发光二极管LED-RED1个指示灯电容100F4个电源电路30PF2个晶振电路电解电容10F1个消振电路红外避障模块TCRT50002个臂章电路红外线接收头V348381个遥控接收电路红外寻迹模块TCRT50005个寻迹电路电阻10K、300、1K若干关机电路直流电机驱动L293D1个电机驱动铜柱5mm、10mm、20mm共20根固定模块直流减速电机小型 #10172个驱动小车排针KF332K-3P若干杜邦线插座杜邦线带针孔若干制作插线头数码管7SEG-MPX4-CC1个显示电路蜂鸣器HUDZ1个报警电路电源5V6V1个小车电源1.6.5信号检测模块设计小车循迹原理是小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”黑线。所以在该模块中利用了简单、应用也比较普遍的检测方法红外探测法。市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM339(比较器)作比较来采集高低电平,从而实现信号的检测。设计出寻迹模块电路图(图1-6-2)。图1-6-2 protel仿真寻迹电路小车避障模块则与寻迹模原理相同。如果遇到障碍物,反射光被装在小车上的避障模块接收管接收。再通过多个74LS00(与非门)来采集高低电平,从而实现信号的检测,通过单片机处理数据输入PWM波,从而控制电机正反转来控制小车前进方向避开障碍物。避障模块上有多圈精密可调电位器,可根据使用环境调节.调节范围从3cm-30cm。因为是反射原理,跟具体的反射目标相关,可根据情况调节。设计出电路原理图(图1-6-3)。图1-6-3 protel仿真避障电路主控模块主要是对采集信号进行分析,在L239D的EN 端输入PWM波,同时通过调整PWM波的占空比控制电机速度,起停。其电路图如图1-6-4。图1-6-4 protel仿真主控电路1.7软件设计1.7.1 寻迹避障程序流程图由于智能小车的设计主要用红外对管进行数据采集,来实现小车的寻迹、避障、无线遥控等功能。主要涉及开关量信号的处理问题,所以程序用C语言编写最为简单。设计出寻迹、避障程序流程图(图1-7-1)YESYESYESYESNOYESNONONONOYES!K1!K2快速右转右微转前进!K3!K4!K5快速左转左微转!KIN1!KIN2左转后右转右转后左转NONOYES寻迹程序主函数开始避障程序 图1-7-1 寻迹加避障程序流程图程序清单如下:#include #defineuchar unsigned char #define uint unsigned intsbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit K5=P14;sbit KIN1=P15;sbit KIN2=P16;sbit out1 = P20 ;sbit out2 = P21 ;sbit out3 = P22 ;sbit out4 = P23 ; void delay(uint t) /延时程序1 uchar j; while(t-)for(j=5;j0;j-); /左转void comeleft()uchar i; out1=0; out2=0; out3=1; out4=0; for(i=0;i10;i+)out1=!out1;delay(1);/左微转void sleft()uchar i; out1=0; out2=0; out3=1; out4=0; for(i=0;i5;i+)out1=!out1;delay(1);/右微转void sright() uchar i;out1=1; out2=0; out3=0; out4=0; for(i=0;i5;i+)out3=!out3; delay(1);/右转void comeright () uchar i;out1=1; out2=0; out3=0; out4=0; for(i=0;i10;i+)out3=!out3; delay(10);/前进加速;void comeon() out2=0;out4=0;out1=1;out3=1; /避障原路返回void shunback() if(!KIN1)|(!KIN2) out1=0; out2=1; out3=1; out4=0;delay(4000);comeon();delay(4000); out1=1; out2=0; out3=0; out4=0;delay(1000); comeon();delay(2000);while(K1&K2&K3&K4&K5) comeright (); ;else;/循迹void scanline()P1=0XFF;if(K5=0)comeleft();else if(!K1) comeright ();else if(!K4) sleft();comeon();else if(!K2) sright();comeon();else if(!K3) comeon();comeon();else P2=P2;void main(void) P1=0XFF;P2=0XFF; while(1) shunback(); scanline(); 1.7.2 红外遥控程序设计出红外线遥控接收程序流程图(图1-7-2)。中断开始关中断按键识别返回数据中断结束初始化开始调数据处理子程序调驱动小车子程序图1-7-2 遥控接收程序流程图红外线遥控小车程序清单#include #defineuchar unsigned char #define uint unsigned intsbit SET1=P24;sbit SET2 =P25;sbit SET3 =P26;sbit out1 = P20 ;sbit out2 = P21 ;sbit out3 = P22 ;sbit out4 = P23 ;unsigned long xdata rec_code;unsigned long xdata time_us;unsigned char xdata rec_cnt;unsigned char xdata kbuf;uchar sdata;bit rec_b;bit key_save;bit keyp;uchar code seg7code=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; void delay(uchar t) /延时程序1 uchar j; while(t-)for(j=50;j0;j-); void Init()TMOD = 0x09;/T/C1采用16位定时器/计数器 ET1 = 1;/定时器1开中断 TH0 = 0x00; TL0 = 0x00; ET0 = 0; TR0= 1;/定时计数器启动计数 EX0 = 1;/外部中断0关中断EX1 = 0;/外中断1关中断EA = 1;/CPU开中断void stop() out1=0; out2=0; out3=0; out4=0; delay(10);/左转void comeleft() out1=0; out2=1; out3=1; out4=0; delay(200);/右转void comeright () out1=1; out2=0; out3=0; out4=1; delay(200);/前进加速;void comeon() out2=0;out4=0;out1=1;out3=1;/后退void comeback() out1=0; out3=0; out2=1;out4=1; delay(200);/避开障碍物void shunout() if(sdata=157) comeon();rec_code=0;sdata=0;else if (sdata=87)comeback();rec_code=0;sdata=0;else if (sdata=253)stop();rec_code=0;sdata=0; else if (sdata=61)comeright();rec_code=0;sdata=0;else if (sdata=221)comeleft();rec_code=0;sdata=0;else;void inter_x0() interrupt 0 TR0 = 0; time_us = (unsigned long)(TH03800&time_us300&time_us700) rec_cnt +; rec_code = rec_code1300&time_us1750) rec_cnt +; rec_code = rec_code1800&time_us1) rec_cnt = 0; key_save = 1; if(rec_cnt=32) rec_b = 1; key_save = 0; rec_cnt = 0; void GetKeyValue() if(rec_b) unsigned char da; rec_b = 0; kbuf = (rec_code&0x0000ff00)8; da = rec_code&0x000000ff; if(kbuf=da) sdata=da; void main()P1=0XFF;P2=0XFF;P3=0XFF;P0=0XFF;Init(); while(1)GetKeyValue(); shunout();1.8 系统调试在在Keil软件中调试寻迹加避障程序并生成Hex文件。将在Keil下生成的HEX文件下载到STC8952单片机中。将下车加上电源(注意:如果加的电源电压大于6V将跳线插到大于6V的针脚上,5V则插在5V所对应的针脚上,否则单片机会烧坏),将小车至于预先设计好的黑色胶带地面上。按下电源按钮启动小车,小车按照黑色胶带路线行驶。当在黑色轨道上放置一障碍物,小车能够绕开障碍物自动修正方向继续寻迹。以上测试说明智能小车寻迹、避障功能调试成功。同上下载遥控程序,按下红外遥控器相应的键能够控制小车前进、后退、左转、右转、停止等。说明小车无线遥控功能测试成功。根据测试的情况来看,寻迹效果比较好。避障功能不是很完美,当遇到不反光的障碍物时红外线接收头接收不到反射光导致小车避障功能大打折扣。遥控小车转弯时,小车没有固定的转弯角度。当小车运行速度快时,遥控小车转弯会使小车原地打转。心得体会这次实训题目是基于STC89C52RC单片机智能小车的设计与开发。实训中自己焊接主板又一次提升了我们的焊接技术,这对作为即将毕业的计算机应用专业的学生走向工作岗位至关重要。熟悉了很多我们曾今从未认识的元器件,比如红外线对管、无线遥控以及一些简单的传感器。STC89C52RC单片机虽然我们从未用过,但在以前学习C51单片机的基础上遇到问题也能迎刃而解。实训中不但拓展了我们的思维,还能够把这次实训理论和经验与以后的工作和实际生活相结合应用。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足。系统调试中,许多小组都因为所用的电源电压过高导致单片机被烧坏,我们小组也未能幸免。这次给了我们极大的教训,在以后的项目实训和工作中一定要按照规定进行设计。在这次实训中,我们学到了该怎样去拟定一个项目计划并去实现它。本次项目的设计与开发能够顺利完成,还要感谢各位老师的指导和身边许多同学的帮助。在设计过程中,许多老师给予了悉心的指导,最重要的是给了我们解决问题的思路和方法,在此,再次对你们表示最真挚的感谢!参考文献1郭惠,吴迅.单片机C语言程序设计完全自学手册M.电子工业出版社,2008.10:1-200.2王东锋,王会良,董冠强. 单片机C语言应用100例M. 电子工业出版社,2009.3:145-300.3韩毅,杨天. 基于HCS12单片机的智能寻迹模型车的设计与实现J.学术期刊,2008,2 9(18):1535-1955.4 王晓明. 电动机的单片机控制J. 学术期刊,2002,13(15):1322-1755.
展开阅读全文