天天看點

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

序言:

    寫這篇部落格的主要原因是因為公司的産品涉及到電池充放電管理,而且充電電壓和電池電壓可能會有多種組合,針對這種設計需求,發現目前流行的PD快充協定正好是多級電壓,是以在TI支援PD快充的晶片中選擇支援多節電池充放電管理的晶片。基于上述原因,選擇了國内比較容易買到,價格也适中的bq25703。

    從了解晶片到Demo闆調試基本完成,林林總總共曆時大約1個月,整理成部落格也是為了日後有個參考。

    好了,不多說,踩坑的日志開始~

涉及到的連結:

介紹bq25703:

官方的介紹大家可以參考晶片的DataSheet,我就不複制粘貼了,重點功能如下:

  1. 支援1~4節锂電池充電,或者其他自定義充電電壓(1.024V~19.2V),自定義充電電流(0.064A~8.128A);
  2. 支援3.5V~24V寬電壓輸入
  3. 無論是否充電狀态,都可以向系統提供自定義電壓(這裡有坑,後面會說);
  4. 可以反過來向輸入接口輸出自定義電壓(OTG功能),是以常被用來做快充充電寶電源管理晶片(這裡有坑,後面會說)
  5. 充放電等詳細設定均通過内部寄存器的配置完成,使用I2C與控制晶片通訊

知道基本功能,下面介紹如何實作這些功能,附上Demo闆的原理圖截圖,後面的設計都會根據這個圖來介紹:

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

這個圖和DataSheet中的推薦應用圖完全一樣(事實上也沒有自由發揮的空間 (0.0))

簡單介紹一下核心晶片bq25703外圍電路的主要功能:

  • P1為電源輸入口,支援3.5V~24V寬電壓輸入,一般接在TYPE-C的接口上,負責充電時的輸入和OTG時的輸出
  • R14是自己放置的采樣電阻,後面加上運放後,目的是為了用單片機ADC功能呢擷取到充/放電的電流大小和方向
  • ACP與ACN中間的采樣電阻是BQ25703要求的,也是為了采集充放電電流,但實際似乎沒有輸出(後面詳解)
  • Q1,Q2,Q3,Q4和L3共同組成BUCK-BOOST升降壓電路,也是整個電路的核心,是以電感的電流盡可能選擇的大一點,當然尺寸也要考慮在内,做Demo闆當然無所謂尺寸,但是日後設計成形産品時,為了能夠整體散熱,能夠讓導熱矽膠盡可能貼合MOS、晶片、電感,最終電感的選型肯定是盡可能的薄
  • SYS這個地方就是為整個系統提供自定義電壓的地方,如果是在筆記本或者平闆當中使用,就是為整個主機闆供電的地方
  • BAT+就是接電池正極的地方,可以是1~4節锂電池,也可以是特殊電壓
  • R20采樣電阻就是BQ25703檢測電池充放電電流的地方
  • R23+R24就是負責在電路中設定為幾節锂電池充電,具體的設定方法後面會說,圖上的配置是為兩節電池(8.4V)充電

電池保護部分:

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

因為Demo闆的設計采用了18650電池,而且是無保護闆的18650,是以需要DW01KA+兩個SC8205S的NMOS作為保護。

實際上,這樣的保護闆常常出現在锂聚合物電池上,那個跟買來的電池總是包在一起的小小的條狀保護闆,基本都是類似的設計,這樣的設計可以實作:

  • 防止過充,電池電壓上升超過4.3V就會斷開電流流入電池的通路以阻止繼續充電,但是放電依然暢通
  • 防止過放,電池電壓低于3.5V就會斷開電流流出的通路,但是充電通路暢通
  • 防止過流,在電流超過2A就會斷開電流流出通路,然後很快恢複,繼續檢測是否過流,反複如此

各部分電壓電流檢測,由單片機内部ADC采樣完成,又快又準:

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

從上到下依次是:

  • 外部接入的電流大小及方向檢測
  • 外部接入電壓檢測
  • 電池電壓檢測
  • 電池充放電電流大小及方向檢測

Q:電流檢測在第二級運放的同相輸入端為什麼要接偏置電阻?

A:因為單片機的ADC隻能檢測0-5V,如果沒有偏置電阻,那麼至少有一個方向的電流是檢測不到大小的,除非增加一路采樣和運放,成本增加不說,還要多一路AD采樣,程式設計和處理都會複雜;而且電流檢測不需要太高精度,偏置後,兩個方向都可以檢測到電流大小,程式設計也友善

