其他分享
首页 > 其他分享> > STM(三十二)超声波测距

STM(三十二)超声波测距

作者:互联网

1、超声波模块简介

                                

如上图接线,VCC供3.3v~5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出等四个接口端。

2、基本工作原理

(1)采用IO口TRIG触发测距,给最少10us 的高电平信号。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口 ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

3、电气参数

 

 

 4、超声波时序图

 

 

   以上时序图表明你只需要TRIG脚提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。--旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: uS/58=厘米或者 uS/148=英寸;或是:距离=高电平时间*声速(340M/S) /2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。

:

此实验将超声波模块接到STM32F407ZT06的camera脚上进行实验。

 

 

 如上图,超声波模块的TRIG脚接到DCMI_D1(即接到STM32的PC7脚,),ECHO接到DCMI_D2(PC8)

5、代码

//Sr.04文件
{
	GPIO_InitTypeDef GPIO_InitStruct;
	//1.初始化时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
	
	//2.初始化硬件
	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_8;//PC8
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;//输出模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//速度 快速 25MHz
	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;//上拉
	GPIO_Init(GPIOC,&GPIO_InitStruct);	
	
	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_7;//PC1
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;//输出模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//速度 快速 25MHz
	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;//上拉
	GPIO_Init(GPIOC,&GPIO_InitStruct);
}

uint32_t Get_Sr04_Distance(void)
{
	uint32_t t=0;
	//空闲状态
	PCout(7)=0;
	delay_us(5);
	//1.TRIG触发信号   ----是一个至少10us的高电平
	PCout(7)=1;
	delay_us(12);
	PCout(7)=0;
	//2.模块自动发送8个40KHz的方波,我们不用管
	//3.计算高电平持续时间
	while(!PCin(8));//把低电平跑完
	while(PCin(8))//只需要算出这个循环持续的时间就是高电平持续时间
	{
		//340m/s-->340000mm/1000000us=0.34mm/us
		//3mm/0.34 = 8.82....us  约等于 9us   也就是说一个3mm就需要9us
		delay_us(9);
		t++;//一个t就对应一个3mm
	}
	t=t/2;//超声波一个来回,所以除以2
	return (3*t);//返回的是mm级别
}

  

 

 

 

标签:三十二,信号,高电平,STM,输出,模块,InitStruct,GPIO,测距
来源: https://www.cnblogs.com/yuanqiangfei/p/14772267.html