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