这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 简易超声波测距仪实践-驱动超声波US100

共2条 1/1 1 跳转至页

简易超声波测距仪实践-驱动超声波US100

助工
2026-09-29 13:11:38     打赏

硬件准备

超声波模块选用的US-100,0 与常见的 HC-SR04 外观相似,但多了一颗温度补偿芯片和串口功能。背面有一个跳线帽,它决定了工作模式:

  • 跳线帽插上:UART 串口模式

  • 跳线帽拔掉:GPIO 电平触发模式(HC-SR04 兼容)

UART 模式下,向传感器的 Trig/TX 引脚发送 0x55,它会从 Echo/RX 引脚返回两个字节,构成 16 位距离值,单位毫米。发送 0x50 则返回一个温度字节,实际温度 = 返回值 − 45℃。

关键参数:供电范围 2.4V–5.5V,测距范围 2cm–450cm,可以和 A153 的 3.3V 逻辑直接相连,不需要电平转换。

image.png

接线方案

本次实践选择 UART 模式。A153 的 LPUART 引脚分布在 mikroBUS 和 Arduino 接口上。为了方便,使用 mikroBUS 接口(J5/J6) 上的 LPUART2:

US-100 引脚FRDM-MCXA153说明
VCC3.3V(J5 或 J6 的 3.3V 引脚)供电,3.3V 即可
GNDGND共地
Trig/TXLPUART2_TX(P3_15)A153 发送 → 传感器接收
Echo/RXLPUART2_RX(P3_14)传感器发送 → A153 接收

注意:传感器的 Trig/TX 是接收 A153 数据的引脚,所以应接 A153 的 TX。Echo/RX 是传感器发送数据的引脚,接 A153 的 RX。交叉连接。

A153 的 LPUART2 在 Port3 的 14/15 号引脚上,ALT2 功能即为 LPUART2。具体板载位置需要对照 FRDM-MCXA153 的 pinout 图确认。


软件实现

SDK 准备

在 MCUXpresso SDK 中,lpuart_polling 或 lpuart_interrupt 示例是最好的起点。本次使用轮询模式实现,逻辑最直观。

代码框架

c
#include "fsl_lpuart.h"#include "fsl_port.h"#include "fsl_clock.h"#define US100_LPUART        LPUART2#define US100_LPUART_CLK_FREQ  CLOCK_GetLPUARTClkFreq(2U)#define US100_BAUDRATE      9600Ustatic void US100_Init(void){
    lpuart_config_t config;

    /* 使能时钟与引脚复用 */
    CLOCK_EnableClock(kCLOCK_GatePORT3);
    RESET_ReleasePeripheralReset(kLPUART2_RST_SHIFT_RSTn);
    RESET_ReleasePeripheralReset(kPORT3_RST_SHIFT_RSTn);

    /* P3_14 作为 LPUART2_RX, P3_15 作为 LPUART2_TX */
    PORT_SetPinMux(PORT3, 14U, kPORT_MuxAlt2);
    PORT_SetPinMux(PORT3, 15U, kPORT_MuxAlt2);

    /* LPUART 配置:9600 8N1 */
    LPUART_GetDefaultConfig(&config);
    config.baudRate_Bps = US100_BAUDRATE;
    config.enableTx = true;
    config.enableRx = true;
    LPUART_Init(US100_LPUART, &config, US100_LPUART_CLK_FREQ);}/* 返回距离,单位毫米;失败返回 0 */static uint16_t US100_ReadDistance(void){
    uint8_t cmd = 0x55;
    uint8_t rxBuf[2] = {0};
    status_t status;

    /* 发送测距命令 */
    status = LPUART_WriteBlocking(US100_LPUART, &cmd, 1);
    if (status != kStatus_Success) {
        return 0;
    }

    /* 读取两个字节的高位和低位 */
    status = LPUART_ReadBlocking(US100_LPUART, rxBuf, 2);
    if (status != kStatus_Success) {
        return 0;
    }

    /* 距离 = 高字节 × 256 + 低字节,单位 mm */
    return ((uint16_t)rxBuf[0] << 8) | rxBuf[1];}

主循环

c
int main(void){
    US100_Init();

    while (1) {
        uint16_t distance_mm = US100_ReadDistance();

        if (distance_mm > 0) {
            PRINTF("Distance: %u mm (%u cm)\r\n", distance_mm, distance_mm / 10);
        } else {
            PRINTF("Read failed\r\n");
        }

        SDK_DelayAtLeastUs(100000, SystemCoreClock);  /* 等待 100ms */
    }}

实测数据

上电后,在 20cm–150cm 范围内用手或纸板遮挡传感器,串口输出稳定。每次读取耗时约 100–200ms,符合 US-100 的响应特性。近距离(<5cm)偶尔返回无效值,这与超声波传感器的物理特性有关,属于正常现象。


小结

A153 驱动 US-100 的核心工作量集中在LPUART 的引脚复用和波特率配置上。一旦串口通了,US-100 的协议本身极其简单:发一个字节,读两个字节。相比 GPIO 模式需要精确测量回波脉宽,UART 模式把时序负担交给了传感器内部的 MCU,A153 端只需要标准的串口读写。





关键词: US100     测距仪     超声波     驱动    

院士
2026-09-29 16:00:26     打赏
2楼

谢谢分享,学习了。


共2条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]