STM(三十二)超聲波測距


1、超聲波模塊簡介

                                

如上圖接線,VCC供3.3v~5V電源,GND為地線,TRIG觸發控制信號輸入,ECHO回響信號輸出等四個接口端。

  • 品牌:HC-SR04
  • 可提供2cm~400cm的非接觸式的距離感測功能
  • 精度高達3mm.
  • 模塊包括聲波發射器、接收器與控制電路。
  • 工作電壓:3.3V-5V.

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以上,以防止發射信號對回響信號的影響。

:

  •  此模塊不宜帶電連接,若要帶電連接,則先讓模塊的GND端先連接,否則會影響模塊的正常工作。
  • 測距時,被測物體的面積不少於0.5平方米且平面盡量要求平整,否則影響測量的結果。

此實驗將超聲波模塊接到STM32F407ZT06的camera腳上進行實驗。

 

 

 如上圖,超聲波模塊的TRIG腳接到DCMI_D1(即接到STM32的PC7腳,),ECHO接到DCMI_D2(PC8)

  • 由時序圖上可以看出TRIG作為輸出腳,先輸出低電平,再輸出一個至少10us高電平的觸發信號給模塊。
  • 模塊內部會發8個40KHZ周期電平並檢測回波。(發到模塊內部,不是發到ECHO腳,所以代碼中不用處理這個電平)。
  • 一旦檢測到回波,模塊則會通過ECHO腳(對於MCU是輸入)輸出回響信號(即高電平),通過MCU收到的高電平信號的時間就可以算出距離。距離=高電平時間*聲速(340m/s)/2,(因為超聲波發出去再反射回來,所以測出來的距離要除以2)。

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級別
}

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM