⑴ 怎么用单片机完成对超声波传感器检测到的计数功能
不行的,输出部分要加放大电路.最好能使用9V以上的电压.接收端要进行选频放大.最好用LM567.这样才能接入单片机. 我建议你最好用红外线进行检测.成品的对射距离很长的.
⑵ 用51单片机实现超声波测距怎样才可以测到4m
输出用并联门电路驱动,如CD4069,以增大输出电流。
接收采用低噪声运放,如NE5532,放大1000倍。
采用接收,发射分开的探头
超声波测距系统的软件设计,由于超声发射传感器与超声接收传感器相隔很近,当发射超声波时,接收传感器会收到很强的干扰信号。为防止系统的误测,在软件上采用延迟接收技术,来提高系统的抗干扰能力。一旦按下起始键,即发送发射超声波的指令,同时单片机控制系统开始执行程序,完成对温度的采样、滤波,然后获得发送、接收超声波的时间间隔,最后计算出距离值。
(1) 接收放大电路,可加入带通滤波或锁相放大(LM567)以尽可能减少干扰信号引起误触发,另外为防止发射信号直接进入接收端所以设置一定的延时。锁相应用电路,调整在40KHZ上,但要考虑加入后对接收处理的延时,用软件调整。
另一方面可采用自动增益补偿技术,随着时间的增加, AGC的放大倍数呈指数规律变化,从而保证了超声波接收器波形的幅值不随测量距离的变化而大幅变化,使得每次在同一个波头触发计时电路,提高了系统测量准确度。电路可以采用如下图所示或者采用单片AD603实现,在这里不具体讨论。
(2)发射驱动电路,为放大驱动脉冲可以再加入一级三极管放大电路,三极管要选用高频的如9018以减少放大后波形的失真;另一方面还可以根据超声波发生器的特点合理设计阻抗匹配,功放效率和机电转换效率;为此可采用脉冲变压器,脉冲变压器是超声换能器驱动电路中最重要的器件,它的用途是升高脉冲电压信号,并使功率放大器的输出阻抗与换能器的负载阻抗匹配。一般脉冲变压器以变压器的功率、原副边电压信号的幅值确定变压器的尺寸和变比;而超声换能器驱动用变压器则主要以功率和原副边电感及阻抗匹配确定变压器的尺寸和变比。缺点是制作和测量都比较麻烦。在大量程应用场合还可以应用电容瞬间放电或电感瞬间放电产生高压激励脉冲。
(3)其它可改善的地方,可采用超声波测距专用芯片SB5027;也可以采用LM1812N单片超声波收发集成电路。
⑶ 单片机如何检测超声波回波
发出超声波的时候,定时器开始计时,同时打开输入捕获中断,
当超声波返回时,中断被触发,停止计时,可以得到超声波从出发到返回的时间
⑷ 单片机超声波测距系统原理
超声波测距学习板,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.27~4.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。超声波测距原理
超声波发生器内部结构有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波本时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。在超声探测电路中,发射端得到输出脉冲为一系列方波,其宽度为发射超声的时间间隔,被测物距离越大,脉冲宽度越大,输出脉冲个数与被测距离成正比。超声测距大致有以下方法:① 取输出脉冲的平均值电压,该电压 (其幅值基本固定 )与距离成正比,测量电压即可测得距离;② 测量输出脉冲的宽度,即发射超声波与接收超声波的时间间隔 t,故被测距离为 S=1/2vt。本测量电路采用第二种方案。由于超 声波 的声速 与温度有关,如果温度变化不大,则可认为声速基本不变 。如果测距精度要求很高,则应通 过温度补偿 的方法加以校正。超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。
采用AT89C51或AT89S51单片机,晶振:12M,单片机用P1.0口输出超声波换能器所需的40K方波信号,利用外中断0口监测超声波接收电路输出的返回信号,显示电路采用简单的4位共阳LED数码管,断码用74LS244,位码用8550驱动.
超声波测距的算法设计: 超声波在空气中传播速度为每秒钟340米(15℃时)。X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,则有340m×0.03S=10.2m。由于在这10.2m的时间里,超声波发出到遇到返射物返回的距离。
硬件部分采用AT89C51或AT89S51单片机,晶振:12M,单片机用P1.0口输出超声波换能器所需的40K方波信号,利用外中断0口监测超声波接收电路输出的返回信号,显示电路采用简单的4位共阳LED数码管,断码用74LS244,位码用8550驱动. 主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。采用AT89S51来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
1.单片机系统及显示电路
单片机采用89S51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。
单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接受电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管驱动。单片机系统及显示电路如下图所示.
使用CX20106A集成电路对接收探头受到的信号进行放大、滤波。其总放大增益80db。以下是CX20106A的引脚注释。
1脚:超声信号输入端,该脚的输入阻抗约为40kΩ。
2脚:该脚与地之间连接RC串联网络,它们是负反馈串联网络的一个组成部分,改变它们的数值能改变前置放大器的增益和频率特性。增大电阻R1或减小C1,将使负反馈量增大,放大倍数下降,反之则放大倍数增大。但C1的改变会影响到频率特性,一般在实际使用中不必改动,推荐选用参数为R1=4.7Ω,C1=1μF。
3脚:该脚与地之间连接检波电容,电容量大为平均值检波,瞬间相应灵敏度低;若容量小,则为峰值检波,瞬间相应灵敏度高,但检波输出的脉冲宽度变动大,易造成误动作,推荐参数为3.3μf。
4脚:接地端。
5脚:该脚与电源间接入一个电阻,用以设置带通滤波器的中心频率f0,阻值越大,中心频率越低。例如,取R=200kΩ时,f0≈42kHz,若取R=220kΩ,则中心频率f0≈38kHz。
6脚: 该脚与地之间接一个积分电容,标准值为330pF,如果该电容取得太大,会使探测距离变短。
7脚:遥控命令输出端,它是集电极开路输出方式,因此该引脚必须接上一个上拉电阻到电源端,推荐阻值为22kΩ,没有接受信号是该端输出为高电平,有信号时则产生下降。 8脚:电源正极,4.5~5V。
软硬件调试及性能
超声波测距仪的制作和调试,其中超声波发射和接收采用Φ16的超声波换能器TCT40-16F1(T发射)和TCT40-16S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.07~5.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。后续工作需实验后才能验证 根据参考电路和集成的电路器件测距范围有限10m以内为好。
⑸ 用单片机制作超声波测距的问题
没有打开EA总中断!
而且在HHH子程序结束后,没有跳转指令或等待指令,让程序无处运行。
感觉编的思路好像有点太费力了。
我的建议:
开机后把定时器设到定时时间长一些,先不开。
假如说,我们把定时器时间定为125ms,然后在定时器中断的程序中,先进行TH的恢复,再在里面设置某寄存器加1程序,后面会用到。
发送超声波后,紧跟着起动定时器,
起动完后,一直反复检查P1.6口是否收到,当收到后,关闭定时器,读出定时器的TH值以及中断里面寄存器的值,根据这两个值,不就可以算出比较准确的时间了吗?
而且这是一次性的,不需要在每个距离上试验。
⑹ 单片机的超声波测距,至少要三个超声波模块,前、左、右各个方向同时检测,得出三个方向的最小距离并报警
单片机的超声波测距,至少要三个超声波模块,前、左、右各个方向同时检测,得出三个方向的最小距离并报警,这有可能造成相互干扰,要分时进行,一个一上顺序测量。
⑺ 51单片机超声波模块测试程序怎样写
//晶振=8M
//MCU=STC10F04XE
//P0.0-P0.6共阳数码管引脚
//Trig = P1^0
//Echo = P3^2
#include <reg52.h> //包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
//***********************************************
sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频
//为STC单片机的IO口设置地址定义
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
sfr P1M1 = 0X91;
sfr P1M0 = 0X92;
sfr P2M1 = 0X95;
sfr P2M0 = 0X96;
//***********************************************
sbit Trig = P1^0; //产生脉冲引脚
sbit Echo = P3^2; //回波引脚
sbit test = P1^1; //测试用引脚
uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9
uint distance[4]; //测距接收缓冲区
uchar ge,shi,,temp,flag,outcomeH,outcomeL,i; //自定义寄存器
bit succeed_flag; //测量成功标志
//********函数声明
void conversion(uint temp_data);
void delay_20us();
//void pai_xu();
void main(void) // 主程序
{ uint distance_data,a,b;
uchar CONT_1;
CLK_DIV=0X03; //系统时钟为1/8晶振(pdf-45页)
P0M1 = 0; //将io口设置为推挽输出
P1M1 = 0;
P2M1 = 0;
P0M0 = 0XFF;
P1M0 = 0XFF;
P2M0 = 0XFF;
i=0;
flag=0;
test =0;
Trig=0; //首先拉低脉冲输入引脚
TMOD=0x11; //定时器0,定时器1,16位工作方式
TR0=1; //启动定时器0
IT0=0; //由高电平变低电平,触发外部中断
ET0=1; //打开定时器0中断
//ET1=1; //打开定时器1中断
EX0=0; //关闭外部中断
EA=1; //打开总中断0
while(1) //程序循环
{
EA=0;
Trig=1;
delay_20us();
Trig=0; //产生一个20us的脉冲,在Trig引脚
while(Echo==0); //等待Echo回波引脚变高电平
succeed_flag=0; //清测量成功标志
EX0=1; //打开外部中断
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //
TR1=1; //启动定时器1
EA=1;
while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断
if(succeed_flag==1)
{
distance_data=outcomeH; //测量结果的高8位
distance_data<<=8; //放入16位的高8位
distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据
distance_data*=12; //因为定时器默认为12分频
distance_data/=58; //微秒的单位除以58等于厘米
} //为什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
if(succeed_flag==0)
{
distance_data=0; //没有回波则清零
test = !test; //测试灯变化
}
/// distance[i]=distance_data; //将测量结果的数据放入缓冲区
/// i++;
/// if(i==3)
/// {
/// distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
/// pai_xu();
/// distance_data=distance[1];
a=distance_data;
if(b==a) CONT_1=0;
if(b!=a) CONT_1++;
if(CONT_1>=3)
{ CONT_1=0;
b=a;
conversion(b);
}
/// i=0;
/// }
}
}
//***************************************************************
//外部中断0,用做判断回波电平
INTO_() interrupt 0 // 外部中断是0号
{
outcomeH =TH1; //取出定时器的值
outcomeL =TL1; //取出定时器的值
succeed_flag=1; //至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器0中断,用做显示
timer0() interrupt 1 // 定时器0中断是1号
{
TH0=0xfd; //写入定时器0初始值
TL0=0x77;
switch(flag)
{case 0x00:P0=ge; P2=0xfd;flag++;break;
case 0x01:P0=shi;P2=0xfe;flag++;break;
case 0x02:P0=;P2=0xfb;flag=0;break;
}
}
//*****************************************************************
/*
//定时器1中断,用做超声波测距计时
timer1() interrupt 3 // 定时器0中断是1号
{
TH1=0;
TL1=0;
}
*/
//******************************************************************
//显示数据转换程序
void conversion(uint temp_data)
{
uchar ge_data,shi_data,_data ;
_data=temp_data/100 ;
temp_data=temp_data%100; //取余运算
shi_data=temp_data/10 ;
temp_data=temp_data%10; //取余运算
ge_data=temp_data;
_data=SEG7[_data];
shi_data=SEG7[shi_data];
ge_data =SEG7[ge_data];
EA=0;
= _data;
shi = shi_data;
ge = ge_data ;
EA=1;
}
//******************************************************************
void delay_20us()
{ uchar bt ;
for(bt=0;bt<100;bt++);
}
/*
void pai_xu()
{ uint t;
if (distance[0]>distance[1])
{t=distance[0];distance[0]=distance[1];distance[1]=t;} /*交换值
if(distance[0]>distance[2])
{t=distance[2];distance[2]=distance[0];distance[0]=t;} /*交换值
if(distance[1]>distance[2])
{t=distance[1];distance[1]=distance[2];distance[2]=t;} /*交换值
}
*/
⑻ 单片机:随便解释下超声波时序图。有图的
这是一组完整的测试信号,触发信号告诉你测试开始,发出信号作为探测能量发射,回响信号是接收信号的结果。
作为系统会连续发射几组这样的信号,把接收信号平均结果作为显示,这样几组作为一个单元在系统内部不断工作,数据就会不断更新。
⑼ 怎么用51单片机做超声波测距实验
设计软件时传感器在发射超声波时输出高电平,在接收到反射信号后,将输出复位成低电平。这个高电平时间就是超声波在某块与障碍物之间往返一次所需的时间。当无障碍物时,高电平会无限期延续下去,可这样就无法启动下一个超声波发送,你可以在一段合适的时间后,用软件将其强制复位。这个时间决定这个模块的最大检测距离。
超声波测距我也没用过,我在网上查了下,感觉也不是太难,你用的什么型号的超声波传感器的质料找到,硬件连接应该在网上也能找的到。自己多动手学的会快点。我也是新手,呵呵。
⑽ 基于单片机的超声波测距怎么实现
单片机+发射电路+换能器+接收电路+软件就等于基于单片机的超声波测距。所以一个一个去解决就好了。