首页 > 其他分享 >【星闪开发连载】WS63E模块的雷达功能浅析

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

时间:2024-10-26 16:46:41浏览次数:8  
标签:LOG radar alg WS63E RADAR 000 星闪 雷达 浅析

目录

引言

功能简介

程序分析

操作步骤

简单测试

结语


引言

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控制等功能。以下是对程序的分析:

  1. 包含头文件:程序包含了多个头文件,这些头文件提供了网络接口、WiFi热点配置、基础类型定义、UART通信、操作系统抽象层、雷达服务、GPIO控制等功能的支持。

  2. 宏定义:定义了一些常量,如WiFi接口名称最大长度、最大SSID长度、扫描AP限制、MAC地址长度、WiFi初始化等待时间、STA启动延迟等。

  3. 雷达状态和参数:定义了雷达的状态码、默认循环次数、周期、调试类型和波形等。

  4. LED引脚配置:定义了红色、绿色和黄色LED的引脚编号。

  5. 任务优先级和堆栈大小:定义了雷达任务的优先级和堆栈大小。

  6. 枚举类型:定义了一个枚举类型radar_led_gear_t,用于控制LED的档位。

  7. 结构体:定义了一个结构体radar_driver_para_t,用于存储雷达驱动参数。

  8. 弱引用函数radar_set_driver_para_weakref函数被声明为弱引用,这意味着如果其他地方没有定义这个函数,链接器将不会报错。

  9. GPIO设置函数gpio_set_value函数用于设置GPIO引脚的模式和方向。

  10. LED初始化和控制函数radar_led_init函数初始化所有GPIO并设置类型,radar_switch_*_on_off函数用于控制LED的开关。

  11. 雷达控制LED函数radar_ctrl_led函数根据雷达结果控制LED的状态。

  12. 雷达启动STA函数radar_start_sta函数用于启动STA(Station)模式的WiFi接口。

  13. 打印雷达结果函数radar_printf_res函数打印雷达结果并控制LED。

  14. 雷达参数初始化函数radar_init_para函数初始化雷达的调试参数、选择算法参数和算法参数。

  15. 雷达演示初始化函数radar_demo_init函数是雷达演示的初始化函数,它初始化LED、启动STA、注册雷达结果回调函数、初始化雷达参数,并开始雷达探测。

  16. 雷达入口函数radar_entry函数创建了一个任务来运行radar_demo_init函数。

  17. 程序入口点app_run宏调用radar_entry函数作为程序的入口点。

整体来看,这个程序是一个雷达系统的初始化和控制程序,它通过GPIO控制LED,通过网络接口进行配置,并通过回调函数处理雷达结果。程序使用了操作系统抽象层(如osal_task)来创建和管理任务。

关键结构体定义:

typedef struct {
    uint8_t times; // 发射次数, 0-无限次
    uint8_t loop; // 单次雷达工作, TRx的波形数量
    uint8_t ant; // Rx天线数量
    uint8_t wave; // 波形选择, 0-320M/40M CTA, 1-160M/20M CW
    uint8_t dbg_type; // 维测方式. 0-不外发维测数据, 1-外发脉压后的数据, 2-外发相干累加后的数据
    uint16_t period; // 雷达工作间隔
} radar_driver_para_t;

 

typedef struct {
    uint8_t times;      /*!< @if Eng Number of subframe transmissions, default value 0, always sent, range 0~20
                            @else   子帧发送次数, 默认值0, 一直发送, 范围0~20 @endif */
    uint8_t loop;       /*!< @if Eng Loop times of radar waveform in one subframe, default value 8
                            @else   单个子帧雷达波形循环发送次数, 默认值为8 @endif */
    uint8_t ant;        /*!< @if Eng Selection of radar antenna, default value 0
                            @else   接收通路选择, 默认值为0 @endif */
    uint8_t wave;       /*!< @if Eng Selection of radar wave, default value 2
                            @else   雷达发射波形类型选择, 默认值为2 @endif */
    uint8_t dbg_type;   /*!< @if Eng Selection of debug information, default value 0, for details,
                            see @ref radar_dbg_type_t
                            @else   维测信息输出选择, 默认值为0, 只打印基础流程日志, 范围0~4,
                            参考 @ref radar_dbg_type_t @endif */
    uint16_t period;    /*!< @if Eng Radar subframe interval, unit us, default value is 5000, range 3000~100000
                            @else   雷达子帧间隔,单位us,默认值为5000, 范围3000~100000 @endif */
} 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)”上面一行添加。

if(DEFINED CONFIG_SAMPLE_SUPPORT_RADAR_LED)
    add_subdirectory_if_exist(radar_led)
endif()

3. 在src\application\samples\peripheral\Kconfig文件中新增编译案例,可以在最后一行添加。

config SAMPLE_SUPPORT_RADAR_LED
    bool
    prompt "support RADAR LED Sample."
    default n
    depends on ENABLE_PERIPHERAL_SAMPLE
    help
        This option means support RADAR LED Sample,

if SAMPLE_SUPPORT_RADAR_LED
menu "RADAR LED Sample Configuration"
osource "application/samples/peripheral/radar_led/Kconfig"
endmenu
endif


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

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

简单测试

天线没有到货,而没有天线,雷达的功能基本不能用。所以以下的测试只是简单地看看流程。

从日志可以看到,系统启动后就程序启动雷达功能。

[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_SAMPLE] radar_demo_init sta!
device_main_init: 0!
===hal_initialize_phy===225===
device_module_init:: succ!
cali_set_cali_mask:old[0x0] -> new[0x1fa2]

fe_rf_initialize
cali_offline_cali_entry enter
cali_set_cali_done_flag:old[0x0] -> new[0x1]

rf cali OK. time cost:22, ret:0
APP|Hello world!
xo update temp:3,diff:0,xo:0x3083c
STA try enable.
drv_soc_ioctl ioctl_cmd->cmd=7.
drv_soc_ioctl ioctl_cmd->cmd=9.
drv_soc_ioctl ioctl_cmd->cmd=17.
drv_soc_ioctl ioctl_cmd->cmd=13.
drv_soc_ioctl ioctl_cmd->cmd=35.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=41.
STA connect success.
[RADAR_LOG][set_para] 0,8,0,2,1,5000,2048,0x0034bb04
[RADAR_LOG] update alg param [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] update [0x2118][0][32,27,1,2,0,1,0,60,0,2,0,2,30,13,26,50,15,70,2]
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] OK! final lna:3, vga:30, peak:506, pwr:144315, ppa:4914
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:13, iso:30
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_LOG] OK! final lna:2, vga:2, peak:456, pwr:117020, ppa:4914
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:12, iso:29
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_LOG] OK! final lna:2, vga:2, peak:464, pwr:119357, ppa:4914
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:11, iso:28
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_LOG] OK! final lna:3, vga:30, peak:501, pwr:129188, ppa:4914
xo update temp:4,diff:0,xo:0x3083c
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:10, iso:30
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_LOG] OK! final lna:3, vga:30, peak:490, pwr:134015, ppa:4914
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:9, iso:30
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_LOG] OK! final lna:3, vga:30, peak:475, pwr:125589, ppa:4913
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:8, iso:30
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!
[RADAR_LOG] update alg param by wifi [0][2][0][0][1][1][8]
[RADAR_LOG] update alg param key_id [0x2118]
[RADAR_LOG] alg_para [32,27,1,2,0,1,0,60,0,2,0,2,40,13,26,30,8,70,2]
[RADAR_LOG] RADAR START SUCC!
[RADAR_LOG] alg ctrl read from nv [0][2][0][0][1][1][8]
[RADAR_LOG] OK! final lna:3, vga:30, peak:475, pwr:124232, ppa:4913
lb:000, ub:000, hm:0, gr:0, fm:000001
[RADAR_LOG] ch_num:7, iso:30
[RADAR_LOG] RADAR STOP! cur:0, last:1
[RADAR_LOG] RADAR RST!

这里的反复启动不知道是否和没有天线有关。从日志中可以看到一些和雷达相关的测量参数。

大多数情况下雷达测量得到不了结果,但是偶尔也能输出测量值。

