e_chg - e_chg扩展库#

示例

-- 应用场景
本扩展库适用于Air8000/Air7000/Air6000等集成了内置电池充电方案的模组型号;
Air8000/Air7000/Air6000内置的充电IC为YHM2712,e_chg扩展库基于本充电IC进行设计;

-- 用法实例
本扩展库对外提供了以下5个接口:
1)开启充电 e_chg.start()
2)关闭充电 e_chg.stop()
3)设置电池的充电截止电压,电池容量,充电电流 e_chg.setup(v_battery, cap_battery, i_charge)
4)获取充电系统状态信息 e_chg.status()
5)注册事件回调函数 e_chg.on(func)

其中,开启充电 e_chg.start() 和 关闭充电 e_chg.stop() 默认自动执行,用户可以不用操作;
当碰到某些需要手动关闭或开启充电功能的场景时,大家可以自行控制,当前仅为预留;

以下为e_chg扩展库四个函数的详细说明及代码实现:

1、开启充电
必须在task中运行,最大阻塞时间大概为700ms, 阻塞主要由sys.waitUntil("YHM27XX_REG", 500)和sys.wait(200)产生。
@api e_chg.start()
@return boolean: true=成功, false=失败

2、关闭充电
必须在task中运行,最大阻塞时间大概为700ms, 阻塞主要由sys.waitUntil("YHM27XX_REG", 500)和sys.wait(200)产生。
@api e_chg.stop()
@return boolean: true=成功, false=失败

3、设置电池的充电截止电压,电池容量,充电电流
必须在task中运行,最大阻塞时间大概为700ms, 阻塞主要由sys.waitUntil("YHM27XX_REG", 500)和sys.wait(200)产生。
@api e_chg.setup(v_battery, cap_battery, i_charge)
@param number v_battery: 电池充电截止电压(单位:mV), 取值范围:4200或4350可选, 必须传入。
@param number cap_battery: 电池容量(单位:mAh), 取值范围:>= 100,必须传入。
@param string i_charge: 充电电流, 取值范围:e_chg.CCMIN(最小电流) 或 e_chg.CCDEFAULT(默认电流) 或 e_chg.CCMAX(),三个可选参数,不传入时默认值为e_chg.CCDEFAULT。
@return boolean: true=成功, false=失败
@usage
    e_chg.setup(4200, 400, e_chg.CCMIN) -- 设置电池充电截止电压为4.2V, 电池容量为400mAh, 充电电流为最小电流

4、获取充电系统状态信息
必须在task中运行,最大阻塞时间(包括超时重试时间)大概为20s。
该函数用于获取当前充电系统的完整状态,包括电池电压、充电阶段、充电状态、电池在位状态、充电器在位状态以及IC过热状态等信息。
其中充电器是否在位,中断触发,触发回调事件为CHARGER_STATE_EVENT,附带的参数 true表示充电器在位,false表示充电器不在位。
@api e_chg.status()
@return table 状态信息表
{
    result = boolean,       -- true: 成功, false: 失败
    vbat_voltage = number,  -- 电池电压值(单位:mV),特殊值含义:
                            -- -1: 当前阶段不需要测量
                            -- -2: 电压测量失败
                            -- -3: 仅充电器就绪(无电池)
    charge_stage = number,  -- 当前充电阶段描述,可能值:
                            -- 0 : 放电模式
                            -- 1 : 预充电模式    
                            -- 2 : 涓流充电     
                            -- 3 : 恒流快速充电
                            -- 4 : 预留状态     
                            -- 5 : 恒压快速充电 
                            -- 6 : 预留状态    
                            -- 7 : 充电完成  
                            -- 8 : 未知状态
    charge_complete = boolean, -- true: 充电完成, false: 充电未完成
    battery_present = boolean, -- true: 电池在位, false: 电池不在位
    charger_present = boolean, -- true: 充电器在位, false: 充电器不在位
    ic_overheat = boolean     -- true: 充电IC过热, false: 充电IC未过热
}

