HC-SR04超声波测距模块的高精度使用方法

开发环境(蓝色粗体字为特别注意内容)
1,开发板:STC89C52RC 11.0592Mhz。
2,开发环境:Keil uv5

3、参考文献:https://www.cnblogs.com/qsyll0916/p/6964638.html

在使用HC-SR04的时候,网上找的驱动程序,发现误差很大,调来调去还是不合适,本来不想重复制造轮子的,忙活了半天,无奈,只能只能亲自用示波器调试了,,,,

模块如下图:


我们知道,HC-SR04超声波模块使用的时候,先给Trig引脚一个持续时间>10us的高电平,然后Echo引脚就返回一个高电平,该高电平的持续时间即为超声波往返的时间,因此我们在单片机里面通过定时器计算Echo高电平的持续时间即可算出超声波往返的距离。

但是如何精准的计算该高电平的时间,成了提高该模块精度的关键点。因为不同的单片机,不同的时钟频率,造成了计算结果的差异。下面我们以STC89C52RC单片机为例,利用示波器来调试,以提高测量精度。

我们先测出定时器的值,然后利用示波器查看高电平的持续时间,计算出他们之间的关系。


得到的数据如下:

//测量数据
Count/2       us       us/2     us/2 / Count/2
306           668      334          1.0915
292           636      318          1.0890
270           588      294          1.0888
254           552      276          1.0866
247           540      270          1.0931
216           472      236          1.0925
366           796      398          1.0874
404           880      440          1.089
340,000 mm/1000000us =0.34mm/us

我们知道超声波在空气中的传播速度为0.34mm/us,这样只要能够精确计算高电平的持续时间,测量精度就能够达到0.34mm。

具体的高精度算法我已经写到程序里面了,需要的同学可以在文章后面的链接下载HC-SR04超声波模块驱动程序。

该驱动程序使用方法很简单

#include "SR04.h"

SR04Init();
float distance = getDistance();
注意,再次申明,在STC89C52RC 11.0592MHz下面是完全精确的,其他环境,暂未测试,敬请期待。。。


HC-SR04+89C52RC+11.0592Mhz驱动程序


猜你喜欢

转载自blog.csdn.net/pang9998/article/details/80155639