超声波测距模块工作原理

本文介绍了超声波测距模块的工作原理,包括触发测距的IO口操作,自动发送与检测信号的过程,以及如何计算测试距离。模块具有高精度和小盲区,适用于多种应用场景如机器人避障、物体测距等。编程原理部分提到需对串口进行115200波特率初始化,并通过给Trig口发送10us高电平使模块开始工作,通过Echo口的高电平时间计算距离。

超声波测距模块工作原理

(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
(4)本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值

Trig负责接收10us以上的触发信号,Echo则是输出距离信号
本模块性能稳定,测度距离精确,模块高精度,盲区小
产品应用领域: 机器人避障 物体测距 液位检测 公共安防 停车场检测 。

模块测距的操作步骤:
在这里插入图片描述

编程原理

首先要对串口进行初始化,超声波模块必须要用到115200波特率的串口初始化

void InitUar_115200()
{
	SCON = 0x50; //数据位8位,停止位1位,起始位1位怎么配!都要根据芯片手册来写 ,使能接收
	
	T2CON = 0x34;// |=0x1 << 5 | 0x1 << 4; 	//RCLK  TCLK 都置位1
	
	TH2 =0xFF;
	TL2 =0xFD;
	
	RCAP2H=0xFF;
	RCAP2L=0xFD;
	
	TR2=1;   //启动定时器,让定时器工作,数节拍!


	ES = 1;
	EA = 1;

}

接着是对超声波模块进行初始化,让超声波开始工作,给超声波10us的高电平,超声波初始化包括计时器功能。要给超声波脉冲,首先给它一个低电平,再给他连续的10us的高电平,再拉低。

void delay10us()
{
	TMOD |= 0x1;
	TH0 = 0xff;
	TL0 = 0xf6;
	TR0 = 1;
	while(TF0 != 1);		/等待溢出
	TF0 = 0;		//溢出后让它重新置0
}
void Init_CSB()
{
	Trig = 0;
	Trig = 1;
	delay10us();
	Trig = 0;
}

超声波接口Trig进行了10us的脉冲之后,会去检测接口Echo的值,Echo的值置为高电平后,开始计时,Echo=1置为低电平后返回,发出值,结束计时:

    void Star_time()
    {
    	TH0 = 0;
    	TL0 = 0;		//让计时器从0开始数数
    	TR0 = 1;		//开始计时
    }
    
    void Stop_time()		//结束计时
    {
    	TR0 = 0;	
    }
    
    int Get_time()		//获取波的时间
    {
    	unsigned int time;
    	time = TH0 << 8	| TL0;		//次数一次的时间 us或 TH0256+TL0 跳动的次数(跳动一次的时间是10us)
    	return time;
    }
    
    float Get_distance()		//获取距离
    {	
    	float distance;
    	distance =(float)time * 0.017;		//340/2 * 100/1000000	
    	return distance;	
    }				


主函数如下:
int main()
{
	unsigned int time;
	float dis;
	char buf[24]={'\0'};

	InitUar_115200();
	while(1)
	{										    	
	  	Init_CSB();
		while(Echo != 1);		//波出去,echo1,退出循环,并开始计时
		Star_time();
		while(Echo != 0);		//波回来,echo0,退出循环,并结束计时
		Stop_time();
		time = Get_time();		//获取波的时间
		dis=Get_distance();		//计算距离
		
		sprintf(buf,"distance:%fcm\r\n",dis);		//输出结果
		Stringsend(buf);	

定义全局变量

sbit Trig = P1^0;
sbit Echo = P1^1; //连接的接口

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值