[求助] 用超声波测距但是在距离达到170cm之后就检测不到信号了

sinianhuan   2012-3-28 09:31 楼主

我已经试验很多次了但是就是不行,程序也改了很多次,刚开始的时候只能检测30cm左右后来能检测到120cm,现在能检测到170cm,过了170cm之后只能断断续续的收到信号,有时候根本收不到信号,不知道是怎么回事,这个超声波模块应该没问题。下面我个我的程序和原理图,请大家帮我看看,谢谢了 7A@EX`CE{~%L910%_M[KQGW.jpg

/*************************************

主函数

**************************************/

#include "duan.h"
#include "smg.h"
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char

sbit fs=P2^0;

uchar temp[]={0,0,0,0};
uchar s=3;

void delayms(void) //延时子程序
{
 unsigned char i,j;
 for(i=30;i>0;i--)
 for(j=98;j>0;j--);
}


void main()
{
 init();
 while(1)
 {   
  TR1=1;  
  while(s--)//发送3次40KHZ超声波
  {
   fs=0;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
   fs=1;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
  }
  s=3;
  delayms(); //延时6毫秒,现在还没开外部中断不知道为什么不管延时多长时间只要有外部中断就执行中断
  EX0=1;    //我在这里开外部中断  

  while(bj);
  bj=1;
  temp[1]=(int)shu/100%10;//显示测得的距离
  temp[2]=(int)shu/10%10;
  temp[3]=(int)shu%10;
  display(temp); 
 }
}

/********************************************

中断函数

*********************************************/

#include "duan.h"
#include <reg52.h>
#include <intrins.h>

float t;
float shu; //距离只能把t和shu同时定义为float型才行
unsigned char m,bj=1;

void init()   //中断初始化
{
 TMOD=0X10;
 EA=1;
 ET1=1;
 TH1=0X00;
 TL1=0X00;
 IT0=0;
}

void int1() interrupt 0 using 1    //外部中断0,用来接收声波

 bj=0;
 EX0=0;
 TR1=0;
 t=TH1*256+TL1;
 shu=(t*17)/1000-3; //计算距离有3cm的误差
 TH1=0X00;
 TL1=0X00;
}

void int3() interrupt 3 using 3  //定时中断
{ bj=0;
 TR1=0;
 TH1=0X00;
 TL1=0X00; 

 

 

回复评论 (4)

回波信号已经太弱了,继续延伸探测距离,要么增加发射功率,要么增加接受灵敏度,不过你的电路基本上只能靠增加发射功率来达到你的要求,不要使用门电路驱动了,用晶体管带变压器驱动的效果更好。
点赞  2012-3-28 22:26
我最近也在做这个项目。
用的是单片机输出40K方波,经过三极管和变压器进行电压放大。接收也用CX20106A(TA8141S)。接收的距离大概在2M。
1.根据示波器测量来看,尽管经过变压器了,但是发射端的波形仍然不够大(峰值最好超过60v才好)。而且用了变压器以后波形不再是那种标准方波。
2.本人最终要做的用那种收发一体的单探头来做。先用分开式的2个探头跑到2m,但是换了一体的探头,发射波形是大了,但是接收到的超声波总是不能正确的反馈回去(已经延时2ms才开接收中断)。纳闷啊。
买了网上的一个模块,US-100,这个模块很神奇,发送波形大概在+/-5V,但是波形很漂亮,没有什么余波;接收波形也很清楚。约有200mv。
点赞  2012-3-29 15:24
用变压器的激励信号峰峰值可以超过100V,极限值要看换能器的耐受能力,波形问题反而不必太操心,频率准确最重要,剩下的靠共振。另外CX20106是设计用于38KHz红外遥控信号的前置放大,本身增益也不够,用适当的运放前置放大器可以取得更好的接收灵敏度。
换能器的余振可以用反冲法大幅降低,同时配合软件窗口方法滤除余振的影响。
点赞  2012-3-29 23:18
谢谢各位的指导
点赞  2012-4-10 20:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复