查看: 862|回复: 24
打印 上一主题 下一主题

如何利用80C51来制作汽车倒车雷达(超声波测距的)

[复制链接] qrcode

3

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
楼主
跳转到指定楼层
发表于 2015-3-18 02:14 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

毕业设计,由于我现在找到工作,忙不过来,特向大虾请教:

从这里我来做第一个设计,主要是程序,头大

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

7

主题

44

帖子

99

积分

注册会员

Rank: 2

积分
99
沙发
发表于 2015-3-19 09:51 AM | 只看该作者
HE HE。。。现在没有80C51。。。如果只是做测距的。。。

可以用ST89C2051。。。

关键这个电路是硬件设计好就可以。

做一个40KHz的发射电路。。。用2051的一个IO控制电源。。。动态扫描LED显示

另外再做一个40KHZ的接收电路。。。二者频率对准。。。接收电路接收到发射信号的时候输出一个电压触发中断。。。

工作原理。。。

先接通40KHZ发射电路的工作电压。。。单片机开始计时。。。等侍接收电路触发中断。当有中断。停止计时。。。

这个时间除以2再乘以超声波在空气中传播速度。应该就是等于你要测试的距离。。。

我想这个电路关键还是发射和接收电路比较关键。。。

回复 支持 反对

使用道具 举报

2

主题

82

帖子

170

积分

注册会员

Rank: 2

积分
170
板凳
发表于 2015-3-19 07:09 AM | 只看该作者
woyexiang xuexi                                                                                                                                                                       
回复 支持 反对

使用道具 举报

5

主题

60

帖子

129

积分

注册会员

Rank: 2

积分
129
地板
发表于 2015-3-20 09:57 AM | 只看该作者
现在没有80C51?这个是什么意思                                                                                                                                                                       
回复 支持 反对

使用道具 举报

5

主题

60

帖子

129

积分

注册会员

Rank: 2

积分
129
5#
发表于 2015-3-21 10:26 AM | 只看该作者
我做过这方面的设计,不过是用凌阳的芯片

有时间可以联系我:

fsjyc@21cn.com

回复 支持 反对

使用道具 举报

0

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
6#
发表于 2015-3-21 11:22 AM | 只看该作者




机器人超声测距数据的采集与处理







来源:《电子技术应用》



作者:杭州浙江大学电气工程学院(310027)纪良文 蒋静坪









摘要:介绍一种基于单片机控制的三种超声测距系统的构成、工作原理和误差分析。利用本系统及其设计方法可以作为农业机器人辅助视觉系统。



关键词:机器人 超声波测距 单片机 串行通讯 数据采集


机器人作为一种能代替人工作业的智能机器,有着广泛的应用前景。其关键技术取决于机器人视觉系统设计的精确与否。超声波传感器以其价格低廉、硬件容易实现等优点,被广泛用作测距传感器,实现定位及环境建模。越声波测距作为辅助视觉系统与其他视觉系统(如CCD图象传感器)配合使用,可实现整个视觉功能[7]。



超声测距原理很简单,一般采用渡越时间法:即D=CT/2,其中D为机器人与视测物之间的距离,C为声波在介质中的传播速度(C=331.4乘以根呈号(1+t/273)m/s,t为摄氏温度),T为超声发射到返回的时间间隔。本超声测距系统共有3对超声换能器,分别放在智能移动车的上、中、下三个位置上。本系统采用一片89C51单片机对三路超声信号进行循环采集,并将数据送到数据缓冲区存储[1,2]。上位机采用PC-586。当上位机需要数据时,向下位机发出申请,下位机通过中断的方式向上位机发送数据。上位机与下位机通过RS-232串行口相连。


1 系统硬件设计


