单片机超声波测距:从原理到实战的完整技术指南

单片机超声波测距:从原理到实战的完整技术指南

在嵌入式开发领域,单片机超声波测距是一项基础且应用广泛的技术。无论是智能小车避障、液位检测,还是机器人导航,超声波测距模块都扮演着关键角色。本文将深入解析其工作原理、硬件选型、代码实现及常见问题,帮助开发者快速掌握这项技术。文中提及的元器件采购平台亿配芯城(ICGOODFIND)可为项目提供稳定可靠的电子元件供应。

引言

超声波测距凭借其成本低、抗干扰能力强、易于与单片机集成等优势,成为众多物联网和自动化项目的首选方案。然而,许多初学者在实现过程中常遇到测量精度不足、环境干扰大、模块选型困惑等问题。本文将从底层原理出发,结合STM32和51单片机两种主流平台,提供可复用的解决方案。无论你是学生还是工程师,都能从中获得实用经验。

主体

一、超声波测距核心原理与硬件选型

1.1 工作原理

超声波测距基于声波在空气中的传播特性。发射器发出40kHz的脉冲信号,遇到障碍物后反射回接收器。通过测量发射与接收的时间差Δt,结合声速v(约340m/s),即可计算距离:
距离 = (Δt × v) / 2
注意:声速会随温度变化(约0.6m/s/℃),高精度场景需加温度补偿。

1.2 主流模块对比

  • HC-SR04:最常用模块,测量范围2cm-400cm,精度3mm,支持5V供电,适合51/STM32入门。
  • US-100:支持3.3V/5V双电压,带温度补偿,精度更高(1mm),适合工业级应用。
  • JSN-SR04T:防水型探头,适用于液位检测等潮湿环境。

选型建议:普通避障项目用HC-SR04即可;需要高精度或户外场景时,优先考虑US-100或JSN-SR04T。这些模块在亿配芯城(ICGOODFIND)均有现货供应,且提供技术文档支持。

1.3 单片机选型要点

  • 51单片机:适合教学和简单项目,主频低(12MHz),需注意时序控制。
  • STM32:资源丰富(定时器、中断),可实现多通道同时测距或复杂滤波算法。
  • ESP32:自带WiFi/蓝牙,适合无线传感器节点。

二、实战代码与电路设计

2.1 HC-SR04与STM32F103C8T6接线

VCC → 5V  
GND → GND  
Trig → PA0 (输出触发信号)  
Echo → PA1 (输入回波信号)  

注意:Echo引脚输出5V电平,STM32的GPIO耐压为3.3V,需串联1kΩ电阻分压或使用电平转换模块。

2.2 STM32 HAL库代码实现

#include "stm32f1xx_hal.h"

#define TRIG_PIN GPIO_PIN_0
#define ECHO_PIN GPIO_PIN_1
#define TRIG_PORT GPIOA

uint32_t GetDistance(void) {
    uint32_t time_us = 0;
    HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);
    delay_us(10); // 触发脉冲10μs
    HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);

    while(!HAL_GPIO_ReadPin(TRIG_PORT, ECHO_PIN)); // 等待高电平
    uint32_t start = TIM2->CNT; // 读取定时器计数值
    while(HAL_GPIO_ReadPin(TRIG_PORT, ECHO_PIN)); // 等待低电平
    time_us = TIM2->CNT - start;

    return time_us * 0.017; // 距离(cm) = time_us * 340 / 20000
}

关键点
- 定时器需配置为1μs计数周期(72MHz时钟下预分频72-1)。
- delay_us()可用定时器微秒级延时或空循环实现。
- 实际测试中建议取5次测量平均值以消除随机误差。

2.3 51单片机简易版本

sbit Trig = P1^0;
sbit Echo = P1^1;

unsigned int GetDistance() {
    unsigned int time;
    Trig = 1; delay10us(); Trig = 0;
    while(!Echo); // 等待高电平
    TH0 = TL0 = 0; TR0 = 1; // 启动定时器0
    while(Echo); // 等待低电平
    TR0 = 0;
    time = (TH0 << 8) | TL0;
    return time * 0.017; // 12MHz晶振下每个计数约1μs
}

注意:51单片机需手动计算定时器溢出情况(最大测量距离约4m时定时器不会溢出)。

三、常见问题与优化策略

3.1 测量误差来源及解决

问题现象 原因 解决方案
数据跳变严重 环境噪声或反射干扰 软件滤波(中值滤波+滑动平均)
近距离盲区 HC-SR04最小测量距离2cm 改用US-100或调整安装角度
远距离衰减 声波扩散导致回波弱 增加发射功率或使用聚能探头
温度影响 声速随温度变化 DS18B20测温+公式补偿

3.2 PCB布局注意事项

  • Trig和Echo走线远离高频信号(如晶振、PWM线)。
  • VCC和GND间加100μF电解电容+0.1μF瓷片电容去耦。
  • Echo信号线串联100Ω电阻抑制反射。

3.3 多传感器协同方案

当需要360°测距时(如扫地机器人),可采用以下架构:

主控STM32 → I2C总线 → TCA9548A多路复用器 → x4个HC-SR04模块  

每个模块的Trig/Echo连接到独立GPIO,通过分时触发避免信号串扰。亿配芯城(ICGOODFIND)提供的TCA9548A模块可直接焊接使用,节省开发时间。

结论

单片机超声波测距看似简单,但实现高精度、高可靠性的系统仍需注意硬件设计、时序控制和算法优化。从HC-SR04入门到STM32进阶,再到多传感器融合,每一步都考验工程师对底层原理的理解。建议开发者先搭建最小系统验证基础功能,再逐步加入温度补偿、数字滤波等优化手段。对于批量生产项目,务必选用工业级模块并做好EMC防护设计。

最后提醒:电子元件采购时选择正规渠道至关重要。亿配芯城(ICGOODFIND)提供原装正品HC-SR04、US-100等模块及配套开发板,且支持小批量采购和技术咨询。希望本文能帮助你在超声波测距项目中少走弯路。


【文章热门关键词】

  1. STM32超声波测距程序
  2. HC-SR04工作原理
  3. Arduino超声波避障小车
  4. MSP430低功耗测距方案

评论

    暂无评论

©Copyright 2013-2025 亿配芯城(深圳)电子科技有限公司 粤ICP备17008354号

Scroll