深圳市航顺芯片技术研发有限公司
直播中

张宇

7年用户 1624经验值
私信 关注
[问答]

如何对基于STM32F103VET6的超声波传感器HC-SR04进行测距呢

HC-SR04超声波模块的工作原理是什么?
如何对基于STM32F103VET6的超声波传感器HC-SR04进行测距呢?

回帖(1)

h1654155275.5684

2021-11-9 11:38:49
  超声波传感器HC-SR04测距实例
  最近刚学了点32的知识,找了个超声波传感器练习一下,这是我的一点学习经验,和大家分享一下,如有不足希望各位大佬多多指导。
  软件
  STM32CubeMX,keil5,野火串口调试助手
  硬件
  stm32f103vet6开发板,J-Link,超声波传感器HC-SR04
  原理
  
  HC-SR04超声波模块工作原理
  (1)采用IO口触发测距,给至少10us高电平脉冲;
  (2)模块内自动发送八个40khz方波,并自主检测是否有电波返回;
  (3)当有信号返回时,通过IO口输出一个高电平,高电平的持续时间就是超声波从发送到返回的时间;
  (4)测距公式:距离=(高电平时间*声速)/2;
  我自己的理解:本模块使用时,给Trig一个10US以上的高电平,模块开始工作,模块内自动发送八个40khz方波,并自主检测是否有电波返回。这是我们需要检测Echo处的电平,当为高电平的时候记一个时间;当Echo出为低电平的时候在记一个时间,这两个时间的差就是高电平持续的时间,然后用测距公式进行计算。
  步骤
  1,设置RCC和SYS
  
  
  2,设置Trig输出引脚,Echo输入引脚以及LED灯
  
  3,设置TIM2和USART1
  
  
  4,设置时钟树,项目名称以及其他设置
  不同板子的时钟树设置不同,自己去查资料。
  
  
  
  5,生成代码,并打开keil5
  
  
  6,编写代码
  让LED灯快速亮灭三次----表示代码已下载到板子中,并开始运行
  /* USER CODE BEGIN 2 */
  int i=0;
  while(i《7)
  {
  HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  HAL_Delay(400);
  i=i+1;
  }
  /* USER CODE END 2 */
  按照原理,编写while函数体里面的代码。(第一个while是当有信号返回时,如果满足条件,就会卡在这里,当不满足条件时,开始往下走,记一个时间,然后会卡在另一个while处,当条件不成立了再继续往下走,在记一个时间。两个while可以理解为条件延时。)
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
  HAL_TIM_Base_Start_IT(&htim2);
  htim2.Instance-》CNT = 0;
  float t1,t2,distance;
  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);
  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET);
  HAL_Delay(1);
  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);
  while(HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin) == GPIO_PIN_RESET)
  t1=htim2.Instance-》CNT;
  while(HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin) == GPIO_PIN_SET)
  t2=htim2.Instance-》CNT;
  htim2.Instance-》CNT = 0;
  distance=(t2-t1)*17/(float)1000;
  printf(“The distance is %0.1fcmn”,(float)distance);
  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);
  HAL_Delay(500);
  }
  /* USER CODE END 3 */
  7,编译,下载代码,打开串口调试助手并且运行代码
  在编译前,点击魔术棒选项卡,确认J-Link仿真器已连接好以及其他设置也是正确的。
  
  8,用传感器测距离
  有些人的printf无法使用,点击这里[printf无法使用的解决方法。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分