【星闪开发连载】WS63E模块的雷达功能浅析

[复制链接]
发表于 2024-10-24 01:30:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目录

引言
功能简介
程序分析
操作步调
简朴测试
结语


引言

WS63E星闪模块有个特色功能就是雷达活动感知,检测物体是否有活动,作用间隔不凌驾6米。hi3863芯片本身不带雷达功能,是模块提供的相关功能。海思还有个WS63星闪模块,没有雷达感知本领。
功能简介

从开发板的图片上可以看到,右下角有个安装雷达天线的地方,使用使用1代IPEX接口。润和的套件内里没有带天线,从我的测试看没有天线,其实雷达功能是不正常的。以是下单了一根天线,本日只是简朴分析一下程序,等天线到了之后再详细测试。

海思没有公布雷达活动感知的工作原理,但是这个雷达活动感知功能必须和WiFi 一起工作,如果不启动WiFi,雷达功能就无法启动。WiFi可以工作在STA或AP模式,WiFi不肯定要连接上,只要启动即可。我猜测它的雷达功能是使用了WiFi信号的强度进行测试的,我们课题组以前做过使用WiFi信号强度进行室内定位的工作,估计原理差不多。
程序分析

WS63E的代码仓库中包括两组雷达相关的例子:一组是海思官方提供的,测量后根据间隔点亮主板上的LED灯;另一组是润和提供的,需要配合交通灯扩展板,检测物体在6M以内是否有活动。如果有则亮绿灯,如果检测物体在0M-1M以内,则亮红灯,如果检测物体在1M-2M以内,则亮绿灯。两组程序的原理是完全一样的。
下面以润和的vendor/HiHope_NearLink_DK_WS63E_V03/demo/radar_led/radar_sta_sample/radar_sta_sample.c为例介绍一下其工作原理。
这段程序是一个嵌入式C语言程序,用于初始化和控制一个雷达体系。它包罗了网络接口、WiFi热门配置、雷达服务、GPIO控制等功能。以下是对程序的分析:

  • 包罗头文件:程序包罗了多个头文件,这些头文件提供了网络接口、WiFi热门配置、基础类型定义、UART通信、操作体系抽象层、雷达服务、GPIO控制等功能的支持。
  • 宏定义:定义了一些常量,如WiFi接口名称最大长度、最大SSID长度、扫描AP限制、MAC地址长度、WiFi初始化等待时间、STA启动耽误等。
  • 雷达状态和参数:定义了雷达的状态码、默认循环次数、周期、调试类型和波形等。
  • LED引脚配置:定义了赤色、绿色和黄色LED的引脚编号。
  • 任务优先级和堆栈大小:定义了雷达任务的优先级和堆栈大小。
  • 罗列类型:定义了一个罗列类型radar_led_gear_t,用于控制LED的档位。
  • 结构体:定义了一个结构体radar_driver_para_t,用于存储雷达驱动参数。
  • 弱引用函数:radar_set_driver_para_weakref函数被声明为弱引用,这意味着如果其他地方没有定义这个函数,链接器将不会报错。
  • GPIO设置函数:gpio_set_value函数用于设置GPIO引脚的模式和方向。
  • LED初始化和控制函数:radar_led_init函数初始化所有GPIO并设置类型,radar_switch_*_on_off函数用于控制LED的开关。
  • 雷达控制LED函数:radar_ctrl_led函数根据雷达结果控制LED的状态。
  • 雷达启动STA函数:radar_start_sta函数用于启动STA(Station)模式的WiFi接口。
  • 打印雷达结果函数:radar_printf_res函数打印雷达结果并控制LED。
  • 雷达参数初始化函数:radar_init_para函数初始化雷达的调试参数、选择算法参数和算法参数。
  • 雷达演示初始化函数:radar_demo_init函数是雷达演示的初始化函数,它初始化LED、启动STA、注册雷达结果回调函数、初始化雷达参数,并开始雷达探测。
  • 雷达入口函数:radar_entry函数创建了一个任务来运行radar_demo_init函数。
  • 程序入口点:app_run宏调用radar_entry函数作为程序的入口点。
整体来看,这个程序是一个雷达体系的初始化和控制程序,它通过GPIO控制LED,通过网络接口进行配置,并通过回调函数处理雷达结果。程序使用了操作体系抽象层(如osal_task)来创建和管理任务。
关键结构体定义:
  1. typedef struct {
  2.     uint8_t times; // 发射次数, 0-无限次
  3.     uint8_t loop; // 单次雷达工作, TRx的波形数量
  4.     uint8_t ant; // Rx天线数量
  5.     uint8_t wave; // 波形选择, 0-320M/40M CTA, 1-160M/20M CW
  6.     uint8_t dbg_type; // 维测方式. 0-不外发维测数据, 1-外发脉压后的数据, 2-外发相干累加后的数据
  7.     uint16_t period; // 雷达工作间隔
  8. } radar_driver_para_t;
