pm - 电源管理
本章节主要用来介绍Air780EPM电源管理相关的部分,分为如下几个章节:
-
Air780EPM低功耗模式介绍及相关设置函数;
-
与定时器唤醒相关的函数;
-
开机、关机、重启等相关函数;
-
Air780EPM IO电平介绍,以及相关设置函数;
-
关于PSM+模式、低功耗模式、WAKEUP中断唤醒的补充说明;
-
关于PWRKEY开机和Reset复位的补充说明;
一,Air780EPM低功耗模式
功耗模式定义及典型功耗
下表为Air780EPM三种功耗模式的介绍,“常规模式”、“低功耗模式”、“PSM+模式”,以及典型实网环境条件下的功耗测试数据;
Air780EPM | 常规模式 | 低功耗模式 | PSM+模式 |
---|---|---|---|
4G在线状态 | 在线,长连接 | 在线,长连接 | 离线,飞行模式 |
定时器唤醒 | 支持 | 支持 | 支持 |
中断唤醒 | 响应一切中断形式,比如WAKEUP/PWRKEY/GPIO中断等 | 只能通过WAKEUP/PWRKEY唤醒 | 只能通过WAKEUP/PWRKEY唤醒 |
串口唤醒 | 支持 | 支持,唤醒时波特率需先设置为9600bps | 支持,唤醒时波特率需先设置为9600bps |
服务器4G唤醒 | 支持,1秒内`` | 支持,1秒内 | 不支持 |
上行发送 | 1秒内响应 | 1秒内响应 | 3秒内响应 |
VEXT电源输出状态 | 保持输出 | 不能保持输出,也不能保持关闭,间歇性输出状态 | 不能保持输出,也不能保持关闭,间歇性输出状态 |
所有GPIO管脚是否可以控制输出电平 | 可以 | 不可以 | 不可以 |
常规GPIO管脚是否可以保持电平 | 可以 | 不可以 | 不可以 |
特殊AGPIO管脚是否可以保持电平 | 可以 | 可以 | 可以 |
RAM供电及唤醒后软件运行状态 | RAM供电,正常工作,满血状态 | RAM供电,唤醒后保持原状态运行 | RAM掉电,唤醒后程序从初始状态运行(PSM+状态前运行数据丢失) |
典型功耗表现 | 较低(4.6mA) | 均衡(0.38mA) | 极低(3uA) |
测试环境:
1)Air780EPM,供电电压3.8V,移动网络,频段B3,RSRP值-88附近,DRX 2.56秒,心跳间隔5分钟,心跳数据100Byte,TCP协议,合宙服务器,回环测试;
2)Air780EPM,同等环境下,低功耗模式,DRX 1.28秒时,平均电流0.6mA,DRX 0.64秒时,平均电流0.9mA;
3)Air780EPM,同等环境下,常规模式,DRX 1.28秒时,平均电流4.7mA,DRX 0.64秒时,平均电流4.8mA;
4)DRX,Discontinuous Reception,非连续接收,可简单理解为模块与基站之间保持心跳的间隔,一般为0.64秒/1.28秒/2.56秒,需要注意的是,DRX由基站根据网络实际情况而定,模组无法自行控制;
如何设置Air780EPM功耗模式
常量
常量 | 类型 | 解释 |
---|---|---|
pm.WORK_MODE | number | 4种模式,0~3; 0,常规模式; 1,低功耗模式; 2,低功耗模式; 3,PSM+模式; |
我知道你一定会问:为什么 1 和 2 都是低功耗模式?Why?
历史原因,pm.WORK_MODE 在LuatOS中定义了4个模式,但是,就Air780EPM这一特定型号来说,为了方便理解和简化设计,只定义了3种功耗模式,所以就出现了 1 和 2 都是低功耗模式的结果,注意!1 和 2 没有任何区别,设置 1 和 2 都是同一个低功耗模式,请大家在设计时务必注意!!!
pm.power(id, int)
设置Air780EPM进入常规模式、低功耗模式、PSM+模式的函数;
参数
传入值类型 | 解释 |
---|---|
int | 功耗模式控制id,pm.WORK_MODE |
int | 0,常规模式;1,低功耗模式;2,低功耗模式;3,PSM+模式; |
返回值
返回值类型 | 解释 |
---|---|
boolean | 处理结果true成功,false失败 |
例子
-- 进入低功耗模式
pm.power(pm.WORK_MODE, 2)
-- 进入PSM+模式
pm.power(pm.WORK_MODE, 3)
二,与定时器唤醒相关的函数
pm.dtimerStart(id, timeout)
启动底层定时器,在 常规模式/低功耗模式/PSM+模式 下都可以生效. 只触发一次;注意,关机状态下无效。
参数
传入值类型 | 解释 |
---|---|
int | 定时器id;Air780EPM可以设置多个定时器,不同的定时器ID代表不同的定时器进程; 一般来说,定时器进程不要超过6个,相应的,定时器ID的取值范围是0-5; 其中,0和1的最大休眠时长是2.5小时,2到5的最大休眠时长是740小时; |
int | 定时时长,单位毫秒 |
返回值
返回值类型 | 解释 |
---|---|
boolean | 处理结果 |
例子
-- 添加底层定时器
pm.dtimerStart(0, 300 * 1000) -- 5分钟后唤醒,5*60*1000,单位毫秒
-- id = 0 或者 id = 1 是, 最大休眠时长是2.5小时
-- id >= 2是, 最大休眠时长是740小时
pm.dtimerStop(id)
关闭底层定时器
参数
传入值类型 | 解释 |
---|---|
int | 定时器id |
返回值
无
例子
-- 关闭底层定时器
pm.dtimerStop(0) -- 关闭id=0的底层定时器
pm.dtimerCheck(id)
检查底层定时器是不是在运行
参数
传入值类型 | 解释 |
---|---|
int | 定时器id |
返回值
返回值类型 | 解释 |
---|---|
boolean | 处理结果,true还在运行,false不在运行 |
number | 如果运行,运行剩余时间,单位毫秒 |
例子
-- 检查底层定时器是不是在运行
pm.dtimerCheck(0) -- 检查id=0的底层定时器
pm.dtimerWkId()
检查定时唤醒是哪一个定时器,如果不是定时唤醒的,返回-1
参数
无
返回值
返回值类型 | 解释 |
---|---|
int | 处理结果 >=0 是本次定时唤醒的定时器ID,其他错误,说明不是定时唤醒的 |
例子
-- 检查本次定时唤醒是哪一个定时器触发的
local timer_id = pm.dtimerWkId()
-- 处理结果 >=0 是本次定时唤醒的定时器ID,其他返回值说明不是定时器事件唤醒的
三,开机、关机、重启等相关函数;
pm.lastReson()
Air780EPM共有如下几种开机形式:
1,PSM+模式下,RAM掉电,PSM+模式前数据丢失,退出PSM+模式后代码需要从头开始运行,这个过程,也被视为"开机";
2,从 PSM+模式 到 低功耗模式 或 常规模式,原因有 定时器唤醒、WAKEUP唤醒、开机键唤醒、UART1唤醒 四种唤醒方式,这四种唤醒方式,是Air780EPM的开机原因之一;
3,除从 PSM+模式 到低功耗模式 或 常规模式 的开机之外,还有关机状态下的PWRKEY开机、常规模式/低功耗模式/PSM+模式 下的Reset重启,闹钟开机、软件重启、LuaTools等工具控制重启、内部看门狗重启、外部重启以及程序跑飞下的异常开机等;
pm.lastReson()函数,就是用来识别和返回Air780EPM这些开机原因的函数。
参数
无
返回值
返回值类型 | 解释 |
---|---|
int | 0-上电/复位开机, 1-RTC开机, 2-WakeupIn/Pad/IO开机, 3-未知原因 |
int | 0-普通开机(上电/复位), 4-PSM+模式开机 |
int | 复位开机详细原因: 0-powerkey或者上电开机 1-充电或者AT指令下载完成后开机 2-闹钟开机 3-软件重启 4-未知原因 5-RESET键 6-异常重启 7-工具控制重启 8-内部看门狗重启 9-外部重启 10-充电开机 |
例子
-- 是哪种方式开机呢
log.info("pm", "last power reson", pm.lastReson())
pm.shutdown()
关机
参数
无
返回值
返回值类型 | 解释 |
---|---|
nil | 无返回值 |
例子
pm.shutdown()
pm.reboot()
重启
参数
无
返回值
返回值类型 | 解释 |
---|---|
nil | 无返回值 |
例子
无
四,Air780EPM IO电平介绍,以及相关设置函数;
pm.ioVol(id, val)
IO高电平电压控制函数
Air780EPM的IO高电平,出厂默认3.0V;
你可以通过将Air780EPM的 PIN100:IO_Volt_Set 拉低到 GND 改变IO高电平,开机即设置为1.8V;
也可以通过此函数,将IO高电平设置为典型值1.8V/2.8V/3.0V/3.3V,注意!设置IO高电平,实际设置的是Air780EPM的 PIN24:VDD_EXT 的电压,IO高电平与VDD_EXT电压保持一致;
任何情况下,无论Air780EPM的 PIN100:IO_Volt_Set 是悬空还是下拉到GND,IO高电平都是以本函数的设置为优先;
参数
传入值类型 | 解释 |
---|---|
int | 电平id,目前只有pm.IOVOL_ALL_GPIO |
int | 电平值,单位毫伏 |
返回值
返回值类型 | 解释 |
---|---|
boolean | 处理结果true成功,false失败 |
例子
-- Air780EPM设置IO电平, 范围 1650 ~ 2000,2650~3400 , 单位毫伏, 步进50mv
-- 注意, 这里的设置优先级会高于Air780EPM PIN100:IO_Volt_Set 脚的配置
-- 但开机时依然先使用硬件配置,直至调用本API进行配置, 所以如果二者设置不一致时,IO电平会有一个短暂变化的过程
pm.ioVol(pm.IOVOL_ALL_GPIO, 3300) -- 所有GPIO高电平输出3.3V
pm.ioVol(pm.IOVOL_ALL_GPIO, 1800) -- 所有GPIO高电平输出1.8V
五,关于PSM+模式、低功耗模式、WAKEUP中断唤醒的补充说明
关于 PSM+模式 的补充说明
-
PSM+模式下,模组处于离线状态,无法接收服务器下发信息;
-
退出 PSM+模式 后,Air780EPM大概在3秒内可以驻网成功;
关于低功耗模式的补充说明
-
合宙官方给出的低功耗模式下的数据,是在特定条件下的测试数据,比如,DRX=2.56秒;
-
实际环境下,信号质量、DRX间隔等都是由模组所处环境的基站决定,模组并不能自行设置,因此,功耗表现可能与合宙测试数据有差异;
-
一般情况下,低功耗模式下,模组的功耗在1mA左右都可以被认为是正常表现;
关于WAKEUP中断唤醒的补充说明
模组在PSM+模式下有四种常见的唤醒方式;
-
定时器唤醒;
-
开机键PWRKEY;
-
串口UART1接收数据;
-
WAKEUP中断;
其中,WAKEUP中断的使用方式会在API库 GPIO 中进行介绍,开机键 PWRKEY 本质上也是WAKEUP;
比如,WAKEUP0,则用gpio.WAKEUP0;比如pwrkey,则用常量 gpio.PWR_KEY;
六,关于PWRKEY开机和Reset复位的补充说明
-
Air780EPM默认开启了PWRKEY开机防抖;
-
因为开启了PWRKEY开机防抖,所以Reset复位功能就转变成了关机,不能复位;
-
所以,Air780EPM的Reset是关机,不是复位!