lb:000, ub:000, hm:0, gr:0, fm:000069
lb:000, ub:000, hm:0, gr:0, fm:000070
lb:000, ub:000, hm:0, gr:0, fm:000071
lb:000, ub:000, hm:0, gr:0, fm:000072
lb:000, ub:000, hm:0, gr:0, fm:000073
[RADAR_SAMPLE] lb:200, hb:600, hm:1
R xxxx meters
lb:200, ub:600, hm:1, gr:6, fm:000074
[RADAR_SAMPLE] lb:0, hb:100, hm:1
R 1 meters
lb:000, ub:100, hm:1, gr:1, fm:000075
lb:000, ub:100, hm:1, gr:1, fm:000076

由于测量值不准,所以程序策略的结果有点离谱,造成灯的显示也很混乱。

结语

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

标签:LOG,radar,alg,WS63E,RADAR,000,星闪,雷达,浅析
From: https://blog.csdn.net/bit_mike/article/details/143193725

相关文章

  • 实战网络攻防中的高版本JDK反射类加载浅析
    就是要打骨折http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247486065&idx=2&sn=b30ade8200e842743339d428f414475e&chksm=c0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene=21#wechat_redirect《Java代码审计》http:......
  • 智能手表核心芯片~手表心率监测芯片AFE4900浅析(附一篇智能手表专利推荐)
    智能手表核心芯片~手表心率监测芯片AFE4900浅析(附一篇智能手表专利推荐)本期是平台君和您分享的第89期内容2024年8月,安徽华米信息技术及美国的智能手表品牌ZEPP公司在美国对深圳思佰特公司提起诉讼,涉及专利、商标和不正当竞争。起诉书(来源:RPX网站)看到这则新闻,平台君马......
  • 浅析RocketMQ
    SpringBoot引入RocketMQ快速构建单机RocketMQhttps://www.haveyb.com/article/3079参考这篇文章,快速构建单机RocketMQ项目引入jar包和配置<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter&......
  • Vue Router 浅析
    路由原理hash和history众所周知,hash和history在前端面试中是很常考的一道题目。在学习本文内容之前,周一对hash和history的认知可能就在hash的url里面多了个#,而history就不会。然后,我认知里还有一个是只有history才能做前后端分离,而hash跟前后端分离没......
  • 如何在git中删除仓库中的文件(步骤浅析)
    在git中删除仓库中的文件的步骤:1.进入Git项目目录;2.使用gitrm命令删除文件;3.提交更改;4.推送更改(如果有远程仓库)。首先,打开终端或命令提示符,并导航到包含您的Git项目的目录。您可以使用cd命令来进入项目目录。1.进入Git项目目录首先,打开终端或命令提示符,并导航到包......
  • 【星闪技术】WS63E模块连接华为IoT云
    目录引言WS63E对MQTT的支持程序修改测试结果结语 引言在上一篇博文中已经介绍了WiFi的使用。今天介绍一下如何使用MQTT协议连接到华为云上。WS63E对MQTT的支持WS63E的代码参考直接提供了MQTT的支持,文档介绍见docs/board/WS63V100MQTT开发指南.pdf。MQTT基于开源......
  • HarmonyOS Stage 模型:进程、线程与配置文件之浅析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。HarmonyOS的Stage模型为开发者提供......
  • 初学者浅析C++类与对象
    C++类与对象classclass基本语法classClassName{public://公有成员TypememberVariable;//数据成员ReturnTypememberFunction();//成员函数声明private://私有成员TypeprivateMemberVariable;//数据成员ReturnTypepriva......
  • 集合论(ZFC)之基数(Cardinality)浅析
    直观感受(Intuition)与核心思想(CoreIdea)        集合的基数(Cardinality)是衡量集合的大小,也就是集合中元素的个数。但是,由于无限集与超限集的存在,因此,单纯用自然数去描述集合的大小是不可行的。自然数只能描述有限集的大小。所以,需要一个新的概念去描述集合的大小,那就是......
  • 从HCI层浅析BLE Audio通话建立流程
    背景BLEAUDIO音乐播放已经调通了,接下来调试BLEAUDIO的通话,BLEAUDIO通话跟音乐协议类似,都是走CIS链路,也是用同样的codec,比经典蓝牙音乐和通话分别采用不同的A2DP和HFP显得协调多了,下面还是以手机和2个蓝牙耳机为例,结合HCILOG来分析LEAUDIO通话协议的建立:连接建立过程......