0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

智能监测电源管理:源码开放的必备教程!

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2024-12-09 15:26 次阅读

本篇文章讲述的是核心功能demo示例,以常用的低功耗4G模组Air201为例,特分享本教程给大家。

在实际应用中,通过实时监测电池状态和智能控制电源操作,不仅能够延长设备的使用时间,还能确保设备在关键时刻的稳定性与可靠性,对于以移动设备和嵌入式系统为主的应用场景尤其重要。

Air201快速入门——电源管理核心功能示例

Air201选用了一款高度集成的单电池锂离子电池充电器——该充电器具有系统电源路径管理,可供空间有限的便携式应用使用,具有涓流充电、恒流充电、恒压充电、充电终止和自动充电功能,而且可以自动调节充电电流与充电电压,或者进入其他模式。

Air201最新资料下载
www.air201.cn

wKgZO2dWlsWAE1JHAAfRmm7iZZU387.png

本文将展示电源管理系统的核心功能模块,手把手教你如何通过不同的技术手段实现有效的电源管理。

这些功能旨在提升设备的性能和用户体验,以下是主要演示功能的概述:

▼ 电源管理核心功能 ▼

电量监测:
本系统通过ADC模数转换器)实时读取电池电压,并定期更新电量状态。通过精确监测电池电压,可以让用户清晰掌握当前电池剩余电量,避免意外关机带来的困扰。

充电检测:
系统利用GPIO中断技术,能够快速检测电池的充电状态。当设备连接到电源时,将自动判断电池是否在充电状态,并相应地调整电源管理策略,以优化充电效率和电池寿命。

自动关机:
根据监测到的电量百分比,该系统能够在电量过低时自动关机,以防止电池过度放电。这种智能管理能够保护电池,延长其使用寿命,确保设备在低电量时不会意外关机。

用户接口
系统提供了便捷的用户交互接口,用户可以通过长按电源键实现关机操作。提升用户体验的同时,确保用户可以方便地控制设备的电源状态。

通过这些功能的实现,用户不仅可以延长设备的使用时间,还能够保证设备在关键时刻的稳定性和可靠性。在实际应用中,这些功能可有效地提升设备性能,满足用户对电源管理的需求。

接下来,我们讲解相关示例的具体使用。

1. 搭建环境

新同学建议先看前期的基础知识相关教程,更有助于理解和操作。

可以在LuaTools项目管理中新建一个项目,重新选择底层CORE和脚本;或者在原有项目的基础上,不更换CORE,将原来的脚本删除,添加为demo/pm的脚本。

wKgZPGdWlvmAcpzIAAL_-N91rS0608.png

1.1 硬件准备:

Air201套件

SIM

带有数据通信功能的数据线

Win10及以上PC

1.2 软件准备:

LuaTools调试工具:
https://docs.openluat.com/Luatools

最新固件:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/core

最新脚本:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/pm

1.3 烧录操作:

由于Air201单板子没有复位键和BOOT键,所以数据线与Air201开发板之间还需要接一个USB_BOOT板(Air201套件里已包含,无需单独购买)。

将Air201通过USB_BOOT小板连接电脑,如下图所示:

wKgZO2dWlyaAbTqpAAzBt8t_jng810.png

wKgZPGdWlzGAQdTFABCyPD5Gpuo377.png

1.3.1 根据下方操作进行烧录

此时就需要大家先点击Luatools工具上的【下载脚本】或【下载底层和脚本】,再执行下方操作了。

新同学请先学习LuaTools使用和烧录教程:
https://docs.openluat.com/Luatools/

开发板处于未开机状态:
此时先按住下载模式按键(BOOT键)不放,再长按开机键(POW键)开机。若不出意外开发板将会进入下载模式,LuaTools工具下载进度条会开始跑,这时便可以松开BOOT键和POW键,等到工具提示下载完成即可。

开发板已经处于开机状态:
此时可以先按住BOOT键不放,再短按复位键(RST键)后开发板会重启并进入下载模式。

1.3.2 不同模式下的端口显示

正常开机模式:

wKgZO2dWl0OASjChAAGjHBSoaHs367.png

下载模式:

wKgZO2dWl0-AJAkXAAFmHtuxFWA238.png

2. 示例代码

2.1 ChargeICLogic.lua源码文件

该文件中的代码是一个用Lua编写的脚本,主要用于与充电 IC(集成电路)进行交互,进行状态监测和控制。

2.1.1 代码解析

1)注释部分:

这段注释用于指出代码的主要功能,即处理充电IC相关的逻辑。

