3.9 KiB
3.9 KiB
雷达传感器UART通信修复说明
问题分析
根据HLK-LD2410B-P雷达传感器原理图分析,发现了UART通信不可用的根本原因:
原理图分析
- U11模块引脚1(OUT) → 连接到 RADAR_DET(GPIO6)
- 这个OUT脚是UART输出使能脚,不是人体检测脚
- 必须配置为输出高电平才能启用雷达模块的UART数据输出
原始错误配置
// ❌ 错误:将UART使能脚配置为输入模式
gpio_config_t radar_config = {};
radar_config.mode = GPIO_MODE_INPUT; // 错误配置
修复方案
1. GPIO6配置修复
// ✅ 正确:将GPIO6配置为输出高电平,启用UART
gpio_config_t radar_config = {};
radar_config.mode = GPIO_MODE_OUTPUT; // 改为输出模式
gpio_set_level(PIN_RADAR_DET, 1); // 输出高电平启用UART
2. 检测逻辑修复
// ❌ 错误:使用GPIO6读取人体检测状态
temp_data.detected = gpio_get_level(PIN_RADAR_DET) == 1;
// ✅ 正确:完全依赖UART数据解析结果
// 在parseUARTData函数中根据目标状态判断
radar_data.detected = (target_state > 0) ||
(radar_data.moving_distance > 0) ||
(radar_data.static_distance > 0);
3. UART数据解析增强
// 目标状态含义:
// 0x00 = 无目标
// 0x01 = 运动目标
// 0x02 = 静止目标
// 0x03 = 运动+静止目标
uint8_t target_state = data[data_start];
修复文件清单
修改的文件
-
firefly_esp32/main/Module/RadarSensor.h- 更新类注释说明
- 修正数据结构注释
-
firefly_esp32/main/Module/RadarSensor.cppinitGPIO(): GPIO6改为输出高电平parseUARTData(): 增加人体检测逻辑dataTaskFunction(): 移除GPIO检测代码- 更新相关日志信息
预期效果
修复前的问题
I (176539) RadarSensor: 🔍 UART读取状态: 字节数=0
📊 UART通信: 不可用
📏 距离分段: none
⚠️ UART数据不可用,仅使用GPIO检测
修复后的预期结果
I (xxx) RadarSensor: ✅ 雷达UART使能脚(OUT)已拉高,UART输出启用 (GPIO6)
I (xxx) RadarSensor: 🔍 UART读取状态: 字节数=21
I (xxx) RadarSensor: 📡 UART解析成功: 状态=0x01, 有人=是, 运动=150cm(能量45), 静止=0cm(能量0)
📊 UART通信: 可用
📏 距离分段: 1-3m
测试验证
1. 编译烧录
cd firefly_esp32
idf.py build
idf.py -p COM7 flash monitor
2. 观察日志
关注以下关键日志:
✅ 雷达UART使能脚(OUT)已拉高,UART输出启用🔍 UART读取状态: 字节数=21(不再是0)📡 UART解析成功: 状态=0xXX, 有人=X
3. API测试
python test_radar_distance.py
python quick_radar_test.py
预期看到:
📊 UART通信: 可用📏 距离分段: 0-1m/1-3m/>3m(不再是none)
技术要点
雷达模块工作原理
- 供电: 5V供电(+5V_RADAR)
- UART使能: GPIO6(OUT脚)输出高电平启用
- 数据通信: UART0 (TXD0/RXD0) 256000波特率
- 数据格式: 21字节/帧,包含目标状态和距离信息
引脚对应关系
| 模块引脚 | 功能 | ESP32连接 | 代码中定义 |
|---|---|---|---|
| 1脚(OUT) | UART使能 | RADAR_DET | GPIO6 |
| 2脚(TX) | 数据发送 | TXD_HLK | RXD0 |
| 3脚(RX) | 数据接收 | RXD_HLK | TXD0 |
| 4脚(GND) | 地线 | GND | - |
| 5脚(VCC) | 供电 | +5V_RADAR | - |
总结
这次修复解决了雷达传感器UART通信的根本问题:
- 正确理解原理图: GPIO6是UART使能脚,不是检测脚
- 正确配置GPIO: 输出高电平启用UART通信
- 完善数据解析: 根据UART数据判断人体检测状态
- 移除错误逻辑: 不再使用GPIO6读取检测状态
修复后,雷达传感器将能够正常输出UART数据,提供精确的距离检测和人体感应功能。