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

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

3天内不再提示

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

青山老竹农 来源:jf_82863998 作者:jf_82863998 2024-12-11 09:26 次阅读

源码开放,今天我们学习的是电源管理系统的核心功能模块,手把手教你如何通过不同的技术手段实现有效的电源管理。

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

▼ 电源管理核心功能 ▼

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

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

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

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

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

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

1. 搭建环境

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

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

wKgZPGdYNwOAX3yfAAMBq7czgJ8597.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小板连接电脑,如下图所示:

wKgZO2dYNy6AflwtAAz0RQmdsAA302.pngwKgZPGdYNzuABQy1ABG13hQPNsg909.png

1.3.1 根据下方操作进行烧录

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

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

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

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

1.3.2 不同模式下的端口显示

正常开机模式:

wKgZO2dYN06AQ2LXAAGjML_n6uI541.png

下载模式:

wKgZPGdYN1eAWYFxAAFoLhfqw_w005.png

2. 示例代码

2.1 ChargeICLogic.lua源码文件

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

2.1.1 代码解析

1)注释部分:

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

wKgZPGdYN2iAS1yHAABb8ZUrHlk091.png

2)电池上限电压表:

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

wKgZO2dYN3GATRAoAACBM96CfNA182.png

3)快速充电电流表:

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

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

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

Ireg=500mA

wKgZPGdYN3uABe0HAACQHjW09xU335.png

4)电池上限电压表:

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

wKgZPGdYN4SADZGvAAC3fXrP04M279.png

5)任务初始化:

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

wKgZPGdYN42AOQRYAACJiWFHRyk036.png

6)传感器数据读取:

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

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

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

wKgZO2dYN5aAdeTzAACv2iZcILs506.png

7)设备存在检查:

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

wKgZO2dYN5-AHL1TAADCdaZXt-4423.png

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

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

wKgZO2dYN6qAIeIDAACGtMTwHtk141.png

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

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

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

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

wKgZPGdYN7WALYbFAAMn4mgt60I070.png

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

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

9)电池上限电压设置:

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

wKgZPGdYN8CAUqwZAACG6Pprqto418.png

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

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

wKgZO2dYN82AEDoSAANg0S1TnVs833.pngwKgZO2dYN9qAXztLAAA6YfajpXY511.png

10)异常处理:

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

wKgZPGdYN-KAS_y2AACFj00liKg423.png

2.1.2 总结说明

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

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

2.2 pcb.lua源码文件

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

2.2.1 代码解析

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

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

wKgZPGdYOAGAMtgHAAEjZNE9_hU726.png

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

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

wKgZPGdYOAmAUsU0AAHF9ai3Lgw365.png

3)GNSS电源控制功能:

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

wKgZO2dYOBOAI6IXAAIyFUNtoHY775.png

4)ES8311电源引脚的获取:

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

wKgZO2dYOB6APllaAAESYvrPPk4306.png

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

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

wKgZO2dYOCmAESQTAAERWraf_RY801.png

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

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

wKgZO2dYODSASRGaAAErW1-AKL4675.png

2.2.2 总结说明

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

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

2.3 batteryManage.lua源码文件

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

2.3.1 代码解析

1)模块定义:

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

batteryManage

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

wKgZO2dYOEGAOV9tAAB9y7payrA725.png

2)引入库:

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

wKgZPGdYOEmAcgEPAAB45rIQmTk850.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接口进行控制。

wKgZPGdYOFaAMX4gAAHAUQjfzvI186.png

4)电池放电曲线:

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

wKgZPGdYOF6AKbHIAABgOKqtp2M356.png

5)重置未充电时长:

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

wKgZO2dYOGiAKhm4AACqBTTVOCI220.png

6)关机函数:

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

wKgZPGdYOHGAVfoXAADeGyR0NV0150.png

7)充电状态检测:

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

wKgZO2dYOHqASgowAABmwFFV9bI607.png

8)电量百分比计算:

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

wKgZO2dYOIKAEmHlAAB4KUZyJ6w416.png

9)定期检查电池状态:

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

wKgZPGdYOIuANX2EAABpfovAS1g360.png

10)长按电源键关机:

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

wKgZPGdYOJWAb6qeAABjwNWJ74Q026.png

2.3.2 总结说明

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

2.4 main.lua源码文件

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

2.4.1 代码解析

1)项目和版本信息:

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

wKgZPGdYOKKAAJYbAAC4iKcaj88969.png

2)库的引入:

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

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

wKgZO2dYOKyARAPEAAEZCTpioic569.png

3)开机防抖:

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

wKgZO2dYOLSAM1PXAADDp_QzWic572.png

4)GPIO设置:

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

wKgZPGdYOL2AB01UAAGJ7avTA_o240.png

5)关机处理:

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

wKgZPGdYOMWAKH1MAACm91e1I20083.png

6)启动初始检查:

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

wKgZO2dYOM2ARShQAAFpGJ7vzQ8142.png

7)日志输出:

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

wKgZPGdYONWADiogAAIqfI7e5R4602.png

8)程序运行:

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

