超声波测距系统的设计实现(基于STM32 )-软件部分

超声波测距是一种典型的非接触测量方式。超声波在气体、液体及固体中以不同速度传播,定向性好、能量集中、传输过程中衰减较小、反射能力较强。且超声波测距系统结构简单、电路易实现、成本低、速度快,所以在工业自动控制、建筑工程测量和机器人视觉识别等领域应用非常广泛。
3 软件算法
3.1 基本流程
系统以STM32 单片机为核心,实现对各部分的控制和响应。测距软件的基本流程:首先使用美国DALAS 公司生产的DS18B20 数字温度传感器测量环境温度,通过查找事先建立好的声速-温度对照表得到当前声速;开启计数器计时,同时通过STM32 的PWM 模块产生8 个周期40 KHz 的脉冲方波和输入捕捉模块捕获超声波回波。待回波进入接收电路,经放大/ 整形等硬件处理后,进入单片机。单片机捕捉到回波的
触发信号,并记录产生下降沿的时刻;经过软件滤波,和峰值时间检测算法,得到峰值时刻作为回波到达的时刻,最后计算距离。软件流程如图5 所示。
在这里插入图片描述
STM32 的高级定时器由一个16 位的自动装载计数器组成, 时钟源频率高达72 MHz, 大大提高了时间测量的分辨率。高级定时器有4 个独立的通道,本文利用其互补的PWM来驱动超声波发射器,输入捕获通道来捕捉回波信号,在开启定时器的同一时刻也启动了PWM, 这不仅消除了启动发射和启动计时之间的误差,并且捕获通道精准的记录了超声波回波到达的时刻(比较器的下降沿)。待单片机进入中断后读取该值,而非等到进入中断后才开始读取当前计时器的值。
3.2 峰值时间检测
回波信号处理常规的方法是采用具有固定阈值电平的比较器电路,将回波信号与某一固定阈值电平在比较器电路中进行比较, 比较器输出的翻转时间就是回波到达的时间,在使用了时间增益补偿电路后,超声波回波信号的幅值得到了相对的稳定,但由于回波信号幅度仍存在一定程度的波动及回波信号被展宽,造成了时间检测产生一定的误差,因而在设计中把回波幅度的峰值时间点作为回波到达的时间。传
统的峰值检测方法大多通过硬件电路, 包括包络检测电路、微分电路和过零检测电路,设计较复杂,难实现。本文通过软件方法来实现峰值检测。
超声波回波经过比较器LMV331 后,将产生频率为40 kHz的方波,由于比较器阈值固定,回波信号的占空比将由小变大,达到一个最大值后再变小,而占空比最大处正对应着峰值点所在的回波波形,th/2 处对应着峰值时刻点, 如图6 所示。STM32 的PWM 输入模式启用两个输入捕获单元对应同一个输入信号,分别捕获信号的上升沿和下降沿,可以方便计算出回波信号的频率和占空比。
在这里插入图片描述
4 结果
为了验证系统的测量精度及盲区,在实验室进行了测距实验,表1 中的测量距离一栏取的是3 次测量的平均值。测量结果如表1 所示。
在这里插入图片描述
由表1 中数据可知:一方面,由于采用了峰值时间检测技术,使得系统的盲区很小;另一方面,在所测量程内,由于采用了时间增益补偿技术,使得测量误差并没有随着距离的增大而增大。

以下是我的stm32代码,可以去连接下载,有点小问题:https://download.csdn.net/download/leva345/37549084

猜你喜欢

转载自blog.csdn.net/leva345/article/details/121174213