复制代码
 
  1. typedef struct {
  2.     uint8_t times;      /*!< @if Eng Number of subframe transmissions, default value 0, always sent, range 0~20
  3.                             @else   子帧发送次数, 默认值0, 一直发送, 范围0~20 @endif */
  4.     uint8_t loop;       /*!< @if Eng Loop times of radar waveform in one subframe, default value 8
  5.                             @else   单个子帧雷达波形循环发送次数, 默认值为8 @endif */
  6.     uint8_t ant;        /*!< @if Eng Selection of radar antenna, default value 0
  7.                             @else   接收通路选择, 默认值为0 @endif */
  8.     uint8_t wave;       /*!< @if Eng Selection of radar wave, default value 2
  9.                             @else   雷达发射波形类型选择, 默认值为2 @endif */
  10.     uint8_t dbg_type;   /*!< @if Eng Selection of debug information, default value 0, for details,
  11.                             see @ref radar_dbg_type_t
  12.                             @else   维测信息输出选择, 默认值为0, 只打印基础流程日志日志, 范围0~4,
  13.                             参考 @ref radar_dbg_type_t @endif */
  14.     uint16_t period;    /*!< @if Eng Radar subframe interval, unit us, default value is 5000, range 3000~100000
  15.                             @else   雷达子帧间隔,单位us,默认值为5000, 范围3000~100000 @endif */
  16. } radar_dbg_para_t;
复制代码
如果想修改相关参数,发起看看src/include/middleware/services/radar/radar_service.h。 
操作步调

1. 将vendor/HiHope_NearLink_DK_WS63E_V03/demo/radar_led复制到\src\application\samples\peripheral文件夹下。
2. 在src\application\samples\peripheral\CMakeLists.txt文件中新增编译案例,可以在“set(SOURCES "${SOURCES}" PARENT_SCOPE)”上面一行添加。
  1. if(DEFINED CONFIG_SAMPLE_SUPPORT_RADAR_LED)
  2.     add_subdirectory_if_exist(radar_led)
  3. endif()
复制代码
3. 在src\application\samples\peripheral\Kconfig文件中新增编译案例,可以在最后一行添加。
  1. config SAMPLE_SUPPORT_RADAR_LED
  2.     bool
  3.     prompt "support RADAR LED Sample."
  4.     default n
  5.     depends on ENABLE_PERIPHERAL_SAMPLE
  6.     help
  7.         This option means support RADAR LED Sample,
  8. if SAMPLE_SUPPORT_RADAR_LED
  9. menu "RADAR LED Sample Configuration"
  10. osource "application/samples/peripheral/radar_led/Kconfig"
  11. endmenu
  12. endif
复制代码

3. 在配置中选择“Application/Enable the Sample of peripheral”,在弹出框中选择“support RADAR LED Sample → Support RADAR STA Sample”,点击Save,关闭弹窗。

4. 重新编译程序,然后烧写程序即可。 
简朴测试