为了能在测量距离的同时判断出物体的大致形状,应设计成多传感器测距系统。经分析可知,频率为40kHz左右的超声波在空气中传播的效率最佳;同时,为了方便处理,发射的超声滤被调制成40kHz左右、具有一定间隔的调制脉冲波信号。该测距系统结构框图如图1所示。由图可见,测距系统由超声波发送、接收、时间计测、微机控制和温度测量五个部分组成。


1.1 超声波发送


这部分包括超声波信号的产生、多路选择及换能器等环节。


超声波发送脉冲如图2所示。40kHz的超声波发送脉冲信号由单片机89C51的P1.0口送出,其脉冲宽度及脉冲间隔均由软件控制。脉冲宽度约为125μs~200μs,即在一个调制脉冲内包5~8个40kHz的方波。脉冲发送间隔取决于要求测量的最大距离及测量通道数。本系统有三路测距通道,采用分时工作,按上、中、下的顺序循环测距。若在有效测距范围内有被测物的话,则在后一路超声波束发出之前应当接收到前一路发同的反射波,否则认为前一路无被测物。因此按有效测距范围可以估算出最短的脉冲间隔发送时间。例如:最大测距范围为5m时,脉冲间隔时间t=2s/v=2×5/340≈30ms,实际应取t≥30ms。


发送的超声波脉冲经多路选择开关CD4052按序分别送到上、中、下三路发送转换能器上。采用缓冲器CD4050是考虑用其两个门来驱动一路发送换能器,以加大发射驱动能力。


1.2 超声波接收


这部分由接收换能器、多路选择开关、比较及控制等环节组成。由于在距离较远的情况下,声的回波很弱,因而转换为电信号的幅值也较小,为此要求将信号放大60万倍左右。采有三级放大:前两级种放大100倍,采用高速精密放大器LM318,
其带宽为15MHz,放大倍数为100倍时,能充分满足要求;第三级采用LF353运算放大器,带宽为4MHz,对于62倍的放大倍数,能充分满足条件[3,6]。放大后的交流信号经光电隔离送入比较器,比较器的作用是将交流信号整形输出一个方波信号,此方波信号上升沿使D触发器触发,向CPU发中断申请。在中断服务程序中,读取时间计数器的计数值,并结合温度换算出的速度算出发射到接收的距离。图3给出了一路超声波接收电路原理图(略去多路选择开关)。


1.3 时间计测


超过波从发射到接收的间隔时间的测定是由单片机内部的计数器T1来完成的。在调试过程中出现的发送部分与接收部分的直接串扰问题是由于换能器之间的距离不大,有部分声波未经被测物就直接绕射到接收换能器上。从发射开始一直到“虚假反射波”结束[5]这段时间,通过控制触发器(74LS74)不能触发,从而不会发中断申请,可有效躲避干扰,但也会形成所谓的“盲区”。本系统的盲区约为20cm左右。


1.4 微机控制部分


由单片机控制的多路选择开在来决定上、中、下三个通道分时工作的顺序。CD4052的X侧选择发送通道,Y侧选择接收通道,由89C51的P1.1和P1.2按顺序发出通道选择信号,接到CD4052的A、B端,使发送通道与接收通道一一对应地接能。


由于受环境温度以及超声固有宽波束角等因素的影响,超声传感器所测量的值与实际值总有一些误差。本超声测距系统采用曲线拟合的最小二乘法对测量数据进行拟合,使其精度达到±4cm。


2 系统软件设计


2.1 超声数据的采集与处理软件


本系统软件分两部分:主程序和中断服务程序。主程序完成系统初始化、选择能路号、控制发射和接收超声波等。主程序流程图如图4所示。


中断服务程序包括内部T0中断和外部INT0、
INT1中断服务程序。T0设置为30ms中断一次,其任务就是每隔30ms产生5~8个40kHz的方波作为超声脉冲并按序送到三个通道,即产生如图2所示的超声波发射脉冲,图2也给出了一个通道的工作时序图。T0中断服务程序流程图如图5所示。INT0中断子程序读取A/D转换结果,并将相应数据值转换为环境温度值;INT1停止T0、T1计数,根据T1内容计算时间T,并进行最终距离的计算。先计算超声波传播速度:C=331.4×(根号1+t/273),再计算距离:D=CT/2,并将计算结果送入缓冲区以备通讯。T1工作在方式2,并设计成门控方式。


