单片机设计与制作技术报告.docx
《单片机设计与制作技术报告.docx》由会员分享,可在线阅读,更多相关《单片机设计与制作技术报告.docx(14页珍藏版)》请在冰点文库上搜索。
![单片机设计与制作技术报告.docx](https://file1.bingdoc.com/fileroot1/2023-6/26/572a13dd-0e82-4316-83fb-be16fe0b66ff/572a13dd-0e82-4316-83fb-be16fe0b66ff1.gif)
单片机设计与制作技术报告
单片机设计与制作技术报告
中国矿业大学徐海学院
单片机设计与制作技术报告
姓名:
岳阳学号:
22090230
班级:
电气09-4
题目:
超声波测距
任课教师:
胡明
2011年9月
单片机设计与制作任务书
班级电气09-4学号22090230学生姓名岳阳
任务下达日期:
2011年9月30日
设计日期:
2011年10月1日至2011年12月30日
设计题目:
超声波测距
设计主要内容和完成功能:
单片机超声波测距器
LED显示
教师签字:
摘要
目前国内超声波测距器的设计大多采用汇编语言设计。
由于单片机应用系统的日趋复杂,要求所写的代码规范化,模块化,并便于多人以软件工程的形式进行协同开发,汇编语言作为传统的单片机应用系统的编程语言,已经不能满足这样的实际需要了,而C语言以其机构化和能产生高效代码满足了这样的需求,成为电子工程师进行单片机系统编程时的首先编程语言。
本设计就是一种基于AT89C52单片机、采用C语言和汇编语言混合编程来实现的超声波测距器。
1、系统概述
超声波传感器及其测距原理
超声波是指频率高于20KHz的机械波。
为了以超声波作为检测手段,必须产生超生波和接收超声波。
完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。
超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(time offlight)。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离
测量距离的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。
因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。
由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离的测量。
利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。
超声波发生器可以分为两类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
本课题属于近距离测量,可以采用常用的压电式超声波换能器来实现。
根据设计要求并综合各方面因素,可以采用AT89S52单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距器的系统框图如下图所示:
图0
图1超声波测距系统框图
2、硬件设计
硬件部分
主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
采用AT89C5或其兼容系列来实现对CX20106A红外接收芯片和74LS04系列超声波发射模块的控制。
单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
硬件电路主要分为单片机系统及显示电路,超声波发射电路和超声波检测接收电路三部分。
2.1单片机系统及显示电路
显示电路使用自己焊的单片机开发板的数码管显示。
图2单片机显示电路图
2.2超声波发射电路
超声波发射电路原理图3所示。
发射电路主要由反向器74LS04和超声波换能器构成,单片机P1.0端口输出的40kHz方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路级两级反向器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器两端可以提高超声波的发射强度。
输出端采用两个反向器并联,用以提高驱动能力。
上拉电阻R13,R14一方面可以提高反向器74LS04输出高电平的驱动能力;另一方面可以增加超声波换能器的阻尼效果,以缩短其自由振荡的时间。
压电式超声波换能器是利用压电晶体的谐振来工作的。
超声波换能器内部结构如图5所示,它有两个压电晶片和一个公振板。
当它的两级外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极间未加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器了。
超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
2.3超声波检测接收电路
集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38kHz于测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路,如图4所示。
实验证明,用CX220106A接收超声波(无信号时输出高电平)具有很高的灵敏度和较强的抗干扰能力。
适当地更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。
图5超声波换能器结构图
图6超声波测距原理图
3、软件设计
3.1超声波测距器的算法设计
图6示意了超声波测距的原理,既超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。
这样,只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器于反射物体的距离。
该距离的计算公式如下:
d=s/2(v×t)/2
其中:
d为被测物于测距器的距离;s为声波的来回路程;v为声速;t为声波来回所用的时间。
超声波也是一种声波,其声速v于温度有关。
表A列出了几种不同温度下的超声波声速。
在使用时,如果温度变化不大,则可认为声速基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返的时间,即可求得距离。
表A不同温度下超声波声速表
3.2主程序
主程序首先要对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA并对显示端口P0和P2清0;然后调用超声波发生子程序送出一个超声波脉冲。
为了避免超声波从发射器直接传到接收器引起的直射波,需要延时约0.1ms(这也就是超声波测距器会有一个最小可测距离的原因)后才可打开外中断0接收返回的超声波信号。
由于采用的是12MHz的晶振,计数器每计一个数就是1us,所以当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(3—2)计算,即可得被测物体与测距器之间的距离。
设计时取20℃时的声速为344m/s,则有
d=(v×t)/2=(172T/10000)cm(3—2)
其中:
T为计数器T0的计数值。
测出距离后,结果将以十进制BCD码方式送往LED显示约为0.5s,然后再发超声波脉冲重复测量过程。
图3.7所示为主程序流程图。
图7主程序流程图
4、系统调试
4.1调试
超声波测距器的制作和调试都较为简单,其中超声波发射和接收采用ø15的超声波换能器TCT40—10F1(T发射)和TCT40—10S1(R接收),中心频率为40KHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。
若能将超声接收电路用金属壳屏蔽起来,则可提高抗干扰性能。
根据测量范围要求不同,可适当地调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调整好后,便可将程序编译好下载到单片机试运行。
根据实际情况,可以修改超声波子程序每次发送的脉冲个数和两次测量的间隔时间,以适应不同距离的测量需要。
4.2性能指示
根据文中电路参数和程序,测距器可测量的范围为0.20~0.50m。
实验中,对测量范围为0.20~0.45m的平面物体做了多次测试,测距器的最大误差不超过1cm,重复性很好。
5、结束语
本文设计的是基于AT89S52单片机的超声波测距器,可以应用于汽车倒车等场合,提醒驾驶员倒车时有效的避开可能对倒车造成危害的障碍物和行人,从而有效避免由于倒车造成的汽车碰撞或擦伤带来的经济损失和人身安全问题。
具有较强的实用性。
6、参考文献
【1】张齐,单片机应用系统设计技术-基于C语言编程【M】北京:
电子工业出本社,2006
【2】何希才,传感器及其应用电路【M】北京:
电子工业出版社,2001
【3】李光飞,51系列单片机设计实例【M】北京:
航空航天大学出版社,2003
7、附录
包括系统硬件电路图、源程序(加注释)、实物作品调试和演示照片
附录1
主程序:
/****************************************************************
Title:
超声波测距系统
Mcu:
AT89S51Oscillator:
12M
Designer:
linqiuxiongDate:
2010.2.12
Email:
taking@
Directions:
经实践表明该系统的测距范围在0.21m-2m时,误差不超0.5cm;
大于2m时,最大误差不超过1.5cm;因发射功率不足,本系统的稳定测量范
围是0.21m-4m。
*****************************************************************/
#include/*头文件*/
#include
#defineucharunsignedchar/*缩定义*/
#defineuintunsignedint
#definenop()_nop_()/*定义空操作指令*/
#definesled_dm_portP0/*定义数码管段码控制端口*/
#definesled_wm_portP2/*定义数码管位码控制端口*/
sbitvout=P1^0;/*声明40KHz脉冲信号输出口*/
sbitrec=P1^1;
//sbitfm=P2^5;/*声明蜂鸣器使能引脚*/
voiddelay_1ms(ucharx);/*1MS为单位的延时程序*/
voiddisplay();/*显示子程序*/
ucharcodenum_table[13]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f};
/*0123456789-消隐.*/
/*定义数码管显示字符跟数字的对应数组关系*/
uchardatasled_lighten_table[]={0xf7,0xfb,0xfd,0xfe};
/*定义每次扫描时需点亮的数码管*/
uchardis_buff[4]={0xff,0xff,0xff,0xff};/*定义段码缓冲数组*/
uinttime,distance;/*定义接收时间与距离变量*/
bitrec_flag;/*定义接收成功标志位*/
uchark,j,wm;/*定义脉冲个数与位选控制变量*/
/*主程序*/
voidPINT0(void);
voidmain()
{
uinti;
TMOD=0x21;/*T1为8位自动重装模式*/
TH0=0x00;/*65ms计数初值*/
TL0=0x00;
TH1=0xf2;/*12us计数初值*/
TL1=0xf2;
PX0=1;
PT1=1;
ET0=1;
EA=1;
TR0=1;
while
(1)
{
dis_buff[2]=num_table[distance/100];
dis_buff[1]=num_table[distance%100/10];
dis_buff[0]=num_table[distance%10];
display();
rec_flag=0;
for(i=400;i>0;i--)/*测量间隔控制(约4*100=400MS)*/
display();
EA=1;
TR0=1;
while(rec){}
PINT0();
}
}
/*显示子程序*/
voiddisplay()
{
sled_wm_port=0xff;/*显示消影*/
if(wm==3)
sled_dm_port=0xff;
if(wm==2)
{
if(dis_buff[2]==0xc0)/*若第2位数码管为0则不显示*/
sled_dm_port=0xff;
else
sled_dm_port=dis_buff[2];
}
else
sled_dm_port=dis_buff[wm];
sled_wm_port=sled_lighten_table[wm];
wm++;
if(wm==4)
wm=0;
delay_1ms
(1);
}
/*定时器T0中断程序*/
voidTIMER0()interrupt1
{
EA=0;
TH0=0x00;
TL0=0x00;
ET1=1;
EA=1;
TR1=1;
TR0=1;
}
/*定时器T1中断程序*/
voidTIMER1()interrupt3
{
vout=!
vout;
k++;
if(k>=4)/*超声波肪冲个数控制(为赋值的一半)*/
{
k=0;
TR1=0;
ET1=0;
for(j=200;j>0;j--);/*1ms延时避开盲区*/
for(j=200;j>0;j--);
for(j=200;j>0;j--);
EX0=1;/*开启外部中断0*/
}
}
voidPINT0(void)
{
TR0=0;
TR1=0;
ET1=0;
EA=0;
EX0=0;
rec_flag=1;/*接收成功标志位置1*/
time=TH0;
time=time*256+TL0;
time=time-120;/*补偿软件或硬件带来的误差*/
distance=time*0.017;
}
/*1MS为单位的延时程序*/
voiddelay_1ms(ucharx)
{
uchari;
while(x--)
for(i=0;i<100;i++);
}
附录2
发射电路
附录3
接收电路