打印
[其他ST产品]

基于stm32的超声波测距

[复制链接]
638|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
模块选择:
stm32f103c8芯片
HC-SR04超声波测距模块
一、HC-SR04超声波测距模块说明
1、产品特点
HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。

基本工作原理:
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声
波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。

使用特权

评论回复
评论
yutingwei 2023-8-25 15:20 回复TA
———————————————— 版权声明:本文为CSDN博主「Fu-yu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_53573350/article/details/130928956 
沙发
yutingwei|  楼主 | 2023-8-25 15:20 | 只看该作者
2、电气参数

使用特权

评论回复
板凳
yutingwei|  楼主 | 2023-8-25 15:20 | 只看该作者
3、HC-SR04超声波测距模块

使用特权

评论回复
地板
yutingwei|  楼主 | 2023-8-25 15:21 | 只看该作者
VCC 供 5V电源,GND 为地线,TRIG 触 发 控 制 信 号 输入,ECHO 回响信号输出等四个接口端。

使用特权

评论回复
5
yutingwei|  楼主 | 2023-8-25 15:21 | 只看该作者
超声波时序图

使用特权

评论回复
6
yutingwei|  楼主 | 2023-8-25 15:21 | 只看该作者
以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将
发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号
时间间隔可以计算得到距离。公式:uS/58=厘米或者 uS/148=英寸;或是:距离= 高电平时间*声速(340M/S)/2;建议测量周期为 60ms 以上,以防止发射信号对
回响信号的影响。

注:
1、此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于 0.5 平方米且平面尽量要求平整,否则影响测量的结果

使用特权

评论回复
7
yutingwei|  楼主 | 2023-8-25 15:22 | 只看该作者
二、 CUBEMX配置
配置rcc

使用特权

评论回复
8
yutingwei|  楼主 | 2023-8-25 15:23 | 只看该作者
设置时钟为72

使用特权

评论回复
9
yutingwei|  楼主 | 2023-8-25 15:23 | 只看该作者
配置串口

使用特权

评论回复
10
yutingwei|  楼主 | 2023-8-25 15:24 | 只看该作者

使用特权

评论回复
11
yutingwei|  楼主 | 2023-8-25 15:24 | 只看该作者
定时器配置
为了不在重复配置,这里就直接配置成输入捕获模式,开启溢出中断与捕获中断,方法一只需要开启定时器即可。利用TIM1_CH4是因为Echo与TIM1_CH4共用引脚。

使用特权

评论回复
12
yutingwei|  楼主 | 2023-8-25 15:24 | 只看该作者

使用特权

评论回复
13
yutingwei|  楼主 | 2023-8-25 15:25 | 只看该作者
命名引脚

使用特权

评论回复
14
yutingwei|  楼主 | 2023-8-25 15:26 | 只看该作者

使用特权

评论回复
15
yutingwei|  楼主 | 2023-8-25 15:26 | 只看该作者
生成项目

使用特权

评论回复
16
yutingwei|  楼主 | 2023-8-25 15:26 | 只看该作者

使用特权

评论回复
17
yutingwei|  楼主 | 2023-8-25 15:27 | 只看该作者
三、keil配置代码
重定向printf函数,打开 usart.c,在 /* USER CODE BEGIN 0 / 和 / USER CODE END 0 */加入以下代码:
 
#include <stdio.h>

#ifdef __GNUC__
        /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
        set to 'Yes') calls __io_putchar() */
        #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
        #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif /* __GNUC__ */

使用特权

评论回复
18
yutingwei|  楼主 | 2023-8-25 15:27 | 只看该作者

使用特权

评论回复
19
yutingwei|  楼主 | 2023-8-25 15:27 | 只看该作者
在 /* USER CODE BEGIN 1 / 和 / USER CODE END 1 */ 之间加入以下代码:

 
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
        /* Place your implementation of fputc here */
        /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
        return ch;
}

使用特权

评论回复
20
yutingwei|  楼主 | 2023-8-25 15:27 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

363

帖子

0

粉丝