【LoRa】LoRa睡眠&低功耗运行方案的测试设计详解

前言

这两天收到很多小伙伴的问题,就是关于LoRa休眠的功耗,大家了解过的应该清楚,lora的发射和接收电流都很大,所以物联网中普通设备的电池是扛不住的,那要如何在物联网内实现低功耗lora呢,今天就这个方向和大家分享讨论下行业内都是如何实现低功耗的。
今天我们选用的是模组型号是安信可Ra-01(Ra-02)Ra-01SCRa-06这三款,分别代表经典,新款以及AT控制,下面就开始我们的测试工作。

方案归纳

定时上报——这个应该是最简单的了,我们的节点设备的话约定时间定时上报消息,除了短时间上报之外,其他时间都是处于睡眠,这样对我们平均电流的消耗就会小很多,这也是功耗最低的一种方式;
在这里插入图片描述

睡眠唤醒——这个就相对复杂一点了,需要用到CAD前导码检测的原理,逻辑顺序的话是这样,我们的节点设备一直处于睡眠和定时起来CAD的周期过程,当我们的网关或者其他发射设备发送前导码,被我们的这个节点设备侦测到了,那么他就会让我们的节点进入收发通道,当收发处理完又重新回到CAD以及睡眠状态,这一整个逻辑就是一个睡眠唤醒的过程了,这个睡眠唤醒的话相比较与前面的定时上报的话多了唤醒,所以具有实时性。
在这里插入图片描述

以上就是行业内最常用的低功耗方案了,这两种方案足够我们解决大部分的应用场景,同时具备lora远距离和穿透性强特性。

工具选择

所谓工欲善其事必先利其器,在做测试的时候手边有一个好的仪器也是会事半功倍的,今天我们用来测试电流功耗的板子的话是小壁虎,可以在win环境下直观的看到电流波形,经过精密仪器测量,它所测试的数据还是非常准的。

  • 开发环境下载链接Simplicity Studio 安装好软件后,插上开发板,再按照提示导入相关依赖环境 打开Simpilicity

  • Studio,在窗口右上角找到Energy Profiler
    在这里插入图片描述
    在这里插入图片描述

休眠测试

低功耗是配合休眠来进行周期性的跳变从而降低功耗的,那么我们在做低功耗产品的时候就要首先测试模块的休眠性能,通过这样的方法我们可以评估一款硬件的低功耗性能。

下面我就用一些真实数据来向大家演示如何进入休眠

Ra-01/Ra-02休眠测试(sx127x)

Ra-01的话用的是127x系列的芯片,我们从规格书上可以看到芯片本身的休眠电流是在1uA以下的,那我们做成模组过后的电流也是保持在了3uA以下,下面向大家演示整个操作测试过程(结尾附源码例程)
此源码我们使用的是官方的驱动库,里面已经封好了休眠的接口函数,我们只要在主函数初始化过后让他进入休眠函数内不出来即可。

(1)资源链接

接线以及源码

(2)代码以及截图

在这里插入图片描述

int main(void)
{

	bool isMaster = true;		//一个设置为主机一个设置为从机
//bool isMaster = false;
  uint8_t i;
	
	delay_init();	    	 //延时函数初始化

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//NVIC(中断优先级管理)分组配置,注意:这个分组整个程序只能有一次,配置后不要修改,否则会出现很多问题
	HALUart1Init(115200,uart1callBackTest);
	myPrintf(LEVEL_DEBUG,"init ok\r\n");
	if(isMaster){
		myPrintf(LEVEL_DEBUG,"this is master\r\n");
	}else{
		myPrintf(LEVEL_DEBUG,"this is slave\r\n");
	}
	usmart_dev.init(SystemCoreClock/1000000);	//初始化USMART	

	}
	// Radio initialization
  RadioEvents.TxDone = OnTxDone;
  RadioEvents.RxDone = OnRxDone;
  RadioEvents.TxTimeout = OnTxTimeout;
  RadioEvents.RxTimeout = OnRxTimeout;
  RadioEvents.RxError = OnRxError;

  Radio.Init( &RadioEvents );
