0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解析:Air8201如何使用LuatOS進行電源管理功能!

青山老竹農(nóng) ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2025-03-25 18:23 ? 次閱讀

物聯(lián)網(wǎng)應(yīng)用場景中,設(shè)備續(xù)航能力直接影響其部署成本與運維效率。Air8201作為新一代低功耗物聯(lián)網(wǎng)通信模塊,其硬件架構(gòu)已內(nèi)置多種電源管理單元(PMU),但僅依靠硬件優(yōu)化難以滿足復(fù)雜場景的動態(tài)功耗需求。

一、電源管理介紹

電源管理是電子設(shè)備中非常重要的一部分,尤其是在移動設(shè)備和嵌入式系統(tǒng)中。它直接關(guān)系到設(shè)備的能效、續(xù)航時間和整體性能。以下是關(guān)于電源管理的一些基本知識和常見概念的介紹。

1.1 電源管理的定義

電源管理指的是在電子設(shè)備內(nèi)部合理利用和調(diào)節(jié)電源,以保證各個組件在最佳運行條件下工作,同時延長設(shè)備的使用時間和確保能量的有效利用。

1.2 電源管理的目標

延長電池壽命:通過有效的充放電管理,使電池在使用過程中更長久地保持能量。

優(yōu)化能耗:監(jiān)測各個部件的能耗,減少不必要的能量消耗。

提供穩(wěn)定的電力供給:確保設(shè)備在不同的負載和環(huán)境條件下都能穩(wěn)定工作。

1.3 常見術(shù)語

Vbat(電池電壓):指設(shè)備中電池當前的電壓值,通常用于評估電池的狀態(tài)。

電池電量百分比:代表電池當前剩余能量的百分比,通常用于用戶界面顯示。

充電狀態(tài):指設(shè)備是否正在充電,影響電池電量的監(jiān)測和管理策略。

電池放電曲線:描述不同電壓下電池剩余電量的關(guān)系,幫助計算電量百分比。

電池調(diào)節(jié)電壓:電池在充放電過程中,可以通過一定控制策略或電路設(shè)計,維持電池電壓在一定范圍內(nèi)的穩(wěn)定。Air8201 的電池電壓上限值默認為 4.2V,可在代碼中自行更改電池電壓閾值。

快速充電:快速充電是一種技術(shù),它允許電池在較短時間內(nèi)充入更多電量??焖俪潆娂夹g(shù)包括恒流充電與恒壓充電。在快速充電的恒流階段,充電器會以一個固定的電流給電池充電,直到電池電壓達到一個預(yù)設(shè)的電壓值(Air8201 默認為 4.2V),隨后切換至恒壓模式,此時電流逐漸減小,直到電池充滿后停止充電。

1.4 常見功能

電量監(jiān)測:通過 ADC(模數(shù)轉(zhuǎn)換)讀取電池電壓,定期更新電量狀態(tài)。

充電檢測:利用 GPIO 中斷檢測充電狀態(tài),判斷電池是否處于充電狀態(tài)。

自動關(guān)機:根據(jù)電量百分比自動關(guān)閉設(shè)備,以防止電池過度放電。

過壓保護:當充電到達電池電壓閾值時會自動停止充電,待剩余電量與滿電量相差超過 120mA 時恢復(fù)充電。

用戶接口:通過長按電源鍵執(zhí)行關(guān)機命令,提升用戶體驗。

路徑管理:當插入 USB 既可以給鋰電池充電,同時也可以給主板供電

1.5 實踐中的應(yīng)用

在實際應(yīng)用中,電源管理代碼通常涉及多個功能模塊,包括初始化電源,實時監(jiān)測電量,響應(yīng)用戶操作和維護設(shè)備狀態(tài)。一個良好的電源管理系統(tǒng)能夠顯著提高設(shè)備的性能和用戶滿意度。

通過合理的電源管理策略,用戶不僅可以延長設(shè)備的使用時間,還可以確保設(shè)備在關(guān)鍵時刻的穩(wěn)定性和可靠性。在編寫電源管理程序時,應(yīng)充分考慮設(shè)備的使用場景和用戶的需求。

二、演示功能概述

在本演示中,我們將展示電源管理系統(tǒng)的核心功能模塊,以及如何通過不同的技術(shù)手段實現(xiàn)有效的電源管理。這些功能旨在提升設(shè)備的性能和用戶體驗,以下是主要演示功能的概述:

1.電量監(jiān)測:本系統(tǒng)通過 ADC(模數(shù)轉(zhuǎn)換器)實時讀取電池電壓,并定期更新電量狀態(tài)。通過精確監(jiān)測電池電壓,可以讓用戶清晰掌握當前電池剩余電量,避免意外關(guān)機帶來的困擾。

2.充電檢測:系統(tǒng)利用 GPIO 中斷技術(shù),能夠快速檢測電池的充電狀態(tài)。當設(shè)備連接到電源時,將自動判斷電池是否在充電狀態(tài),并相應(yīng)地調(diào)整電源管理策略,以優(yōu)化充電效率和電池壽命。

