标题:
超声波精确测距 毫米级测距时间分辨率将如何改?
[打印本页]
作者:
涡轮ii
时间:
2017-8-14 13:24
标题:
超声波精确测距 毫米级测距时间分辨率将如何改?
/***********************************************************************************************************/
//HC-SR04 超声波测距模块 DEMO 程序
//晶振:11.0592
//接线:模块TRIG接 P1.2 ECH0 接P1.1
//串口波特率9600
//精度为米级别的,毫米级测距时间分辨率将如何改?
/***********************************************************************************************************/
#include"chao.h"
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag =0;
/*******************************************************************************
* 函 数 名 : Conut
* 函数功能 : 数据处理
* 输 入 : 无
* 输 出 : 距离S
*******************************************************************************/
float Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100; //算出来是CM
if(flag==1) //超出测量
{
flag=0;
S=0;
return S;
}
return S;
}
/*******************************************************************************
* 函 数 名 : delayms
* 函数功能 : 延时函数
* 输 入 : ms
* 输 出 : 无
*******************************************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/*******************************************************************************
* 函 数 名 : StartModule
* 函数功能 : 启动模块
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void StartModule()
{
Trig = 1; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig = 0;
}
/*******************************************************************************
* 函 数 名 : ChaoShengBoInit
* 函数功能 : 超声波模块初始化函数,允许T0中断,开启定时器,开启总中断
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void ChaoShengBoInit()
{
TMOD=0x21; //设T0为方式1,GATE=1;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;
ET0=1; //允许T0中断
TR1=1; //开启定时器
TI=1;
EA=1; //开启总中断
}
/*******************************************************************************
* 函 数 名 : CaiJi
* 函数功能 : 超声波数据采集并转换为数字信号
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void CaiJi(void)
{
StartModule();
while(!Echo); //当RX为零时等待
TR0=1; //开启计数
while(Echo); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
delayms(100); //100MS
}
复制代码
作者:
沧浪
时间:
2017-8-20 00:08
网上看的一些资料说这个模块精准度最大也就在在3mm,自己实际用过达到这么高的精确度,如果非要那么高的精确度的话是不是需要采取补偿手段。
作者:
zl2168
时间:
2017-8-21 10:16
超声波传递速率与介质、温度有关。探测精度有绝对精度和相对精度之分,把概念搞清楚。什么3mm?如果是倒车测距,绝对精度也就是0.5cm.
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1