0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32L012/F030灵眸X1智能小车——超声波模块配置

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2026-01-05 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

超声波模块介绍

SR04超声波模块是一款广泛应用的测距传感器,主要用于使用超声波测量物体与传感器之间的距离。它是一个成本低廉、精度较高且易于使用的传感器,常用于机器人智能家居无人机、汽车防撞系统等项目。以下是SR04超声波模块的主要特点和应用:

测距范围: SR04模块的测距范围通常在2厘米到400厘米之间,适合多种应用。

高精度: 它具备较好的测量精度,通常可达±3毫米,这使其适用于需要精确测量的场合。

工作原理: SR04模块通过发射超声波脉冲并测量声波反射回来的时间来计算距离。传感器的超声波发射和接收分别由两个探头(发射器和接收器)完成。

简单接口: 通常使用简单的GND、VCC、Trig(触发信号)和Echo(回声信号)四个引脚,便于连接到微控制器(如Arduino)上。

低功耗: 在待机状态下,SR04的功耗较低,适合电池供电的项目。

超声波模块工作原理

图片

只需要在 Trig 管脚(触发信号)输入一个 10US 以上的高电平,系统便可发出 8 个 40KHZ 的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过 Echo 管脚输出。根据 Echo 管脚输出高电平的持续时间可以计算距离值。即距离值为:(高电平时间*340m/s)/2。

当测量距离超过 HC-SR04 的测量范围时,仍会通过 Echo管脚输出高电平的信号,高电平的宽度约为 66ms。如图所示:

图片

测量周期:当接收到 HC-SR04 通过 Echo 管脚输出的高电平脉冲后,便可进行下一次测量,所以测量周期取决于测量距离,当距离被测物体很近时,Echo 返回的脉冲宽度较窄,测量周期 就很短;当距离被测物体比较远时,Echo 返回的脉冲宽度较宽,测量周期也就相应地变长。最坏情况下,被测物体超出超声波模块的测量范围,此时 返回的脉冲宽度最长,约为 66ms,所以最坏情况下的测量周期稍大于 66ms 即可(取 70ms 足够)。

电路连接

该模块在主控制板上与CW32L012/F030连接如下:

图片

两个引脚分别接到了PA8与PA15端口

工程代码

在文件HC_SR04.C中编写如下代码

#define Trig_Send(x)                GPIO_WritePin(CW_GPIOA, GPIO_PIN_8, (GPIO_PinState)(x))
#define Echo_Input                        GPIO_ReadPin(CW_GPIOA, GPIO_PIN_15)
uint16_t Get_Time;
/**************************
定时器配置
中断周期为1ms
**************************/
void TIM_Init(void)
{
        RCC_APBPeriphClk_Enable2(RCC_APB2_PERIPH_BTIM,ENABLE);

        BTIM_TimeBaseInitTypeDef BTIM_Initstructure;
        BTIM_Initstructure.BTIM_Mode=BTIM_Mode_TIMER;
        BTIM_Initstructure.BTIM_OPMode=BTIM_OPMode_Repetitive;
        BTIM_Initstructure.BTIM_Period=1000-1;
        BTIM_Initstructure.BTIM_Prescaler=BTIM_PRS_DIV64;//64分频
        BTIM_TimeBaseInit(CW_BTIM1,&BTIM_Initstructure);

        BTIM_ITConfig(CW_BTIM1,BTIM_IT_OV,ENABLE);
//        BTIM_Cmd(CW_BTIM1,ENABLE);
        NVIC_SetPriority(BTIM1_IRQn,8);//中断优先级
        NVIC_EnableIRQ(BTIM1_IRQn);//开启中断
}
void HC_SR04_Init(void)
{
        __RCC_GPIOA_CLK_ENABLE();

        GPIO_InitTypeDef GPIO_InitStruct;
        GPIO_InitStruct.IT=GPIO_IT_NONE;
        GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pins=GPIO_PIN_8;
        GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
        GPIO_Init(CW_GPIOA, &GPIO_InitStruct);

        GPIO_InitStruct.IT=GPIO_IT_NONE;
        GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;
        GPIO_InitStruct.Pins=GPIO_PIN_15;
        GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
        GPIO_Init(CW_GPIOA, &GPIO_InitStruct);

        Trig_Send(0);

        TIM_Init();
}
void BTIM1_Start(void)//打开定时器
{
        BTIM_SetCounter(CW_BTIM1,0);
        Get_Time=0;
        BTIM_Cmd(CW_BTIM1,ENABLE);
}
void BTIM1_Stop(void)//关闭定时器
{
        BTIM_Cmd(CW_BTIM1,DISABLE);
}
uint32_t Get_Tim_Timer(void)//得到信号反射时间
{
        uint32_t time;
        time=Get_Time*1000;
        time+=BTIM_GetCounter(CW_BTIM1);
        BTIM_SetCounter(CW_BTIM1,0);

        return time;
}
float Get_Disance(void)//距离计算
{
        uint8_t i;
        uint16_t time=0;
        float Distance=0;
        float Temp=0;
        float num=0;
        for(i=0;i< 10;i++)
        {
                Trig_Send(1);//trig拉高信号,发出高电平
                delay10us(2);
                Trig_Send(0);//trig拉低信号,发出低电平

                while(Echo_Input==0);
                BTIM1_Start();
                while(Echo_Input==1);
                BTIM1_Stop();
                /*Echo发出信号 等待回响信号*/
                /*输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;
                (此时应该启动定时器计时);当超声波返回被模块接收到时,回波引 脚端的电平会由1变为0;
                (此时应该停止定时器计数),定时器记下的这个时间即为
                                                                                超声波由发射到返回的总时长;*/
                time=Get_Tim_Timer();
                Temp=(float)time/58.2; // 获取时间,分辨率为1us
                num+=Temp;
                Delay_ms(4);
        }        
        Distance=num/10.0;
        return Distance;
}
void BTIM1_IRQHandler(void)
{
        if(BTIM_GetITStatus(CW_BTIM1,BTIM_IT_OV)==1)
        {
                Get_Time++;
        }
        BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV);
}