天线没有到货,而没有天线,雷达的功能根本不能用。以是以下的测试只是简朴地看看流程。
从日志日志可以看到,体系启动后就程序启动雷达功能。
  1. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  2. [RADAR_SAMPLE] radar_demo_init sta!
  3. device_main_init: 0!
  4. ===hal_initialize_phy===225===
  5. device_module_init:: succ!
  6. cali_set_cali_mask:old[0x0] -> new[0x1fa2]
  7. fe_rf_initialize
  8. cali_offline_cali_entry enter
  9. cali_set_cali_done_flag:old[0x0] -> new[0x1]
  10. rf cali OK. time cost:22, ret:0
  11. APP|Hello world!
  12. xo update temp:3,diff:0,xo:0x3083c
  13. STA try enable.
  14. drv_soc_ioctl ioctl_cmd->cmd=7.
  15. drv_soc_ioctl ioctl_cmd->cmd=9.
  16. drv_soc_ioctl ioctl_cmd->cmd=17.
  17. drv_soc_ioctl ioctl_cmd->cmd=13.
  18. drv_soc_ioctl ioctl_cmd->cmd=35.
  19. drv_soc_ioctl ioctl_cmd->cmd=2.
  20. drv_soc_ioctl ioctl_cmd->cmd=2.
  21. drv_soc_ioctl ioctl_cmd->cmd=2.
  22. drv_soc_ioctl ioctl_cmd->cmd=2.
  23. drv_soc_ioctl ioctl_cmd->cmd=2.
  24. drv_soc_ioctl ioctl_cmd->cmd=2.
  25. drv_soc_ioctl ioctl_cmd->cmd=41.
  26. STA connect success.
  27. [RADAR_LOG][set_para] 0,8,0,2,1,5000,2048,0x0034bb04
  28. [RADAR_LOG] update alg param [0][2][0][0][1][1][8]
  29. [RADAR_LOG] update alg param key_id [0x2118]
  30. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  31. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  32. [RADAR_LOG] update [0x2118][0][32,27,1,2,0,1,0,60,0,2,0,2,30,13,26,50,15,70,2]
  33. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  34. [RADAR_LOG] update alg param key_id [0x2118]
  35. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  36. [RADAR_LOG] RADAR START SUCC!
  37. [RADAR_LOG] OK! final lna:3, vga:30, peak:506, pwr:144315, ppa:4914
  38. lb:000, ub:000, hm:0, gr:0, fm:000001
  39. [RADAR_LOG] ch_num:13, iso:30
  40. [RADAR_LOG] RADAR STOP! cur:0, last:1
  41. [RADAR_LOG] RADAR RST!
  42. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  43. [RADAR_LOG] update alg param key_id [0x2118]
  44. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  45. [RADAR_LOG] RADAR START SUCC!
  46. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  47. [RADAR_LOG] OK! final lna:2, vga:2, peak:456, pwr:117020, ppa:4914
  48. lb:000, ub:000, hm:0, gr:0, fm:000001
  49. [RADAR_LOG] ch_num:12, iso:29
  50. [RADAR_LOG] RADAR STOP! cur:0, last:1
  51. [RADAR_LOG] RADAR RST!
  52. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  53. [RADAR_LOG] update alg param key_id [0x2118]
  54. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  55. [RADAR_LOG] RADAR START SUCC!
  56. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  57. [RADAR_LOG] OK! final lna:2, vga:2, peak:464, pwr:119357, ppa:4914
  58. lb:000, ub:000, hm:0, gr:0, fm:000001
  59. [RADAR_LOG] ch_num:11, iso:28
  60. [RADAR_LOG] RADAR STOP! cur:0, last:1
  61. [RADAR_LOG] RADAR RST!
  62. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  63. [RADAR_LOG] update alg param key_id [0x2118]
  64. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  65. [RADAR_LOG] RADAR START SUCC!
  66. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  67. [RADAR_LOG] OK! final lna:3, vga:30, peak:501, pwr:129188, ppa:4914
  68. xo update temp:4,diff:0,xo:0x3083c
  69. lb:000, ub:000, hm:0, gr:0, fm:000001
  70. [RADAR_LOG] ch_num:10, iso:30
  71. [RADAR_LOG] RADAR STOP! cur:0, last:1
  72. [RADAR_LOG] RADAR RST!
  73. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  74. [RADAR_LOG] update alg param key_id [0x2118]
  75. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  76. [RADAR_LOG] RADAR START SUCC!
  77. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  78. [RADAR_LOG] OK! final lna:3, vga:30, peak:490, pwr:134015, ppa:4914
  79. lb:000, ub:000, hm:0, gr:0, fm:000001
  80. [RADAR_LOG] ch_num:9, iso:30
  81. [RADAR_LOG] RADAR STOP! cur:0, last:1
  82. [RADAR_LOG] RADAR RST!
  83. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  84. [RADAR_LOG] update alg param key_id [0x2118]
  85. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  86. [RADAR_LOG] RADAR START SUCC!
  87. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  88. [RADAR_LOG] OK! final lna:3, vga:30, peak:475, pwr:125589, ppa:4913
  89. lb:000, ub:000, hm:0, gr:0, fm:000001
  90. [RADAR_LOG] ch_num:8, iso:30
  91. [RADAR_LOG] RADAR STOP! cur:0, last:1
  92. [RADAR_LOG] RADAR RST!
  93. [RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
  94. [RADAR_LOG] update alg param key_id [0x2118]
  95. [RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
  96. [RADAR_LOG] RADAR START SUCC!
  97. [RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
  98. [RADAR_LOG] OK! final lna:3, vga:30, peak:475, pwr:124232, ppa:4913
  99. lb:000, ub:000, hm:0, gr:0, fm:000001
  100. [RADAR_LOG] ch_num:7, iso:30
  101. [RADAR_LOG] RADAR STOP! cur:0, last:1
  102. [RADAR_LOG] RADAR RST!
复制代码
这里的反复启动不知道是否和没有天线有关。从日志日志中可以看到一些和雷达相关的测量参数。
大多数环境下雷达测量得到不了结果,但是偶尔也能输出测量值。
  1. lb:000, ub:000, hm:0, gr:0, fm:000069
  2. lb:000, ub:000, hm:0, gr:0, fm:000070
  3. lb:000, ub:000, hm:0, gr:0, fm:000071
  4. lb:000, ub:000, hm:0, gr:0, fm:000072
  5. lb:000, ub:000, hm:0, gr:0, fm:000073
  6. [RADAR_SAMPLE] lb:200, hb:600, hm:1
  7. R xxxx meters
  8. lb:200, ub:600, hm:1, gr:6, fm:000074
  9. [RADAR_SAMPLE] lb:0, hb:100, hm:1
  10. R 1 meters
  11. lb:000, ub:100, hm:1, gr:1, fm:000075
  12. lb:000, ub:100, hm:1, gr:1, fm:000076
复制代码
由于测量值禁绝,以是程序策略的结果有点离谱,造成灯的显示也很混乱。

结语

等天线到货后,再仔细测量一下。不过从论坛中网友反映的环境看,这个雷达功能存在两方面题目:一是测量精度陈诉,二是WiFi、蓝牙和雷达同时工作时,存在干扰题目。以是对这个功能不能期望太高。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表