OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4079|回复: 2

stm32 超声波测距模块距离计算

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-4-15
在线时间
8 小时
发表于 2022-2-28 22:04:10 | 显示全部楼层 |阅读模式
10金钱
买的智能车套件,商家不提供代码解释,看不懂了,是个超声波测距模块,测距用下面公式
  1. UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/200.0;                        //计算距离&&UltrasonicWave_Distance<150
复制代码
然后主控室stm32f103,用了一个计时器驱动,初始化是这样的

  1. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  2.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能

  3.         TIM_TimeBaseStructure.TIM_Period = 5000; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         计数到5000为500ms
  4.         TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
  5.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  6.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  7.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
复制代码
我不理解他是怎么计算出来距离的,我的理解是
库函数TIM_GetCounter(TIM2)得到计数值,计时器初始化的一个计数值时长是1/10KHz = 0.1ms
声速340m/s = 340mm/ms
所以总的时间t = TIM_GetCounter(TIM2) * 0.1ms
距离s = t * v / 2
= 340mm/ms * (TIM_GetCounter(TIM2) * 0.1ms) / 2 = TIM_GetCounter(TIM2) * 34 / 2但与他的不同呀

希望大佬解答!万分感谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-3-1 10:44:09 | 显示全部楼层
先了解超声波的工作原理就好明白计算了
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-3-1 13:46:15 | 显示全部楼层
也许它的定时器时钟与你所认为的时钟有偏差.
无论如何,需要的是一个固定的系数,假如你不知道时钟频率,也是可以通过计数值与实际距离值来反推这个系数的值.
只需实验一下就知道谁是对的.
专治疑难杂症
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 03:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表