wKgZO2dWl2OANCFiAABdgyyMRB0370.png

2)电池上限电压表:

此部分定义了电池上限电压的不同设置值。Vreg表包含多个十六进制数,每个数对应不同的电池上限电压。在V_CTRL寄存器中,前四位用来设置电池上限电压,其余位可以用作其他设置。默认情况下,其他位为 0。

wKgZO2dWl26AbcXJAAB_Pn-5pFY218.png

3)快速充电电流表:

这部分定义了快速充电电流的设置值。Ichg 表中列出的十六进制数对应于不同充电电流的设置。

在 I_CTRL寄存器中,前三位是设置快速充电电流的,其余位是其他设置,默认为0;该电流值是通过电阻Rsns计算得出的。

Air201的Rsns值为1KΩ,经过公式计算后得出:

Ireg=500mA

wKgZO2dWl3iAQSI_AACPrnA2VGQ869.png

4)电池上限电压表:

此部分定义了电池上限电压的不同设置值。Vreg表包含多个十六进制数,每个数对应不同的电池上限电压。在V_CTRL寄存器中,前四位用来设置电池上限电压,其余位可以用作其他设置。默认情况下,其他位为 0。

wKgZO2dWl4KARb-fAAC623M02Go817.png

5)任务初始化:

这部分是主任务的初始化。首先等待1000毫秒,然后通过 sensor.yhm27xx 函数与传感器进行通信,以获取设备信息。后面再进行传感器设备中各寄存器参数配置。

wKgZPGdWmMKAWKXGAACISvdc9xA254.png

6)传感器数据读取:

通过sensor.yhm27xx函数调用来读取传感器的数据。

参数说明:
gpio_pin是传感器对应引脚;
0x04 是传感器设备ID;
0x08 是设备信息寄存器的地址。

等待200毫秒等待数据返回。

wKgZO2dWmMqAMZUxAACx2m3O6Bo341.png

7)设备存在检查:

当检测到传感器存在时,会进行进一步的设置。此时根据不同寄存器的地址设置不同功能。

wKgZPGdWmNWAJQr0AADBnvratkc862.png

8)电压跟随与快速充电电流设置:

读取 I_CTRL 寄存器并设置电压跟随与快速充电电流。如果操作成功,将会再次读取配置寄存器并确认设置结果,记录相关的日志信息。

wKgZO2dWmN6AWC9wAACHfjr-pb4405.png

参数说明:
gpio_pin 是传感器对应引脚;
0x04 是芯片设备ID号;
0x01 是 I_CTRL寄存器地址;
0x02 是设置电压跟随与快速充电电流为0.5×Ireg。

特别说明:
若需要在同一寄存器中设置多个参数,则需要将参数值进行或运算。

例如:
要设置电压跟随和快速充电电流为0.5×Ireg,则参数值为 0x02+0x00=0x02 。

快速充电电流表可参考下方表格:

wKgZO2dWmOuAe0DeAAMjOclxEDQ399.png

I_CTRL寄存器地址前三位是设置快速充电电流,其余位是其他设置,默认为0;Ireg是电阻Rsns配置的电流值,Air201的电阻Rsns值为1KΩ:

通过公式Ireg=500/Rsns,得出Ireg=500mA。

9)电池上限电压设置:

读取V_CTRL寄存器并设置电池上限电压。如果操作成功,将会再次读取配置寄存器并确认设置结果,记录相关的日志信息。

wKgZPGdWmPWAKOQHAACJTW6VmnE310.png

参数说明:
gpio_pin 是传感器对应引脚;
0x04 是芯片设备ID号;
0x00 是 V_CTRL寄存器地址;
0x00 是设置电池上限电压为4.2V。

电池上限电压设置可参考下方表格:

wKgZPGdWmQWAAo18AAMfAij3gzI009.pngwKgZPGdWmRGAWoPiAACcPgRugc8587.png

10)异常处理:

如果在读取传感器信息时返回结果为假,则说明传感器不存在,记录警告日志。

wKgZO2dWmRyAAlVrAACE-2N-cek625.png

2.1.2 总结说明

这段代码的主要功能是与充电IC进行交互以监控其状态,配置其控制参数,并在不同情况下记录相关的日志信息。

通过这种方式,系统能够检测充电IC的存在与状态,并进行相应的初始化与配置,以确保充电过程的正常进行。全程使用异步任务管理,提升系统响应能力。

2.2 pcb.lua源码文件

