模块介绍

HC-SR04超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到的非接触式距离感测功能,测距精度可达高到3mm,模块包括超声波发射器、接收器与控制电路。

卡通人物

中度可信度描述已自动生成

模块引脚

  • Vcc:+5V电源供电

  • Trig:输入触发信号(可以触发测距)

  • Echo:传出信号回响(可以传回时间差)

  • Gnd:接地

工作原理

STM32单片机给超声波模块Trig脚一个大于10uS的高电平脉冲,模块内部会发出8个40KHz的脉冲,此时模块的Echo管脚会输从低电平跳转到高电平,当模块发送出去的脉冲遇到障碍物反射回来,Echo管脚会从高电平跳转为低电平。因此Echo管脚输出的高电平时间即为脉冲从发射到遇到障碍物返回模块所需要的时间。因此距离distance =( 高电平持续时间*声速(340m/s))/ 2。

编程思路

超声波模块测距最主要的工作就是获取Echo管脚的高电平时间。因此我们可以使用STM32单片机的定时器和外部中断功能对Echo管脚的高电平时间进行统计。

外部中断(EXTI):STM32单片机有20个中断线,每个GPIO管脚都可以被设置成输入线。通过外部中断,我们可以使单片机的某个管脚检测超声波模块Echo信号,当信号发生跳变的时候,触发中断,使程序执行相应的中断函数。因此我们可以使用外部中断这个功能,去检测超声波模块Echo管脚电平的变化。然后利用定时器去统计Echo管脚两次电平变化的时间,从而计算出距离。

EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO 作为 EXTI 的输入源。代码例程中使用的管脚为PA1,因此我们需要配置单片机的EXTI1中断。(具体配置可见代码)。

定时器:Stm32单片机有8个定时器,定时器的基本功能就是用来计时的。因此我们可以配置定时器去统计Echo电平两次变化持续的时间。例程中是将定时器配置成每1us计数一次,并且每100us,触发一次定时器中断,在中断函数里面定义了count变量进行累积。

因此,我们只要利用外部中断和定时器功能,就可以统计出Echo管脚输出的高电平时间。当超声波模块发送脉冲,Echo管脚输出高电平,此时打开定时器。当超声波模块接收到返回的脉冲,Echo管脚从高电平跳转为低电平,此时关闭定时器。定时器统计的时间,即为脉冲从发出去再到接收到花费的总时间。有了总时间之后,就可以计算距离。