3.自動關(guān)機:根據(jù)監(jiān)測到的電量百分比,該系統(tǒng)能夠在電量過低時自動關(guān)機,以防止電池過度放電。這種智能管理能夠保護電池,延長其使用壽命,確保設(shè)備在低電量時不會意外關(guān)機。

4.用戶接口:系統(tǒng)提供了便捷的用戶交互接口,用戶可以通過長按電源鍵實現(xiàn)關(guān)機操作。提升用戶體驗的同時,確保用戶可以方便地控制設(shè)備的電源狀態(tài)。

通過這些功能的實現(xiàn),用戶不僅可以延長設(shè)備的使用時間,還能夠保證設(shè)備在關(guān)鍵時刻的穩(wěn)定性和可靠性。在實際應(yīng)用中,這些功能能夠有效地提升設(shè)備性能,滿足用戶對電源管理的需求。

三、演示硬件環(huán)境

3.1 開發(fā)板

本文以Air8201 開發(fā)板為例

此開發(fā)套件的詳細使用說明參考:Air8201 產(chǎn)品手冊中的Air8201 硬件手冊Air8201 的 LuatOS 快速入門。

Air8201 產(chǎn)品手冊:https://docs.openluat.com/air8201/product/)

3.2 SIM

在中國大陸環(huán)境下,使用移動,電信,聯(lián)通的物聯(lián)網(wǎng)卡或者手機卡都可以。

3.3 PC 電腦

PC 電腦推薦使用 Windows10 及以上版本。

3.4 數(shù)據(jù)通信線

1. USB 轉(zhuǎn) Type-C 數(shù)據(jù)線

它的一端是 USB 接口,另一端是 Type-C 接口。

wKgZO2ficzGAdG3fAAGBhIvgLs4503.png

四、演示軟件環(huán)境

4.1 Luatools 下載調(diào)試工具

Luatools 工具支持最新固件獲取、固件打包、trace 打印及單機燒錄等功能。

工具使用說明參考:

Luatools 下載和詳細使用:https://docs.openluat.com/Luatools/)

4.2 獲取固件及源碼

1. 底層 core 下載地址:https://docs.openluat.com/air8201/luatos/firmware/

本文使用的固件版本為LuatOS-SoC_V2002_Air8201.soc

wKgZPGfic22AYQpfAAGkgy_JlhY084.png

2. demo 位置

本 demo 的主要功能是對電池管理系統(tǒng)的控制和監(jiān)測

demo 位置參考:https://gitee.com/openLuat/LuatOS-Air8201/tree/master/demo/pm

五、軟硬件資料

5.1 電池充電器說明

注意注意,鋰電池與鋰離子電池不是同一種電池。鋰電池是一個統(tǒng)稱,而鋰離子電池是鋰電池的其中一種類型。

Air8201 選用了一款高度集成的單電池鋰離子電池充電器,該充電器具有系統(tǒng)電源路徑管理,可供空間有限的便攜式應(yīng)用使用。功能具有涓流充電、恒流充電、恒壓充電、充電終止和自動充電。而且可以自動調(diào)節(jié)充電電流與充電電壓,或者進入其他模式。

5.1.1 鋰電池充電過程

鋰離子電池的充電過程可概括為四個階段:涓流充電、恒流充電、恒壓充電以及充電終止。以下為這四個階段的詳細介紹。

wKgZO2fic82AJjcMAACzc0ULHAQ138.png

1.涓流充電:

涓流充電用于先對完全放電的電池單元進行預(yù)充,也叫恢復(fù)性充電。在電池電壓低于 3V 左右時,先采用最大 0.1C 的恒定電流對電池進行充電。(C 是充放電倍率,表示電池在單位時間內(nèi)充放電電流與電池額定容量的比值。例如,一個電池的額定容量是 1000mAh,1C 就表示以 1000mA 的電流在單位時間內(nèi)進行充放電,也表示電池在一小時內(nèi)完全充放電。)

2.恒流充電:

在涓流充電之后,當電池電壓上升到涓流充電閾值以上時,此時提高充電電流從而進行恒流充電。這個階段的電流通常在 0.2C~1.0C 之間,電池電壓隨著恒流充電過程在逐步升高。恒流充電時的電流并不要求十分精確,準恒定電流也可以。

當在線性充電器設(shè)計中,電流經(jīng)常會隨著電池電壓的上升而上升,應(yīng)盡量減輕傳輸晶體管上的散熱問題。選擇大于 1.0C 的恒流充電并不會縮短整個充電充電周期時間,這種做法是不可取的。

當以更高電流進行充電時,由于電極反應(yīng)的過壓以及電池內(nèi)部阻抗上的電壓上升,電池電壓會更快速地上升。恒流充電階段就會變短,同時下面恒壓充電階段的時間會相應(yīng)增加,因此總的充電周期時間并不會縮短。

3.恒壓充電:

當電池電壓上升到 4.2V(默認值)時,恒流充電結(jié)束,開始恒壓充電階段。在此階段,電流會根據(jù)電芯的飽和程度逐漸減少,直到達到一個很小的值,可稱為判滿電流值時,充電終止。

4.充電終止:

與鎳電池不同,此時不建議對鋰離子電池進行連續(xù)涓流充電。連續(xù)涓流充電會導(dǎo)致金屬鋰出現(xiàn)極板電鍍效應(yīng)。從而使電池不穩(wěn)定,并且極大可能導(dǎo)致突然的自動快速解體。

這個階段有兩種典型的充電終止方法:一種是采用最小充電電流判斷,當恒壓充電階段的充電電流減小到判滿電流值時終止充電;另一種是從恒壓充電階段開始計時,持續(xù)充電兩個小時后終止充電過程。Air8201 選擇的電池充電器充電終止方法為第一種。

5.充電恢復(fù)說明:

充電終止后,當電池放電后剩余電量與滿電量相差超過 120mV 時會恢復(fù)充電,轉(zhuǎn)為恒壓充電階段。

5.1.2 鋰電池放電說明

由于鋰電池內(nèi)部結(jié)構(gòu)所致,在放電時鋰電池不能全部移向正極,必須要保留一部分鋰離子在負極,從而保證在下次充電時鋰離子能夠暢通地嵌入通道。否則,電池壽命將會大大縮短。

1.放電電壓平臺:

鋰電池在放電過程中,電壓會保持在一個相對穩(wěn)定的范圍內(nèi),這個范圍被稱為放電電壓平臺。對于大多數(shù)鋰電池來說,這個平臺大約在 3.7V 到 3.0V 之間。

2.放電電流:

放電電流是指電池在放電過程中的電流強度。放電電流的大小會直接影響到電池的放電時間和壽命。大電流放電時會導(dǎo)致電池溫度升高,也可能會縮短電池壽命。(鋰電池放電電流不應(yīng)超過電池容量的 3 倍,例如 1000mAH 電池,放電電流應(yīng)嚴格控制在 3A 以內(nèi),否則會導(dǎo)致電池損壞。)

3.放電截止電壓:

為了保證鋰電池放電后石墨層中仍留有部分鋰離子,就需要嚴格限制最低放電截止電壓,也就是要避免過放電。當電池電壓降到這個值時,電池應(yīng)停止放電。對于大多數(shù)鋰電池,這個截止電壓大約是 2.5V 到 3.0V。

Air8201 在代碼中已經(jīng)設(shè)置當電池電量低于 30% 且兩分鐘內(nèi)沒有充電時自動關(guān)機。

4.放電效率:

放電效率是指電池放電過程中電能轉(zhuǎn)換的效率。鋰電池放電效率可達到 90% 以上。

5.放電深度:

放電深度是指電池放電時放電量與電池總?cè)萘康谋嚷省<捶烹娚疃?(放電量/電池總?cè)萘浚?100% 。(例如,如果一個電池的總?cè)萘渴?1000mAh,放電到 500mAh,那么放電深度就是 50%。)

6.放電速率:

放電速率是指電池單位時間內(nèi)放電時放電量與電池額定容量的比值,用充放電倍率 C 表示。(例如,一個電池的額定容量為 1000mAh,如果用 200mA 的電流進行放電,其放電倍率為 0.2C,因為 200mA/1000mAh=0.2。)

7.溫度影響:

鋰電池的放電性能受溫度影響較大。在低溫下,電池的放電性能會下降,而在高溫下,電池的壽命可能會縮短。

8.循環(huán)壽命:

鋰電池的循環(huán)壽命是指電池可以經(jīng)歷的充放電次數(shù)。一般來說,鋰電池的循環(huán)壽命可以達到幾百到幾千次,具體還要取決于電池的類型、使用條件和放電深度。

9.自放電:

鋰電池即使在不使用的情況下也會進行自動放電,這種現(xiàn)象稱為自放電。鋰電池的自放電率相對較低,通常每月 1% 到 2%。

5.2 sensor 庫介紹

sensor 庫是一個傳感器操作庫,用于在 LuatOS 環(huán)境中處理各種傳感器的數(shù)據(jù)交互。它支持多個傳感器的操作,包括 DS18B20 溫度傳感器、DHT11/DHT12 溫濕度傳感器、HX711 稱重傳感器、CS1237 傳感器、WS2812B RGB LED 燈帶以及 SC12A 觸摸傳感器等。

此為sensor 庫 API 接口介紹,大家可自行參考測試。

5.3 Air8201 開發(fā)板燒錄說明

5.3.1 選擇固件和腳本

1. 打開 Luatools_v3 工具

2. 點擊項目管理測試

wKgZPGfidHOAUbMGAAEtPjKcT_4393.png

3. 根據(jù)圖示操作

注意,大家只需要跟著做到第四步即可,第五步跟著后面的操作再做。

wKgZPGfidLGAcAPcAAOlgUj0q_g415.png

5.3.2 燒錄

1. 將 Air8201 開發(fā)板通過 USB 數(shù)據(jù)線連接至電腦,如下圖所示:

由于 Air8201 單板子沒有復(fù)位鍵和 BOOT 鍵,所以數(shù)據(jù)線與 Air8201 開發(fā)板之間還需要接一個 USB_BOOT 板,不過大家放心,Air8201 套件里已經(jīng)包括了 USB_BOOT 板,不需要單獨購買。 而且特別注意,USB_BOOT 板在接 Air8201 開發(fā)板時不用區(qū)分正反。

wKgZO2fidOSAUZFEAArsWP6UTPM161.png

2. 根據(jù)下方操作進行燒錄

此時就需要大家先點擊 Luatools 工具上的 下載腳本下載底層和腳本,再執(zhí)行下方操作了。

開發(fā)板處于未開機狀態(tài):此時先按住下載模式按鍵(BOOT 鍵)不放,再長按開機鍵(POW 鍵)開機,若不出意外開發(fā)板將會進入下載模式,Luatools 工具下載進度條會開始跑,這時便可以松開 BOOT 鍵和 POW 鍵,等到工具提示下載完成即可。

開發(fā)板已經(jīng)處于開機狀態(tài):此時可以先按住 BOOT 鍵不放,再短按復(fù)位鍵(RST 鍵)后開發(fā)板會重啟并進入下載模式。

5.3.3 不同模式下的端口顯示

1. 正常開機模式

wKgZPGfidTGAVprWAADgJ3q0ZSU431.png


六、功能驗證

6.1 ChargeICLogic.lua 中代碼介紹

該文件中的代碼無需修改,大家直接調(diào)用這個文件就行。

6.1.1 代碼說明

該文件中的代碼是一個用 Lua 編寫的腳本,主要用于與充電 IC(集成電路)進行交互,進行狀態(tài)監(jiān)測和控制。

6.1.2 代碼逐步解析

1.注釋部分:

這段注釋用于指出代碼的主要功能,即處理充電 IC 相關(guān)的邏輯。

wKgZO2fidXyATxVfAABZfInIRfw825.png

2. 電池上限電壓表

此部分定義了電池上限電壓的不同設(shè)置值。Vreg 表包含多個十六進制數(shù),每個數(shù)對應(yīng)不同的電池上限電壓。在 V_CTRL 寄存器中,前四位用來設(shè)置電池上限電壓,其余位可以用作其他設(shè)置。默認情況下,其他位為 0。

wKgZO2fidbWABIx-AACTd5GsNms624.png

3.快速充電電流表:

這部分定義了快速充電電流的設(shè)置值。Ichg表中列出的十六進制數(shù)對應(yīng)于不同充電電流的設(shè)置。在 I_CTRL 寄存器中,前三位是設(shè)置快速充電電流的,其余位是其他設(shè)置,默認為 0; 該電流值是通過電阻 Rsns 計算得出的,Air8201 的 Rsns 值為 1KΩ,經(jīng)過公式計算后得出Ireg=500mA。

wKgZPGfidfSAD5SOAACfk2hhM5o988.png

4.GPIO 引腳初始化:

獲取一個 GPIO 引腳并對其進行設(shè)置。pcb.chargeCmdPin()用于獲取充電命令引腳,gpio.setup將引腳GPIO1設(shè)置為輸出模式,且初始化電平為高,同時啟用內(nèi)部上拉。

wKgZPGfidjqAIfEVAACD0m8VpWw601.png


5.任務(wù)初始化:

這部分是主任務(wù)的初始化。首先等待 1000 毫秒,然后通過sensor.yhm27xx函數(shù)與傳感器進行通信,以獲取設(shè)備信息。后面再進行傳感器設(shè)備中各寄存器參數(shù)配置。

wKgZPGfidnuASK-qAACPQ4feVAs418.png


6.傳感器數(shù)據(jù)讀?。?/strong>

通過sensor.yhm27xx函數(shù)調(diào)用來讀取傳感器的數(shù)據(jù)。 參數(shù)說明:gpi``o_pin是傳感器對應(yīng)引腳,0x04是傳感器設(shè)備 ID,0x08是設(shè)備信息寄存器的地址。等待 200 毫秒等待數(shù)據(jù)返回。

wKgZO2fidrSAOEboAACUSKM2mWg992.png

7.設(shè)備存在檢查:

當檢測到傳感器存在時,會進行進一步的設(shè)置。此時根據(jù)不同寄存器的地址設(shè)置不同功能。

wKgZO2fiduuAGBtbAAClKGlZzfA043.png

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 配置的電流值,Air8201 的電阻 Rsns 值為 1KΩ,通過公式 Ireg=500/Rsns,得出 Ireg=500mA。

wKgZO2fidxmAdeKmAABG8lF5FsQ090.pngwKgZPGfidzyADRAUAABh8tKHxAU763.png

9. 電池上限電壓設(shè)置

讀取 V_CTRL 寄存器并設(shè)置電池上限電壓。如果操作成功,將會再次讀取配置寄存器并確認設(shè)置結(jié)果,記錄相關(guān)的日志信息。 參數(shù)說明:gpio_pin 是傳感器對應(yīng)引腳,0x04 是芯片設(shè)備 ID 號,0x00 是 V_CTRL 寄存器地址,0x00 是設(shè)置電池上限電壓為 4.2V,可參考下方表格。

