色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于CW32模塊的SR04超聲波測距傳感器設計

jf_qE49KoVBr8 ? 來源:武漢芯源半導體 ? 2024-11-12 11:19 ? 次閱讀

01 模塊來源

模塊實物展示:

e8ef7c16-a09e-11ef-93f3-92fbcf53809c.png

02 規(guī)格參數(shù)

工作電壓:3-5.5V

工作電流:5.3MA

感應角度:小于15度

探測距離:2CM-600CM

探測精度:0.1CM+1%

輸出方式: GPIO

管腳數(shù)量:4 Pin

以上信息見廠家資料文件

03 移植過程

我們的目標是將例程移植至CW32F030C8T6開發(fā)板上【能夠判斷前方障礙物距離的功能】。首先要獲取資料,查看數(shù)據(jù)手冊應如何實現(xiàn)讀取數(shù)據(jù),再移植至我們的工程。

3.1 查看資料

e9127d38-a09e-11ef-93f3-92fbcf53809c.png

只需要在 Trig 管腳(觸發(fā)信號)輸入一個 10US 以上的高電平,系統(tǒng)便可發(fā)出 8 個 40KHZ 的超聲波脈沖,然后檢測回波信號。當檢測到回波信號后,通過 Echo 管腳輸出。根據(jù) Echo 管腳輸出高電平的持續(xù)時間可以計算距離值。即距離值為:(高電平時間*340m/s)/2。

??當測量距離超過 HC-SR04 的測量范圍時,仍會通過 Echo管腳輸出高電平的信號,高電平的寬度約為 66ms。如圖所示:

e925fc5a-a09e-11ef-93f3-92fbcf53809c.png

測量周期:當接收到 HC-SR04 通過 Echo 管腳輸出的高電平脈沖后,便可進行下一次測量,所以測量周期取決于測量距離,當距離被測物體很近時,Echo 返回的脈沖寬度較窄,測量周期 就很短;當距離被測物體比較遠時,Echo 返回的脈沖寬度較寬,測量周期也就相應的變長。最壞情況下,被測物體超出超聲波模塊的測量范圍,此時 返回的脈沖寬度最長,約為 66ms,所以最壞情況下的測量周期稍大于 66ms 即可(取 70ms 足夠)。

3.2 引腳選擇

e92d60f8-a09e-11ef-93f3-92fbcf53809c.png

接線表

3.3 移植至工程

工程模板參考入門手冊的工程模板

移植步驟中的導入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_ultrasonic.c與bsp_ultrasonic.h。這里不再過多講述,移植完成后面修改相關代碼。

在文件bsp_ultrasonic.c中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-LP    first version
 */


#include "bsp_ultrasonic.h"




unsigned char msHcCount = 0;//ms計數(shù)
float distance = 0;


/******************************************************************
 * 函 數(shù) 名 稱:bsp_ultrasonic
 * 函 數(shù) 說 明:超聲波初始化
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:無
 * 作       者:LC
 * 備       注:TRIG引腳負責發(fā)送超聲波脈沖串
******************************************************************/
void Ultrasonic_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        BTIM_TimeBaseInitTypeDef BTIM_TimeBaseInitStruct; // 定時器基本初始化結構體


        RCC_SR04_ENABLE();        // 使能GPIO時鐘
        RCC_TIMER_ENABLE(); // 使能定時器時鐘


        // GPIO配置參數(shù)
        GPIO_InitStructure.Pins = GPIO_TRIG;
        GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; // 推挽輸出
        GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;


        GPIO_Init(PORT_SR04, &GPIO_InitStructure);




        GPIO_InitStructure.Pins = GPIO_ECHO;
        GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP; // 上拉輸入


        GPIO_Init(PORT_SR04, &GPIO_InitStructure);


        // 禁止中斷,以安全地配置NVIC
        __disable_irq();


        // 開啟BTIM1中斷,并關聯(lián)到NVIC
        NVIC_EnableIRQ(TIMER_IRQ);


        // 允許中斷,恢復中斷狀態(tài)
        __enable_irq();


        // 配置定時器模式、周期和預分頻器
        BTIM_TimeBaseInitStruct.BTIM_Mode = BTIM_Mode_TIMER; // 設置為定時器模式
        BTIM_TimeBaseInitStruct.BTIM_Period = 1000 - 1;   // 設置周期,使得定時器每1ms產生一次溢出中斷
        BTIM_TimeBaseInitStruct.BTIM_Prescaler = BTIM_PRS_DIV64; // 預分頻器設置為64,以降低時鐘頻率


    // 使用上述配置初始化定時器BTIM1
        BTIM_TimeBaseInit(PORT_TIMER, &BTIM_TimeBaseInitStruct);


        // 使能BTIM1的溢出中斷
        BTIM_ITConfig(PORT_TIMER, BTIM_IT_OV, ENABLE);


