文章總列表

ESP32(8) Low Power

Low Power我踩過不少坑(如下),做起來曲折離奇,不得不解。雖然內心十分抗拒,還是得咬著牙搞定。這篇也是盡量原汁原味,呈現我做的傻事

http://lihgong.blogspot.com/2019/05/volvo-xc60-2.html
http://lihgong.blogspot.com/2019/05/volvo-xc60-5low-power.html


[Low Power 規格]

CAN logger在汽車運作中,吃不到50mA,這程度對發電機完全無感,問題不大先忽視

引擎熄火開始吃電瓶,70Ah電瓶一顆約莫7000台幣,待機電流必須做得小才不會弄壞電池。定義規格:待機1年,吃1%電瓶,待機電流要壓到80uA。鉛電池自放電是每個月3%~10%,我訂的規格算是很嚴苛

  • 70Ah*0.01 = 365*24h*80uA

Low Power選零件先決定一半:極小值是20uA!這裡的規格不開藍芽或無線網路

  • ESP32-C3 deep-sleep mode耗電量5uA
  • TJA1042/3 standby mode耗電量10uA
  • 5V LDO靜態耗電2.5uA
  • 3.3V LDO靜態耗電2.5uA


[先搞定硬體]

CAN logger放車上,要搞定12v轉5v,拿先前做過的板子跳線加工一下。電源也加個二極體稍微隔離(理論上USB也要隔離,PCB已經做好沒辦法改)。跳線連接頭避免拉扯,用熱溶膠盡量固定,免得實驗做一半要維修。我的工藝水準真的有限,下面這團東西,感覺很不可靠啊

下圖是設計IDEA,原型驗證過做小板子會好得多



[睡眠機制]

先思考什麼時候要睡覺

  1. 汽車運作中,CAN Logger開始紀錄封包到SD卡,寫寫寫
  2. 等汽車熄火,CAN封包還會持續一段時間,最後停止
  3. 封包停止,ESP32-C3 SDK,接收CAN封包函數timeout設成4秒,然後去睡覺


[睡下去]

斷電前要做這些事

  1. 把所有GPIO pin review一輪,一般是設成input or output,檢查pull-up/ pull-down,避免從IO pin漏電。基本上low power這個是基本功

  2. 讓CAN收發晶片進Standby Mode省電,電流壓到10uA。這個狀態CAN bus任何擾動(bit#0, dominate)都會在RX pin輸出high-to-low,用這根pin喚醒ESP32-C3

  3. 一切都準備完成,讓ESP32進入deep sleep mode


[測量耗電]

我有自製小道具,能斷開12V/GND,直接用電錶測量耗電


[醒過來]

  1. 樹梅派打出CAN封包,CAN收發晶片偵測到dominate,輸出high-to-low喚醒ESP32-C3

  2. 處理器不同的睡法,醒過來的方式不同。ESP32-C3的Deep-sleep是完全重跑。我在開機的地方讓某根GPIO pin拉高再拉低,用示波器驗證真的重開機

  3. ESP32 SDK因為有些軟體放在SPI上面跑,睡醒要花比較長時間。嚴謹的驗證還包括CAN封包擾動,到真的醒過來,需要多少時間(之後再做)

  4. SDK也提供reset reason API,能在醒過來時,驗證是什麼原因起來

  5. 如果是原地醒過來,那軟體一般會這樣寫
    // prepare for sleep (IO pin adjustment)
    go-to-sleep
    // prepare for operation (IO pin adjustment)

    這顆完全重跑,寫起來像這樣下面這樣,既然軟體是完全重跑,樣子就是重開機
    // prepare for sleep (IO pin adjustment)
    go-to-sleep
    // prepare for operation (IO pin adjustment)

  6. ESP32-C3也可以在睡下去之前,把某些資料寫入另一塊記憶體,等回電還看得到。這個功能目前我還沒用上


[實驗結果]

  1. 運作耗電約27mA,睡下去860uA,穩穩地睡,電流沒突然跳起來(觀測3min)。巨大的電流差大表真的有睡,成功一半了。待機耗電離目標80uA還很遠,一般會從周邊找漏電

  2. 直接拔SD卡,電流降到400uA,這裡佔一半的電流!ESP32-C3有根VDD_SPI pin給Flash供電,睡下去這根pin會斷電。從3.3v改接這根pin,運作正常,而且睡下去不耗電

  3. 我的板子放了兩顆CAN收發器,因應VOLVO車有兩條CAN bus,有顆收發器好像被我弄壞沒法打出封包,電流降不下去。換一顆好的收發晶片,現在電流可以壓到90uA。離目標值(80uA)只差一步,原則上是可以上車玩了

  4. 離理論極小值 (20uA)還有一段路。我反覆查Google,反覆實驗,修改GPIO pin設定,基本上全部沒用!如果某個地方實驗做很久都沒效,那可能原因不在這裡,沒準是硬體出問題導致漏電:IC解焊,跳線飛來飛去,焊油沒清乾淨,太多不確定因素。硬要修復硬體原型可能會先弄壞,就此先打住

  5. 備案準備登場了,有了上次VOLVO+經驗,我知道開發板會折損很快,果斷直接訂了10片板子(在路上),我準備先單獨測試CPU斷電,看datasheet說的5uA是不是真的。再依序擺上周邊,看哪一步出錯

[踩坑]

做Low Power這題一定會踩坑,坑還沒填上,內心的抗拒果然騙不了人 >_<


留言

匿名表示…
Hi

感謝你的分享

Edwin

這個網誌中的熱門文章

幼犬書桌椅選擇心得 升降桌 兒童桌椅

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

CANON G3000 廢墨瓶改裝