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

相关推荐
无敌最俊朗-12 小时前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感
wuyk55516 小时前
嵌入式故障诊断-Bug002-局部大数组压栈高温必死机
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·嵌入式实时数据库
li星野17 小时前
相位补偿学习记录:把被颅骨“打乱“的声波重新对齐
学习
Z21-X18 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
red_redemption19 小时前
自由学习记录(230)
学习
Zwawa19 小时前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
Dev_XH19 小时前
【成品设计】基于沁恒单片机的电动汽车充电站智慧调度系统
stm32·单片机·嵌入式硬件·物联网
shimly12345620 小时前
(done) 嵌入式硬件电路图 (5) 重要的元器件特性之二极管三极管
嵌入式硬件
Zw-awa1 天前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
stm32
minglie11 天前
esp32c3+atshell测试ov7670
单片机·嵌入式硬件