如何调试超声波测距系统?
创作时间:
作者:
@小白创作中心
如何调试超声波测距系统?
引用
1
来源
1.
https://www.jerry.net.cn/articals/15448.html
超声波测距是一种常用的非接触式测量技术,广泛应用于机器人避障、液位检测和距离测量等领域。本文将详细介绍超声波测距系统的调试步骤和注意事项。
一、硬件连接与配置
- 硬件连接:
- 将HC-SR04模块的VCC引脚连接到5V电源。
- GND引脚连接到地线。
- Trig引脚连接到单片机的PB14引脚。
- Echo引脚连接到单片机的PB15引脚。
- CubeMX配置:
- 设置系统时钟频率为最大,例如168MHz。
- APB1的时钟频率设置为84MHz。
- 配置TIM2基础定时器,分频系数为83,计数单位为1μs,向上计数模式,周期为65535。
- 配置PB14为输出模式(Trig引脚),PB15为输入模式(Echo引脚)。
二、软件实现
触发信号:
使用宏定义控制Trig引脚的高低电平:#define HCSR_TRIG_HIGH() HAL_GPIO_WritePin(HC_SR04_Trig_GPIO_Port, HC_SR04_Trig_Pin, GPIO_PIN_SET) #define HCSR_TRIG_LOW() HAL_GPIO_WritePin(HC_SR04_Trig_GPIO_Port, HC_SR04_Trig_Pin, GPIO_PIN_RESET)
触发脉冲信号:
实现不低于10μs的TTL高电平脉冲信号,这里延时20μs:void HCSR04StartTrigStart(void) { HCSR_TRIG_HIGH(); for_delay_us(20); HCSR_TRIG_LOW(); }
回响信号读取:
使用TIM2计时器来测量Echo引脚的高电平持续时间:void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_15) // Echo引脚 { if (HAL_GPIO_ReadPin(GPIO_PIN_15) == 1) // Echo高电平开始 { __HAL_TIM_SET_COUNTER(&htim2, 0); // 重置TIM2计数器 while (HAL_GPIO_ReadPin(GPIO_PIN_15) == 1); // 等待Echo变低 time_count = __HAL_TIM_GET_COUNTER(&htim2); // 获取计数值 } } }
三、计算距离
- 公式:
距离 = (time_count * 声速(340M/S)) / 2;
time_count是TIM2计数器的值,单位为μs。
四、调试与优化
- 调试步骤:
- 确保硬件连接正确,特别是Trig和Echo引脚的连接。
- 检查单片机和超声波模块的供电是否正常。
- 使用逻辑分析仪或示波器观察Trig和Echo引脚的信号波形,确保触发信号和回响信号的正确性。
- 根据实际测量结果调整延时和计数器的参数,以确保测量精度。
- 常见问题及解决方法:
- 如果测量距离不准确,检查超声波模块的安装位置和被测物体的表面是否平整。
- 如果回响信号不稳定,可能是由于环境噪声干扰,可以尝试增加滤波处理。
五、代码示例
以下是完整的代码示例,用于实现超声波测距的基本功能:
#include "stm32f1xx.h"
#include "usart.h"
#include "delay.h"
#include "key.h"
#include "time.h"
#include "exti.h"
#include "Ultrasonic.h"
int main(void)
{
unsigned int rang = 0;
/*初始化串口*/
delay_init();
key_init_wt();
//TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms
ultrasonic_config();
EXTI_config();
TIM3_Int_Init(4,71); //5us
USART1_Config();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
USART1_printf(USART1,"\r\nHello World\r\n");
while(1)
{
if(0 == KEY1)
{
delay_ms(10);
if(0 == KEY1)
{
while(0 == KEY1);
USART1_printf(USART1,"\r\n\r\n");
ultrasonic_Ranging();
USART1_printf(USART1,"\r\ntime_count=%d\n",time_count);
rang = (unsigned int)(((time_count*0.000005*340)/2)*1000);
USART1_printf(USART1,"\r\nDistance=%d\n",rang);
}
while(0 == KEY1);
}
}
}
六、相关问答FAQs
Q1:超声波测距模块的工作原理是什么?
A1:超声波测距模块通过发射超声波脉冲并接收其回波来测量距离,模块的Trig引脚发送一个至少10μs的高电平脉冲信号,触发模块内部发出8个40kHz的方波,然后自动检测是否有信号返回,有信号返回时,Echo引脚输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间,根据这个时间间隔和声速,可以计算出距离。
Q2:如何提高超声波测距的精度?
A2:提高超声波测距精度的方法包括:
- 确保被测物体表面平整且面积足够大(建议不少于0.5平方米)。
- 使用适当的滤波处理来减少环境噪声干扰。
- 调整测量周期,建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
热门推荐
心肺复苏操作比例:30次胸外按压配2次人工呼吸
催熟的西红柿不能吃,买时如何辨认?菜农:看准4点,远离劣质货
浪涌保护器的主要作用和各行业解决方案
天津当前五险一金缴纳基数及比例
空置房物业费减免政策:市场调节与平衡各方利益的关键
战友是技术干部,最终选择了逐月
全面解析:法国增值税号(VAT税号)注册和使用指南
企业增值税号是什么?一文详解纳税人识别号与增值税类型
如何分析黄金储备的重要性?这种重要性在经济发展中如何体现?
李白《春夜洛城闻笛》翻译古诗词赏析
桂枝汤治疗感冒吗
六的大写写法
6元大写怎么写?人民币金额大写规则与在线转换
如何分析市场趋势并制定投资策略
中国航母力量的多元化、高峰期和更新换代的前瞻
如何让团队更有趣一点
这届奥运变天了,品牌营销最好这样做
血糖高一日三餐怎么吃?2025高血糖一日三餐食谱大全
世界麻风病日:消除歧视,关爱患者,共建健康社会
俄罗斯FPV无人机培训体系:从理论到实战的系统化建设
购买移动流量卡时需要注意哪些参数
VPS流量是怎么计算的?看完你就懂了
什么是静态页面?从基础概念到设计开发全解析
手机剩余电量并非精确值 1%电量到底能用多久?
活性炭用多久就不能用了(一包活性炭能用多久啊,晒过几次太阳以后就不能在使用)
你会跑步吗?或许你连正确呼吸都不懂!
课题技术路线怎么写才能清晰表达研究思路?
虎跳峡景点介绍
15种芹菜叶创意食谱:让营养不浪费的美味佳肴
门牙有个缺口,做树脂补牙好还是贴片和牙冠好?