//        // 啟動定時器BTIM1
//        BTIM_Cmd(PORT_TIMER, ENABLE);




}
/******************************************************************
 * 函 數(shù) 名 稱:Open_Timer
 * 函 數(shù) 說 明:打開定時器
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:無
 * 作       者:LC
 * 備       注:
******************************************************************/
void Open_Timer(void)
{
    BTIM_SetCounter(PORT_TIMER, 0);   // 清除定時器計數(shù)


    msHcCount = 0;


    BTIM_Cmd(PORT_TIMER, ENABLE);   // 使能定時器
}


/******************************************************************
 * 函 數(shù) 名 稱:Get_TIMER_Count
 * 函 數(shù) 說 明:獲取定時器定時時間
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:數(shù)據(jù)
 * 作       者:LC
 * 備       注:
******************************************************************/
uint32_t Get_TIMER_Count(void)
{
    uint32_t time  = 0;
    time   = msHcCount*1000;              // 得到us
    time  += BTIM_GetCounter(PORT_TIMER); // 得到ms


    BTIM_SetCounter(PORT_TIMER, 0);   // 清除定時器計數(shù)
    delay_ms(10);
    return time ;
}


/******************************************************************
 * 函 數(shù) 名 稱:Close_Timer
 * 函 數(shù) 說 明:關閉定時器
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:無
 * 作       者:LC
 * 備       注:
******************************************************************/
void Close_Timer(void)
{
        BTIM_Cmd(PORT_TIMER, DISABLE);   // 關閉定時器
}


/******************************************************************
 * 函 數(shù) 名 稱:TIMER_IRQHandler
 * 函 數(shù) 說 明:定時器中斷服務函數(shù)
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:無
 * 作       者:LC
 * 備       注:1ms進入一次
******************************************************************/
void TIMER_IRQHandler(void)
{
    if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV))   // 檢查定時器中斷發(fā)生
    {
                msHcCount++;


        BTIM_ClearITPendingBit(PORT_TIMER, BTIM_IT_OV);  // 清除中斷標志
    }
}




/******************************************************************
 * 函 數(shù) 名 稱:Hcsr04GetLength
 * 函 數(shù) 說 明:獲取測量距離
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:測量距離
 * 作       者:LC
 * 備       注:無
******************************************************************/
float Hcsr04GetLength(void)
{
        /*測5次數(shù)據(jù)計算一次平均值*/
        float length = 0;
        float t = 0;
        float sum = 0;
        unsigned int  i = 0;
        while(i != 10)
        {


                SR04_TRIG(1);//trig拉高信號,發(fā)出高電平
                delay_1us(20);//持續(xù)時間超過10us
                SR04_TRIG(0);//trig拉低信號,發(fā)出低電平
                /*Echo發(fā)出信號 等待回響信號*/
                /*輸入方波后,模塊會自動發(fā)射8個40KHz的聲波,與此同時回波引腳(echo)端的電平會由0變?yōu)?;
                (此時應該啟動定時器計時);當超聲波返回被模塊接收到時,回波引 腳端的電平會由1變?yōu)?;
                (此時應該停止定時器計數(shù)),定時器記下的這個時間即為
                                                                                超聲波由發(fā)射到返回的總時長;*/


                while(SR04_ECHO() == GPIO_Pin_RESET);//echo等待回響


                Open_Timer();   //打開定時器


                i++;


                while(SR04_ECHO() == GPIO_Pin_SET);


                Close_Timer();   // 關閉定時器


                t = Get_TIMER_Count();   // 獲取時間,分辨率為1us
                length = (float)t / 58.0f;   // cm
                sum += length;
        }


        length = sum/10;//五次平均值
        distance = length;
        return length;
}

