目錄
超聲波模塊介紹
超聲波模塊在電子DIY作品中實現(xiàn)小車避障測距等方面均應(yīng)用廣泛,在大學(xué)生智能車DIY愛好者中尤為顯眼。
①實物圖

②產(chǎn)品說明
HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達3mm,包括發(fā)射器、接收器與控制電路,它是一種壓電式傳感器,利用電致伸縮現(xiàn)象而制成。
③電氣參數(shù)
| 電氣參數(shù) | HCSR04超聲波模塊 |
|---|---|
| 工作電壓 | DC5V |
| 工作電流 | 15mA |
| 工作頻率 | 40KHz |
| 最遠射程 | 4M |
| 最近射程 | 2cm |
| 測量角度 | 15° |
| 輸入觸發(fā)信號 | 10us的TTL脈沖 |
| 輸出回響信號 | 輸出TTL電平信號,與射程成比例 |
④超聲波工作原理
首先我們可以看下面的一張超聲波的時序圖:
圖中我們可以大致看出,要使用HCSR04這個超聲波模組,我們必須先給超聲波發(fā)送一個觸發(fā)信號,引導(dǎo)超聲波內(nèi)部循環(huán)發(fā)出8個40Khz的脈沖然后輸出回響信號引腳上拉為高電平,然后我們利用超聲波回響信號引腳的高電平所得計數(shù)時間經(jīng)過相關(guān)運算就可以得到對應(yīng)的距離,具體公式如下:
測試距離 = (高電平時間聲速(340M/S)/2)= ((float)t/58.0)
這個公式的具體換算過程,大家可以用以前學(xué)過的知識進行還算下,最后得到的距離單位是厘米。
下面放一張超聲波的引腳功能示意圖,能更好的理解HCSR04的具體使用和接線在代碼中:
驅(qū)動代碼
之前寫過用51單片機驅(qū)動HCSR04在LCD1602上的驅(qū)動代碼,這篇文章我使用STM32驅(qū)動HCSR04在0.96OLED(使用人數(shù)較多并且開源初始化代碼方便移植)上面使用的驅(qū)動代碼。
①STM32配置初始化代碼
時鐘和GPIO以及中斷相關(guān)配置:
void HCSR04_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定義定時器結(jié)構(gòu)體
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//IO 初始化
GPIO_InitStructure.GPIO_Pin = HCSR04_TRIG; //發(fā)送高點平引腳
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO; //返回電平引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);
//定時器初始化使用基本定時器3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //打開TIM3定時器時鐘
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period = 65535; //(1000-1); //設(shè)置在下一個更新時間裝入活動的自動重裝載寄存器周期的值 計數(shù)到1000為1ms
TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //設(shè)置用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻 1M的計時頻率 1US計數(shù)
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //不分頻
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數(shù)模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //清除更新中斷避免立即產(chǎn)生更新中斷
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //啟用計時器更新中斷
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //設(shè)置中斷服務(wù)
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //次優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //啟用中斷
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3,DISABLE);
}
//定時器中斷服務(wù)程序
void TIM3_IRQHandler(void) //TIM3中斷
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查TIM更新中斷是否發(fā)生
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIM更新中斷標志位
msHcCount++;
}
}
①超聲波驅(qū)動應(yīng)用代碼
下面展示寫根據(jù)超聲波時序圖可以寫出下面的驅(qū)動代碼:
//開始計數(shù)
static void StartTimer() //打開定時器
{
TIM_SetCounter(TIM3,0); //清除計數(shù)
msHcCount = 0;
TIM_Cmd(TIM3, ENABLE); //啟用TIM3外設(shè)
}
static void StopTimer() //關(guān)閉定時器外設(shè)
{
TIM_Cmd(TIM3, DISABLE); //關(guān)閉TIM定時器外設(shè)
}
//獲取計時器時間
float GetEchoTimer(void)
{
u32 t = 0;
t = msHcCount*1000; //得到ms
t += TIM_GetCounter(TIM3); //得到us
TIM3- >CNT = 0; //將TIM3定時計數(shù)器的寄存器清零
delay_ms(50);
return t;
}
②超聲波距離計算代碼
//取五次數(shù)據(jù)平均值,為了使測距所得到的值更加精確可采取多次測距的平均值來使用應(yīng)用中
float HCSR04GetLength(void)
{
u32 t = 0;
int i = 0;
float lengthTemp = 0;
float sum = 0;
float distance;
for(i=0;i< 5;i++){
TRIG_SEND = 1; //發(fā)送高電平輸出
delay_us(20);
TRIG_SEND = 0;
while(ECHO_RECEIVE == 0); //等待接收高電平輸出
StartTimer(); //打開計時器
while(ECHO_RECEIVE == 1);
StopTimer(); //關(guān)閉計時器
t = GetEchoTimer(); //獲取時間,解析度為1US
lengthTemp = ((float)t/58.2); //cm
sum = lengthTemp + sum ;
}
distance = 100*sum/5.0;
return distance;
}
具體測試現(xiàn)象
本次使用OLED屏幕顯示超聲波所測距離并顯示如下圖所示:
總結(jié)
文章中使用的顯示方式為0.96寸OLED模塊顯示,驅(qū)動MCU使用的為STM32F103C8T6,在使用HCSR04的過程中也可以自己根據(jù)HCSR04的驅(qū)動代碼所得到的距離值去做其他的接口應(yīng)用,例如做小車,或者其他測距案例均可移植使用,需要完整工程的可下方留言郵箱獲取。
-
模塊
+關(guān)注
關(guān)注
7文章
2848瀏覽量
53428 -
超聲波
+關(guān)注
關(guān)注
63文章
3320瀏覽量
145990 -
測距
+關(guān)注
關(guān)注
2文章
115瀏覽量
20853
發(fā)布評論請先 登錄
求msp430f149與hcsr04程序,
基于STM32超聲波測距設(shè)計的合集
基于STM32的超聲波測距設(shè)計
STM32f103是如何驅(qū)動超聲波測距模塊
淺析TM32F1系列超聲波測距程序
STM32F103ZET6超聲波測距hcsr04模塊
超聲波HCSR-04的驅(qū)動及開發(fā)講解
超聲波HCSR04模塊的工作原理是什么
用lcd1602顯示超聲波hcsr04測出的距離
使用STM32F103單片機實現(xiàn)超聲波測距OLED顯示的設(shè)計程序和電路圖
STM32F103驅(qū)動HCSR04超聲波測距顯示
評論