嵌入式开发学习日志35——stm32之超声波测距

单片机搭载超声波传感器模块进行距离测量,是单片机十分经典的应用,下面就来看看具体原理。

超声波发射器首先会向外发射超声波,同时定时器开始计时,当超声波在空气中传播,接触到障碍物时,就会被反射回来,超声波接收器接收到反射波之后,定时器停止计时。

由此,根据超声波在空气中的传播速度340m/s,可以测算出与障碍物之间的距离为340*t/2。

那么内部具体是怎么运行的呢?

超声波传感器总共有四个引脚:VCC、Gnd、Trig、Echo。首先,由单片机向trig引脚发射一个10us或以上的高电平信号,trig引脚接收到之后,让模块对外发射8个40khz的超声波,此时,Echo引脚就会自动变为高电平,当模块接收到反射回来的超声波时,Echo引脚会再次变为低电平。

公式中需要的时间就是Echo引脚由高电平变为低电平前持续的时间。

当然,超声波模块并不会只发射一次超声波后就停止,这是一个持续的过程,两次超声波的发射时间间隔大概在60ms左右,以保证信号足够稳定。

知道原理后,又该如何用代码实现超声波测距呢?

其实要注意到,单独的单片机定时器模块产生中断,并不能直接帮助我们确定传播时间,因为定时器模块加入的是我们自己设置的时间参数,真正的传播时间并不清楚,只能获得定时器产生中断的次数,因此这里还要结合外部中断,更准确地计算出传播时间。

由于先前已经详细介绍过了EXTI以及定时器模块的代码编写,这里就不多赘述,直接来看中断函数的部分。

这里的number就是用于计量定时器模块产生的中断次数,并不复杂。

这里的flag变量适用于记录中断信号是上升沿还是下降沿,由于每次测量都需要重置定时器产生中断的次数,因此这里的传播时间和中断次数都要先赋值为0。

当计量到下降沿时,说明echo引脚变为低电平,超声波模块接收到了反射回来的超声波,那么定时器关闭,停止计数,将记录的中断次数与每次中断设定的时间相乘后,就能得到传播时间。

相关推荐
BreezeJuvenile21 小时前
MAX30102脉搏血氧传感器相关内容整理(理论版)
学习·max30102·心率血氧传感器
报错小能手21 小时前
C++笔记(面向对象)深赋值 浅赋值
c++·笔记·学习
蓬荜生灰21 小时前
第6章—手动移植创建STM32工程
stm32·单片机·嵌入式硬件
一介书生-00721 小时前
2025-10-27 Java AI学习路线
java·人工智能·学习
繁花与尘埃1 天前
CSS引入方式(本文为个人学习笔记,内容整理自哔哩哔哩UP主【非学者勿扰】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
css·笔记·学习
赋能大师兄1 天前
单片机跑飞原因及解决方法
单片机·独立看门狗·窗口看门狗·硬件级防护策略·软件级防护策略
Century_Dragon1 天前
新能源汽车故障诊断与排除虚拟实训软件:赋能职业教育利器
学习
GalaxySpaceX1 天前
STM32-SPI协议
stm32·单片机·嵌入式硬件·1024程序员节
单片机专业性1 天前
硬件电路LRC串联谐振分析
单片机·嵌入式硬件·电路设计
hazy1k1 天前
51单片机基础-I²C通信与EEPROM读写
c语言·stm32·单片机·嵌入式硬件·51单片机·1024程序员节