2.2 串行通讯程序


为了不影响下拉机完成其他工作,本系统采用下位机以中断的方式向上位机发送测距数据,在测距主程序中开串行口中断。进入中断程序后,仍采用查询方式发送数据。


上位机(PC-586)以子程序的形式给出接收程序。若系统需要新的测距值时,就调用一次接收子程序。接收子程序框图如图6所示。接收子程序收到一个数据后,判断数据传输是否有错,若有错就向下位机发“01”命令,下位机收到此命令后,则重表发送;若传输过程无错,向下位机发送“00”命令,下位机则继续发送下一个数据。


3 误差分析


本系统最大测距误差在8cm左右,测距的盲区为20cm。
测距误差主要来源于以下几个方面:


(1)超声波波束对探测目标的入射角的影响;


(2)超声波回波声强与待测距离的远近有直接关系,所以实际测量时,不一定是第一个回波的过零点触发;


(3)超声波传播速度对测距的影响。稳定准确的超声波传播速度是保证测量精度的必要条件,波的传播速度取决于传播媒质的特性。传播媒质的温度、压力、密度对声速都将产生直接的影响。因此需对声速加以修正。对于测距而言,引起声速变化的主要原因是媒质温度的变化。本文采用声速预置和媒质温度测量结合的方法对声速进行修正,可有效地消除温度变化对精度的影响。


影响测量误差的因素很多,还包括现场环境干扰、时基脉冲频率等。


本系统硬件简单、容易实现、测距范围比较大、测量误差可以控制在±4cm左右。超声测距系统向上位机发送数据和下位机的数据采集相互独立,可以同时进行,保证了测距数据的实时性。

回复 支持 反对

使用道具 举报

45

主题

523

帖子

1099

积分

金牌会员

Rank: 6Rank: 6