这段Lua代码定义了一个名为pcb的模块,其主要功能是管理和操作硬件的某些特性,特别是与PCB(印刷电路板)相关的设置和状态。

2.2.1 代码解析

1)模块初始化和变量定义:

这里定义了一个表pcb,用于存放后续的函数。定义了存储系统的OTP区域和硬件的默认版本号,以及出厂测试结果的初始值。

wKgZPGdWmTOADLxzAAEipXbdtHg290.png

2)读取OTP存储区和解析硬件版本号的函数:

loadParam函数首先检查OTP是否存在,然后读取OTP存储区中的数据,解码JSON格式的数据以获取硬件版本号和出厂测试结果。若解码失败或缺少数据,则根据设备型号进行版本号的设置。

wKgZPGdWmT-AJWtJAAHEXTW2f0c474.png

3)GNSS电源控制功能:

此函数根据硬件版本控制GNSS模块的电源状态。通过GPIO接口进行电源的开启或关闭。

wKgZPGdWmUmAcn--AAIxf6hsfK8542.png

4)ES8311电源引脚的获取:

根据硬件版本返回ES8311控制器对应的电源引脚。

wKgZO2dWmVKAGseFAAESiHV_J5o536.png

5)充电IC CMD引脚的获取:

此函数根据硬件版本返回充电IC的命令引脚。

wKgZO2dWmV-AWjzIAAETwJNqGso337.png

6)出厂测试结果获取及版本号管理:

提供了获取当前硬件版本号和出厂测试结果的方法,以及设置硬件版本号的功能。

wKgZPGdWmWmABtGTAAEq_UkOQVQ556.png

2.2.2 总结说明

整段代码的主要功能是提供对印刷电路板(PCB)相关硬件配置和状态的管理。通过读取OTP存储区,程序能够获取设备的特定参数(如版本号和出厂测试结果)。

此外,它还实现对GNSS电源、ES8311音频编解码器以及充电IC的控制接口,根据不同的硬件版本提供不同的引脚控制方案。

2.3 batteryManage.lua源码文件

这段代码是一个电池管理模块的实现,主要用于监控和管理电池状态,包括电压检测、充电状态判断、电量计算和自动关机功能。

2.3.1 代码解析

1)模块定义:

创建一个名为M的模块,定义模块名称为:

batteryManage

这段注释用于指出代码的主要功能,即处理充电IC相关的逻辑。

wKgZPGdWmX2Acp43AAB-SKvFYjA242.png

2)引入库:

引入了sys和sysplus库,这些库提供了系统和附加功能的支持。

wKgZO2dWmYWAZ4LoAAB4ohbmVsA238.png

3)初始化状态变量:

M.vbat:
当前电池电压;

M.batteryPercent:
电池电量百分比,初始为50;

M.isCharge:
标识是否正在充电;

M.BATTERY_UPDATE_INTERVAL:
电池信息更新的时间间隔(秒);

M.noChargeDuration:
记录未插入电源的时间;

M.CHARGE_THRESHOLD_TIME:
未充电持续时间的阈值(2 分钟);

M.blueLed和M.redLed:
用于设置蓝灯和红灯的状态,分别用GPIO接口进行控制。

wKgZPGdWmcSAOBodAAHHEVhb9JI130.png

4)电池放电曲线:

定义一个电池放电曲线数组,该数组存储对应电量的电压值,用于通过电压推算电量百分比。

wKgZO2dWmc2AaxL6AABeXqbUCBc665.png

5)重置未充电时长:

重置未充电计时器的函数。

wKgZO2dWmdmAUkeZAACsRg0jixY394.png

6)关机函数:

该函数用于发布关机信号,以请求系统关机。

wKgZO2dWmeKAUd6_AADfYQDX3DE282.png

7)充电状态检测:

使用GPIO中断回调来检测充电状态,如果通过GPIO引脚检测到充电状态发生变化,将更新充电状态并检查电池状态。

wKgZPGdWmeuAcs0xAABmjXcp0fo101.png

8)电量百分比计算:

根据当前电压M.vbat计算电池百分比。如果电压在放电曲线数组的范围内,则返回相应的电量百分比。

wKgZPGdWmfaARySDAAB36TJDeH0602.png

9)定期检查电池状态:

定期更新电池电量,读取电压并计算电量。如果电量低于 30%,且没有插入电源的时间超过2分钟,则调用关机函数。

wKgZO2dWmf6AfMVUAABnvdnhs4A856.png

10)长按电源键关机:

实现了长按电源键的关机逻辑,按下电源键3秒后进行关机,松开时取消关机。

