NB-IoT 终端设备低功耗--软件设计

举报
jiekechoo 发表于 2018/12/24 11:00:01 2018/12/24
【摘要】 上一篇:NB-IoT 终端设备低功耗--硬件设计,我们给大家介绍了低功耗硬件设计相关内容,这一篇来聊聊低功耗软件设计方面的内容。在低功耗设备中,软件设计至关重要,由软件驱动硬件进入低功耗模式可以节省更多能耗。一、开关电源软性开关单独配备开关电源IC,LDO具备一个“EN”口,可以通过单片机输出高低电平进行驱动,一般情况下通过GPIO控制高电平开启,低电平关闭,如果是外部传感器或耗电大户,可以...

上一篇:NB-IoT 终端设备低功耗--硬件设计,我们给大家介绍了低功耗硬件设计相关内容,这一篇来聊聊低功耗软件设计方面的内容。在低功耗设备中,软件设计至关重要,由软件驱动硬件进入低功耗模式可以节省更多能耗。


一、开关电源软性开关

  • 单独配备开关电源IC,LDO具备一个“EN”口,可以通过单片机输出高低电平进行驱动,一般情况下通过GPIO控制高电平开启,低电平关闭,如果是外部传感器或耗电大户,可以通过IO控制方式节省电源;

  • 如果是频繁发送数据的NB设备,不建议将NB模组作为单独IC控制,因为海思芯片模组本身在PSM模式下也就3-5uA的耗电量,如果整个模组下电,再次开启时联网更加耗电,所以要根据需求来设计软硬件;


二、双芯模式:MCU+NB模组

1、单片机MCU伪代码,以STM32L系列单片机HAL库为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//开启低功耗模式
HAL_PWREx_EnableUltraLowPower();
HAL_PWREx_EnableFastWakeUp();
 
//联网
connect_network();
 
while(1)
{
    //发送数据
    send_data();
     
    //AT+NSOSTF,快速关闭连接,使得模组立即进入PSM模式,否则需要等待运营商配置的idle时间
    send_over();
     
     
    //重置RTC服务
    HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
     
    //重要!!!!关闭与NB通讯的串口
    SystemPower_Pre_STOP();
     
    //开启RTC唤醒中断
    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xffff, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
     
    //进入低功耗模式STOP
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
     
    //重要!!!!打开与NB通讯的串口
    SystemPower_Post_STOP();
     
    //退出STOP模式后重新初始化时钟
    SystemClockConfig_STOP();
     
    //延时几秒
    HAL_Delay(5000);
     
}
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * 进入低功耗模式前处理
 */
void SystemPower_Pre_STOP(void){
    GPIO_InitTypeDef GPIO_InitStruct;
 
    /*Configure GPIO pin : USART1=> PA9, PA10 */
    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * 退出低功耗模式后处理
 */
void SystemPower_Post_STOP(void){
    GPIO_InitTypeDef GPIO_InitStruct;
 
    /*Configure GPIO pin : USART1=> PA9, PA10 */
    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
}



2、这里,NB模组特性需要注意的就是发送完数据需要立即关闭UDP连接,使得模组立即进入PSM模式,使用AT命令:

1
2
3
4
5
void send_over(void)
{
    // 发送逻辑
    // AT+NSOSTF=0,117.78.47.187,5683,0x200,1,AA\r\n
}

!效果立竿见影!


三、单芯模式:OPENCPU

未完,待续!



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。