在main.c中编写如下代码

int main(void)
{
        OLED_Init();//初始化
        HC_SR04_Init();
        OLED_ShowString(1,1,"hello");//OLED显示字符串
        while(1)
        {
                OLED_ShowString(2,1,"Dis:");
                OLED_ShowNum(2,5,Get_Disance(),3);//距离显示
                OLED_ShowString(2,9,"cm");;
        }
}

工作现象

将代码烧入主控制板之后,可以观察到以下现象

OLED显示屏第一行第一列显示字符串hello

第二行显示距离单位cm

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 超声波
    +关注

    关注

    63

    文章

    3325

    浏览量

    146064
  • 智能小车
    +关注

    关注

    87

    文章

    565

    浏览量

    83523
  • CW32
    +关注

    关注

    1

    文章

    324

    浏览量

    1958
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32L012/F030X1智能小车——使用蓝牙模块通讯

    主控板配套的是一款低功耗蓝牙模块,适用于短距离无线通信。该模块通常被用于各种嵌入式项目,如物联网(IoT)设备、手机配件、智能家居设备、医疗设备等。
    的头像 发表于 04-01 16:54 3305次阅读
    <b class='flag-5'>CW32L012</b>/<b class='flag-5'>F030</b><b class='flag-5'>灵</b><b class='flag-5'>眸</b><b class='flag-5'>X1</b><b class='flag-5'>智能</b><b class='flag-5'>小车</b>——使用蓝牙<b class='flag-5'>模块</b>通讯

    CW32L012小型机器人控制评估板活动 四足机器人+智能小车 开箱评测

    CW32L012活动相关资料链接:https://dwi41yhz703.feishu.cn/wiki/B1Ihw31ebiX0vkkhQr2cINnkn1g 小型机器人+智能小车
    发表于 11-24 23:44

    超声波模块参考

    说明: DYP-ME007超声波模块AVRmega16程序 DYP-ME007 超声波模块DYP-ME007和89c51的数据资料 超声波模块参考
    发表于 08-12 10:27

    超声波模块测距问题

    ·新上手一块HC-SR04超声波模块写了一个数码管测距显示,问题来了缓慢移动模块可以近距离测试显示,可是超过一米时,时时不灵,显示乱码,为嘛呢??,求解
    发表于 03-15 11:41

    HC-SR04超声波模块的工作原理是什么

    模块高精度,盲区小等特点。此模块可用于机器人与小车避障,物体测距等,是现在高校比赛中常用的一款避障传感器。二、超声波测距原理超声波测距原理
    发表于 07-19 09:36

    超声波模块的原理

    最近在造小车 需要用到超声波模块 现将调试时用到的代码分享出来。所用超声波模块为HC-SR04单片机开发板是吴鉴鹰的先理解超声波模块的原理,它有四个接口 Vcc Trig Echo G
    发表于 07-21 08:54

    怎样去设计一种基于超声波模块智能避障小车

    超声波模块的工作原理是什么?怎样去设计一种基于超声波模块智能避障小车呢?
    发表于 11-17 06:56

    利用超声波模块设计智能避障的WiFi小车

    51版本(第一节)这个智能小车可以使用51或32或Arduino wemos来完成,由于时间原因,这里不一定会把32版本的放出来。先看一下代码展示图这里利用的模块有HC-SR04超声波模块
    发表于 12-13 06:54

    怎么使用STM32F1驱动超声波模块

    16个小时,错误原因竟然是哭笑不得的供电不足)。第二,分享给其他在学或还不知道怎么使用超声波模块的同仁,避免犯和我一样的错误。编程IDE工具:KEIL5实验所需材料:1.STM32F103系列单片机任意一款2. HC_SR04超声波模块
    发表于 01-17 07:32

    超声波模块的工作原理与时序图学习

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、超声波模块的工作原理二、超声波的时序图三、利用STM32F407进行驱动编写1.定时器
    发表于 02-16 06:02

    怎样利用HY-SRF05超声波模块实现超声波的测距避障呢

    目录产品功能硬件结构STM32F10X主控板引脚接线HY-SRF05 超声波模块引脚接线软件代码测试结果产品功能硬件结构STM32F10X主控板引脚接线HY-SRF05 超声波模块引脚
    发表于 02-24 06:07

    超声波模块

    超声波模块的资料,在使用的或者学习的烧友可以来看看。
    发表于 06-17 16:33 32次下载

    利用HY-SRF05 超声波模块实现超声波的测距避障

    目录产品功能硬件结构STM32F10X主控板引脚接线HY-SRF05 超声波模块引脚接线软件代码测试结果产品功能硬件结构STM32F10X主控板引脚接线HY-SRF05 超声波模块引脚
    发表于 12-31 19:53 15次下载
    利用HY-SRF05 <b class='flag-5'>超声波模块</b>实现<b class='flag-5'>超声波</b>的测距避障

    如何使用超声波模块

    本例为FPGA之旅设计99例中的第十五例,本例将介绍如何使用超声波模块,进行测距。这个模块智能小车中使用的比较多,使用起来比较方便,仅需四个引脚即可驱动。
    的头像 发表于 09-26 09:59 3867次阅读

    基于CW32的超声波模块的应用

    C-SR04超声波模块是一种常用的测距模块,其通过发射超声波并接收其反射信号来实现测距功能。
    的头像 发表于 09-06 09:13 1955次阅读