wKgZO2dYON-AZQvnAAA4ynJ2OBQ338.png

2.4.2 总结说明

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

2.5 完整源码文件

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

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

wKgZPGdYOO6AZ9kDAATT8zx1vxI612.pngwKgZPGdYOPuAW16TAATPSAYX_hg079.png

2.6 运行结果展示

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

wKgZPGdYOQmAceI0AARCLq2R40U086.png

3. 常见问题

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

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

电池电量显示不准确

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

充电状态无法正确识别

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

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

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

长按电源键无反应

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

设备发热严重

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

无法更新固件或脚本

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

今天的分享就到这里了

审核编辑 黄宇

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

    关注

    115

    文章

    6169

    浏览量

    144356
  • 源码
    +关注

    关注

    8

    文章

    637

    浏览量

    29180
  • 智能监测
    +关注

    关注

    2

    文章

    91

    浏览量

    12225
收藏 人收藏

    评论

    相关推荐

    智能监测隐蔽工程管理系统为施工工序管理提供了有力保障

          在现代建筑施工中,隐蔽工程的管理至关重要。隐蔽工程不仅影响施工质量,还直接关系到后期的使用安全。因此,如何有效管理隐蔽工程,杜绝造假行为,成为了建筑行业亟需解决的问题。智能监测
    的头像 发表于 12-05 10:18 75次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>监测</b>隐蔽工程<b class='flag-5'>管理</b>系统为施工工序<b class='flag-5'>管理</b>提供了有力保障

    电力监测智能运维管理系统解决方案

    随着科技的飞速发展,电力系统作为现代社会运转的基石,其安全、高效、稳定的运行变得尤为重要。为了应对日益增长的电力需求及复杂的电网运维挑战,电力监测智能运维管理系统应运而生,成为提升电网管理
    的头像 发表于 11-18 15:55 126次阅读

    智能摊铺压实监测管理系统

          随着智能技术的快速发展,智能摊铺压实监测管理系统在道路建设和维护中发挥着越来越重要的作用。该系统不仅提高了工程的效率和质量,还降低了人工成本。本文将详细介绍
    的头像 发表于 11-07 10:38 124次阅读

    为什么要在路面施工中使用智能摊铺压实监测管理系统

          当提及智能摊铺压实监测管理系统时,我们不得不思考为什么这样的系统对于工程建设领域至关重要。在现代社会,科技的发展已经深刻影响着各行各业,其中包括道路建设和基础设施建设领域。智能
    的头像 发表于 11-01 10:24 114次阅读
    为什么要在路面施工中使用<b class='flag-5'>智能</b>摊铺压实<b class='flag-5'>监测</b><b class='flag-5'>管理</b>系统

    智能摊铺压实监测管理系统在公路建设中的应用介绍

    在高速公路的建设中,路面施工是一个关键环节。为了提高施工质量和效率,智能摊铺压实监测管理系统应运而生。本文将探讨该系统在高速公路路面施工过程中的重要性,并分析其对网站排名和流量的积极影响。 一、背景
    的头像 发表于 10-29 09:53 108次阅读
    <b class='flag-5'>智能</b>摊铺压实<b class='flag-5'>监测</b><b class='flag-5'>管理</b>系统在公路建设中的应用介绍

    智能监测隧道预警监控量测管理系统

          在现代城市交通建设中,隧道作为重要的交通通道,其安全性和稳定性一直备受关注。为了确保隧道运行的可靠性和安全性,智能监测隧道预警监控量测管理系统应运而生。本文将从拱顶下沉、周边收敛和地表
    的头像 发表于 10-22 09:18 176次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>监测</b>隧道预警监控量测<b class='flag-5'>管理</b>系统

    高精密洁净舱的智能监测管理系统

    高精密洁净舱的智能监测管理系统是确保舱内环境稳定、洁净和安全的关键技术组成部分。半导体等实验曾所需要的智能监测
    的头像 发表于 10-18 16:15 136次阅读

    路面施工智能摊铺压实监测管理系统

           当提到“路面施工智能摊铺压实监测管理系统”,我们不得不关注国家政策、管理要求、施工要求、系统功能以及系统价值。本文将从这五个方面进行详细介绍。         一、国家政
    的头像 发表于 10-15 09:14 201次阅读

    智能摊铺压实监测管理系统

    在现代道路建设中,智能摊铺压实监测管理系统正逐渐成为不可或缺的技术手段。随着施工标准的不断提高,传统的人工监测管理方式难以满足高质量、精确
    的头像 发表于 10-04 09:43 168次阅读

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

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

    智能电源管理技术

    智能电源管理系统是实现平台温度和SSD总功耗之间可接受的平衡所必需的。尽管形状因素定义了SSD的最大功率,但主机可以使用电源状态来更改SSD的功耗。
    的头像 发表于 08-14 09:03 244次阅读

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

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

    电源管理总线PMBus基础知识

    电源管理总线 PMBus 是一种完全开放的标准,其语言包含命令,可与电源转换器、稳压器或电源管理
    发表于 01-17 15:33 2117次阅读
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b>总线PMBus基础知识