while(1){ 
adio.Sleep( );,强制休眠状态!!!!!!!!!!!!!!!!!!!!!!!!!!!
  Radio.SetChannel( RF_FREQUENCY );

#if defined( USE_MODEM_LORA )

  Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
                                   LORA_SPREADING_FACTOR, LORA_CODINGRATE,
                                   LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
                                   true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
    
  Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
                                   LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
                                   LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
                                   0, true, 0, 0, LORA_IQ_INVERSION_ON, true );

在这里插入图片描述

Ra-01SC休眠测试(LLCC68)

Ra-01SC使用的同样是sx的芯片,这一款的话和1268用的是同一个驱动程序,同样的我们使用官方提供的驱动库做了修改,跑在STM32F103的板子上,代码和测试效果如下。

(1)资源链接

接线以及源码

(2)代码以及截图

在这里插入图片描述

void ExampleSX126xSendDemo(void){

	uint32_t u32_count=0;

	printf("start %s() example\r\n",__func__);

	
	SX126xRadioEvents.TxDone = SX126xOnTxDone;
	SX126xRadioEvents.RxDone = SX126xOnRxDone;
	SX126xRadioEvents.TxTimeout = SX126xOnTxTimeout;
	SX126xRadioEvents.RxTimeout = SX126xOnRxTimeout;
	SX126xRadioEvents.RxError = SX126xOnRxError;

	Radio.Init( &SX126xRadioEvents );
	  Radio.Sleep();
    while(1){}///强制睡眠
	Radio.SetChannel(LORA_FRE);

	Radio.SetTxConfig( MODEM_LORA, LORA_TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
                     LORA_SPREADING_FACTOR, LORA_CODINGRATE,
                     LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
                     true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );//参数:lora模式,发射功率,fsk用的lora设置为0就可以,带宽,纠错编码率,前导码长度,固定长度数据包(一般是不固定的所以选false),crc校验,0表示关闭跳频,跳频之间的符号数(关闭跳频这个参数没有意义),这个应该是表示是否要翻转中断电平的,超时时间

	Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
                     LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
                     LORA_SX126X_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
                     0, true, 0, 0, LORA_IQ_INVERSION_ON, false );

在这里插入图片描述

Ra-06休眠测试(sx127x)

Ra-06的含有MCU的一款成品模块,内部是封装好驱动程序了,所以我们的测试就是用程序自带的AT指令进入对应的低功耗,由于这款模块内部是带的网关程序,所以并不能主动进入休眠关断,我们需要通过串口的方式让他进入对应的休眠,请看下面的操作步骤

(1)自动低功耗模式

这里的低功耗的话是模块默认的一个初始状态,这个时候的电流的话是在400-500uA,处于的状态是待机,关闭部分的活动后测量出来电流值在500uA左右。
在这里插入图片描述

(2)SLEEP睡眠模式

这个模式也非常简单,首先我们需要把Ra-06接入电脑串口,并且打开一个串口条数助手,在默认上电的基础上发送“AT+MODE=1”就可以轻松让他进入休眠状态
在这里插入图片描述
上面的途中我们看到电流和波形在我发指令的时候就下降了,测量出睡眠在1uA左右。

(3) 定时唤醒模式

同样的,我们需要把Ra-06接入电脑串口,并且打开一个串口条数助手,在默认上电的基础上发送“AT+MODE=5000”就可以轻松让他进入休眠唤醒状态,指令后面的值得单位是ms,这里就是5秒以后回到正常电流。
在这里插入图片描述

结束

安信可 Ra-01(Ra-02),Ra-01SCRa-06的各种睡眠以及唤醒的测试数据了,针对的是STM32开发板环境,稍微移植就可以在各大单片机内使用,咱们在做应用的时候可以使用如上电流关断方案切入到自己的代码逻辑内,就可以做出自己想要的可控的低功耗设备了。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AiThinker_Jenson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值