基于HC-SR04模塊和STM32F103ZET6開發板實現超聲波測距DIY設計方案


原標題:超聲波測距DIY設計方案
基于HC-SR04模塊和STM32F103ZET6開發板實現超聲波測距DIY設計方案
一、設計背景與目標
超聲波測距技術廣泛應用于距離測量、避障系統、液位檢測等領域。HC-SR04模塊是一種常用的超聲波測距模塊,它通過發射超聲波并接收反射回來的超聲波信號來測量距離。本設計將基于STM32F103ZET6開發板和HC-SR04超聲波模塊,通過編程實現超聲波的發射和接收,并通過STM32的處理能力進行計算,從而得到測量的距離。
二、硬件系統設計
2.1 HC-SR04超聲波模塊
HC-SR04模塊是一款常用的超聲波測距傳感器,采用了超聲波傳感器原理。它通過發射8個連續的40KHz頻率的超聲波脈沖,并接收從目標物體反射回來的超聲波信號來計算距離。其主要特點包括:
電源電壓: 5V(可通過穩壓模塊轉換為3.3V,適配STM32F103ZET6)
工作電流: 15mA(工作時)
測量范圍: 2cm到4m,分辨率約為0.3cm
輸出信號: 返回信號的時間與目標物體的距離成正比。
在硬件連接中,HC-SR04的Trig引腳控制超聲波的發射,Echo引腳輸出回波信號的持續時間。
2.2 STM32F103ZET6開發板
STM32F103ZET6是STMicroelectronics公司生產的32位微控制器,基于ARM Cortex-M3核心,具有強大的處理能力和豐富的外設資源。其主要特性如下:
主頻: 72MHz
存儲: 512KB Flash,64KB SRAM
輸入輸出: 提供多達51個GPIO引腳
外設接口: 支持I2C、SPI、UART、ADC、PWM等多種通信方式
定時器: 提供多種定時器和PWM功能,適合進行精確的時間控制和測量
在本設計中,STM32F103ZET6負責控制HC-SR04模塊的觸發、接收Echo信號,并通過定時器計算距離。
三、系統工作原理
系統的基本工作流程為:STM32通過Trig引腳發出一個短脈沖信號,HC-SR04接收到這個信號后發射超聲波。超聲波碰到物體后反射回HC-SR04,并通過Echo引腳輸出反射回波的時間。STM32F103ZET6開發板通過定時器計算回波的時間,并根據超聲波在空氣中的傳播速度(約為340m/s)計算出物體的距離。
工作流程可以分為以下幾個步驟:
觸發信號發射: STM32通過GPIO口控制Trig引腳,發送一個高電平脈沖,持續10us。
超聲波發射與回波接收: HC-SR04模塊發射超聲波,等待目標物體反射信號。
回波信號接收: 當接收到回波信號時,Echo引腳輸出一個高電平信號,STM32通過外部中斷或定時器捕獲該信號的持續時間。
計算距離: 使用公式
距離 = (回波時間 * 聲速) / 2
計算出物體與傳感器之間的距離。這里需要考慮到超聲波傳播的時間是雙程的,因此距離公式中的2。
四、詳細電路設計與原理圖
在本設計中,HC-SR04模塊與STM32F103ZET6開發板的連接方式非常簡單。VCC引腳連接到STM32的3.3V電源,Trig和Echo引腳連接到STM32的GPIO口。考慮到STM32F103ZET6的GPIO電平為3.3V,而HC-SR04的Echo引腳工作電平為5V,因此需要使用電平轉換電路,將Echo引腳的信號從5V轉換為STM32可接受的3.3V。
具體電路設計如下:
VCC連接到STM32的3.3V輸出(可以使用外部電源適配器)
Trig引腳連接到STM32的某個GPIO口(如PA0)
Echo引腳通過電平轉換電路連接到STM32的某個GPIO口(如PA1)
五、軟件設計
5.1 STM32初始化配置
在STM32的初始化過程中,首先需要配置Trig和Echo引腳為輸出和輸入模式,并使能定時器中斷或GPIO中斷,以便精準地捕捉Echo信號的返回時間。
// GPIO初始化
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置Trig引腳為輸出
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置Echo引腳為輸入
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
5.2 超聲波觸發與接收
STM32通過定時器或GPIO中斷來測量Echo信號的持續時間,并計算出距離。超聲波信號的時間計算公式如下:
// 超聲波觸發函數
void Trigger_HC_SR04(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 觸發Trig信號
HAL_Delay(0.01); // 10ms
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 停止Trig信號
}
// 回波時間測量
uint32_t Measure_Echo_Time(void)
{
uint32_t startTime = 0, endTime = 0;
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET); // 等待Echo信號的上升沿
startTime = HAL_GetTick(); // 獲取開始時間
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET); // 等待Echo信號的下降沿
endTime = HAL_GetTick(); // 獲取結束時間
return endTime - startTime;
}
5.3 距離計算
超聲波的傳播速度是已知的,因此可以通過回波時間來計算物體的距離。公式如下:
// 計算距離
float Calculate_Distance(uint32_t echoTime)
{
float distance = echoTime * 0.0343 / 2; // 0.0343是聲波速度340m/s轉化為微秒的單位換算系數
return distance;
}
六、測試與調試
通過程序完成后,需要進行測試與調試。在測試過程中,檢查超聲波模塊的工作是否正常,是否能夠正確發射并接收回波信號;檢查STM32的定時器或中斷是否正常響應,計算出的距離是否準確。
七、總結與優化
通過本設計,我們實現了基于STM32F103ZET6和HC-SR04的超聲波測距系統。在此基礎上,可以進一步優化系統,比如通過增加LCD顯示、無線傳輸、數據存儲等功能來擴展應用。此外,系統的精度和測量范圍可以通過更換更高精度的傳感器或優化算法來提高。
責任編輯:David
【免責聲明】
1、本文內容、數據、圖表等來源于網絡引用或其他公開資料,版權歸屬原作者、原發表出處。若版權所有方對本文的引用持有異議,請聯系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學習使用,不涉及商業目的。
3、本文內容僅代表作者觀點,拍明芯城不對內容的準確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關結果。
4、如需轉載本方擁有版權的文章,請聯系拍明芯城(marketing@iczoom.com)注明“轉載原因”。未經允許私自轉載拍明芯城將保留追究其法律責任的權利。
拍明芯城擁有對此聲明的最終解釋權。