日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HC_SR04超声波模块的应用

發布時間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HC_SR04超声波模块的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 簡介


HC-SR04 超聲波測距模塊可提供 2cm-400cm 的非接觸式距離感測功能,測 距精度可達高到 3mm ;模塊包括超聲波發射器、接收器與控制電路。

電氣參數HC-SR04 超聲波模塊
工作電壓DC 5 V
工作電流15mA
工作頻率40kHz
最遠射程4m
最近射程2cm
測量角度15 度
輸入觸發信號10uS 的 TTL 脈沖
輸出回響信號輸出 TTL 電平信號,與射程成比例
規格尺寸45X20X15mm

2 時序圖


簡單來說

  • 提供一個 10uS 以上脈沖觸發信號,該模塊內部將發出 8 個 40kHz 周期電平并檢測回波。
  • 一旦檢測到有回波信號則輸出回響信號。回響信號的脈沖寬度與所測的距離成正比。
  • 由此通過發射信號到收到的回響信號時間間隔可以計算得到距離。

測算公式:距離=高電平時間*聲速(340M/S)/2。

聲速與溫度有關,如果環境溫度變化顯著,必須考慮溫度補償問題。空氣中聲速與溫度的關系可以表示為

幾點注意事項

  • 建議測量周期為 60ms 以上,以防止發射信號對回響信號的影響。
  • 此模塊不宜帶電連接,若要帶電連接, 則先讓模塊的 GND 端先連接,否則會影響模塊的正常工作。
  • 測距時,被測物體的面積不少于 0.5 平方米且平面盡量要求平整,否則影響測量的結果。

3 程序設計(stm32)

思路:測量的距離與高電平的時間有關,而且高電平時間不超過60ms,那我們可以利用定時器來獲取高電平的時間。將定時器設置為720分頻,自動重裝載值為 7000,則每70ms進入一次中斷(如果進入了中斷說明距離超出最大測量范圍), 記一次數是10us。

3.1 測量函數

u8 sr04_over_flag; //當高電平時間大于70ms,說明超出最大測量范圍/** 函數功能:發送觸發信號*/ void SendTrigSign(void) {Trig=1;delay_us(15);Trig=0; }/** 函數功能:計算距離* 返 回 值:Distance 距離 */ float distance_Count(void) { u8 time = 0;float Speed;float Distance;time = TIM_GetCounter(TIM4);TIM_SetCounter(TIM4,0);//計數器值清零Speed = 331.4 + 0.607 * Temp;//計算聲速,Temp是當前溫度值Distance = (time*Speed)/2; //距離測算return Distance; }/** 函數功能:控制定時器,測量高電平時間* 返 回 值: f 距離*/ float Ultrasound_Measure(void) {float f = 0.0 ;sr04_over_flag = 0 ; SendTrigSign() ;while(!Echo); //當回響信號為零時等待TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//使能或者失能指定的TIM中斷TIM_Cmd(TIM4,ENABLE);//使能TIM4外設while(Echo);TIM_ITConfig(TIM4,TIM_IT_Update,DISABLE);//使能或者失能指定的TIM中斷TIM_Cmd(TIM4,DISABLE);//失能TIM4外設 if(sr04_over_flag==1){f = 400 ;//最大距離,高電平時間持續大于70ms了}else {f = distance_Count();}return f ; }

3.2 初始化函數

/** 函數功能:初始化超聲波模塊的兩個管腳* Trig 觸發信號控制輸入-----PC9配置成推挽輸出* Echo 回響信號輸出---------PC8配置成上拉輸入*/ void Ultrasonic_IO_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //Trig-->PC.9 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; ; //上拉輸入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOC, &GPIO_InitStructure); //根據設定參數初始化GPIOC.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //Echo-->PC.8 端口配置, 推挽輸出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOC, &GPIO_InitStructure); //推挽輸出 ,IO口速度為50MHzGPIO_ResetBits(GPIOC,GPIO_Pin_9); //PC.9 輸出低 }/** 函數功能:通用定時器4初始化* 形 參:arr:自動重裝值* psc:時鐘預分頻數*/ void TIM4_time_init(u16 arr,u16 psc ) {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //時鐘使能TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位 NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM4中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占優先級0級NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優先級3級NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設 }

3.3 定時器中斷服務函數

void TIM4_IRQHandler(void) //TIM4中斷 {if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源 {TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除TIMx的中斷待處理位:TIM 中斷源 sr04_over_flag = 1; } }

3.4 main.c

int main(void) { float dis;delay_init(); //延時函數初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級uart_init(9600);Ultrasonic_IO_Init();TIM4_time_init(6999,719);//定時器70ms中斷一次T = ((719+1)*(6999+1)) /72000 000 =70ms while(1){dis = Ultrasound_Measure();printf("距離為%f\r\n",dis);//單位cm}

總結

以上是生活随笔為你收集整理的HC_SR04超声波模块的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。