嵌入式开发学习日志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引脚变为低电平,超声波模块接收到了反射回来的超声波,那么定时器关闭,停止计数,将记录的中断次数与每次中断设定的时间相乘后,就能得到传播时间。

相关推荐
IT阳晨。14 分钟前
【STM32】ADC
stm32·单片机·嵌入式硬件
纳祥科技2 小时前
方案分享:一款基于高性能单片机的落日灯方案
单片机·嵌入式硬件
Q***f6352 小时前
后端消息队列学习资源,RabbitMQ+Kafka
学习·kafka·rabbitmq
循环过三天2 小时前
7.7、Python-常用内置函数
笔记·python·学习
三佛科技-134163842123 小时前
智能保温杯方案,保温杯MCU控制方案设计
单片机·嵌入式硬件·智能家居·pcb工艺
烤麻辣烫3 小时前
23种设计模式(新手)-5里氏替换原则
java·学习·设计模式·intellij-idea·里氏替换原则
Wave8454 小时前
STM32_标准库转hal库
stm32·单片机·嵌入式硬件
AA陈超4 小时前
ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
c++·笔记·学习·ue5·虚幻引擎
智者知已应修善业5 小时前
【51单片机:两边向中间流水:即两边先点亮然后熄灭,次边的点亮再熄灭,直到最中间的两个点亮再熄灭,然后重复动作。】2023-3-4
c语言·c++·经验分享·笔记·嵌入式硬件·算法·51单片机
嵌入式软硬件攻城狮6 小时前
6.单片机回调函数
单片机·嵌入式硬件