Q:為什麼電壓采樣還要用運放,而且是直接電壓跟随,并沒有放大?

A:這裡的運放主要起到保護作用,單片機ADC引腳最高輸入不能超過5V,否則有擊穿風險,是以用運放隔離了采樣電壓,保護晶片

上位機通訊部分:

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

采用CH340C作為與上位機通訊的序列槽,是因為外部電路太簡單(隻有一個電容),沒有晶振,沒有容易摔壞的風險

主要晶片:

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

主要晶片用的是新唐的NUC029單片機,采用ARM-M0構架,50MHz主頻,64K程式設計空間,支援序列槽更新,内部EEPROM

軟體部分:

    bq25703這款晶片大部分功能都要通過I2C通訊,修改内部寄存器才能實作,是以務必需要至少一顆邏輯控制晶片負責通訊。

如果沒有主要晶片,就連最基本的充電功能都無法實作(充電電流為0)

I2C的通信形式是标準,在網上有資料,大部分單片機也自帶I2C接口,直接配置單片機寄存器就可以完成通訊

這裡簡單介紹一下通過I2C是如何控制bq25703

指令有兩類:按位址寫入資料,按位址讀取資料

按位址寫入資料:  開始→寫位址+0→從機應答→寫寄存器位址→從機應答→寫寄存器資料→從機應答→結束

按位址讀取資料: 開始→寫位址+0→從機應答→寫寄存器位址→從機應答→ 再次開始→寫位址+1→從機應答→讀取寄存器資料                                 →結束

讀取資料都是一次一個位址讀取的,寫入資料大部分都是直接一次一個位址寫入,但是如下4個寄存器,需要一次寫入兩個位址,而且必須遵循先寫小端,再寫大端的形式,且必須在一次I2C通訊中完成,通訊順序如下:

開始→寫位址+0→從機應答→寫寄存器基址(偶數位址)→從機應答→ 寫低位寄存器資料→從機應答→寫高位寄存器資料→從機應  答→結束

需要這樣操作的特殊寄存器如下:

  • ChargeCurrent(0x02,0x03)充電電流
  • MaxChargeVoltage(0x04,0x05)充滿電壓
  • OTGVoltage(0x06,0x07)反向供電電壓
  • InputVoltage(0x0a,0x0b)最小輸入電壓

詳細的寄存器表在DataSheet裡有詳細說明

上位機軟體配合調試:

因為為大量的寄存器需要配置,那麼如果每次試驗資料都是使用序列槽調試,不夠直覺,也不夠友善。

在TI官網上發現一個

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

這個軟體,是IT官方制作的,支援全系列晶片的寄存器管理軟體,為什麼我不用這個軟體而是自己寫呢?因為這個軟體需要配套一個調試工具,類似燒錄器,已經做好的調試闆在官網也有,但是價格實在比較感人,最終決定自己寫上位機軟體,配合單片機,自己定的協定進行調試,是以這個工具用上,但是可以用來參考

自己做的開發闆使用CH340C序列槽轉USB裝置,通過USB線與電腦相連,在系統中識别為CH340裝置

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

通過序列槽調試工具,測試進行測試,确定所有寄存器都可以寫入并且讀取到對應的值,那麼就開始上位機的編寫

其實編寫圖形化軟體,作為一個軟體小白,似乎VB,MFC,QT等才是最優先的選擇,但是,既然都是從頭開始,為什麼不選一個更加大膽的選擇呢?

最終決定使用 Electron 開發上位機軟體,效果如下

bq25703電源管理晶片電池充放電管理快充晶片PD充電寶晶片序言:涉及到的連結:介紹bq25703:軟體部分:實際調試:

左側可以看到所有的寄存器都被顯示在表格裡,而且通過顔色差別出目前的狀态,點選可以改變寄存器的數值,實測下來友善了很多

實際調試:

那麼硬體軟體都準備好了,就開始激動人心的測試吧~

我這邊的硬體測試環境除了Demo闆以外,還有一個DC-DC的升降壓可調子產品作為輸入,用來模拟DP快充的多級電壓

插上電池 插上供電 調整輸入為12V 插入上位機USB線 看到調試工具紅紅綠綠的小方塊一個一個出現時,成就感還是很高的

緊接着發現充電電流是0A,VSYS為7.6V(與電池電壓相同),電池也沒有輸入和輸出電流

拔掉電池後,VSYS輸出為6.14V

繼續閱讀