[其他ST产品] 基于stm32的超声波测距

[复制链接]
 楼主| yutingwei 发表于 2023-8-25 15:19 | 显示全部楼层 |阅读模式
模块选择:
stm32f103c8芯片
HC-SR04超声波测距模块
一、HC-SR04超声波测距模块说明
1、产品特点
HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。

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

评论

———————————————— 版权声明:本文为CSDN博主「Fu-yu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_53573350/article/details/130928956  发表于 2023-8-25 15:20
 楼主| yutingwei 发表于 2023-8-25 15:20 | 显示全部楼层
2、电气参数
3305764e856413b7c7.png
 楼主| yutingwei 发表于 2023-8-25 15:20 | 显示全部楼层
3、HC-SR04超声波测距模块
844264e8564e894d2.png
 楼主| yutingwei 发表于 2023-8-25 15:21 | 显示全部楼层
VCC 供 5V电源,GND 为地线,TRIG 触 发 控 制 信 号 输入,ECHO 回响信号输出等四个接口端。

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

注:
1、此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于 0.5 平方米且平面尽量要求平整,否则影响测量的结果
 楼主| yutingwei 发表于 2023-8-25 15:22 | 显示全部楼层
二、 CUBEMX配置
配置rcc
6531464e8569c16c2c.png
 楼主| yutingwei 发表于 2023-8-25 15:23 | 显示全部楼层
设置时钟为72
1474564e856eedd7d6.png
 楼主| yutingwei 发表于 2023-8-25 15:23 | 显示全部楼层
配置串口
9466364e856fd67c54.png
 楼主| yutingwei 发表于 2023-8-25 15:24 | 显示全部楼层
 楼主| yutingwei 发表于 2023-8-25 15:24 | 显示全部楼层
定时器配置
为了不在重复配置,这里就直接配置成输入捕获模式,开启溢出中断与捕获中断,方法一只需要开启定时器即可。利用TIM1_CH4是因为Echo与TIM1_CH4共用引脚。 3068564e8572343aef.png
 楼主| yutingwei 发表于 2023-8-25 15:24 | 显示全部楼层
 楼主| yutingwei 发表于 2023-8-25 15:25 | 显示全部楼层
命名引脚 8031664e857650a1ff.png
 楼主| yutingwei 发表于 2023-8-25 15:26 | 显示全部楼层
 楼主| yutingwei 发表于 2023-8-25 15:26 | 显示全部楼层
生成项目
5889364e857a9f2c40.png
 楼主| yutingwei 发表于 2023-8-25 15:26 | 显示全部楼层
 楼主| yutingwei 发表于 2023-8-25 15:27 | 显示全部楼层
三、keil配置代码
重定向printf函数,打开 usart.c,在 /* USER CODE BEGIN 0 / 和 / USER CODE END 0 */加入以下代码:

  1. #include <stdio.h>

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

  8. #endif /* __GNUC__ */
 楼主| yutingwei 发表于 2023-8-25 15:27 | 显示全部楼层
 楼主| yutingwei 发表于 2023-8-25 15:27 | 显示全部楼层
在 /* USER CODE BEGIN 1 / 和 / USER CODE END 1 */ 之间加入以下代码:


  1. /**
  2. * [url=home.php?mod=space&uid=247401]@brief[/url] Retargets the C library printf function to the USART.
  3. * @param None
  4. * @retval None
  5. */
  6. PUTCHAR_PROTOTYPE
  7. {
  8.         /* Place your implementation of fputc here */
  9.         /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  10.         HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  11.         return ch;
  12. }
 楼主| yutingwei 发表于 2023-8-25 15:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

514

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部