2 電源管理
電池充電過程
總結參考文獻
通過這次移植ti的charger ic晶元到平台上,總結了以下一些內容,需要用到並且掌握的內容。在此之前我還沒有嘗試寫過核心4.0以上的驅動,對於裝置樹的配置只不過是看過語法,也並未太深入的了解。在這裡對所需要涉及到的知識點簡單做一下梳理和總結。
linux中裝置樹的主要目的是提供一種描述不可發現硬體的方法。此資訊以前在源**中進行了硬編碼。方便系統對硬體裝置的管理,提高**可復用率。位於 kernel/arch/platform/boot/dts 下,platform可以是arm,arm64,mips等等。裝置樹資料比較全的資料鏈結。
裝置樹是節點和屬性的簡單樹結構。屬性是鍵 - 值對,節點可以包含屬性和子節點。例如,以下是.dts格式的簡單樹:
/dts-v1/;/
; child-node2 ;}
; node2 ;};};
這棵樹顯然沒有什麼具體的作用,沒有描述任何東西,但是它的確描述了節點——屬性的結構。有:
這裡需要重點理解一下compatible
屬性,因為當時因為這個屬性沒有配置正確,導致一直沒有將驅動配對。
裝置樹中表示裝置的每個節點都需要compatible
屬性。這是在作業系統中用來決定繫結到哪乙個裝置的驅動程式的關鍵。
舉個栗子
裝置樹檔案中的i2c0
節點定義了乙個子節點bq24296
,可以看到compatible
屬性是ti,bq24296
,那麼它是如何找到對應的驅動程式呢?
&i2c0
;}
在驅動程式中找到了以下**,當然了這是我參考其他驅動程式進行新增的compatible
屬性值,當然bq24296
節點中gpios
屬性也可以通過讀取,這裡需要對裝置樹進行深入的學習。
static
struct of_device_id bq24296_of_match=
,,};
然後,我產生了疑惑,如何解析裝置樹的資料到核心呢?
static
struct
void
bq24296_parse_dt
(void
*param)
pdata =
devm_kzalloc
(di->dev,
sizeof
(*pdata)
, gfp_kernel);if
(!pdata)
return
null;
pdata->chg_irq_pin =
of_get_named_gpio
(bq24296_np,
"gpios",0
);if(
!gpio_is_valid
(pdata->chg_irq_pin)
) pdata->dc_det_pin =
of_get_named_gpio
(bq24296_np,
"gpios",1
);if(
!gpio_is_valid
(pdata->dc_det_pin)
)}
例如of_node_get
,of_get_named_gpio
等等方法可以在核心中獲取裝置樹里的屬性資訊。這裡簡單介紹一下,可以檢視一下核心讀取裝置樹的常用api,這樣基本上就會清楚了。推薦一下宋老師的裝置樹博文
c速率大多數電池都標有額定容量,以**安時(ah)或毫安時(mah)**為單位。這基本上是它們在完全耗盡之前可以**一小時的放電電流。
舉個例子,你有乙個標記為2400mah或2.4ah的大電池,這意味著它可以通過你的電路推動2.4a,並在一小時的時間內放電。這將是1c放電率,在額定容量電流下放電。
如果你的電池為乙個電路提供1200ma電流,它將是0.5c的放電率,它應該持續兩個小時。
有些電池的放電率高於1c,如果你能以4.8a(2c)的速度放電,它可以持續30分鐘。rc系統中使用的一些電池允許非常高的放電速率,如10或20c,但這種電池通常設計為失敗而不是讓您的飛機在飛行途中無動力,因此它們不是最安全的。
充電時,它基本相同,在1200ma的最大電流下為2400mah電池充電將是0.5c的充電速率。出於安全原因,大多數電池應在0.5c和1c之間; 完全充電時間約為2-3小時。這些電池的製造商建議在0.8c或更低的溫度下充電,以延長電池壽命; 然而,大多數動力電池可以在很小的壓力下採用更高的充電c率。充電效率約為99%,電池在充電過程中保持冷卻。
開路電壓(ocv)
電池在開路狀態下的電壓,即電池斷開的情況下電池兩端的電壓,等於電池正極與電池負極兩端的電勢差。
電池極化
電池在有電流通過的情況下,兩個電極會出現極化的情況,電流越大,極化情況越嚴重。兩極會偏離平衡電位,表現為陽極電位會比平衡電位高,而陰極會比平衡電位低,所以在出現極化的情況下,電位差會大於開路電壓。
充電週期包括兩個主要階段;恆流(cc)和恆壓(cv),但有些充電器跳過或增加更多級。主要的充電過程如下圖所示。
涓流充電
在電池電壓低於3v左右時採用涓流充電,涓流充電電流是恆流充電電流的十分之一即0.1c,這是由於電池自放電導致電池自身電壓過低,大部分充電池特別是鎳鎘電池及鎳氫電池都有自放電現象;鋰電池則不推薦使用這個方式進行充電。
恆流充電(cc)
大於1c的恆流充電並不會縮短整個充電週期時間,因此這種做法不可取。當以更高電流充電時,由於電極反應的過壓以及電池內部阻抗上的電壓上公升,電池電壓會更快速地上公升。恆流充電階段會變短,但由於下面恆壓充電階段的時間會相應增加,因此總的充電週期時間並不會縮短。
恆壓充電(cv)
恆壓充電—— 當電池電壓上公升到4.2v時,恆流充電結束,開始恆壓充電階段。為使效能達到最佳,穩壓容差應當優於+1%。
充電終止
充電終止——與鎳電池不同,並不建議對鋰離子電池連續涓流充電。連續涓流充電會導致金屬鋰出現極板電鍍效應。這會使電池不穩定,並且有可能導致突然的自動快速解體。
備註
SpringCloud Stream訊息驅動概述
簡介 如果系統裡同時存在多種mq,可以使用使用cloud stream,只需要和stream互動就可以進行管理。一句話,遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型 官網 中文手冊 官方定義springcloud stream是乙個構建訊息驅動微服務的框架 應用程式通過input...
SpringCloud Stream訊息驅動
遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型。在沒有binder這個概念的情況下,springboot應用要直接與訊息中介軟體進行資訊互動的時候,由於各訊息中介軟體構建的初衷不同,他們的實現細節上有較大差異,通過定義binder作為中間層,完美實現了應用程式與訊息中介軟體細節之間...
springcloud stream訊息驅動
什麼是spring cloud stream?官方定義 spring cloud stream 是乙個構建 訊息驅動 微服務的框架。應用程式通過inputs或者outputs來與 spring cloud stream 中binder互動,通過我們配置來 binding 而 spring cloud...