野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10427|回复: 3

火哥及各位大神,关于超声波测距疑问,望解答。

[复制链接]
发表于 2014-5-5 16:32:18 | 显示全部楼层 |阅读模式
void UltrasonicWave_CalculateTime(void)
{
   UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/2000;//5,34,2000这几个数字代表什么?
}

/*
* 函数名:UltrasonicWave_StartMeasure
* 描述  :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
* 输入  :无
* 输出  :无       
*/
void UltrasonicWave_StartMeasure(void)
{
  GPIO_SetBits(TRIG_PORT,TRIG_PIN);                   //送>10US的高电平
  DelayTime_us(20);                                      //延时20US
  GPIO_ResetBits(TRIG_PORT,TRIG_PIN);

  while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                     //等待高电平
  TIM_Cmd(TIM2, ENABLE);                                             //开启时钟
  while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                         //等待低电平
  TIM_Cmd(TIM2, DISABLE);                                                         //定时器2失能
  UltrasonicWave_CalculateTime();                                                                         //计算距离
  TIM_SetCounter(TIM2,0);

        printf("\r\ndistance:%d%d cm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256);//为什么是256?       
            
}

回复

使用道具 举报

发表于 2017-3-25 16:41:57 | 显示全部楼层
我也想知道这个,楼主问题最终解决·了吗
回复 支持 反对

使用道具 举报

发表于 2017-3-26 13:51:37 | 显示全部楼层
看我上一个帖子,这里火哥代码有bug
回复 支持 反对

使用道具 举报

发表于 2018-4-7 23:01:06 | 显示全部楼层
距离计算公式的  距离 = (时间 * 340m/s)/2
TIM_GetCounter(TIM2) 是获取计数器的值
5 其实是代表5us
TIM_GetCounter(TIM2)*5 表示 用掉的总的时间 单位是us转换成秒为
[TIM_GetCounter(TIM2)*0.000005 *(340 *100)(cm/s)]/2
这样就得到距离为 cm/s了
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-30 08:35 , Processed in 0.030022 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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