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

相关推荐
QiZhang | UESTC9 小时前
学习日记day45
学习
菜鸟‍9 小时前
【论文学习】通过编辑习得分数函数实现扩散模型中的图像隐藏
人工智能·学习·机器学习
知识分享小能手9 小时前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 配置网络功能 —语法详解与实战案例(10)
网络·学习·centos
瑶光守护者10 小时前
【学习笔记】5G RedCap:智能回落5G NR驻留的接入策略
笔记·学习·5g
你想知道什么?10 小时前
Python基础篇(上) 学习笔记
笔记·python·学习
SHOJYS10 小时前
学习离线处理 [CSP-J 2022 山东] 部署
数据结构·c++·学习·算法
SystickInt10 小时前
32 DMA实现ROM与RAM通信
stm32·单片机·嵌入式硬件
weixin_4093831210 小时前
简单四方向a*学习记录4 能初步实现从角色到目的地寻路
学习·a星
xian_wwq11 小时前
【学习笔记】可信数据空间的工程实现
笔记·学习
Li.CQ11 小时前
SQL学习笔记
笔记·sql·学习