luat模组开启飞行模式后电流变为30mA的问题解决

备注:以下测试,基于我的AIR202_S5最小系统板


有个luat客户反映说,怎么luat模组开启飞行模式后,消耗电流不减小反而增大了,并且电流恒定在30mA左右,他研究了好久也没找到原因,让我帮他想想办法。

今上午我特意拿出一上午时间,来针对这个问题展开测试,并找到答案。

开启飞行模式后电流变为30mA的原因,就是因为你没有成功开启飞行模式。

你要开启飞行模式,那么你得先知道什么是飞行模式。飞行模式简而言之,就是切断模组与基站的通讯链路,从而起到减小功耗的作用。

那么在这里就有一个问题,你要进入飞行模式切断通讯链路的前提,应该是你的模组当前已经向基站成功注册网络连接。在你的模组还没注册网络的情况下,你就着急进入飞行模式,那么问题就来了,典型现象就是你检测的模组消耗电流变为30mA,至于为什么是30mA我也不清楚。


客户发给我他的代码,意图是让模组进入飞行模式,如下所示:

PROJECT = "power test"
VERSION = "0.0.0.1"

require "sys"
require"gps"
require "log"
require "net"

gps.closeAll()
log.info('main','main.lua')

net.switchFly(true)
sys.init(0, 0)
sys.run()


从上面代码可以看出,用户在模组启动后,立马就开启了飞行模式,这样的结果只有一个,那就是好点电流变为30mA.

上面的姿势完全错误,下面请看正确姿势,如下所示:

module(...,package.seeall)

require"pm"
require "common"

sys.taskInit(function()

---------------等待模组网络附着成功,如果网络在未附着成功的情况下,去开启飞行模式,那么是不会成功的
local netStatus = true
local netRes
log.info('powerTest',common.utf8ToGb2312('等待模组附着网络成功'))
while netStatus do
if net.getState()=='REGISTERED' then
netStatus = false
end
sys.wait(1000)
end
log.info('powerTest',common.utf8ToGb2312('模组网络附着成功'))
----------------------------------------------------------------------------------
while true do
log.info('powerTest',common.utf8ToGb2312('10秒后将启动飞行模式,请注意对比电流变化'))
sys.wait(10000)--延时10秒

log.info('powerTest',common.utf8ToGb2312('启动飞行模式,此时电流应该显著减小'))
net.switchFly(true) --启动飞行模式

log.info('powerTest',common.utf8ToGb2312('20秒后将退出飞行模式,请注意对比电流变化'))
sys.wait(20000)--延时20秒

log.info('powerTest',common.utf8ToGb2312('退出飞行模式,此时电流应该显著增大'))
net.switchFly(false)--退出飞行模式

-- pm.wake("A") --执行本句后,A唤醒了模块
--pm.wake("A") --执行本句后,A重复唤醒模块,实际上没什么变化
-- pm.sleep("A") --执行本句后,A休眠了模块,lua部分已经没有功能唤醒模块了,模块是否休眠由core决定
while true do
sys.wait(2000)
end
end
end)


在上面的测试代码中,我先等待模组成功注册网络,然后我再进入飞行模式。经实测,在进入飞行模式前,电流是变化的,从大约20mA至最大70mA之间跳变。

然而在开启飞行模式后,电流稳定在3mA左右。此处飞行模式电流为3mA左右 ,对于低功耗产品来说电流仍较大,但是可以采取其他一些措施进一步减小功耗。


总结:

有不止一个客户反映飞行模式30mA的问题,请大家参考我的测试结果。


注意:我测试模组电流,是将模组VBAT供电引脚与电源的走线切断后,串联电流表。





上次更新 2021-01-28