本篇文章講述的是核心功能demo示例,以常用的低功耗4G模組Air201為例,特分享本教程給大家。
在實際應用中,通過實時監(jiān)測電池狀態(tài)和智能控制電源操作,不僅能夠延長設備的使用時間,還能確保設備在關鍵時刻的穩(wěn)定性與可靠性,對于以移動設備和嵌入式系統(tǒng)為主的應用場景尤其重要。
Air201快速入門——電源管理核心功能示例
Air201選用了一款高度集成的單電池鋰離子電池充電器——該充電器具有系統(tǒng)電源路徑管理,可供空間有限的便攜式應用使用,具有涓流充電、恒流充電、恒壓充電、充電終止和自動充電功能,而且可以自動調(diào)節(jié)充電電流與充電電壓,或者進入其他模式。
Air201最新資料下載:
www.air201.cn
本文將展示電源管理系統(tǒng)的核心功能模塊,手把手教你如何通過不同的技術手段實現(xiàn)有效的電源管理。
這些功能旨在提升設備的性能和用戶體驗,以下是主要演示功能的概述:
▼ 電源管理核心功能 ▼
電量監(jiān)測:
本系統(tǒng)通過ADC(模數(shù)轉(zhuǎn)換器)實時讀取電池電壓,并定期更新電量狀態(tài)。通過精確監(jiān)測電池電壓,可以讓用戶清晰掌握當前電池剩余電量,避免意外關機帶來的困擾。
充電檢測:
系統(tǒng)利用GPIO中斷技術,能夠快速檢測電池的充電狀態(tài)。當設備連接到電源時,將自動判斷電池是否在充電狀態(tài),并相應地調(diào)整電源管理策略,以優(yōu)化充電效率和電池壽命。
自動關機:
根據(jù)監(jiān)測到的電量百分比,該系統(tǒng)能夠在電量過低時自動關機,以防止電池過度放電。這種智能管理能夠保護電池,延長其使用壽命,確保設備在低電量時不會意外關機。
用戶接口:
系統(tǒng)提供了便捷的用戶交互接口,用戶可以通過長按電源鍵實現(xiàn)關機操作。提升用戶體驗的同時,確保用戶可以方便地控制設備的電源狀態(tài)。
通過這些功能的實現(xiàn),用戶不僅可以延長設備的使用時間,還能夠保證設備在關鍵時刻的穩(wěn)定性和可靠性。在實際應用中,這些功能可有效地提升設備性能,滿足用戶對電源管理的需求。
接下來,我們講解相關示例的具體使用。
1. 搭建環(huán)境
新同學建議先看前期的基礎知識相關教程,更有助于理解和操作。
可以在LuaTools項目管理中新建一個項目,重新選擇底層CORE和腳本;或者在原有項目的基礎上,不更換CORE,將原來的腳本刪除,添加為demo/pm的腳本。
1.1 硬件準備:
Air201套件
SIM卡
帶有數(shù)據(jù)通信功能的數(shù)據(jù)線
Win10及以上PC
1.2 軟件準備:
LuaTools調(diào)試工具:
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鍵,所以數(shù)據(jù)線與Air201開發(fā)板之間還需要接一個USB_BOOT板(Air201套件里已包含,無需單獨購買)。
將Air201通過USB_BOOT小板連接電腦,如下圖所示:
1.3.1 根據(jù)下方操作進行燒錄
此時就需要大家先點擊Luatools工具上的【下載腳本】或【下載底層和腳本】,再執(zhí)行下方操作了。
新同學請先學習LuaTools使用和燒錄教程:
https://docs.openluat.com/Luatools/
開發(fā)板處于未開機狀態(tài):
此時先按住下載模式按鍵(BOOT鍵)不放,再長按開機鍵(POW鍵)開機。若不出意外開發(fā)板將會進入下載模式,LuaTools工具下載進度條會開始跑,這時便可以松開BOOT鍵和POW鍵,等到工具提示下載完成即可。
開發(fā)板已經(jīng)處于開機狀態(tài):
此時可以先按住BOOT鍵不放,再短按復位鍵(RST鍵)后開發(fā)板會重啟并進入下載模式。
1.3.2 不同模式下的端口顯示
正常開機模式:
下載模式:
2. 示例代碼
2.1 ChargeICLogic.lua源碼文件
該文件中的代碼是一個用Lua編寫的腳本,主要用于與充電 IC(集成電路)進行交互,進行狀態(tài)監(jiān)測和控制。
2.1.1 代碼解析
1)注釋部分:
這段注釋用于指出代碼的主要功能,即處理充電IC相關的邏輯。
2)電池上限電壓表:
此部分定義了電池上限電壓的不同設置值。Vreg表包含多個十六進制數(shù),每個數(shù)對應不同的電池上限電壓。在V_CTRL寄存器中,前四位用來設置電池上限電壓,其余位可以用作其他設置。默認情況下,其他位為 0。
3)快速充電電流表:
這部分定義了快速充電電流的設置值。Ichg 表中列出的十六進制數(shù)對應于不同充電電流的設置。
在 I_CTRL寄存器中,前三位是設置快速充電電流的,其余位是其他設置,默認為0;該電流值是通過電阻Rsns計算得出的。
Air201的Rsns值為1KΩ,經(jīng)過公式計算后得出:
Ireg=500mA
4)電池上限電壓表:
此部分定義了電池上限電壓的不同設置值。Vreg表包含多個十六進制數(shù),每個數(shù)對應不同的電池上限電壓。在V_CTRL寄存器中,前四位用來設置電池上限電壓,其余位可以用作其他設置。默認情況下,其他位為 0。
5)任務初始化:
這部分是主任務的初始化。首先等待1000毫秒,然后通過 sensor.yhm27xx 函數(shù)與傳感器進行通信,以獲取設備信息。后面再進行傳感器設備中各寄存器參數(shù)配置。
6)傳感器數(shù)據(jù)讀取:
通過sensor.yhm27xx函數(shù)調(diào)用來讀取傳感器的數(shù)據(jù)。
參數(shù)說明:
gpio_pin是傳感器對應引腳;
0x04 是傳感器設備ID;
0x08 是設備信息寄存器的地址。
等待200毫秒等待數(shù)據(jù)返回。
7)設備存在檢查:
當檢測到傳感器存在時,會進行進一步的設置。此時根據(jù)不同寄存器的地址設置不同功能。
8)電壓跟隨與快速充電電流設置:
讀取 I_CTRL 寄存器并設置電壓跟隨與快速充電電流。如果操作成功,將會再次讀取配置寄存器并確認設置結(jié)果,記錄相關的日志信息。
參數(shù)說明:
gpio_pin 是傳感器對應引腳;
0x04 是芯片設備ID號;
0x01 是 I_CTRL寄存器地址;
0x02 是設置電壓跟隨與快速充電電流為0.5×Ireg。
特別說明:
若需要在同一寄存器中設置多個參數(shù),則需要將參數(shù)值進行或運算。
例如:
要設置電壓跟隨和快速充電電流為0.5×Ireg,則參數(shù)值為 0x02+0x00=0x02 。
快速充電電流表可參考下方表格:
I_CTRL寄存器地址前三位是設置快速充電電流,其余位是其他設置,默認為0;Ireg是電阻Rsns配置的電流值,Air201的電阻Rsns值為1KΩ:
通過公式Ireg=500/Rsns,得出Ireg=500mA。
9)電池上限電壓設置:
讀取V_CTRL寄存器并設置電池上限電壓。如果操作成功,將會再次讀取配置寄存器并確認設置結(jié)果,記錄相關的日志信息。
參數(shù)說明:
gpio_pin 是傳感器對應引腳;
0x04 是芯片設備ID號;
0x00 是 V_CTRL寄存器地址;
0x00 是設置電池上限電壓為4.2V。
電池上限電壓設置可參考下方表格:
10)異常處理:
如果在讀取傳感器信息時返回結(jié)果為假,則說明傳感器不存在,記錄警告日志。
2.1.2 總結(jié)說明
這段代碼的主要功能是與充電IC進行交互以監(jiān)控其狀態(tài),配置其控制參數(shù),并在不同情況下記錄相關的日志信息。
通過這種方式,系統(tǒng)能夠檢測充電IC的存在與狀態(tài),并進行相應的初始化與配置,以確保充電過程的正常進行。全程使用異步任務管理,提升系統(tǒng)響應能力。
2.2 pcb.lua源碼文件
這段Lua代碼定義了一個名為pcb的模塊,其主要功能是管理和操作硬件的某些特性,特別是與PCB(印刷電路板)相關的設置和狀態(tài)。
2.2.1 代碼解析
1)模塊初始化和變量定義:
這里定義了一個表pcb,用于存放后續(xù)的函數(shù)。定義了存儲系統(tǒng)的OTP區(qū)域和硬件的默認版本號,以及出廠測試結(jié)果的初始值。
2)讀取OTP存儲區(qū)和解析硬件版本號的函數(shù):
loadParam函數(shù)首先檢查OTP是否存在,然后讀取OTP存儲區(qū)中的數(shù)據(jù),解碼JSON格式的數(shù)據(jù)以獲取硬件版本號和出廠測試結(jié)果。若解碼失敗或缺少數(shù)據(jù),則根據(jù)設備型號進行版本號的設置。
3)GNSS電源控制功能:
此函數(shù)根據(jù)硬件版本控制GNSS模塊的電源狀態(tài)。通過GPIO接口進行電源的開啟或關閉。
4)ES8311電源引腳的獲取:
根據(jù)硬件版本返回ES8311控制器對應的電源引腳。
5)充電IC CMD引腳的獲取:
此函數(shù)根據(jù)硬件版本返回充電IC的命令引腳。
6)出廠測試結(jié)果獲取及版本號管理:
提供了獲取當前硬件版本號和出廠測試結(jié)果的方法,以及設置硬件版本號的功能。
2.2.2 總結(jié)說明
整段代碼的主要功能是提供對印刷電路板(PCB)相關硬件配置和狀態(tài)的管理。通過讀取OTP存儲區(qū),程序能夠獲取設備的特定參數(shù)(如版本號和出廠測試結(jié)果)。
此外,它還實現(xiàn)對GNSS電源、ES8311音頻編解碼器以及充電IC的控制接口,根據(jù)不同的硬件版本提供不同的引腳控制方案。
2.3 batteryManage.lua源碼文件
這段代碼是一個電池管理模塊的實現(xiàn),主要用于監(jiān)控和管理電池狀態(tài),包括電壓檢測、充電狀態(tài)判斷、電量計算和自動關機功能。
2.3.1 代碼解析
1)模塊定義:
創(chuàng)建一個名為M的模塊,定義模塊名稱為:
batteryManage
這段注釋用于指出代碼的主要功能,即處理充電IC相關的邏輯。
2)引入庫:
引入了sys和sysplus庫,這些庫提供了系統(tǒng)和附加功能的支持。
3)初始化狀態(tài)變量:
M.vbat:
當前電池電壓;
M.batteryPercent:
電池電量百分比,初始為50;
M.isCharge:
標識是否正在充電;
M.BATTERY_UPDATE_INTERVAL:
電池信息更新的時間間隔(秒);
M.noChargeDuration:
記錄未插入電源的時間;
M.CHARGE_THRESHOLD_TIME:
未充電持續(xù)時間的閾值(2 分鐘);
M.blueLed和M.redLed:
用于設置藍燈和紅燈的狀態(tài),分別用GPIO接口進行控制。
4)電池放電曲線:
定義一個電池放電曲線數(shù)組,該數(shù)組存儲對應電量的電壓值,用于通過電壓推算電量百分比。
5)重置未充電時長:
重置未充電計時器的函數(shù)。
6)關機函數(shù):
該函數(shù)用于發(fā)布關機信號,以請求系統(tǒng)關機。
7)充電狀態(tài)檢測:
使用GPIO中斷回調(diào)來檢測充電狀態(tài),如果通過GPIO引腳檢測到充電狀態(tài)發(fā)生變化,將更新充電狀態(tài)并檢查電池狀態(tài)。
8)電量百分比計算:
根據(jù)當前電壓M.vbat計算電池百分比。如果電壓在放電曲線數(shù)組的范圍內(nèi),則返回相應的電量百分比。
9)定期檢查電池狀態(tài):
定期更新電池電量,讀取電壓并計算電量。如果電量低于 30%,且沒有插入電源的時間超過2分鐘,則調(diào)用關機函數(shù)。
10)長按電源鍵關機:
實現(xiàn)了長按電源鍵的關機邏輯,按下電源鍵3秒后進行關機,松開時取消關機。
2.3.2 總結(jié)說明
整體而言,該模塊負責監(jiān)控電池的電壓和充電狀態(tài)。它能夠定期更新電量百分比,并在必要時自動關機。此外,該模塊還允許用戶通過長按電源鍵來手動關機。其主要功能是確保設備在電量過低時保護系統(tǒng)不受損壞,同時提供充電狀態(tài)的實時反饋。
2.4 main.lua源碼文件
該文件中的代碼使用Lua語言編寫,主要用于管理和監(jiān)控設備的電源和電池狀態(tài)。
2.4.1 代碼解析
1)項目和版本信息:
這部分定義了項目名稱和版本,并記錄日志信息,便于后續(xù)的調(diào)試和維護。
2)庫的引入:
在這里引入了多個必要的庫文件,包括系統(tǒng)管理庫sys、電路板庫pcb、充電邏輯庫和電池管理庫。通過這些庫,程序可以實現(xiàn)對系統(tǒng)的控制和管理。
特別說明:
主要功能代碼已經(jīng)模塊化到batteryManage庫文件中。
3)開機防抖:
這部分代碼用于防止開機時的抖動,并點亮紅色指示燈,以表明設備正在啟動。
4)GPIO設置:
通過gpio.setup配置了兩個引腳:一個用于監(jiān)測充電狀態(tài),另一個用于電源鍵的回調(diào)。
5)關機處理:
這段代碼訂閱了系統(tǒng)關機事件,當設備接收到關機信號時,會調(diào)用pm.shutdown()函數(shù)進行安全關機。
6)啟動初始檢查:
在系統(tǒng)啟動時,首先進行一次電池充電狀態(tài)檢查,并設置一個定時器,每60秒更新一次電池電量信息。
7)日志輸出:
此段代碼設置了一個定時器,每隔5秒輸出一次當前電池狀態(tài)的日志信息,包括電壓、電池電量及充電狀態(tài),便于監(jiān)控和調(diào)試。
8)程序運行:
最后,sys.run()函數(shù)用于啟動系統(tǒng)的主循環(huán),讓程序保持運行狀態(tài)。
2.4.2 總結(jié)說明
該代碼的主要功能是管理和監(jiān)控嵌入式設備的電源與電池狀態(tài),具備開機防抖、充電狀態(tài)檢測、定時更新電池電量和記錄日志等功能。
2.5 完整源碼文件
此處只展示main.lua,其余完整代碼請下載源碼查看。
最新源碼下載:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/pm
2.6 運行結(jié)果展示
可通過LuaTools工具查看運行結(jié)果,如下圖所示:
3. 常見問題
設備無法開啟或頻繁自動關機
檢查電池電量是否低于安全工作水平,確保設備充電。如果電量很低,請連接電源并充電一段時間再嘗試開機。
電池電量顯示不準確
確保電池電壓監(jiān)測模塊正常工作,檢查ADC通道是否正確配置。如有必要,重新校準電池電量百分比計算的映射表。
充電狀態(tài)無法正確識別
檢查充電檢測的GPIO引腳連接是否正常,確認是否存在接觸不良或線路損壞的問題。此外,確保所用充電器和數(shù)據(jù)線與設備兼容。
系統(tǒng)在充電時無法正常運行
檢查是否有其他程序或任務占用過多資源,導致系統(tǒng)不穩(wěn)定。可以考慮優(yōu)化系統(tǒng)任務的優(yōu)先級或關閉不必要的功能模塊。
長按電源鍵無反應
確認電源鍵的GPIO引腳連接正常,確保其可被正常識別。如果仍然無效,請檢查相關代碼對電源鍵的事件處理是否正確。
設備發(fā)熱嚴重
設備發(fā)熱可能是由于充電速率過高或設備運行負載過重引起的。建議降低負載、優(yōu)化代碼,或調(diào)整充電策略。
無法更新固件或腳本
檢查USB連接是否正常,確保LuaTools工具正確識別設備。注意遵循燒錄步驟,并確保所用的固件版本與硬件兼容。
今天的分享就到這里
審核編輯 黃宇
-
嵌入式
+關注
關注
5141文章
19537瀏覽量
315030 -
電源管理
+關注
關注
117文章
6400瀏覽量
145790 -
源碼
+關注
關注
8文章
668瀏覽量
30145
發(fā)布評論請先 登錄
電源管理總線(PMBus)數(shù)字電源開放標準協(xié)議

無人機全景監(jiān)測:空域管理的新革命
電源監(jiān)控電路-電源管理芯片
手機APP遠程控制,智能家居監(jiān)測、智能控制系統(tǒng)(STM32L4、服務器、安卓源碼)實例項目打包下載
【Aworks申請】智能實驗室無人管理系統(tǒng)
STM8L的智能手持血糖監(jiān)測設備的數(shù)據(jù)存儲實現(xiàn)源碼
基于STM32的智能家居下位機源碼
智能電源管理發(fā)展
電源管理總線(PMBus)數(shù)字電源開放標準協(xié)議
電源管理權威指南,電子工程師必備知識
智能考勤管理系統(tǒng)資料分享(原理圖+源碼+文檔)
微軟開放嵌入版.Net源碼 免除相關授權費
現(xiàn)實中的開放源碼云計算,第3部分:管理云

評論