wKgZPGfid3yARGwOAABTFxIX4cw525.pngwKgZO2fid5iAGrkXAABguHcaVnA354.png

10.異常處理:

如果在讀取傳感器信息時返回結(jié)果為假,則說明傳感器不存在,記錄警告日志。

wKgZO2fid9OAcUWnAABp_oOqPGU013.png

6.1.3 總結(jié)說明

這段代碼的主要功能是與充電 IC 進行交互以監(jiān)控其狀態(tài),配置其控制參數(shù),并在不同情況下記錄相關(guān)的日志信息。通過這種方式,系統(tǒng)能夠檢測充電 IC 的存在與狀態(tài),并進行相應(yīng)的初始化與配置,以確保充電過程的正常進行。全程使用異步任務(wù)管理,提升系統(tǒng)響應(yīng)能力。

6.2 pcb.lua 中代碼介紹

該文件中的代碼無需修改,大家直接調(diào)用這個文件就行。

6.2.1 代碼說明

這段 Lua 代碼定義了一個名為pcb的模塊,其主要功能是管理和操作硬件的某些特性,特別是與 PCB(印刷電路板)相關(guān)的設(shè)置和狀態(tài)。

6.2.2 代碼逐步解析

1.模塊初始化和變量定義:

這里定義了一個表pcb,用于存放后續(xù)的函數(shù)。定義了存儲系統(tǒng)的 OTP 區(qū)域和硬件的默認版本號以及出廠測試結(jié)果的初始值。

wKgZO2fieDaAPvBRAADzXHPICMc323.png

2.讀取 OTP 存儲區(qū)和解析硬件版本號的函數(shù):

loadParam函數(shù)首先檢查 OTP 是否存在,然后讀取 OTP 存儲區(qū)中的數(shù)據(jù),解碼 JSON 格式的數(shù)據(jù)以獲取硬件版本號和出廠測試結(jié)果。若解碼失敗或缺少數(shù)據(jù),則根據(jù)設(shè)備型號進行版本號的設(shè)置。

wKgZO2fieGyADIIAAAGPgREtFMQ985.png

3.GNSS 電源控制功能:

此函數(shù)根據(jù)硬件版本控制 GNSS 模塊的電源狀態(tài)。通過 GPIO 接口進行電源的開啟或關(guān)閉。

wKgZO2fieKKAUnpUAAHyE8E7KoI031.png


4.ES8311 電源引腳的獲?。?/strong>

根據(jù)硬件版本返回 ES8311 控制器對應(yīng)的電源引腳。

wKgZO2fieNqAZbIhAAD8cY7zB_8186.png

5.充電 IC CMD 引腳的獲?。?/strong>

此函數(shù)根據(jù)硬件版本返回充電 IC 的命令引腳。

wKgZO2fieSaAQcaHAAD9tM4d-dI545.png


6.出廠測試結(jié)果獲取及版本號管理:

提供了獲取當前硬件版本號和出廠測試結(jié)果的方法,以及設(shè)置硬件版本號的功能。

wKgZO2fieV2Aas-XAAEiCI8GjVM601.png

6.2.3 總結(jié)說明

整段代碼的主要功能是提供對印刷電路板(PCB)相關(guān)硬件配置和狀態(tài)的管理。通過讀取 OTP 存儲區(qū),程序能夠獲取設(shè)備的特定參數(shù)(如版本號和出廠測試結(jié)果)。此外,它還實現(xiàn)對 GNSS 電源、ES8311 音頻編解碼器以及充電 IC 的控制接口,根據(jù)不同的硬件版本提供不同的引腳控制方案。

6.3 batteryManage.lua 中代碼介紹

6.3.1 代碼說明

這段代碼是一個電池管理模塊的實現(xiàn),主要用于監(jiān)控和管理電池狀態(tài),包括電壓檢測、充電狀態(tài)判斷、電量計算和自動關(guān)機功能。

6.3.2 代碼逐步解析

1.模塊定義

創(chuàng)建一個名為M的模塊,定義模塊名稱為“batteryManage”。

wKgZPGfieauALFZ8AABqQf-BOi8184.png


2.引入庫

引入了sys和sysplus庫,這些庫提供了系統(tǒng)和附加功能的支持。

wKgZO2fieeCAa9ElAABr_PfbbLU520.png

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: 用于設(shè)置藍燈和紅燈的狀態(tài),分別用 GPIO 接口進行控制。

wKgZPGfiehmAVzZuAAFnvUIA6kw363.png

4.電池放電曲線

定義一個電池放電曲線數(shù)組,該數(shù)組存儲對應(yīng)電量的電壓值,用于通過電壓推算電量百分比。

wKgZO2fiekiACXgaAABOAbGbyS4279.png


5.重置未充電時長

重置未充電計時器的函數(shù)。

wKgZO2fieo2Ad_PlAACOxEZwmag118.png

