SX126x-CAD原理以及使用方式

目录

1 前言

2 原理分析

2.1 主要操作

2.2 功耗计算

3 命令设置

3.1 配置CAD

3.2 启动CAD

4 Sleep模式下启动CAD

5 CAD最佳配置分析


1 前言

        无线网络应用中,通常要求设备尽可能休眠,最大限度降低功耗,但又希望节点能尽可能及时地收发无线数据。传统的使用接收信号强度RSSI值并不适用于LoRa调制技术,由于扩频调制的原因,LoRa信号是允许低于环境底噪的,所以RSSI判定的方式很难确定信道是否被占用。

        为了有效检测信道占用情况,Channel Activity Detection(信道活动检测)被设计出来用于以最节能的方式检测在信道上的LoRa信号。

2 原理分析

        CAD模式下将对波段进行非常快速的扫描,以检测LoRa信号。SX126x芯片会监听LoRa前导和数据,而之前的产品例如SX127x只能监听LoRa前导。

2.1 主要操作

        一旦进入CAD模式,芯片会完成如下操作:

  • PLL锁定
  • 接收机从信道捕获LoRa前导或者数据symbol,当前功耗等效于接收模式,执行时间由启动CAD时配置的监听Symbol长度而决定
  • 无线电接收机和锁相环关闭,调制解调器数字处理开始
  • 调制解调器搜索无线电捕获的样本和理想波形之间的相关性。执行这个关联过程所花费的时间比一个符号周期短一点,并且该阶段功耗只有接收模式的一半
  • 一旦计算完成,调制解调器产生CadDone中断。如果关联成功,则同时生成CadDetected中断
  • 切换至STDBY_RC模式或者Rx模式

2.2 功耗计算

        CAD的功耗计算主要分为2个阶段:监听阶段和处理阶段

  • 处理阶段:捕获到LoRa信号后,会进行波形文件对比,该处理阶段持续时间比一个符号周期短一点,电流消耗只有接收模式的一半左右

  • 下图举例不同调制带宽BW下,最大电流消耗,具体详细的数据可以查看芯片手册

3 命令设置

3.1 配置CAD

        通过命令SetCadConfig(...)配置CAD模式的参数。可以配置CAD监听时长,监听信号灵敏度的阈值以及CAD退出时的工作模式。

        各参数定义如下:

  • cadSymbolNum

        监听Symbol的长度,可以设置1/2/4/8/16

  • cadDetPeak & cadDetMin

        参数cadDetPeak和cadDetMin定义了LoRa调制解调器在试图与实际的LoRa调制信号关联时的灵敏度。这两个设置取决于LoRa传播因子和带宽,还取决于用于验证或不检测的符号的数量。选择正确的值是不容易的,必须仔细测试所选的值,以确保在灵敏度水平上有良好的检测,并限制错误检测的数量。在后面会单独分析

  • cadExitMode

        设置CAD操作完成后的模式。

        CAD_ONLY - CAD结束后回到STDBY_RC模式

        CAD_RX - CAD结束后会开启Rx窗口,该窗口时间通过cadTimeout参数配置

  • cadTimeout(23:0)

        这个参数仅仅用在cadExitMode = CAD_RX的情况下。如果退出模式是CAD_RX,设置RX的超时时间,计算公式如下:

        Rx Timeout = cadTimeout * 15.625 (us)

3.2 启动CAD

        通过命令SetCAD()启动CAD检测LoRa信号。在搜索周期结束时,如果中断CADDone有使能,设备将触发它。另外如果检测到有效信号,它也会生成CADDetected中断。

4 Sleep模式下启动CAD

        单独介绍该场景,是由于Sleep唤醒需要一定的时间开销,在使用过程中容易忽略而造成一些异常。

        下图显示了从睡眠模式到CAD模式时芯片内部过程。需注意的是,在有效地开始接收符号之前,设备将经历几个阶段的工作模式,需要接近240us的时间开销,才真正进入CAD。

5 CAD最佳配置分析

        启动CAD前,需先使用命令SetCadConfig(...)进行参数配置,其中cadDetPeak & cadDetMin尤为关键,下面是官方基于大量测试数据得出的,不同SF下参数的最佳配置

  • 如果对具体的测试数据,各场景下的PER/RX值,可以在官网搜索文档《SX126X CAD performance evaluation V2_1》

以下是一个使用Semtech公司sx126x芯片驱动库中的sx126x-cad驱动函数代码示例,用于执行CAD操作并检测信道是否可用: ``` #include "sx126x.h" // 初始化sx126x芯片 sx126x_init(&sx1268); // 设置CAD参数 sx126x_set_cad_params(&sx1268, 0, SX126X_CAD_ON_BOTH_EDGES, SX126X_CAD_SYMBOL_DURATION_8); // 执行CAD操作 int cad_result = sx126x_cad(&sx1268); // 检查CAD结果 if (cad_result == SX126X_CAD_OK) { // 信道空闲,可以发送数据 send_data(); } else if (cad_result == SX126X_CAD_DETECTED) { // 信道有信号干扰,等待一段时间后重试 delay(1000); sx126x_cad(&sx1268); } else { // CAD操作失败,检查硬件或者软件配置 handle_error(); } ``` 在这个示例中,我们首先使用sx126x_init()函数初始化了sx126x芯片,并将其指针传递给sx126x-cad驱动函数。然后,我们使用sx126x_set_cad_params()函数设置CAD参数,比如CAD检测模式和检测时长。接着,我们使用sx126x_cad()函数执行CAD操作,并检查返回结果。如果返回结果是SX126X_CAD_OK,则说明信道空闲,可以发送数据。如果返回结果是SX126X_CAD_DETECTED,则说明信道有信号干扰,我们等待一段时间后重新执行CAD操作。如果返回结果是其他值,则说明CAD操作失败,需要检查硬件或者软件配置。需要注意的是,在使用sx126x-cad驱动函数之前,需要包含sx126x.h头文件,并在应用程序中实现sx126x_init()和sx126x_set_cad_params()函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值