前言
电池备份(VBAT)功能的实现方法,一般是使用 MCU 自带的 VBAT 引脚,通过在该引脚连接钮扣电池,当系统电源因故掉电时,保持 MCU 内部备份寄存器内容和 RTC 时间信息不会丢失。
本文档介绍了如何基于 CW32 系列 MCU,通过增加简单的外部电路配合软件实现 VBAT 功能,在系统电源掉 电后仍能保持 RTC 时钟正常计时,以及如何降低系统功耗,从而延长后备电池的使用寿命。
1
电路设计
对于自带 VBAT 引脚的 MCU,MCU 内部有对 VBAT 电源和系统电源的管理单元,保证在系统电源掉电后,及 时切换 VBAT 引脚电源给备份域供电,保证 RTC 正常工作。
对于没有 VBAT引脚的 CW32,要实现类似的功能,可以在外部进行后备带电池和系统电源的切换,如下图所示:
后备电池(B1)提供的备用电源 VBAT 和系统电源 VDDIN 通过 2 个肖特基二极管(D1)合路,合路后的 电源 VDD 给 MCU 的数字域 DVCC 和模拟域 AVCC 进行供电。系统电源 VDDIN 通过 R3、R4 电阻分压得到 WAKEIO 信号,连接到 MCU 的 IO 引脚。注意遵循如下规则:
1. Vwakeio 要大于 MCU IO 口的 Vih;
2. VDDIN 必须高于 Vb1 在 0.4V 以上,否则如果 VDDIN 和 Vb1 相等,在系统电源正常时,后备电池也会有一定 的泄放电流,不利于节省后备电池电量。
2
程序设计
程序启动后正常初始化时钟、IO、RTC 以及 OELD,循环中检测系统电源是否存在,如存在则读取 RTC 时间 并显示。
当系统电源 VDDIN 因故掉电,则关闭 OLED 电源,并进入 DeepSleep 低功耗睡眠模式。
当系统电源 VDDIN 恢复供电时,产生高电平中断,唤醒 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 唤醒时,保持原系统时钟来源
RCC_WAKEUPCLK_Config(RCC_SYSCTRL_WAKEUPCLKDIS);
ShowTime(); // 获取时间数据
displaydatetime(); // 显示当前时间
while(1)
{
if( 0==PB05_GETVALUE() ) // 循环检测是否掉电
{
PA05_SETHIGH(); // 关 OLED 电源
SCB->SCR = 0X04; //DeepSleep
__WFI(); //MCU 进入DeepSleep模式以节省功耗
OLED_Init(); // 外部电源接入后唤醒,重新初始化 OLED
}
else
{
ShowTime(); // 获取时间数据
displaydatetime(); // 显示当前时间
}
}
}
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 网络
GPIO_Init(CW_GPIOB, &GPIO_InitStruct); // 初始化 IO
GPIOB_INTFLAG_CLR(bv5); // 清除 PB05 中断标志
NVIC_EnableIRQ(GPIOB_IRQn); // 使能 PB05 中断
}
4
实际测试
使用 CW32L031C8T6 设计了用于测试后备电池功能的评估板,实物如下图所示:
使用 3V 的 CR2032 钮扣电池,实测电池电压为 3.14V;VDDIN 使用可调节数字电源,设置为 3.54V,保证 VDDIN >= Vb1 + 0.4V;D1 实测合路后的电源电压为 3.21V。
4.1 测试数据
实际测试时,断开 J4 跳线接入万用表,设置万用表为电流测试档位。
1. 关闭 VDDIN 电源输入,MCU 检测到无外电输入,关闭 OLED 显示,进入 DeepSleep 模式,实测此时 B1 电流为 +0.95μA。
2. 打开 VDDIN电源输入,MCU被高电平中断从 DeepSleep状态唤醒到正常状态,OLED正常显示当前时间, 实测此时 B1 电流为 -75nA(负电流是因为 D1 处于反向偏置状态,有小的反向漏电流)。
测试结果符合电路设计预期,以 CR2032 电池容量为 200mAH 计算,则电池可用时间为 210526 小时,合计 24 年(不考虑电池和产品寿命),可实现超长待机时间,完全满足各种低功耗产品对 RTC 后备电池容量需求。
5
附件
5.1 RTC_TestBoard 单板原理图