6.關(guān)機函數(shù)

該函數(shù)用于發(fā)布關(guān)機信號,以請求系統(tǒng)關(guān)機。

wKgZPGfiesSAa18rAADBm1XZA68664.png

7.充電狀態(tài)檢測

使用 GPIO 中斷回調(diào)來檢測充電狀態(tài),如果通過 GPIO 引腳檢測到充電狀態(tài)發(fā)生變化,將更新充電狀態(tài)并檢查電池狀態(tài)。

wKgZPGfievaASB3WAABoosuax9M865.png

8.電量百分比計算

根據(jù)當前電壓M.vbat計算電池百分比。如果電壓在放電曲線數(shù)組的范圍內(nèi),則返回相應(yīng)的電量百分比。

wKgZPGfiey2AZFNCAABscG5FhpY087.png

9.定期檢查電池狀態(tài)

定期更新電池電量,讀取電壓并計算電量。如果電量低于 30%,且沒有插入電源的時間超過 2 分鐘,則調(diào)用關(guān)機函數(shù)。

wKgZPGfie2KACnAJAABokm3SriM525.png


10.長按電源鍵關(guān)機

實現(xiàn)了長按電源鍵的關(guān)機邏輯,按下電源鍵 3 秒后進行關(guān)機,松開時取消關(guān)機。

wKgZO2fie5mAR9UpAABmHfjsG0M102.png


6.3.3 總結(jié)說明

整體而言,該模塊負責(zé)監(jiān)控電池的電壓和充電狀態(tài)。它能夠定期更新電量百分比,并在必要時自動關(guān)機。此外,該模塊還允許用戶通過長按電源鍵來手動關(guān)機。其主要功能是確保設(shè)備在電量過低時保護系統(tǒng)不受損壞,同時提供充電狀態(tài)的實時反饋。

6.3 main.lua 中代碼介紹

6.3.1 代碼說明

該文件中的代碼使用 Lua 語言編寫,主要用于管理和監(jiān)控設(shè)備的電源和電池狀態(tài)。

6.3.2 代碼逐步解析

1.項目和版本信息

這部分定義了項目名稱和版本,并記錄日志信息,便于后續(xù)的調(diào)試和維護。

wKgZPGfie-CAaUkYAACTMxUJXYI933.png

2.庫的引入

在這里,引入了多個必要的庫文件,包括系統(tǒng)管理庫sys、電路板庫pcb、充電邏輯庫和電池管理庫。通過這些庫,程序可以實現(xiàn)對系統(tǒng)的控制和管理。 特別說明:主要功能代碼已經(jīng)模塊化到 batteryManage 庫文件中。

wKgZO2fifA-AHun8AAD6jl8me_U243.png

3.開機防抖

這部分代碼用于防止開機時的抖動,并點亮紅色指示燈,以表明設(shè)備正在啟動。

wKgZPGfifEiAInMrAACSK-0icFU354.png

4.GPIO 設(shè)置

通過gpio.setup配置了兩個引腳:一個用于監(jiān)測充電狀態(tài),另一個用于電源鍵的回調(diào)。

wKgZO2fifH2ALU4TAAEExtyauU8466.png

5.關(guān)機處理

這段代碼訂閱了系統(tǒng)關(guān)機事件,當設(shè)備接收到關(guān)機信號時,會調(diào)用pm.shutdown()函數(shù)進行安全關(guān)機。

wKgZO2fifK6AYoW1AACRUq5Li90588.png

6.啟動初始檢查

在系統(tǒng)啟動時,首先進行一次電池充電狀態(tài)檢查,并設(shè)置一個定時器,每 60 秒更新一次電池電量信息。

wKgZO2fifOqAfXu6AADpabwDEa0362.png

7.日志輸出

此段代碼設(shè)置了一個定時器,每隔 5 秒輸出一次當前電池狀態(tài)的日志信息,包括電壓、電池電量及充電狀態(tài),便于監(jiān)控和調(diào)試。

wKgZO2fifR6ATkniAAFg4sErK0Y416.png

8.程序運行

最后,sys.run()函數(shù)用于啟動系統(tǒng)的主循環(huán),讓程序保持運行狀態(tài)。

wKgZPGfifU6AKFtiAAAypgLf5jQ593.png

6.3.3 總結(jié)說明

該代碼的主要功能是管理和監(jiān)控嵌入式設(shè)備的電源與電池狀態(tài),具備開機防抖、充電狀態(tài)檢測、定時更新電池電量和記錄日志等功能。

6.4 完整代碼展示

此處只展示batteryManage.lua和main.lua。其余完整代碼請下載源碼查看。

batteryManage.lua

wKgZPGfifZ6AJkyyABS9wztIKnY923.png

main.lua

wKgZPGfifeaAKgGxAAemB03Qm3k404.png


6.5 運行結(jié)果展示

通過 Luatoos 工具查看

wKgZO2fifiCAbAizAAZhJMiAxdc675.png

七、總結(jié)