积分
1099
7#
发表于 2015-3-24 09:39 AM | 只看该作者
#include
#define unit unsigned int
#define uchar unsigned char
sbit fs="P3"^0; //发送端;
sbit h="P3"^7;
sbit l="P3"^5; //数码管位选端;
sbit m="P3"^4;
uchar tab[16]=\{0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0,0x60,0x25,0x3C,0x23,0x34,0x74};//段码;
uchar u[3]; //显示数组;
unit count,b;
void delay(unit a) //延时;
\{
unit m;
for(m=0;m}
void tx() //从P3.0发出40KHz的脉冲
\{
uchar n,p;
for(n=0;n<40;n++)\{
fs=1;
for(p=0;p<3;p++);
fs=0;
for(p=0;p<2;p++);
fs=0;
}
}
void display(void) //显示;
\{
for(;;)
\{
l=1;m=1;h=1;
P1=tab[u[0]];
m=0;
delay(10);
m=1;
P1=tab[u[1]];
l=0;
delay(10);
l=1;
P1=tab[u[2]];
h=0;
delay(10);
h=1;
}
}
void rx() interrupt 0 //外部中断0,接收信号
\{
TR0=0;
count=TH0*256+TL0;
if(count<300);
if(count>=300)
\{
b=(17*count)/1000;
u[0]=b%10;
u[1]=(b/10)%10;
u[2]=(b/100)%10;
display();
}
}
void over()interrupt 1 //T0溢出为无效测量FFF;
\{
u[0]=15;
u[1]=15;
u[2]=15;
display();
}
void main()
\{
fs=0;
delay(8600);
TH0=0;
TL0=0;
TMOD=0x01;
TR0=1;
EA=1;
ET0=1;
PT0=1;
tx();
IT0=1;
IE=0x83;
}
回复 支持 反对

使用道具 举报

0

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
8#
发表于 2015-6-20 06:42 AM | 只看该作者
关注中。。。。                                                                                                                                                                       
回复 支持 反对

使用道具 举报

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
9#
发表于 2015-8-27 05:24 AM | 只看该作者
我真的找不到我给你的资料了!                                                                                                                                                                       
回复 支持 反对

使用道具 举报

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
10#
发表于 2015-3-22 09:51 AM | 只看该作者




用AT89C2051设计超声波测距仪




来源:《国外电子元器件》



作者: 天津理工学院光电信息与电子工程系
姜道连 宁延一 袁世良









摘要:本文介绍了AT89C2051单片机的性能和特点,并在分析了超声波测距原理的基本上,指出了设计测距仪的思路和所需考虑的问题,给出了实现超声波测距方案的软、硬件设计系统框图。该设计系统经校正后,其测量精度可达0.1米。



关键词:超声波 换能器 测距 AT89C2051


超声波测距主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如:液位、井深、管道长度等场合。目前国内一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。本文介绍一种以AT89C2051或GSM97C2051单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。实际使用证明该仪器工作稳定,性能良好。


1 超声波测距原理


超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。


由于超声波也是一种声波,其声速C与温度有关,表1列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理。其系统框图如图1所示。


2 AT89C2051的功能特点


AT89C2051是一个2k字节可编程EPROM的高性能微控制器。它与工业标准MCS-51的指令和引脚兼容,因而是一种功能强大的微控制器,它对很多嵌入式控制应用提供了一个高度灵活有效的解决方案。AT89C2051有以下特点:2k字节EPROM、128字节RAM、15根I/O线、2
个16位定时/计数器、5个向量二级中断结构、1个全双向的串行口、并且内含精密模拟比较器和片内振荡器,具有4.25V至5.5V的电压工作范围和12MHz/24MHz工作频率,同时还具有加密阵列的二级程序存储器加锁、掉电和时钟电路等。此外,AT89C2051还支持二种软件可选的电源节电方式。空闲时,CPU停止,而让RAM、定时/计数器、串行口和中断系统继续工作。可掉电保存RAM的内容,但可使振荡器停振以禁止芯片所有的其它功能直到下一次硬件复位。


AT89C2051有2个16位计时/计数器寄存器Timer0t Timer1。作为一个定时器,每个机器周期寄存器增加1,这样寄存器即可计数机器周期。因为一个机器周期有12个振荡器周期,所以计数率是振荡器频率的1/12。作为一个计数器,该寄存器在相应的外部输入脚P3.4/T0和P3.5/T1上出现从1至0的变化时增1。由于需要二个机器周期来辨认一次1到0的变化,所以最大的计数率是振荡器频率的1/24,可以对外部的输入端P3.2/INT0和P3.3/INT1编程,便于测量脉冲宽度的门。



表1 声速与温度关系表








温度(℃)

-30

-20

-10

0

10

20

30

100




声速(米/称)

313

319

325

323

338

344

349

386




充分利用AT89C2051的片内资源,即可在很少外围电路的情况下构成功能完善的超声波测距系统。


3 系统硬件电路设计


超声波测距仪的硬件电路如图2所示。


AT89C2051通过外部引脚P1.6输出脉冲宽度为250μs,载波为40kHz的10个脉冲的脉冲群,以推挽形式加到变压器的初级,经升压变换推动超声波换能器发射出去。在发射的同时,P1.7输出一个高电平启动,给电容C4充电。发射结束时高电平翻转为低电平,C4开始对R2、R3组成的分压器放电并输出到比较器的负端。超声波接收换能器将接收到的障碍物反射的超声波送到放大器进行放大,这是一个高增益、低噪声放大器,在对放大后的信号进行检波后将检测回波送到比较器的正输入端。发射时P1.7输出的电平可以抑制比较器的翻转,这样就可以抑制发射器发射的超声波直接辐射到接收器而导致错误检测。


图3是超声波测距原理的波形图,从图中可以看到,测出回波和发射脉冲之间的时间间隔,利用S=Ct/2就可以算出距离,再在LCD上显示出来。当然还可以设置若干个键,以用来控制电路的工作状态。限制系统的最大可测距离存在四个因素:超声波的幅度,反射而的质地,反射而和入射声波之间的夹角以及接收换能器的灵敏度。接收换能器对声波脉冲的直接接收能力将决定最小的可测距离。


4 系统软件设计


AT89C2051单片机和其开发应用系统具有语言简洁、可移植性好、表达能力强、表达方式灵活、可进行结构化设计、可以直接控制计算机硬件、生成代码质量高、使用方便等诸多优点。超声波测距仪就是用AT89C51单片机开发设计的。它采用模块化设计,由主程序、发射子程序、查蟓接收子程序、定时子程序、显示子程序等模块组成。


图4和图5分别为主程序和测量子程序的框图。该系统的主程序处于键控循环工作方式,当按下测量键时,主程序开始调用发射子程序、查询接收子程序、定时子程序,并把测量结果用显示子程序在液晶屏上显示出来。


必须指出的是,由于液晶要使用同一P3口,所以必须全部使用位操作,否则将导致LCD不能正常显示。另外,在系统还可以加入温度传感器来监测环境温度,把表1所列的数据做到程序中可进行温度被偿。为了增强系统的可靠性,应在软硬件上采用一些特殊措施。限于篇幅,下面仅给出部分程序,感兴趣者可与作者联系。


# pragma DB OE CD OT(5,SPEED) ROM(LARGE)IV


/*连接所需要的库*/


#include


#include


#include


/*定义数据类型*/


typedef unsingned char byte;


typedef unsigned int word


#define uchar unsigned char


#define unint unsigned int


#define ulong unsigned long


/*定义系统常数*/


#define TRUE 1


#define FALSE 0


#define C="340" /*声速*/


/*定义功能位*/


sbit bflag="ACC7";


sbit VOLCK="P1"^5;


sbit MING="P3"^5;


sbit QUIET="P1"^3;


sbit BACK="P1"^2;


/*定义显示缓冲区*/


uchar idata ON[16]={’,’L’,’E’,’N’,’G’,’T’,’H’,’=’,’8’,’.’,’8’8’,’m’,’’,’’,’’};


/*主程序用延时子程序*/


woid main-delay(void)


{


register i;


TRO=1;


for(i=0;i

{


TH0=0;


TL0=0;


Do{}while(!TF0);


TF0=0;


}


TR0=0;


}


*/通用延时子程序*/


void delay(void)


{


unint i;


for(i=0;i

}


/*键盘延时子程序*/


void key-delay(void)


{


unint i;


for(i=0;i

}


/*初始化程序*/


void start_main()


{


tegister i;


uchar a[16]={’’,’L’,’E’,’N’,’G’,’T’,’H’,’=,’8’,’.’,’8’,’8’,’m’,’’,’’,’’};


for(i=0;

{ON[i]=a[i];}


nitlcd();/*初始化液晶*/


display(ON);/*更新显示*/


}


/*主程序*/


void main()


{


register s,keycode;


long idata t;


start-main();/*初始化*/


main-delay();/*延时*/;


if(keycoed= =true)


{


keycode=key-scan-wait();


/*判断是否有测量键按下*/


t=measure();*/测量*/


S=0.5*t*C;*/换算*/


Decode-bcd(s.0x09);


/*把测量结果置换入显示缓冲区*/


init-lcd();/*初始化液晶*/


display(ON);/*更新显示*/


}


}


5 结束语


虽然用一个单独计时器电路也可以测量超声波的传输时间,但利用AT89C2051单片机可以简化设计,便于操作和直观读数。该系统经实际测试证明,可以满足大多数场合的测距要求。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表