?

在文件bsp_ultrasonic.h中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-LP    first version
 */
#ifndef _BSP_ULTRASONIC_H_
#define _BSP_ULTRASONIC_H_


#include "board.h"


#define RCC_SR04_ENABLE()     __RCC_GPIOA_CLK_ENABLE()


#define PORT_SR04             CW_GPIOA


#define GPIO_TRIG             GPIO_PIN_1
#define GPIO_ECHO             GPIO_PIN_2


#define RCC_TIMER_ENABLE()    __RCC_BTIM_CLK_ENABLE()
#define PORT_TIMER            CW_BTIM1


#define TIMER_IRQ             BTIM1_IRQn
#define TIMER_IRQHandler      BTIM1_IRQHandler


#define SR04_TRIG(x)          GPIO_WritePin( PORT_SR04, GPIO_TRIG, x?GPIO_Pin_SET:GPIO_Pin_RESET)
#define SR04_ECHO()           GPIO_ReadPin( PORT_SR04, GPIO_ECHO )


void Ultrasonic_Init(void);//超聲波初始化
float Hcsr04GetLength(void );//獲取超聲波測距的距離


#endif

?04 移植驗證

在自己工程中的main主函數(shù)中,編寫如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-LP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_ultrasonic.h"


int32_t main(void)
{
    board_init();        // 開發(fā)板初始化


    uart1_init(115200);        // 串口1波特率115200


    Ultrasonic_Init();
    printf("Start.......
");


    while(1)
    {
        printf((const char *)"距離為 = %.2fCM
",Hcsr04GetLength() );
        delay_ms(500);
    }
}

移植現(xiàn)象:距離20CM處擺放障礙物,輸出換算后的實際距離。

e94664fe-a09e-11ef-93f3-92fbcf53809c.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2550

    文章

    51035

    瀏覽量

    753068
  • 超聲波
    +關注

    關注

    63

    文章

    3014

    瀏覽量

    138348
  • 測距傳感器
    +關注

    關注

    0

    文章

    75

    瀏覽量

    20207
  • CW32
    +關注

    關注

    1

    文章

    203

    瀏覽量

    626

原文標題:【CW32模塊使用】SR04超聲波測距傳感器

文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    超聲波傳感器HC-SR04測距實例軟件

    超聲波傳感器HC-SR04測距實例軟件STM32CubeMX,keil5,野火串口調試助手硬件stm32f103vet6開發(fā)板,J-Link,超聲波
    發(fā)表于 07-30 07:03

    HC-SR04超聲波測距模塊原理

    、HC-SR04超聲波測距模塊原理1.模塊簡介HC-SR04
    發(fā)表于 12-06 07:14

    HC-SR04超聲波測距模塊及程序

    HC-SR04超聲波測距模塊及程序HC-SR04超聲波測距
    發(fā)表于 12-08 16:50 ?83次下載

    HC_SR04超聲波測距模塊資料

    HC_SR04超聲波測距模塊資料,有程序和原理圖,歡迎下載。
    發(fā)表于 03-18 17:00 ?13次下載

    HC-SR04超聲波測距資料

    、HC-SR04超聲波測距資料幫你了解傳感器實驗、使用快速入門,你擁有值得。
    發(fā)表于 05-10 10:36 ?18次下載

    簡單的超聲波測距模塊制作_HC-SR04超聲波測距模塊及制作圖詳解

    本文主要介紹的是HC-SR04超聲波測距模塊及制作圖詳解,首先介紹了超聲波測距原理及特點,其次闡
    發(fā)表于 05-18 09:40 ?5.4w次閱讀
    簡單的<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b><b class='flag-5'>模塊</b>制作_HC-<b class='flag-5'>SR04</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b><b class='flag-5'>模塊</b>及制作圖詳解

    ApmSonar超聲波SR04傳感器固件免費下載

    本文檔的主要內容詳細介紹的是ApmSonar超聲波SR04傳感器固件免費下載。
    發(fā)表于 09-25 08:00 ?16次下載

    HC-SR04超聲波傳感器模塊的示例代碼資料合集

    本文檔的主要內容詳細介紹的是HC-SR04超聲波傳感器模塊的示例代碼資料合集包括了:超聲波PIC單片機C程序,
    發(fā)表于 06-17 08:00 ?9次下載

    HC-SR04超聲波測距塊講解(附32單片機源碼)

    、HC-SR04超聲波測距模塊原理1.模塊簡介HC-SR04
    發(fā)表于 11-23 18:21 ?133次下載
    HC-<b class='flag-5'>SR04</b><b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>塊講解(附32單片機源碼)

    超聲波傳感器HC SR04與Arduino教程

    電子發(fā)燒友網站提供《超聲波傳感器HC SR04與Arduino教程.zip》資料免費下載
    發(fā)表于 10-19 10:18 ?0次下載
    <b class='flag-5'>超聲波</b><b class='flag-5'>傳感器</b>HC <b class='flag-5'>SR04</b>與Arduino教程

    使用超聲波傳感器HC SR04和Arduino Uno制作超聲波距離傳感器

    電子發(fā)燒友網站提供《使用超聲波傳感器HC SR04和Arduino Uno制作超聲波距離傳感器.zip》資料免費下載
    發(fā)表于 10-31 09:35 ?1次下載
    使用<b class='flag-5'>超聲波</b><b class='flag-5'>傳感器</b>HC <b class='flag-5'>SR04</b>和Arduino Uno制作<b class='flag-5'>超聲波</b>距離<b class='flag-5'>傳感器</b>

    超聲波測距模塊HC SR04與Arduino連接

    電子發(fā)燒友網站提供《將超聲波測距模塊HC SR04與Arduino連接.zip》資料免費下載
    發(fā)表于 11-11 14:26 ?0次下載
    將<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b><b class='flag-5'>模塊</b>HC <b class='flag-5'>SR04</b>與Arduino連接

    Arduino HC SR04超聲波距離傳感器

    電子發(fā)燒友網站提供《Arduino HC SR04超聲波距離傳感器.zip》資料免費下載
    發(fā)表于 12-22 16:31 ?0次下載
    Arduino HC <b class='flag-5'>SR04</b><b class='flag-5'>超聲波</b>距離<b class='flag-5'>傳感器</b>

    使用HC SR04超聲波傳感器進行速度測量

    電子發(fā)燒友網站提供《使用HC SR04超聲波傳感器進行速度測量.zip》資料免費下載
    發(fā)表于 02-07 14:37 ?12次下載
    使用HC <b class='flag-5'>SR04</b><b class='flag-5'>超聲波</b><b class='flag-5'>傳感器</b>進行速度測量

    基于CW32超聲波模塊的應用

    C-SR04超聲波模塊是一種常用的測距模塊,其通過發(fā)射超聲波并接收其反射信號來實現(xiàn)測距功能。
    的頭像 發(fā)表于 09-06 09:13 ?979次閱讀
    主站蜘蛛池模板: 久操久操久操| 国产69精品久久久久无码麻豆 | 国产ZZJJZZJJ视频全免费| 动漫H片在线观看播放免费| 跪趴式啪啪GIF动态图27报| 国产精品人妻无码77777| 精品免费视在线视频观看| 久久中文字幕人妻AV熟女| 欧美一区二区三区久久综| 涩涩电影网| 亚洲日本香蕉视频观看视频| 中文字幕亚洲综合小综合在线| yellow在线观看免费高清的日本| 久久66热在线视频精品| 久久精品视频免费| 青青草国产精品久久| 亚洲精品国产AV成人毛片| 2022久久精品国产色蜜蜜麻豆| 动漫美女喷水| 久久是热这里只有精品| 天天躁日日躁狠狠躁午夜剧场| 姑娘视频日本在线播放| 老熟女毛茸茸浓毛| 涩涩999| 欧美の无码国产の无码影院| 香蕉eeww99国产精品| 91九色麻豆| 精子网久久国产精品| 视频一区国产第一页| 4399日本电影完整版在线观看免费 | 99热视频这里只有久久精品| 国产人妻人伦精品久久久| 男同志china免费视频| 亚洲精品AV一二三区无码| 999久久狠狠免费精品| 成人免费一级毛片在线播放视频| 成人免费公开视频| 麻豆久久国产亚洲精品超碰热| 秋霞电影网午夜免费鲁丝片| 亚洲精品国产精麻豆久久99| 草民电影网午夜伦理电影网|