5、注册事件回调函数
@api e_chg.on(func)
@function: 回调方法,回调时传入参数有e_chg.OVERHEAT, e_chg.CHARGER_IN, e_chg.CHARGER_OUT
@return nil 无返回值
@usage
    local function e_chg_callback(event)
        if event == e_chg.OVERHEAT then
            log.info("警告:设备温度过高!")
        elseif event == e_chg.CHARGER_IN then
            log.info("充电器已插入")
        elseif event == e_chg.CHARGER_OUT then
            log.info("充电器已拔出")
        end
    end
    -- 注册回调
    e_chg.on(e_chg_callback)
    
示例:
local function e_chg_task_func()
    e_chg.setup(4200, 400)
    while true do
        local status = e_chg.status()
        if status.result then
            log.info("电池电压:", status.voltage, 
                    "充电阶段:", status.charge_stage, 
                    "充电是否完成:", status.charge_complete, 
                    "电池在位:", status.battery_present, 
                    "充电器在位:", status.charger_present, 
                    "IC过热:", status.ic_overheat)
        end
        sys.wait(20000)
    end
end

-- 事件回调函数
local function e_chg_callback(event)
    if event == e_chg.OVERHEAT then
        log.info("警告:设备温度过高!")
    elseif event == e_chg.CHARGER_IN then
        log.info("充电器已插入")
    elseif event == e_chg.CHARGER_OUT then
        log.info("充电器已拔出")
    end
end
-- 注册回调
e_chg.on(e_chg_callback)

sys.taskInit(e_chg_task_func)

e_chg.on(func)#

注册e_chg事件回调

参数

传入值类型

解释

function:

回调方法,回调时传入参数有e_chg.OVERHEAT, e_chg.CHARGER_IN, e_chg.CHARGER_OUT

返回值

返回值类型

解释

nil

无返回值

例子

    local function e_chg_callback(event)
        if event == e_chg.OVERHEAT then
            log.info("警告:设备温度过高!")
        elseif event == e_chg.CHARGER_IN then
            log.info("充电器已插入")
        elseif event == e_chg.CHARGER_OUT then
            log.info("充电器已拔出")
        end
    end
    -- 注册回调
    e_chg.on(e_chg_callback)

check_battery_exists()#

检测电池是否在位

参数

返回值

返回值类型

解释

boolean:

true=电池在位, false=电池不在位

例子

    check_battery_exists() -- 检测电池是否在位

get_charge_status()#

获取当前的充电阶段状态

参数

返回值

返回值类型

解释

number

| nil - 成功返回充电状态,失败返回nil

例子

    -- 充电状态说明:
    --     0 (000): 放电模式
    --     1 (001): 预充电模式     
    --     2 (010): 涓流充电      
    --     3 (011): 恒流快速充电 
    --     4 (100): 预留状态      
    --     5 (101): 恒压快速充电  
    --     6 (110): 预留状态    
    --     7 (111): 充电完成       
    local status = get_charge_status()
    if status then
        log.info("当前充电状态: " .. status)
    else
        log.info("获取充电状态失败")
    end

check_over_heat()#

查询充电ic是否过热

参数

返回值

返回值类型

解释

boolean,

boolean | boolean - 成功返回true和充电ic温度状态,失败返回false

例子

    local success, is_overheated = check_over_heat()
    if success then
        if is_overheated then
            log.info("充电IC过热, 大于120℃, 停止充电!")
        else
            log.info("充电IC温度正常")
        end
    else
        log.info("获取充电IC温度信息失败")
    end

set_sys_track(enable)#

启用或禁用SYS_TRACK电压跟随功能 0x01寄存器

参数

传入值类型

解释

param

boolean enable: true=启用, false=禁用

返回值

返回值类型

解释

boolean:

true=成功, false=失败

例子

    set_sys_track(true) -- 启用SYS_TRACK电压跟随功能

: check_charger()#

中断检测充电器是否在位(通过检测VBUS引脚的电平来判断充电器是否在位),并对外发布CHARGER_STATE_EVENT事件

参数

传入值类型

解释

param:

返回值

返回值类型

解释

:

例子


: append_vadc(v)#

向滑动窗口数组添加新的电压采样值,并计算窗口内的平均值, 用于平滑电压采样数据

参数

传入值类型

解释

param:

number v : 新的电压采样值

返回值

返回值类型

解释

:

number : 窗口内所有采样值的整数平均值

例子


: check_battery()#

获取电池电压

参数

返回值

返回值类型

解释

:

number : 电池电压值(单位:mV)

例子