0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于HC-SR04模块和STM32F103ZET6开发板实现超声波测距DIY设计方案

基于HC-SR04模块和STM32F103ZET6开发板实现超声波测距DIY设计方案

来源: toutiao
2021-12-09
类别:工业控制
eye 25
文章创建人 拍明

原标题:超声波测距DIY设计方案

基于HC-SR04模块和STM32F103ZET6开发板实现超声波测距DIY设计方案

一、设计背景与目标

超声波测距技术广泛应用于距离测量、避障系统、液位检测等领域。HC-SR04模块是一种常用的超声波测距模块,它通过发射超声波并接收反射回来的超声波信号来测量距离。本设计将基于STM32F103ZET6开发板和HC-SR04超声波模块,通过编程实现超声波的发射和接收,并通过STM32的处理能力进行计算,从而得到测量的距离。

image.png

二、硬件系统设计

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)计算出物体的距离。

工作流程可以分为以下几个步骤:

  1. 触发信号发射: STM32通过GPIO口控制Trig引脚,发送一个高电平脉冲,持续10us。

  2. 超声波发射与回波接收: HC-SR04模块发射超声波,等待目标物体反射信号。

  3. 回波信号接收: 当接收到回波信号时,Echo引脚输出一个高电平信号,STM32通过外部中断或定时器捕获该信号的持续时间。

  4. 计算距离: 使用公式距离 = (回波时间 * 声速) / 2计算出物体与传感器之间的距离。这里需要考虑到超声波传播的时间是双程的,因此距离公式中的2。

四、详细电路设计与原理图

在本设计中,HC-SR04模块与STM32F103ZET6开发板的连接方式非常简单。VCC引脚连接到STM32的3.3V电源,TrigEcho引脚连接到STM32的GPIO口。考虑到STM32F103ZET6的GPIO电平为3.3V,而HC-SR04的Echo引脚工作电平为5V,因此需要使用电平转换电路,将Echo引脚的信号从5V转换为STM32可接受的3.3V。

具体电路设计如下:

  1. VCC连接到STM32的3.3V输出(可以使用外部电源适配器)

  2. Trig引脚连接到STM32的某个GPIO口(如PA0)

  3. Echo引脚通过电平转换电路连接到STM32的某个GPIO口(如PA1)

五、软件设计

5.1 STM32初始化配置

在STM32的初始化过程中,首先需要配置TrigEcho引脚为输出和输入模式,并使能定时器中断或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)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告