人人范文网 范文大全

超声波测距试验心得

发布时间:2020-03-03 14:48:19 来源:范文大全 收藏本文 下载本文 手机版

超声波测距试验心得

/* ............................IO口可以由高电平接地拉成低电平, 但是不能由低电平接Vcc拉成高电平.............................*/ #include #include float distance; Sbit led=P2^7; sbit echo=P1^0; sbit trig=P3^4; /* 软件延时函数,延时时间(t*10)us */ void delay10us(unsigned char t) { do { _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

_nop_(); _nop_(); _nop_();

} while (--t); } void main() {

EA=1;//开总中断

EX0=1;//开外部中断0 TMOD=0xf1;//采用定时器0的定时模式的工作方式1 /*..............................................

这里有一个疑问就是,必须采用定时器的定时模式才能

将TH0和TL0里的数值读出来,而采用计数模式(将0xf1改成0xf5)

就不行

...............................................*/

IT0=1;//外部中断为负跳变触发方式

TH0=0;//定时器高8位和低8位都赋值为0 TL0=0; while(1) { trig=1;//单片机给trig引脚一个20微秒的触发信号

delay10us(2); trig=0; if(distance

delay10us(6);//延时60微秒

} } /* .....................................................中断服务程序,外部中断的中断服务程序的执行时间可以很长, 没有时间的限制,不像定时器中断,中断服务程序执行时间有 一定要求,即在下一次中断请求到来之前本次中断必须执行完毕。 .......................................................*/ void wb0() interrupt 0 { TR0=1;//启动定时器,TH0和TL0开始计数

while(echo);//当返回脉冲信号(echo上的高电平脉冲)结束时关闭定时器

TR0=0;

distance=(TH0*256+TL0)*1.08507/1000000*340/2;//计算障碍物距离

//distance=(定时器高8位*256+低8位)*一个机器周期*声速/2 TH0=TL0=0;//清零TH0和TL0,准备下一次测距

}

解释:在不加Q2三极管的情况下你,即Echo直接连接到单片机的IO口,单片机将会检测不到Echo输出的高脉冲信号。单片机的管脚在没有设定的情况下,默认输出高电平。然后看超声波测距模块的时序图,Echo在没有给触发信号的情况下保持低电平,有了触发信号之后,Echo输出一个高电平。按道理说如果将Echo引脚直接连接在单片机的IO口上,该IO口将会被Echo引脚拉为低电平,在Echo输出高脉冲的时候,单片机IO口保持原来的高电平。当Echo为低电平的时候,那么该IO口就会向Echo引脚灌电流。但是在实际电路中,Echo并不能将IO口拉低,我猜原因是Echo接受灌电流的能力太小,灌入的电流过大,导致该脚电平为不确定状态。解决的措施有两个,第一就是直接用外部中断引脚检测“低脉冲”(因为外部中断选用的触发方式是下降沿触发,所以原来的高脉冲信号要加一个三极管反相器,就变成了低脉冲),这样就变成IO口检测低电平了。第二就是上图里的方法,不将Echo直接连接在单片机的IO口上,而是将Echo通过一个PNP型的三极管连接在单片机IO口上。这样当Echo输出低时,三极管导通,单片机的这个IO口就会被三极管的集电极拉为低。当Echo输出高脉冲时,三极管截至,该IO口通过上拉电阻R4保持默认的高电平。这就解决了Echo接受灌电流能力不够的问题。

2016-3-13 张海波

超声波测距

超声波测距总结报告

超声波测距总结

超声波测距方案流程图

超声波测距传感器原理

超声波测距模块总结报告

HC_SR04超声波测距模块资料

超声波测距报警器文献综述

基于STM32的超声波测距

一种基于超声波的测距系统

超声波测距试验心得
《超声波测距试验心得.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档