main.lua 5.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. --[[
  2. @module main
  3. @summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
  4. @version 1.0.0
  5. @date 2025.11.25
  6. @author 王世豪
  7. @usage
  8. 本demo演示的功能为:
  9. 1. 初始化YHM2712充电IC
  10. 2. 配置电池参数
  11. 3. 注册事件回调
  12. 4. 处理充电状态变化
  13. 历史背景:
  14. 本demo原本是专为内置充电IC的Air8000/8000G/8000XB/8000GB所设计,但是Air8000系列内置充电IC会存在以下问题,故含有充电管理的型号已不再推荐:
  15. 1,内置的充电管理芯片,不仅只负责充电,也负责供电路径管理、供电短路保护等;
  16. 2,当大家使用的不是电池,而是由诸如充电器等类似电源供电时,如电路连接不当,非常容易造成给DCDC充电的效果,进而形成VBAT供电的混乱;
  17. 3,同时,如果快速的下电和上电,内置的充电管理芯片会根据电压的快速跌落而判断电源短路,继而把VBAT供电电路断开,造成的后果就是不能开机、无法下载、电脑无法识别USB等,本质都是充电管理芯片的主动保护造成的;
  18. 4,出现充电管理芯片的短路保护之后,一般要过一段时间等板子上电容的余电放光后,也就是充电管理芯片的保护功能失效后再上电开机,或者通过插入充电器(充电器接模组VCHG管脚的前提之下)来退出短路保护;
  19. 5,即便是电池供电,如果系统设计上增加了类似于拨动开关一类的上下电的复位设计,在含有充电管理的这些型号上,也需要在断电一段时间后(取决于板载电容的大小,电容越大,余电放电越慢,充电IC的保护作用就越长)再上电,
  20. 否则仍然会有长时间无法开机的风险(快速的下电和上电,根据实测,大家在2分钟左右会恢复正常开机);
  21. 适用场景:
  22. 本软件模块旨在对 Air8000 系列 已内置的 YHM2712 充电管理IC 进行功能管理与状态监控。
  23. 主要应用场景为标准的 “电池供电 + 需要通过VCHG引脚进行充电” 的应用。在此场景下,本模块提供以下核心功能:
  24. 1. 电池充电管理:用于管理Air8000系列内置的YHM2712充电IC,包括配置电池参数,注册事件回调,处理充电状态变化。
  25. 2. 电池过放保护:当电池电压快速下降到1V以下时,充电IC会触发过放保护,切断VBAT到系统内部供电的电路,防止电池过放。
  26. 3. 电池充电完成检测:充电IC会在电池充电完成后触发事件,用于检测充电是否完成。
  27. 4. 电池电压测量:充电IC可以测量电池电压,用于实时监控电池状态。
  28. 更详细的Air8000系列特别说明,请查看:https://docs.openluat.com/air8000/product/notice/
  29. ]]
  30. --[[
  31. 必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
  32. PROJECT:项目名,ascii string类型
  33. 可以随便定义,只要不使用,就行
  34. VERSION:项目版本号,ascii string类型
  35. 如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
  36. X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
  37. 因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
  38. 如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
  39. ]]
  40. PROJECT = "aircharge"
  41. VERSION = "1.0.0"
  42. -- 在日志中打印项目名和项目版本号
  43. log.info("main", PROJECT, VERSION)
  44. -- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
  45. -- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
  46. if wdt then
  47. wdt.init(9000) -- 初始化watchdog设置为9s
  48. sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
  49. end
  50. -- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
  51. -- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
  52. -- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
  53. -- 启动errDump日志存储并且上传功能,600秒上传一次
  54. -- if errDump then
  55. -- errDump.config(true, 600)
  56. -- end
  57. -- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
  58. -- 可以使用合宙的iot.openluat.com平台进行远程升级
  59. -- 也可以使用客户自己搭建的平台进行远程升级
  60. -- 远程升级的详细用法,可以参考fota的demo进行使用
  61. -- 启动一个循环定时器
  62. -- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
  63. -- 方便分析内存使用是否有异常
  64. -- sys.timerLoopStart(function()
  65. -- log.info("mem.lua", rtos.meminfo())
  66. -- log.info("mem.sys", rtos.meminfo("sys"))
  67. -- end, 3000)
  68. -- 加载aircharge模块
  69. require "aircharge"
  70. -- 用户代码已结束---------------------------------------------
  71. -- 结尾总是这一句
  72. sys.run()
  73. -- sys.run()之后后面不要加任何语句!!!!!