9.6 [定时器]超声波测距实验-嵌入式铁头山羊STM32笔记

实验内容

上图为 HC-SR04,超声波测距传感器

传感器测得与障碍物的距离后,通过串口和 USB 转 TTL 模块给上位机突发上报距离数据。移动障碍物,测量值会随着测量距离而变化。

目录

了解测距传感器,搭建电路,梳理编码思路,编写代码

1.HCSR-04模块的使用方法

https://www.bilibili.com/video/BV11X4y1j7si?t=129.1&p=45

左眼发送声波,右眼接收声波,计算可得距离

HC-SR04 有四个引脚,如上图左所示,图右为实际工作波形。

Trig 引脚:启动测量,MCU 给 Trig 引脚发送大于 10us 的脉冲信号即可启动传感器。

左眼:传感器接收启动信号后,左眼发送声波,发送完后 Echo 引脚拉高,产生高电平脉冲。

右眼:过一段时间传感器接收到回声信号后 Echo 引脚立刻拉低,产生低电平脉冲。

通过计算从声波发送结束 到回声传回结束这段时间,根据图上公式可以计算出实际的距离。

我们控制单片机做两件事:

启动信号:给 Trig 发送大于 10us 的脉冲启动

计算脉宽:通过 Echo 引脚接收脉冲信号,去测量脉冲脉宽,从而得出和障碍物之间的距离。

2.搭建电路

https://www.bilibili.com/video/BV11X4y1j7si?t=404.2&p=45

上图为电路引脚及接线图。

传感器:

普通引脚 PA0 接 Trig 脚,

定时器 1 引脚 PA8 接 Echo 脚。

串口:

串口 1 的 RX 引脚 PA10 接 TXD,

串口 1 的 TX 引脚 PA9 接 RXD,T 和 R 是交叉连接的。

上图为超声波测距实验接线示意图。主要接传感器和串口引脚。

初始化串口引脚和本身。

上图为初始化串口引脚具体代码:

Tx:PA9,AF_PP,复用推挽输出

Rx:PA10,IPU,输入上拉

初始化串口本身三步骤:1 开启时钟、2 设置参数、3 闭合总开关

上图为初始化串口本身代码。

上图为串口测试代码。调用 usart.h,发送字符串测试。

上图为串口测试正常示意图,串口调试助手正常接收发送来的字符串。

3.梳理思路

https://www.bilibili.com/video/BV11X4y1j7si?t=1061.1&p=45

Q:如何测量脉宽?

A:使用输入捕获。一个通道捕获上升沿,另一个通道捕获下降沿,通过时间差计算脉宽。

t=(CCR2-CCR1)*分辨率

上图为测量的整个过程。

Trig:启动引脚,发送脉冲

声波:传感器发声和回声

Echo:脉宽为声音在空气中传播的时间。

CNT:递增。

如上图,测量流程分为六步。

1、清零 CNT

2、清零 CCR

3、开启定时器

4、发送脉冲启动

5、等待 CC1/2

6、关闭定时器

4.初始化时基单元

https://www.bilibili.com/video/BV11X4y1j7si?t=1460.7&p=45

上图上部分为时基单元基本结构框图。

上图下部分为计数器 CNT 随时间递增溢出的示意图。

设置参数:分辨率(台阶宽度),周期(溢出一次的时间)。

Q:分辨率如何取?

A:HC-SR04 测距精度最大 3mm(d=vt/2)。转化成时间:2 * 3mm/340(m/s)=17.65us 左右。所以分辨率 要小于等于目标精度对应的时间,才能精准捕捉这个时间间隔。所以我们取 1us 可满足要求。

Q:周期如何取?

A:周期越长越好。如果短了,cc1 获取,溢出,到不了 cc2 的。因为 PSC、CNT、RCR、ARR 为 16 位寄存器,所以要周期最长,ARR 取 65535 即可。

计算时基单元参数:

TIM1,挂载于 APB2,为 72MHZ,1 分频。TIM1 为 1 倍频,所以时钟为 72MHZ。

要分辨率 1us,所以 PSC 为 71。

RCR 设置为 0。

上图为时基单元初始化具体代码。

配置时基单元参数,先不开启时钟。

Q:为什么现在不使用 TIM_Cmd 开启时钟呢?

A:因为后续还要配置输入捕获,需要在定时器停止状态下完成。等全部配完参数后,再使能外设

5.初始化输入捕获

https://www.bilibili.com/video/BV11X4y1j7si?t=1922.4&p=45

定时器直接 CH1 测量上升沿,间接 CH2 输入捕获测量下降沿。

引脚配置:虽然表中建议 TIM1 的 CHx 引脚在输入捕获下配置成浮空输入,但是这个传感器的 Echo 引脚,在空闲状态为低电压,所以这里配置成**下拉输入(IPD)**更合理。

当 Echo 意外断开后,输入下拉可以提供一个默认低电压,来模拟脉冲信号的空闲状态

上图为初始化通道 1 的输入捕获引脚 PA8 的具体代码。

初始化输入捕获通道示意图。

上图为初始化通道 1 的输入捕获本身的具体代码。

CH1 输入滤波:0;边沿检测: 上升沿;信号选择:直接;分频器: 1 分频。

上图为初始化通道 2 的输入捕获本身的具体代码。

CH2 输入滤波:0;边沿检测: 下降沿;信号选择:间接;分频器: 1 分频。

6.编程

https://www.bilibili.com/video/BV11X4y1j7si?t=2372.8&p=45

六步骤

1、清零 CNT:编程接口:TIM_SetCounter

2、清零 CCR:编程接口:TIM_ClearFlag

3、开启定时器:编程接口:TIM_Cmd

4、发送脉冲启动:PA0 初始化,PP,然后发脉冲

5、等待 CC1/2:编程接口:TIM_GetFlagStatus

6、关闭定时器:编程接口:TIM_Cmd

上图为距离计算示意图

上图为计算距离实际代码。

总结

初始化串口:配置引脚(PA9,PA10),配置本身(开启时钟、设置参数、打开总开关);

初始化时基单元:开启时钟,配置参数( PSC、ARR、RCR);

初始化输入捕获:初始化引脚(PA8),配置参数(输入滤波、边沿检测、信号选择、分频);

然后六步骤获取 CCR 计算距离:清零 CNT、清零 CCR、开启定时器、发送启动脉冲、等待、关闭定时器

相关推荐
HQB20265 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science6 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
沉淀的.晴天7 小时前
can总线
stm32
桀人7 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
大叔学Linux8 小时前
FreeRTOS任务切换笔记
arm开发·笔记
国科安芯8 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C9 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路9 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc9 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院10 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法