wKgZPGdWmgeAUv71AABkp00kqRA693.png

2.3.2 总结说明

整体而言,该模块负责监控电池的电压和充电状态。它能够定期更新电量百分比,并在必要时自动关机。此外,该模块还允许用户通过长按电源键来手动关机。其主要功能是确保设备在电量过低时保护系统不受损坏,同时提供充电状态的实时反馈。

2.4 main.lua源码文件

该文件中的代码使用Lua语言编写,主要用于管理和监控设备的电源和电池状态。

2.4.1 代码解析

1)项目和版本信息:

这部分定义了项目名称和版本,并记录日志信息,便于后续的调试和维护。

wKgZO2dWmhiAWvlHAAC5NroLN-Y503.png

2)库的引入:

在这里引入了多个必要的库文件,包括系统管理库sys、电路板库pcb、充电逻辑库和电池管理库。通过这些库,程序可以实现对系统的控制和管理。

特别说明:
主要功能代码已经模块化到batteryManage库文件中。

wKgZO2dWmj6AYJsLAAEXZctojnM351.png

3)开机防抖:

这部分代码用于防止开机时的抖动,并点亮红色指示灯,以表明设备正在启动。

wKgZPGdWmk-APb08AADBKiW3y-Y494.png

4)GPIO设置:

通过gpio.setup配置了两个引脚:一个用于监测充电状态,另一个用于电源键的回调。

wKgZO2dWmlmAeGokAAGOebsEkf8526.png

5)关机处理:

这段代码订阅了系统关机事件,当设备接收到关机信号时,会调用pm.shutdown()函数进行安全关机。

wKgZPGdWmmOAQMpiAACl7InEm0I396.png

6)启动初始检查:

在系统启动时,首先进行一次电池充电状态检查,并设置一个定时器,每60秒更新一次电池电量信息。

wKgZO2dWmmyAQQFWAAFotjAbjFY641.png

7)日志输出:

此段代码设置了一个定时器,每隔5秒输出一次当前电池状态的日志信息,包括电压、电池电量及充电状态,便于监控和调试。

wKgZPGdWmnWARNLtAAIqBbUQa5U979.png

8)程序运行:

最后,sys.run()函数用于启动系统的主循环,让程序保持运行状态。

wKgZPGdWmn-APCsyAAA5bMFFdng253.png

2.4.2 总结说明

该代码的主要功能是管理和监控嵌入式设备的电源与电池状态,具备开机防抖、充电状态检测、定时更新电池电量和记录日志等功能。

2.5 完整源码文件

此处只展示main.lua,其余完整代码请下载源码查看。

最新源码下载:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/pm

wKgZO2dWmpCAbitfAAVMkBJAu28896.pngwKgZO2dWmp-AEqCJAARVDAQ90gM847.png

2.6 运行结果展示

可通过LuaTools工具查看运行结果,如下图所示:

wKgZO2dWmrCALG7IAARAVkEzPK4644.png

3. 常见问题

设备无法开启或频繁自动关机

检查电池电量是否低于安全工作水平,确保设备充电。如果电量很低,请连接电源并充电一段时间再尝试开机。

电池电量显示不准确

确保电池电压监测模块正常工作,检查ADC通道是否正确配置。如有必要,重新校准电池电量百分比计算的映射表。

充电状态无法正确识别

检查充电检测的GPIO引脚连接是否正常,确认是否存在接触不良或线路损坏的问题。此外,确保所用充电器和数据线与设备兼容。

系统在充电时无法正常运行

检查是否有其他程序或任务占用过多资源,导致系统不稳定。可以考虑优化系统任务的优先级或关闭不必要的功能模块。

长按电源键无反应

确认电源键的GPIO引脚连接正常,确保其可被正常识别。如果仍然无效,请检查相关代码对电源键的事件处理是否正确。

设备发热严重

设备发热可能是由于充电速率过高或设备运行负载过重引起的。建议降低负载、优化代码,或调整充电策略。

无法更新固件或脚本

检查USB连接是否正常,确保LuaTools工具正确识别设备。注意遵循烧录步骤,并确保所用的固件版本与硬件兼容。

今天的分享就到这里

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5081

    文章

    19073

    浏览量

    304298
  • 电源管理
    +关注

    关注

    115

    文章

    6169

    浏览量

    144356
  • 源码
    +关注

    关注

    8

    文章

    637

    浏览量

    29180