本文介紹了電源管理系統(tǒng)的基本概念、目標以及在實際應(yīng)用中的實現(xiàn)方式。通過深入分析電源管理的各個功能模塊,我們了解了電量監(jiān)測、充電檢測、自動關(guān)機和用戶接口等關(guān)鍵功能。這些功能共同構(gòu)成了一個高效且智能的電源管理系統(tǒng),能夠顯著提升設(shè)備的性能和用戶滿意度。

在電源管理實踐中,合理的策略和有效的代碼實施是成功的關(guān)鍵。通過實時監(jiān)測電池狀態(tài)和智能控制電源操作,不僅能夠延長設(shè)備的使用時間,還能確保設(shè)備在關(guān)鍵時刻的穩(wěn)定性與可靠性。這對于以移動設(shè)備和嵌入式系統(tǒng)為主的應(yīng)用場景尤其重要。

未來,我們可以繼續(xù)探索更為先進的電源管理技術(shù),比如基于人工智能的預(yù)測分析和優(yōu)化算法,以便進一步提高電源管理的智能化水平。這將為設(shè)備的使用者帶來更佳的體驗,使電源管理成為每一款電子設(shè)備中不可或缺的一部分。

八、常見問題

1.設(shè)備無法開啟或頻繁自動關(guān)機

檢查電池電量是否低于安全工作水平,確保設(shè)備充電。如果電量很低,請連接電源并充電一段時間再嘗試開機。

2.電池電量顯示不準確

確保電池電壓監(jiān)測模塊正常工作,檢查 ADC 通道是否正確配置。如有必要,重新校準電池電量百分比計算的映射表。

3.充電狀態(tài)無法正確識別

檢查充電檢測的 GPIO 引腳連接是否正常,確認是否存在接觸不良或線路損壞的問題。此外,確保所用充電器和數(shù)據(jù)線與設(shè)備兼容。

4.系統(tǒng)在充電時無法正常運行

檢查是否有其他程序或任務(wù)占用過多資源,導(dǎo)致系統(tǒng)不穩(wěn)定??梢钥紤]優(yōu)化系統(tǒng)任務(wù)的優(yōu)先級或關(guān)閉不必要的功能模塊。

5.長按電源鍵無反應(yīng)

確認電源鍵的 GPIO 引腳連接正常,確保其可被正常識別。如果仍然無效,請檢查相關(guān)代碼對電源鍵的事件處理是否正確。

6.設(shè)備發(fā)熱嚴重

設(shè)備發(fā)熱可能是由于充電速率過高或設(shè)備運行負載過重引起的。建議降低負載、優(yōu)化代碼,或調(diào)整充電策略。

7.無法更新固件或腳本

檢查 USB 連接是否正常,確保 Luatools 工具正確識別設(shè)備。注意遵循燒錄步驟,并確保所用的固件版本與硬件兼容。

