红外测距
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
红外测距系统的基本结构
该系统主要由红外发射电路、红外接收电路、A/D转换电路,AT89C52芯片、键盘接口电路及LCD显示电路等组成。其组成框图如图所示
红外测距系统工作流程
在整个红外测距系统工作中,当系统被接入启动电源后,首先,对STM32单片机进行初始化,当单片机接收到红外传感器
GP2Y0A21传输的模拟电压信号后,经过A/D转换电路,将输入单片机的模拟电压信号Vout转换为单片机可识别的数字信号,并经过电压距离转换程序,转换出要测量的距离,然后通过10次均值滤波来提高测量的精确度,最后在通过液晶显示屏LCD显示出测量结果。
为了实现红外测距,在硬件设计中,我们可以使红外发射驱动电路驱动发射头的红外二极管发出红外光,当红外光由红外接收驱动电路驱动红外接收头的光敏二极管接收到,并通过电压转换,将其转换为可测量的电压值,因为红外光的强度会随距离的缩小而增强,红外接收电路转化的电压值会随之增强。又因为电压与距离成比例,通过对转换的电压的计算,我们可以知道红外发射模块与接收模块的距离。我们采用LCD 显示屏动态显示变化中的距离, LCD显示器与AT89C52芯片的P0口与P2.0-2.2接口相接,在红外接收模块运动过程,AT89C52芯片内部会将电压模拟量通过A/D转换将其转化为可显示的数字量,然后通过LCD显示器显示出。通过键盘接口可以实现距离的测量与面积的计算。
系统硬件结构电路图
红外测距的硬件设计红外收发模块
红外发送管是用于发送信号,经过障碍物将信号反射,红外接收管接收到反射回来的信号,然后根据信号强弱将对应的电压值显示在显示模块上,并将此时的距离记录下来。然后整改程序,用红外收发模块进行测距,就可在显示模块上显示出红外接收管接收的
信号强度对应的距离值。
如图所示GP2Y0A02YK0F有3个端口,其中VCC接信号输入,VO接MCP3001的IN+,GND接地线。GP2Y0A02YK0F测量范围在20cm-150cm之间,测量误差小于0.5cm。是一个距离测量传感器单元,PSD的集成组合构成(位置敏感探测器),IRED(红外发光二极管)和信号原理电路。由于采用三角测量方法,各种物体的反射率,对环境
温度和工作时间距离检测不容易产生影响。
复位系统
单片机复位系统就是让程序计数器回到0000h这个地址,程序重头开始执行,将一些
寄存器、存储单元都置为初始设定值,单片机复位的形式有很多种,比如上电复位、
看门狗复位、手动复位等等。本开发板运用的是外接电路来手动复位,如图8所示,STM32单片机采用低电平复位,使复位开关RESET按下单片机接入低电平即完成复位操作。
A/D转换模块
A/D 转换器按照转换的原理可分为直接A/D 转换器和间接A/D 转换器两种类型。直接A/D 转换器,就是把模拟信号直接转换成数字信号,比如逐次逼近型。间接A/D 转换
器是先把模拟量转换成中间量,然后再转换成数字量,如电压/时间转换型,电压/频
率转换型,电压/脉宽转换型等。其中积分型A/D 转换器的电路简单,抗干扰的能力强,而且能做到高分辨率,但是转换速度较慢。有些转换器还将多路开关、基准电压源、时钟电路、译码器和转换电路集成在一个芯片内,已经远超出了单纯A/D 转换功能,使用十分方便。 A/D 转换器转换原理: 一个完整的A/D转换过程中,必须包括
取样、保持、量化与编码等路。取样与保持由于取样的时间极短,取样输出为一串
断断续续的窄脉冲。要把每个取样的窄脉冲信号数字化,需要一定的时间。因此在两
次取样之间,应将取样的模拟信号暂时储存直到下个取样脉冲到来,我们把这个动作
称之为保持。在模拟电路设计中,需要增加一个取样-保持电路。为了保证正确转换,模拟电路要保留着还未转换的数据。
LCD显示模块
AT89C52单片机概述单片机是在集成电路芯片上集成各种组件的微型计算机,这些
组件包括中央处理器CPU、数据存储器RAM、程序内存ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口等电路。由于单片机具有体积小、价格低、可靠性高、开发应用方便等特点,因此在现代电子技术和工业领域中应用较为广泛,在智能仪表
中单片机是应用最多、最活跃的领域之一。在控制领域中,现如今人们更注意计算机的底成本、小体积、运行的可靠性和控制的灵活性。在各类仪器、仪表中引入单片机,
使仪器仪表智能化,提高测试的自动化程度和精度,提高计算机的运算速度,简化仪
器仪表的硬件结构,提高其性能价格比。最小电路如图所示:
程序如下:
#include
#include
#include
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL;
#define uchar unsigned char
#define uint unsigned int
sbit eoc=P3^0;
sbit oe =P3^1;
sbit st =P3^2;
sbit clk=P3^6;
sbit rs=P0^7;
sbit rw=P0^6;
sbit ep=P0^5;
uchar code table[]="0123456789";
uchar code
tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x0,0x0};//数码管共阴级显示0~9
uint ad_0809,a1,a2,a3;
uchar out;