首页 > 编程知识 正文

超声波接收器原理,超声波模块怎么接单片机

时间:2023-05-06 07:23:09 阅读:40851 作者:1212

模块发出一定频率的超声波,模块可以检测到超声波碰到物体后反射,并返回发射场所

通过x=v*t,可以得到距离=x/2

模块工作原理:

以常见的HY-SRF05模块为例说明,其他型号的工作原理与该模块有很大不同。

5个引脚分别通过vcc、trig、echo、out、gnd、5v供电,通过io引脚trig触发测距,提供至少10us的高电平后即可开启测距功能。 自动检测到信号返回后,从io端子echo输出高电平。

通过将上述工作原理与单片机的中断定时器相结合,可以确定以下工作方案。 我以51单片机为例说明:

向trig施加10us以上的脉冲,使模块开始动作。 同时打开计时器开始计时,将外部中断连接到echo引脚。 当模块检测到回波时,echo被设置为高电平。 此时,外部中断被触发,进入中断程序。 因此,可以通过中断程序读取时间,有时间时根据distance=v*t/2计算距离、距离

以51为控件,数码管显示距离的代码。

# includere g51.h # defineucharunsignedchar # defineuintunsignedintinttime,flag; uchar timeL,timeH; 单元距离; sbittrig=P2^0; sbit echo=P3^2; uchar codeduan[]={0x3f,0x 06,0x5b,0x4f,0x 66,0x6d,0x7d,0x 07,0x7f,0x6f}; //数字代码段为uchar code wei[]={0xfe,0xfd,0xfb,0xf7}; //数码管位为uchar墅居[4]; //延迟函数voiddelay(uinta ) { uintb; wile(a----for ) b=113; b0; b--; (//延迟20微秒的void delay20us ) ) { uchar c; for(c=0; c100; c ); } void shujuxuan ()//确定发送的数据) shuju(3)=distance/1000; 墅居[2]=distance/100; 墅居[1]=距离/10; 墅居[0]=distance; }void xianshi ()//显示函数) { uchar i; for(I=0; i4; I () { P0=wei[i]; //发送代码P1=Duan [墅ju [ I ] ]; //段码delay(4 (发送4 ); //j=10; //while(j----; }}void main () { //uint distance; trig=0; //降低脉冲输入端子EA=1,接通//总中断TMOD=0x10; //计时器1,16位动作模式while(1) { EA=0; //总中断trig=1; //超声波输入端子delay20us (; //延迟20微秒trig=0; 产生//20微秒的脉冲while (echo==0); 等待echo回波端子变为高电平的flag=0; //清测量成功标志EA=1; EX0=1; //使外部中断0 TH1=0导通TL1=0; //计时器清除TF1=0; //计数器溢出标志清除TR1=1; //开始计时器1delay (; //待测结果TR1=0; //关闭计时器1 EX0=0; //关闭外部中断0if (flag==1) { time=timeH*256 timeL; 距离=time * 0.172; //mm}if(flag==0) { distance=0; //无回声则清零(} shujuxuan ); 仙石(; (//外部中断0为回波电平Void Hoduan ) )中断0 ) timeh=th1; timeL=TL1; //取出计时器1的值flag=1; //位置测量成功的标志EX0=0; //关闭外部中断(//计时器1中断为超声波测距计时器void timer1 ) )中断3 ) th1=0; TL1=0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。