HC-SR04超声波测距模块的正确理解
今天,在阅读关于HC-SR04超声波测距模块的51单片机程序时,比对相应参考资料,发现一个矛盾的地方,一时间想了好久,才有了一点眉目,特此记录。
主函数部分代码如下:
while(1)
{
StartModule();
while (!gEcho); // 当RX为零时等待
TR0 = 1; // 开启计数
while (gEcho); // 当RX为1计数并等待
TR0 = 0; // 关闭计数
MesureDistance(); // 计算距离并显示
delay100ms(); // 以100ms为测距周期
}
而用户手册上说:
即有信号返回才输出高电平信号。
这句话的意思很显然表示,如果没有信号返回,就不输出高电平。那么程序中“while (!gEcho);”,必然一直等待,整个程序不可能正确执行。
实验表示,程序没有问题,那么问题只可能出在使用说明书上。正确的解释应该是:
1.给超声波模块接入电源和地。
2.给脉冲触发引脚(trig)输入一个长为20us的高电平方波
3.输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动定时器计时)
4.当超声波返回被模块接收到时,回波引脚端的电平会由1变为0;(此时应该停止定时器计数),定时器记下的这个时间即为超声波由发射到返回的总时长。(如果长时间没有接收到超声波返回信号,即超声波测距超限,该引脚也会回零,以方便下次测量,不然又会在程序中的“ while (gEcho);”一直死循环,无法继续。)
5.根据声音在空气中的速度为344米/秒,即可计算出所测的距离。