前言
電池備份(VBAT)功能的實現(xiàn)方法,一般是使用 MCU 自帶的 VBAT 引腳,通過在該引腳連接鈕扣電池,當(dāng)系統(tǒng)電源因故掉電時,保持 MCU 內(nèi)部備份寄存器內(nèi)容和 RTC 時間信息不會丟失。
本文檔介紹了如何基于 CW32 系列 MCU,通過增加簡單的外部電路配合軟件實現(xiàn) VBAT 功能,在系統(tǒng)電源掉 電后仍能保持 RTC 時鐘正常計時,以及如何降低系統(tǒng)功耗,從而延長后備電池的使用壽命。
1 、電路設(shè)計
對于自帶 VBAT 引腳的 MCU,MCU 內(nèi)部有對 VBAT 電源和系統(tǒng)電源的管理單元,保證在系統(tǒng)電源掉電后,及 時切換 VBAT 引腳電源給備份域供電,保證 RTC 正常工作。
對于沒有 VBAT引腳的 CW32,要實現(xiàn)類似的功能,可以在外部進行后備帶電池和系統(tǒng)電源的切換,如下圖所示:
后備電池(B1)提供的備用電源 VBAT 和系統(tǒng)電源 VDDIN 通過 2 個肖特基二極管(D1)合路,合路后的 電源 VDD 給 MCU 的數(shù)字域 DVCC 和模擬域 AVCC 進行供電。系統(tǒng)電源 VDDIN 通過 R3、R4 電阻分壓得到 WAKEIO 信號,連接到 MCU 的 IO 引腳。注意遵循如下規(guī)則:
1. Vwakeio 要大于 MCU IO 口的 Vih;
2. VDDIN 必須高于 Vb1 在 0.4V 以上,否則如果 VDDIN 和 Vb1 相等,在系統(tǒng)電源正常時,后備電池也會有一定 的泄放電流,不利于節(jié)省后備電池電量。
2 、程序設(shè)計
程序啟動后正常初始化時鐘、IO、RTC 以及 OELD,循環(huán)中檢測系統(tǒng)電源是否存在,如存在則讀取 RTC 時間 并顯示。
當(dāng)系統(tǒng)電源 VDDIN 因故掉電,則關(guān)閉 OLED 電源,并進入 DeepSleep 低功耗睡眠模式。
當(dāng)系統(tǒng)電源 VDDIN 恢復(fù)供電時,產(chǎn)生高電平中斷,喚醒 MCU,退出 DeepSleep 低功耗睡眠模式。
3 、參考代碼
int32_t main(void) { RCC_Configuration();?????// 時鐘配置 GPIO_Configuration();????//GPIO配置 OLED_Init();?????????//OLED顯示屏初始化配置 dis_err("RTC_TestBoard");?? // 顯示 FirmwareDelay(5000000);??// 增加延時防止過早休眠影響程序燒寫 RTC_init();??????????//RTC時鐘初始化 //DeepSleep 喚醒時,保持原系統(tǒng)時鐘來源 RCC_WAKEUPCLK_Config(RCC_SYSCTRL_WAKEUPCLKDIS); ShowTime();???????// 獲取時間數(shù)據(jù) displaydatetime();????// 顯示當(dāng)前時間 while(1) { if( 0==PB05_GETVALUE() )? // 循環(huán)檢測是否掉電 { PA05_SETHIGH();???// 關(guān) OLED 電源 SCB->SCR = 0X04;??//DeepSleep __WFI();???????//MCU 進入DeepSleep模式以節(jié)省功耗 OLED_Init();?????// 外部電源接入后喚醒,重新初始化 OLED } else { ShowTime();??????// 獲取時間數(shù)據(jù) displaydatetime();???// 顯示當(dāng)前時間 } } } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStruct= {0}; __RCC_GPIOB_CLK_ENABLE();???????? // 開 GPIOB 時鐘 GPIO_InitStruct.IT = GPIO_IT_RISING;????// 使能上升沿中斷 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;??// 輸入模式 GPIO_InitStruct.Pins = GPIO_PIN_5 ;????//PB05,連接 WAKEIO 網(wǎng)絡(luò) GPIO_Init(CW_GPIOB, &GPIO_InitStruct);??// 初始化 IO GPIOB_INTFLAG_CLR(bv5);????????// 清除 PB05 中斷標(biāo)志 NVIC_EnableIRQ(GPIOB_IRQn);??????// 使能 PB05 中斷 }
4 、實際測試
使用 CW32L031C8T6 設(shè)計了用于測試后備電池功能的評估板,實物如下圖所示:
使用 3V 的 CR2032 鈕扣電池,實測電池電壓為 3.14V;VDDIN 使用可調(diào)節(jié)數(shù)字電源,設(shè)置為 3.54V,保證 VDDIN >= Vb1 + 0.4V;D1 實測合路后的電源電壓為 3.21V。
4.1 測試數(shù)據(jù)
實際測試時,斷開 J4 跳線接入萬用表,設(shè)置萬用表為電流測試檔位。
1. 關(guān)閉 VDDIN 電源輸入,MCU 檢測到無外電輸入,關(guān)閉 OLED 顯示,進入 DeepSleep 模式,實測此時 B1 電流為 +0.95μA。
2. 打開 VDDIN電源輸入,MCU被高電平中斷從 DeepSleep狀態(tài)喚醒到正常狀態(tài),OLED正常顯示當(dāng)前時間, 實測此時 B1 電流為 -75nA(負電流是因為 D1 處于反向偏置狀態(tài),有小的反向漏電流)。
測試結(jié)果符合電路設(shè)計預(yù)期,以 CR2032 電池容量為 200mAH 計算,則電池可用時間為 210526 小時,合計 24 年(不考慮電池和產(chǎn)品壽命),可實現(xiàn)超長待機時間,完全滿足各種低功耗產(chǎn)品對 RTC 后備電池容量需求。
5 、附件
5.1 RTC_TestBoard 單板原理圖
-
單片機
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631998 -
mcu
+關(guān)注
關(guān)注
146文章
16888瀏覽量
349930 -
電池
+關(guān)注
關(guān)注
84文章
10405瀏覽量
128667
發(fā)布評論請先 登錄
相關(guān)推薦
評論