sf

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 電源管理
    +關(guān)注

    關(guān)注

    115

    文章

    6237

    瀏覽量

    145398
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2920

    文章

    45439

    瀏覽量

    382085
  • LuatOS
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    2085
收藏 0人收藏

    評論

    相關(guān)推薦

    MQTT應(yīng)用看這篇!合宙Air780EP_LuatOS_MQTT應(yīng)用指南

    Air780EP 是合宙的低功耗4G模組之一,支持LuatOS的腳本二次開發(fā),即使是不太懂技術(shù)的老板,也能輕松使用 Air780EP開發(fā)產(chǎn)品。 本文應(yīng)各位大佬邀請,詳細講解了Air7
    的頭像 發(fā)表于 08-08 17:13 ?2405次閱讀
    MQTT應(yīng)用看這篇!合宙<b class='flag-5'>Air780EP_LuatOS</b>_MQTT應(yīng)用指南

    LuatOS是什么?

    合宙新一代物聯(lián)網(wǎng)開源操作系統(tǒng)LuatOS,開啟行業(yè)嵌入式開發(fā)新生態(tài)!開源開放,創(chuàng)新突破,讓萬物互聯(lián)更簡單!LuatOS是什么?LuatOS特色及應(yīng)用LuatOS資料下載及技術(shù)支持開源開
    發(fā)表于 11-08 06:27

    【合宙Air820開發(fā)板試用體驗】之三:認識LuatOS-Air

    LuatOS第一次接觸,感覺很新奇。Lua腳本是內(nèi)嵌在模塊基礎(chǔ)軟件core中運行的(core編譯生成的文件是.lod文件),Lod中有支持Lua運行的環(huán)境,Lua腳本就在這個環(huán)境中運行。腳本實現(xiàn)功能
    發(fā)表于 12-30 18:33

    合宙LuatOS新版發(fā)布

    1LuatOS新版固件今日發(fā)布合宙LuatOS-SoC@EC618新版固件——適用基于移芯EC618平臺設(shè)計研發(fā)的Air780EG、Air780E、
    的頭像 發(fā)表于 02-07 14:03 ?1338次閱讀
    合宙<b class='flag-5'>LuatOS</b>新版發(fā)布

    合宙LuatOS開發(fā)板使用手冊——Air700ECQ

    合宙LuatOS開發(fā)板使用說明——Air700ECQ
    的頭像 發(fā)表于 08-23 16:28 ?754次閱讀
    合宙<b class='flag-5'>LuatOS</b>開發(fā)板使用手冊——<b class='flag-5'>Air</b>700ECQ

    合宙LuatOS產(chǎn)品規(guī)格書——Air700EMQ

    本文詳細介紹了合宙LuatOS關(guān)于Air700EMQ的產(chǎn)品規(guī)格信息
    的頭像 發(fā)表于 08-28 15:54 ?1019次閱讀
    合宙<b class='flag-5'>LuatOS</b>產(chǎn)品規(guī)格書——<b class='flag-5'>Air</b>700EMQ

    合宙LuatOS產(chǎn)品規(guī)格書——Air780EQ

    合宙LuatOS——低功耗4G模組——產(chǎn)品規(guī)格書——Air780EQ
    的頭像 發(fā)表于 08-29 14:37 ?699次閱讀
    合宙<b class='flag-5'>LuatOS</b>產(chǎn)品規(guī)格書——<b class='flag-5'>Air</b>780EQ

    LuatOS與ADC:Air780E模組開發(fā)的新篇章!

    今天我們學(xué)習(xí)的是Air780E模組LuatOS開發(fā)之ADC應(yīng)用,希望能幫助到大家。
    的頭像 發(fā)表于 11-07 14:12 ?451次閱讀
    <b class='flag-5'>LuatOS</b>與ADC:<b class='flag-5'>Air</b>780E模組開發(fā)的新篇章!

    Air780E模組的ADC之旅 LuatOS開發(fā)實例

    今天學(xué)習(xí)一個新的示例,關(guān)于Air780E模組LuatOS開發(fā)的ADC應(yīng)用實例,希望大家有所收獲。
    的頭像 發(fā)表于 11-11 09:33 ?434次閱讀
    <b class='flag-5'>Air</b>780E模組的ADC之旅  <b class='flag-5'>LuatOS</b>開發(fā)實例

    Air780E模組LuatOS開發(fā)的位運算(bit)教程篇!

    本次我們要學(xué)習(xí)的是4G模組Air780E的LuatOS開發(fā),關(guān)于位運算(bit)教程分享給大家。
    的頭像 發(fā)表于 11-26 11:58 ?334次閱讀
    <b class='flag-5'>Air</b>780E模組<b class='flag-5'>LuatOS</b>開發(fā)的位運算(bit)教程篇!

    藏箱子里Air724UG模組LuatOS開發(fā)的HTTP示例!

    今天我們來學(xué)習(xí)的是我珍藏已久的低功耗模組Air724UG的LuatOS開發(fā)HTTP示例,獻給大家。
    的頭像 發(fā)表于 11-30 09:42 ?449次閱讀
    藏箱子里<b class='flag-5'>Air</b>724UG模組<b class='flag-5'>LuatOS</b>開發(fā)的HTTP示例!

    解析Air780E模組LuatOS開發(fā)的隨機數(shù)(random) 示例篇

    本文主要解析的是低功耗4G模組Air780E的LuatOS開發(fā)隨機數(shù)(random)實例,我以整理成文分享給大家。
    的頭像 發(fā)表于 11-29 20:23 ?375次閱讀
    <b class='flag-5'>解析</b><b class='flag-5'>Air</b>780E模組<b class='flag-5'>LuatOS</b>開發(fā)的隨機數(shù)(random) 示例篇

    4G模組Air780E的LuatOS開發(fā)之位運算(bit)示例

    本文我要說的是低功耗4G模組Air780E的LuatOS開發(fā),關(guān)于位運算(bit)示例,我將詳細解析分享給大家。
    的頭像 發(fā)表于 12-02 14:33 ?344次閱讀
    4G模組<b class='flag-5'>Air</b>780E的<b class='flag-5'>LuatOS</b>開發(fā)之位運算(bit)示例

    Air8201,助力武裝押運槍支定位

    Air8201 工業(yè)引擎 ,主打AirTrack超低功耗定位。 導(dǎo)入了眾多位置服務(wù)場景,以往的文章都有談及,本期主要講武裝押運槍支定位場景。 ? 一、行業(yè)痛點 在武裝押運場景中,槍支實時定位需滿足三
    的頭像 發(fā)表于 02-26 14:27 ?143次閱讀
    <b class='flag-5'>Air8201</b>,助力武裝押運槍支定位

    合宙Air8201,助力武裝押運槍支定位

    Air8201 工業(yè)引擎 ,主打AirTrack超低功耗定位。 導(dǎo)入了眾多位置服務(wù)場景,以往的文章都有談及,本期主要講武裝押運槍支定位場景。 ? 一、行業(yè)痛點 在武裝押運場景中,槍支實時定位需滿足三
    的頭像 發(fā)表于 02-26 14:27 ?55次閱讀
    合宙<b class='flag-5'>Air8201</b>,助力武裝押運槍支定位

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品