基于单片机的红外测距系统设计(共33页).doc
精选优质文档-倾情为你奉上保密类别      编号  武汉大学珞珈学院毕 业 论 文基于单片机的红外测距系统设计系 别 电子信息科学系 专 业 通信工程 年 级 10级02班 学 号 姓 名 钱源 指导教师 崔黎 武汉大学珞珈学院2014 年5 月22 日摘要现代科学技术的发展,进入了很多新领域,而在测距方面先后出现了激光测距、微波雷达测距、超声波测距及红外光测距。为了实现物体近距离、高精度的无线测量而采用了红外发射接收模块作为距离传感器,单片机作为处理器,编写A/D转换和显示程序,完成了一套便推式的红外距离测量系统,系统可以高精度的实时显示所测的距离,本系统结构简单可靠、体积小、测量精度高、方便使用。红外测距的探测距离较短,一般在几十厘米之内,本文介绍的一种基于AT89C52单片机设计的红外测距仪,可以测量距离。首先,在绪论中,介绍了红外线及红外传感器的分类和应用、AT89C52单片机的应用与说明以及MCP3001芯片的简介。其次,阐述了与红外测距的工作原理基本结构,对红外测距传感器也做了详细说明。再次,介绍了红外测距的硬件设计和软件设计。 在硬件设计中,介绍了红外测距实现的构想,给出红外测距硬件电路原理图,并说明了红外测距传感器、键盘、A/D转换电路、LCD显示电路工作原理及AT89C52单片机的管脚分配。在软件设计中,说明了整个程序流程及各程序设计的函数。最后,是对整个设计的结论,说明了红外测距实现的可行性。关键词: 红外测距 A/D转换 实时显示 红外线 单片机 专心-专注-专业目 录第第1章 绪论红外线(Infrared)是介乎与之间的,其波长在760(nm)至1毫米(mm)之间,是波长比红光长的非可见光。所有高于(-273.15)的物质都可以产生红外线。现代学称之为热。医用红外线可分为两类:近红外线与远红外线。含热能,太阳的热量主要通过红外线传到地球。它的波长介于可见光和微波之间,范围大致在0.75M1000M的频谱范围之内。相对应的频率在43HZ之间,红外线可分为三部分,即近红外线,近红外线波长范围为0.77M3M,中红外线波长范围为3M30M,远红外线波长范围为30M1000M。红外光具有反射、折射、散射、干涉、吸收等特性。它能全部吸收投射到它表面的红外辐射的物体称为黑体;能全部反射的物体称为镜体;能部分反射、部分吸收的物体称为灰体。严格地来讲,在自然界中,不存在黑体镜体和透明体。1.1 课题研究的背景和意义红外线是不可见的光,是电磁波的一种形式,可以用来进行距离的测量,其应用历史可以追溯到上世纪60年代。现代科学技术的发展进入了许多新领域,而在测距方面先后出现了激光测距、微波雷达测距、超声波测距及红外线测距。其中激光测距是靠激光束照射在物体上反射回来的激光束探测物体的距离。由于受恶劣的天气、污染等因素影响,使反射的激光束在一定功率上探测距离比可能探测的最大距离减少一半左右,损失很大,影响探测的精确度;微波雷达测距技术为军事和某些工业开发采用的装备和振荡器等电路部分价格昂贵,现在还没有开拓民用市场;超声波测距在国内外已有很多人做过研究,由于采用特殊专用组件使其价格高,难以推广;红外线作为一种特殊光波,具有光波的基本物理传输特性反射、折射、散射等,且由于其技术难度相对不太大,构成的测距系统的成本低廉,性能优良,便于民用推广。另外红外测距的应用越来越普遍。在很多领域都可以用到红外测距仪。红外测距一般具有精确度和分辨率高、抗干扰能力强、体积小、重量轻等优点,因而应用领域广、行业需求众多,市场需求空间大。红外测距的研究就非常有意义。红外线测距仪指的就是激光红外线测距仪,红外测距仪-用调制的红外光进行精密测距的仪器,测程一般为1-5公里。在100米以内则超声波测距更有优势,但是超声波测距的距离一般无法测量1米以内,而红外测距则可以测出这一段距离,而且有着不错的精度,在本课题中研究的就是这一类情况的红外线测距。1.2 本课题研究的热点及发展现状常见的红外传感器可分为热传感器和光子传感器。根据国内近年来红外光电测距仪的发展情况,由于国家对外开放政策的实施和测量工作的需要,近年来国内一些光学仪器厂和电子仪器厂分别从瑞典、瑞士和日本等国引进几种红外测距仪组装线,组装测距仪,我国有关工厂和院校近年来也研制出一些产品。由于微处理机在国产测距仪上的应用,大大缩小仪器的体积,同时也减少出故障的几率,使得国产测距仪的性能和质量都较过去有很大的提高。在国家“六·五”计划攻关中,常州第二电子仪器厂研制的DCHZ型多功能红外测距仪就是一个很好的例证。该产品经国家测绘局测绘科学研究所光电测距仪检测巾心进行全面质量鉴定后认为:该仪器的外型美观、体积小、重量轻、操作方便、精度高和性能稳定,并通过国家有关部门组织的鉴定。目前已经开始小批量试生产。 在进行侧距仪研制同时,国家有关部门也组织大量力量对红外光电测距仪的检测方法进行研究。一、热传感器热传感器是利用入射红外辐射引起的传感器的温度变化,进而使有关物理参数发生相应的变化,通过测量有关物理参数的变化来确定红外传感器所吸收的红外辐射。热探测器的主要优点是相应波段宽,可以在室温条件下工作,使用简单。但是,热传感器相应时间较长,灵敏度较低,一般用于低频调制的场合。热传感器主要类型有:热敏传感器型,热电偶型,高莱气动型和热释放电型四种类型。二、光子传感器光子传感器是利用某些半导体材料在入射光照射下,产生光子效应,使材料电学性质发生变化。通过测量电学性质的变化,可以知道红外辐射的强弱。利用光子效应所制成的红外传感器,统称光子传感器。光子传感器的主要特点是灵敏度高,响应速度快,具有较高的响应频率。但由于其一般要在低温下工作,导致探测波段较窄。按照光子传感器的工作原理,一般分为内光电和外光电传感器两种,后者又可分为光电导传感器、光生伏特传感器和光磁电传感器等三种。1.3 本课题研究的目的我们所进行的课题便是做一个简易的,精确的,近距离的距离检测仪,这也是对我们所学知识的一种考验方法,从中我们可以更系统的认识单片机,了解AD转换和红外收发模块。1.4 本课题研究的内容红外传感器的测距基本原理为:红外发射电路的红外发光管发出红外光,红外接收电路的光敏接收管接收发射光,根据发射光的强弱判断出所测的距离。由于接收管接收的光强度是随着发光管与测量物的距离变化而变化的,因而,与测量物的距离近则接收光强,距离远则接收光弱。具体方法如图1所示,红外模块发出并接收到红外线信号;AD转换模块将接收到的模拟信号转换成数字信号再交给单片机, 启动单片机中断程序,此时单片机得到数字信号也就是电压值,再由软件进行判别、计算,得出距离数并送给LED/LCD显示。 单片机红外模块AD模块电压距离公式 显示模块图1.1 反射能量法原理第2章 红外测距的工作原理与基本结构2.1.方案及设计思想:方案一、时间差测距法:此方案是将红外发射管发送信号与接收管接收信号时间差写入单片机中,在单片机中用光传播距离公式算法将距离计算出来。原理图如图2.1所示。 AT89S52红外模块时间差距离S=c*t显示距离 图2.1 时间差测距法原理方案二、反射能量法:此方案是用红外发射管发射信号,然后用红外接收管接收信号,将接收的信号强度经过AD转换,录入单片机中显示出来,并将对应的距离记录下来。完成一段范围内的测量,将所记录下的数据写入单片机中,然后便可进行测量距离了。原理图如图2.2所示。 显示距离AT89S52 红外模块 实验资料 图2.2 反射能量法原理光的衰减是呈线性关系的,公式是I=Ie(-d),其中I是光强度,是光在介质中线性衰减系数,d是光走过的路程,e是自然对数底数。是光子能量,I就是光束的能量。要求得耗损的能量E,则可通过计算:E=I=(I-I)=I1-e(-d)=E1-e(-d)其中E是激光能量。不过,10cm的衰减是很弱的,可以忽略。方案比较:通过以上两种方案分析,我们可以看到方案一的误差很大,由于红外装置测的距离比较近,而光速很快,因此回馈到单片机中的时间很短,单片机很难测出准确的时间并准确处理,而在一般情况下的光速不太准确,因此误差较大,而且根据距离=光速*时间,要想测10米时间至少要精确到0.s,显然用单片机是很难做到的。方案二是先将实验数据录入单片机中,因此在测量时存在的误差就会相对较小,综合考虑,选择方案二可行。2.2 红外测距系统的基本结构该系统主要由红外测距传感器、A/D转换电路,AT89C52芯片、键盘接口电路及LCD显示电路等组成。其组成框图如图2.3所示:图2.3 红外测距系统的基本结构第3章 红外测距的硬件设计3.1红外收发模块红外发送管是用于发送信号,经过障碍物将信号反射,红外接收管接收到反射回来的信号,然后根据信号强弱将对应的电压值显示在显示模块上,并将此时的距离记录下来。然后整改程序,用红外收发模块进行测距,就可在显示模块上显示出红外接收管接收的信号强度对应的距离值。GP2Y0A02YK0F 红外测距传感器 20-150cm 图3.1 红外传感器结构图 图3.2 protues中红外传感器如图3.2所示GP2Y0A02YK0F有3个端口,其中VCC接信号输入,VO接MCP3001的IN+,GND接地线。GP2Y0A02YK0F测量范围在20cm-150cm之间,测量误差小于0.5cm。是一个距离测量传感器单元,PSD的集成组合构成 (位置敏感探测器),IRED(红外发光二极管)和信号原理电路。由于采用三角测量方法,各种物体的反射率,对环境温度和工作时间距离检测不容易产生影响。推荐工作条件:参数符号条件等级单位电源电压Vcc4.5-5.5V表3.1 红外传感器参数绝对最大额定值:表3.2 红外传感器参数参数符号等级单位电源电压Vcc-0.3+7V输出端电压Vo-0.3+0.3V工作温度OPR-10到+60储存温度STG-40到+70 3.2 A/D转换模块A/D 转换器按照转换的原理可分为直接A/D 转换器和间接A/D 转换器两种类型。直接A/D 转换器,就是把直接转换成数字信号,比如逐次逼近型。间接A/D 转换器是先把模拟量转换成中间量,然后再转换成数字量,如电压/时间转换型,电压/频率转换型,电压/脉宽转换型等。 其中积分型A/D 转换器的电路简单,抗干扰的能力强,而且能做到高分辨率,但是转换速度较慢。 有些转换器还将多路开关、基准电压源、时钟电路、译码器和转换电路集成在一个芯片内,已经远超出了单纯A/D 转换功能,使用十分方便。A/D 转换器转换原理: 一个完整的A/D转换过程中,必须包括取样、保持、量化与编码等路。 取样与保持由于取样的时间极短,取样输出为一串断断续续的窄脉冲。要把每个取样的窄脉冲信号数字化,需要一定的时间。因此在两次取样之间,应将取样的模拟信号暂时储存直到下个取样脉冲到来,我们把这个动作称之为保持。在模拟电路设计中,需要增加一个取样-保持电路。为了保证正确转换,模拟电路要保留着还未转换的数据。量化与编码量化与编码是A/D转换器的核心组成部分,量化方法:先取最小量化单位=U/2n,当输入模拟电压U在0之间时,则归入0,当U在2之间时,则归入1。如果量化单位=2U/(2 n+11),当输入电压U在0/2之间时,归入0,当U在/23/2之间时,就要归入1。分辨率分辨率(Resolution) 指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2n的比值。分辨率又称精度,通常以数字信号的位数来表示。位数越高,分辨率就越高。若小于最小变化量的输入模拟电压的任何变化,将不会引起输出数字值的变化。不需要分辨率高的场合,所得到到的就大多是噪声。分辨率太低,就会有无法取样到所需的信号。 转换速率 转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。转换时间转换时间是指A/D转换器完成一次A/D转换所需的时间。从启动信号开始到转换结束并得到稳定的数字输出值为止的时间间隔。转换时间越短,转换速度就越快。精准度对于A/D转换器来说,精准度指的是在输出端产生所设定的数字数值,相对精准度指的是满刻度值校准以后,任意数字输出所对应的实际模拟输入值与理论值之差。对于线性A/D转换器,其相对精准度就是它的线性程度。由于电路制作上的影响,会产生像是非线性误差,或是量化误差等减低相对精准度的因素。MCP3001特性:10位分辨率1 LSB DNL(最大值)1 LSB INL(最大值)片上采样和保持电路SPI 串行接口单电源供电的电压范围:2.7V至5.5V5V时的采样速率为200 ksps2.7V时的采样速率为75 ksps低功耗CMOS技术一5 nA典型待机电流,2 A(最大值)一5V时,工作电流的最大值为500 A8引脚PDIP, SOIL, MSOP和TSSOP封装说明:Microchip的MCP3001,是一款具有片上采样和保持电路的10位逐次逼近型A/D转换器(ADC)。该器件提供一个伪差分输入通道:指定差分非线性( DNL) 和积分非线性(INL)的最大值为1 LSB。它使用符合SPI协议的简单串行接口与器件通信。当时钟速率为2.8 MHz时,该器件的采样速率最大数值可为200 ksps。MCP3001器件的工作电压范围很宽,为2.7V一5.5V 。低电流设计允许器件在典型待机电流为5 nA和典型工作电流为400A条件下工作。该器件以8引脚PDIP, MSOP, TSSOP和150 mil SOIL封装形式提供。图3.3 MCP3001引脚图 图3.4 protues中MCP3001接线图表3.3 MCP3001引脚 名称功能2.7至5.5V电源地线IN+正模拟输入IN-负模拟输入CLK串行时钟串行数据输入CS/SHDN片选输入/关闭基准电压输入如图3.4所示,mcp3001的VREF接vcc,IN+接GP2Y0A02YK0F红外测距传感器的Vo,CLK接单片机上的P2.2,DO接单片机上的P2.1,CS接单片机上的P2.0。MCP3001具有片上采样和保持电路的10位逐次逼近型A/D转换器(ADC),逐次逼近型A/D转换器的工作原理是将待换的模拟输入信号与一个推测信号进行比较,根据二者大小决定增大还是减小输入信号,以便向模拟输入信号逼近。推测信号由D/A转换器输入的数字信号就对应的时模拟输入量的数字量。这种A/D转换器一般速度很快,但精度不高。A/D转换器的主要性能指标中以分辨率和转换速率最为重要,分辨率越高,就能把满量程里的电平分出更多份数,得到的转换结果就越精确,得到的数字信号再用DAC转换回去就越接近原输入的模拟值(10位ADC能分辨2的10次方)。MCP3001分辨率:10位ADC能分辨出满刻度的1/1024.MCP3001转换速率:速度很快。由上可知,MCP3001的性能相比其他ADC要好很多。3.3 LCD显示模块 图3.5 protues中LCD显示模块LCD与单片机的接口电路如图3.5所示,单片机P0分别接D1-D7,同时接上排阻,而在排阻另一端接上vcc。单片机上的P2.5接E,P2.6接RW,P2.7接RS,单片机通过P0口向LCD输送数据,显示测得的距离。值得注意的是,P0口要接上拉电阻来保证对LCD的成功驱动。LCD1602已很普遍了,可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或l6条引脚线的LCD,多出来的2条线是背光电源线Vcc((15脚)和地线GND(16脚 ),其控制原理与14脚的LCD完全一样,定义如下表所示:表3.4 LED引脚功能引脚号引脚名电平输入/输出作用1vss电源地2Vcc电源(+5v)3Vee对比电压调整4RS0/1输入0=输入指令1=输入指令5R/W0/1输入0=向LED写入指令或数据1=从LED读取信息6E1, 10输入使能信号,1时读取信息,10(下降沿)执行指令3.4 AT89C52单片机概述单片机是在集成电路芯片上集成各种组件的微型计算机,这些组件包括中央处理器CPU、数据存储器RAM、程序内存ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口等电路。由于单片机具有体积小、价格低、可靠性高、开发应用方便等特点,因此在现代电子技术和工业领域中应用较为广泛,在智能仪表中单片机是应用最多、最活跃的领域之一。在控制领域中,现如今人们更注意计算机的底成本、小体积、运行的可靠性和控制的灵活性。在各类仪器、仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,提高计算机的运算速度,简化仪器仪表的硬件结构,提高其性能价格比。AT89C52单片机的时钟信号通常是由两种方式产生:一是内部时钟方式,二是外部时钟方式。在AT89C52单片机内部有一振荡电路,只要在单片机的XTAL1和XTAL2引脚外接晶振,就构成了自激振荡器并在单片机内部产生时钟脉冲信号。电容的作用是稳定频率和快速起振,电容值在5-30pF之间,典型值为30pF。晶振CYS的振荡频率范围在1.2-12MHz间选择,典型值为12MHz和11.0592MHz。当在AT89C21单片机的RST引脚引入高电平并保持2个机器周期的时候,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就会处于循环复位状态)。复位电路通常采用上电自动复位和按钮复位两种方式。最简单的上电自动复位电路中的上电自动复位是通过外部复位电路的电容充电来实现的。只要VCC的上升时间不超过1ms,就可实现自动上电复位。时钟频率用6MHZ时C取22uF,R取1K。除了上电复位外,有时候还需要按键手动复位,本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经过电阻与电源VCC接通来实现的。最小系统如图3.6所示。图3.6 AT89C52单片机最小系统AT89C52单片机的标准功能AT89C52是美国Atmel公司生产的低电压、高性能CMOS的 8位单片机,片内含8KB的可反复擦写的程序内存和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性的存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位元中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域中。AT89C52的各引脚功能:(1) VCC:电源 (2) GND:地 (3) P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 (4) P1口:P1 口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL 逻辑电平。表4-1 P1口第二功能引脚号第二功能P1.0T2(定时器/计数器T2的外部计数输入) ,时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用) (5) P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4个TTL 逻辑电平。 (6) P3 口:P3 口是一个具有内部上拉电阻8位双向 I/O口,对 P3 端口写“1”时,可以作为输入口使用。P3口可作为AT89C51第二功能使用,如表3.5所示。 表3.5 P3口第二功能引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0(外部中断 0)P3.3INT0(外部中断 0)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通) P3.7RD(外部数据存储器写选通)(7) RST: 复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。(8) ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。 (9) PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。 (10) EA/VPP:访问外部程序存储器控制信号(11) XTAL1:振荡器反相放大器和内部时钟发生电路输入端。 (12) XTAL2:振荡器反相放大器输出端。3.5整个红外测距系统显示整个红外测距系统由AT89C52芯片、红外距离传感器、复位电路、时钟电路、A/D转换电路与LCD显示器构成。硬件结构电路图如图3.7所示:图3.7 protues中整体系统单片机AT89C52左端分别接了时钟电路和复位电路,这是单片机最小的系统。XTAL1和XTAL2串连一个晶振,并且分别接上一个20p的电容,两个电容另一端都接地,构成时钟电路。RST同时接上100p电容,4脚按键,1k电阻,4脚按键另一端接上一个1k电阻再与100p电容并联接VCC,1k电阻另一端则接地,构成复位电路。单片机AT89C52右端P0端同时接LED的D1-D7端口和排阻,P2.0接CLK,P2.1接DO,P2.2接CS,P2.5接E,P2.6接RW,P2.7接RS。MCP3001的VREF接vcc,IN+接红外距离传感器的Vo。第4章 红外测距的软件设计4.1 程序流程图在整个系统运行过程中。当红外系统被启动后,首先,对AT89C52单片机进行初始化。然后,当AT89C52单片机接收到红外接收电路传输的电压信号后,经A/D转换程序,将片外的模拟信号转换为单片机可识别的数字信号,并经电压距离转换子程序,将变化的电压转换为距离。最后,在动态扫描LCD显示器上显示出来。主程序流程图如图4.1所示。 图4.1 程序流程图红外测距系统软件设计主要由主程序,延时函数,显示程序函数组成。程序开始, 红外测距主程序第一步将显示屏1602初始化,并显示测量开始,第二步导入延时程序,并显示程序,显示电压和距离。其次子函数调用, 读MCP3001函数并转换函数得出电压值,再调用距离计算函数,得出距离值。此时主函数中显示函数会将电压和距离显示出来,程序就此结束。此程序中多次使用调用子函数,读MCP3001函数,距离计算函数,算术平均滤波程序构成AD值的采集和计算;LCD忙标志判断函数,写数据子函数,写命令子函数,显示数据调整函数,字符串显示函数,显示子函数构成显示函数;1602初始化函数,LCD清屏函数则构成清屏函数。不过完成程序并不是一次就能成功的,首先要先将AD采集程序写入单片机中,进行实验,将固定距离所采集到的信号强度记录下来,然后将对应的数据加入程序中,最后通过红外模块进行测量,便可显示出对应的距离值,主程序是整个程序的基础,也是核心。此时距离计算函数才算完成,距离计算函数实际就是测量时得出距离电压关系,我们反过来先拿出距离再得出电压,举例来说,用卷尺量1米距离,再用红外测距系统来量1米距离,这时对应1米距离的电压记下来。根据这个方法把其它各个距离的电压记下来,把这个对应关系变成计算距离的函数,再测距时就可以根据这个函数来得出距离了。第5章 系统软硬件调试5.1 硬件调试红外测距仪的制作为了使信号稳定,最好给输入电源加上一个滤波电路,否则显示屏上有闪烁,不稳定,会增加误差,但总体来说不影响结果。在本次设计中,主控模块是非常重要的部分,它不仅是本次设计的核心,在本次硬件调试中也遇到了问题,接上电源的时候,显示屏不亮,没有任何显示,于是我做了如下的工作:(1)检查电源是否通电,发现指示灯亮着;(2)编程使P1为低电平,检查到P1输出为低;(3)检查P0口未接上拉电阻,接上显示屏发亮了。在本次硬件调试中还遇到了显示屏出显示,但显示有很大问题,调节距离后,显示还是不变,检查后发现mcp3001与vcc没接好,或CS,DO,CLK与单片机接触不良。5.2 软件调试硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据所设计的电路参数和程序,测距仪能测的范围为20cm150cm,测距仪最大误差不超过0.5cm。系统调试完后对各个距离进行多次测量,与预定值进行比较,对测量误差进行多次实验分析,不断调节器件和修改程序使其达到实际使用的测量要求。为了更方便了解电压与距离之间的关系,我将程序做了些许修改,在显示距离的基础上再把电压也显示出来了,这样结果一目了然。因为电压与距离之间的关系不是线性关系,所用用函数来表示会有误差,于是我将此函数修改,重新测量,每个距离对应的电压记录下来输入程序,如此一来,测试更加准确,误差更小了。5.3测试结果绘图图5.2是红外距离传感器GP2Y0A02YK0F电压距离关系图,图中所测电压对应的不同距离值,图中横坐标代表距离,纵坐标是距离电压值,单位是cm。从图中可以看出,电压与距离并不是线性关系,而是一条相对平滑的曲线。因此结果不一定十分准确,接近此图即可。最终的红外测距系统可以实现20-150cm的近距离测量,测量误差为0.5cm,可以计算出被测物体的距离。在测量距离精度方面,还有待于改进。 图5.1 GP2Y0A02YK0F电压距离关系图表5.1 电压距离关系电压v2.89v1.94v1.47v1.18v0.980.850.740.660.600.540.500.460.430.40测量距离cm1930415162728292102112122131141151实际距离cm20304050607080901001101201301401505.4 调试中遇到的问题在焊接过程中一些地方出现虚焊等接触不良的问题,导致显示不稳定有闪烁。接线过程中用插针接线容易导致接线松动,没接到或者接触不良。环境问题红外线在空气介质的传播过程中会有很大的衰减,其衰减遵循指数规律。一般情况下能测150cm,但是空气介质发生改变,如尘埃过多,导致红外线强度降低,测量发生误差,且测量距离变小。周围有其他辐射源,并且强度很大时会影响测量结果结 论对所设计的电路进行测量、校准发现其测量范围在20cm150cm内的平面物体做了多次测量发现,其最大误差为0.5cm,且重复性好。该测距仪稳定性比较高、灵敏度比较高,测量时在红外线测距仪周围没有其它物体。但是在检测过程中会有一些不便的地方: 1.测量时在红外线测距仪和目标物体之间周没有其它可阻挡的物体,由于是根据反射能量法,且发射功率有限,反射回来的红外线能量容易过低而无法采集,测距仪无法测量150cm外的物体。2.必须在干净清新的空气环境下测量,空气中一旦尘埃过多,会对反射红外线强度有极大的干扰,最终影响计算距离的值。3.不能够实现不同温度下的测距功能。4.因为超声波是将空气作为媒介所以受电磁干扰比较大。红外线测距仪的原理有两种:一种是红外线传播的时间来计算出传播距离;一种是根据发射光的强弱可以判断所测的距离,由于接收管接收的光强是随与发光管的距离变化而变化的,因而,距离近则接收光强,距离远则接收光弱。由上述的分析知,如果能够干净清新的空气环境,稳定的温度下,无其它电磁干扰,阻挡的物体,能够获得较高的测量精度。本电路设计由于元器件及其成板误差,测量最大距离未能达到设计初衷要求,但对测量距离结果的误差影响不大,能满足日常生活、工业生产的测量要求,因此此设计有着很大的意义。同时通过这个设计能够提高我对单片机的认识、编程能力和电路设计能力。参考文献1 张明峰,PIC单片机入门与实战,北京航空航天大学出版社2 窦振中,PIC单片机应用设计与实例,北京航空航天大学出版社3 谢自美,电子线路综合设计,华中科技大学出版社,2006-64 康华光,电子技术基础:模拟部分(第五版),高等教育出版社,20065 潘永雄,沙河电子线路CAD实用教程M西安:西安电子科技大学出版社:20076 51单片机C程序设计100例7 康华光主编电子技术 基础M第四版北京:高等教育出版社,19998单片机原理与应用实验武汉大学珞珈学院 9一种红外线测距技术的探讨10红外测距传感器的原理与设计最终版11 刘坤,51单片机典型应用开发范例大全 中国铁道出版社 12 彭伟,单片机C语言程序设计实训基于8051+Proteus仿真电子工业出版社13 薛小玲、刘志群、贾俊荣编著单片机接口模块应用于开发实例详解 北京航空航天大学出版社 201014 谭浩强,著C程序设计(第三版) 清华大学出版社 200515 何桥、段清明、邱春玲编著单片机原理及应用 中国铁道出版社 200416 曲波 肖圣兵 吕建平编著工业常用传感器选型指南 清华大学出版社 200217 陈鸿茂编著常用电子器件简明手册 中南矿业大学出版社 2001附录 #include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit RS=P20; /LCD命令/数据端sbit RW=P21; /LCD读/写端sbit LCDE=P22; /LCD使能端sbit MCP_CS=P23;/MCP3001与AT89S52的管脚接线定义sbit MCP_DO=P24;sbit MCP_CLK=P25;uint measure;uchar flag; /Busy标志uchar code dis="Measure Start"/显示uchar code dis1 = "V= . V,L= CM"uchar code dis2 = "."/显示代码uchar code dis3="Out Measure!"/显示uchar dis_buf8;/显示缓冲区void L_delay(void);/短延时void delay_ms(uint n);/延时函数uint read_MCP(void);/读MCP3001void init_1602(void);/1602初始化函数void busy(void);/LCD忙标志判断函数void dat_wrt(uchar dat);/写数据子函数void cmd_wrt(uchar cmd);/写命令子函数uint distance(void);/距离计算函数void lcd_start(uchar start);/设定显示位置函数void LCD_Clear(void);/LCD清屏函数uchar dat_adj(uint dat1);/显示数据调整函数void print(uchar *str);/字符串显示函数void disp(uint dat);/显示子函数uint average(void);/算术平均滤波程序/*主函数*/main()init_1602();print(dis);/显示测量开始delay_ms(1000);while(1)measure=distance();disp(measure);/显示高度delay_ms(100);/*延时函数*/void delay_ms(uint n) uint j; while(n-) for(j=0;j<125;j+); /*短延时*/void L_delay(void)uchar i;for(i=0;i<5;i+)_nop_();/*读MCP3001函数*/uint read_MCP(void)/ read_MCP 采集的数据