收藏 人收藏

    评论

    相关推荐

    电源管理总线(PMBus)数字电源开放标准协议

    PMBus(电源管理总线)开放标准规范定义了一个用来控制功率转换和管理器件的数字通信协议。在供电要求较复杂的系统中,通常使用多个DC/DC转换器来产生不同的半导体器件所需要的供电要求。
    发表于 08-18 15:31 1.2w次阅读
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b>总线(PMBus)数字<b class='flag-5'>电源</b><b class='flag-5'>开放</b>标准协议

    无人机全景监测:空域管理的新革命

    随着科技的飞速发展,无人机技术已成为现代空域管理领域的一股新兴力量。无人机全景监测以其高效、精准的特点,正逐渐成为提升空域管理效率的关键。知语云智能科技在这一领域的前瞻性研究和应用,为
    发表于 02-20 15:23

    电源监控电路-电源管理芯片

    ,确保电子设备高效、稳定和安全地运行。 二、工作原理 电源管理芯片的工作原理主要包括以下几个方面: 电压稳定:通过监测设备的电源电压,并通过反馈控制电路调整
    发表于 09-29 15:48

    【Aworks申请】智能实验室无人管理系统

    提供门禁、取电等一系列基础功能。身份鉴识度差、不可扩展、界面不友好等一系列问题制约着开放实验室真正朝向智能无人化管理实验室进一步发展。基于以上现状与问题,本项目将设计并实现一整套功能完善、可靠性高的
    发表于 06-30 09:50

    STM8L的智能手持血糖监测设备的数据存储实现源码

    基于STM8L低功耗系列芯片,开发一款智能手持血糖监测设备的源码——数据存储实现
    发表于 07-22 17:27

    基于STM32的智能家居下位机源码

    资料介绍:基于STM32的智能家居下位机源码( Keil uvision5),是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动腔制术、音视技术将家居生活有关的设施集成,构建高效
    发表于 08-21 11:53

    智能电源管理发展

    的能源和电源管理中,如智能电网、智能变换器等。日益“智能”的发展趋势从无处不在的替代能源中的半导体含量、下一代固态变压器电子产品、
    发表于 08-30 14:59

    电源管理总线(PMBus)数字电源开放标准协议

    PMBus(电源管理总线)开放标准规范定义了一个用来控制功率转换和管理器件的数字通信协议。在供电要求较复杂的系统中,通常使用多个DC/DC转换器来产生不同的半导体器件所需要的供电要求。
    发表于 10-11 15:57

    电源管理权威指南,电子工程师必备知识

    已然趋近成熟的关键技术。  为了帮助广大工程师朋友们更好地进行电源管理设计,电子发烧友网专门制作了一周回顾系列白皮书之《电源管理技术开发资料精选》,包含
    发表于 07-20 15:14

    智能考勤管理系统资料分享(原理图+源码+文档)

    现今指纹识别技术在考勤和门禁安全等方面有很大应用,该智能管理系统的硬件主要由微处理器、指纹识别模块、液晶显示模块、键盘、实时时钟/日历芯片和电源等组成。微处理器作为系统的上位机,控制整个系统。 该
    发表于 09-29 13:51

    微软开放嵌入版.Net源码 免除相关授权费

    微软开放嵌入版.Net源码 免除相关授权费 微软表示,已开放嵌入式系统操作环境.NET Micro Framework的源代码。 .NET Micro Framework用于
    发表于 11-28 08:42 462次阅读

    现实中的开放源码云计算,第3部分:管理

    现实中的开放源码云计算,第3部分:管理云 在 “现实中的开放源码云计算” 系列的最后部分,我们将介绍几个开放源码工具和技术,帮助
    发表于 04-12 10:18 989次阅读
    现实中的<b class='flag-5'>开放源码</b>云计算,第3部分:<b class='flag-5'>管理</b>云

    电源管理指南

    电源管理权威指南,开关电源技术参考,电子工程师必备知识。
    发表于 07-20 16:40 15次下载

    php的源码开放的吗

    PHP是一种开源的脚本语言,其源代码完全开放并可免费获取、使用和修改。这篇文章将详细介绍PHP的源码开放性。 一、PHP的源码开放性 PHP
    的头像 发表于 12-04 15:57 1232次阅读

    源码开放 智能监测电源管理教程宝典!

    源码开放,今天我们学习的是电源管理系统的核心功能模块,手把手教你如何通过不同的技术手段实现有效的电源管理
    的头像 发表于 12-11 09:26 47次阅读
    <b class='flag-5'>源码</b><b class='flag-5'>开放</b>  <b class='flag-5'>智能</b><b class='flag-5'>监测</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>教程宝典!