打印
[产品介绍及宣传专区]

CW32 低电压检测器的使用

[复制链接]
971|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CW32的LVD低电压检测器适用于监测VDDA电源电压或外部引脚输入电压,当被监测电压与LVD阈值的比较结果满足触发的条件时,LVD将会产生中断或者复位信号,通常用来处理一些紧急任务。LVD产生的中断或复位标志,只能通过软件程序清零,并且只有当中断或复位标志被清零后,在再次达到触发条件时,LVD才能再次产生中断或复位信号。在本文中以CW32L083系列为例,介绍LVD的基本功能和使用例程。
LVD的基本功能介绍:
4路监测电压源
VDDA电源电压,PA00引脚输入,PB00引脚输入,PB11引脚输入
16阶阈值电压,范围2.02V-3.76V
3种触发条件,可以组合使用
电平触发:电压低于阈值
下降沿触发:电压跌落到阈值以下的下降沿
上升沿触发:电压回升到阈值以上的上升沿
可触发产生中断或复位信号,二者不能同时产生
8阶滤波可配置
支持迟滞功能
支持低功耗模式下运行,中断唤醒MCU

通过LVD的控制寄存器LVD_CR0的SOURCE位域来选择LVD模块监控的电压(VDDA电源/PA00引/PB00引脚/PB11引脚),在监测外部引脚电压时,需将对应的GPIO端口配置为模拟输入模式(GPIOx_ANALOG.PINy = 1)。
LVD的比较结果可以从PA01/PA08/PC12/PE02/PF02脚输出,在此之前,需将对应的GPIO口配置为数字输出模式,同时选择端口位LVDOUT复用功能。
LVD 内置的电压比较器具有迟滞功能,只有当被监测电压高于或低于阈值电压达到 20mV 时,比较器输出信号才会发生翻转,可避免当 LVD 的监测电压在阈值电压附近时,电压比较器的输出结果发生频繁翻转,增强系统抗干扰能力。具体波形如下图所示:

LVD的阈值电压根据LVD控制寄存器LVD_CR0的VTH位控制。

LVD支持数字滤波功能,可以增强系统的鲁棒性(系统在一定的参数抖动下,维持起某些性能的特性),可以将LVD电压比较的输出结果信号进行数字滤波,小于滤波宽度的信号被滤除,不会被触发中断或复位,如下图所示,图中两处噪音或其他信号就被滤除了。

通过设置控制寄存器LVD_CR1的FLTEN位域,可以使能数字滤波模块,当将该位设置为1的时候,会使能数字滤波模块。
通过设置控制寄存器 LVD_CR1 的 FLTCLK 位域可以选择数字滤波的时钟:
• FLTCLK 位为 1,选择 HSIOSC 作为滤波时钟
• FLTCLK 位为 0,选择内置 RC 振荡器时钟作为滤波时钟,其频率约 150kHz
控制寄存器 LVD_CR1 的 FLTTIME 位域用于选择数字滤波的时钟个数,如下表所示:

从 LVD 状态寄存器 LVD_SR 的 FLTV 位域,可以读出经 LVD 数字滤波后的信号电平;当 GPIO 的功能复用为 LVD_OUT 时,数字滤波后的信号就可以从 GPIO 输出,以方便观察测量。
LVD 支持在低功耗模式下工作,中断输出可将芯片从低功耗模式下唤醒。当被监测电压与 LVD 阈值的比较结果满足触发条件时,可产生中断或复位信号。产生中断还是复位信号由控制寄存器 LVD_CR0 的 ACTION 位域控制:
• ACTION 为 1,LVD 触发产生复位#define LVD_Action_Reset  ((uint32_t)0x00000002)
• ACTION 为 0,LVD 触发产生中断#define LVD_Action_Irq   ((uint32_t)0x00000000)
LVD可以通过设置控制寄存器 LVD_CR0 的 IE 位域为 1,使能 LVD 中断,满足触发条件时将产生 LVD 中断,中断标志位 LVD_SR.INTF 会被硬件置 1,用户可以向 INTF 位写 0,清除中断标志。设置控制寄存器 LVD_CR1 的 LEVEL、FALL、RISE 位域,可选择不同的中断或复位触发方式,三者可组合使用:
• LEVEL 为 1,被监测电压低于阈值时触发中断或产生复位
• FALL 为 1,被监测电压跌落到阈值以下的下降沿触发中断或产生复位
• RISE 为 1,被监测电压回升到阈值以上的上升沿触发中断或产生复位
LVD使用例程介绍:
根据上述内容,可以配置一个关于CW32L083的电压监测例程,LVD的输入通道设置为PA00,输出端口为PA08,门限电压为2.02V,利用LVD的中断实现当LVD输入通道电压低于或者高于门限电压时刻(利用上升沿和下降沿),PC03输出电平翻转一次。
void LVD_PortInit(void)
{
GPIO_InitTypeDefGPIO_InitStructure = {0};
//打开GPIOA时钟
__RCC_GPIOA_CLK_ENABLE();
//将PA08设置为LVD比较结果输出
GPIO_InitStructure.Pins = GPIO_PIN_8;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOA, &GPIO_InitStructure);
//将PA08复用为LVD比较结果输出
PA08_AFx_LVDOUT();
//将PA00设置为LVD的输入口
PA00_ANALOG_ENABLE();
}
int main(void)
{
LVD_InitTypeDefLVD_InitStruct = {0};
    //LED初始化
LED_Init();
    //配置测试IO口
LVD_PortInit();
LVD_InitStruct.LVD_Action = LVD_Action_Irq; //配置中断功能
LVD_InitStruct.LVD_Source = LVD_Source_PA00; //配置LVD输入口为PA00
LVD_InitStruct.LVD_Threshold = LVD_Threshold_2p02V; //配置LVD基准电压为2.02v
LVD_InitStruct.LVD_FilterEn = LVD_Filter_Enable;//LVD滤波模块开启
LVD_InitStruct.LVD_FilterClk = LVD_FilterClk_RC150K;//LVD滤波时钟为150KHz
LVD_InitStruct.LVD_FilterTime = LVD_FilterTime_4095Clk;
LVD_Init(&LVD_InitStruct);
LVD_TrigConfig(LVD_TRIG_FALL | LVD_TRIG_RISE, ENABLE);//LVD中断为上升沿和下降沿触发
LVD_EnableIrq(LVD_INT_PRIORITY);
LVD_ClearIrq();
FirmwareDelay(4800);
LVD_Enable(); //LVD使能
    while (1)
    {
        if (gFlagIrq)
        {
            PC03_TOG();
gFlagIrq = FALSE;
        }
    }
}
/**
* @brief LED I/O初始化
*
*/
void LED_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure = {0};
    //打开GPIOC时钟
    REGBITS_SET(CW_SYSCTRL->AHBEN, SYSCTRL_AHBEN_GPIOC_Msk);
    /* Configure the GPIO_LED pin */
GPIO_InitStructure.Pins = GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOC, &GPIO_InitStructure);
    //LEDs are off.
    PC02_SETLOW();
    PC03_SETLOW();
}
//LVD中断服务函数
void LVD_IRQHandler(void)
{
LVD_ClearIrq();      //清除中断标志
gFlagIrq = TRUE;     //将gFlagIrq赋值为TURE
}
根据上述例程可以得到在PA00的输入电压值低于2.02v或高于2.02v的瞬间时刻,LVD会产生中断,PC03的输出电平会产生翻转,可利用CW32L083的开发板和一根杜邦线,将PA00和DVCC连接,在连接上的时刻以及拔掉杜邦线的时刻,LED1的状态会发生翻转。

使用特权

评论回复
沙发
gaoyang9992006| | 2023-5-26 09:41 | 只看该作者
是不是这个中断可以用于断电保存数据。

使用特权

评论回复
板凳
duo点| | 2023-6-5 11:47 | 只看该作者
支持一下,学习了

使用特权

评论回复
地板
caigang13| | 2023-6-7 18:57 | 只看该作者
这个功能主要在电池供电模式下比较实用。

使用特权

评论回复
5
rosemoore| | 2023-6-10 13:52 | 只看该作者
低电压检测复位有什么作用              

使用特权

评论回复
6
kkzz| | 2023-6-10 14:05 | 只看该作者
低压检测是可以通过下载软件配置的吗

使用特权

评论回复
7
zerorobert| | 2023-6-10 15:54 | 只看该作者
通过配置LVD阈值和使能LVD功能,可以在电压低于设定阈值时自动复位或中断处理,从而实现快速响应和有效恢复。

使用特权

评论回复
8
tabmone| | 2023-6-10 16:06 | 只看该作者
在使用低电压检测器时,需要设置合理的阈值和触发方式,以避免误报或漏报情况的出现。

使用特权

评论回复
9
geraldbetty| | 2023-6-10 16:14 | 只看该作者
什么单片机内集成了低电压复位功能和低电压监测功能吗

使用特权

评论回复
10
ccook11| | 2023-6-10 16:20 | 只看该作者
内置了低电压检测器 ,可以实现对芯片电源电压的监测和保护。

使用特权

评论回复
11
mmbs| | 2023-6-10 16:37 | 只看该作者
CW32R030C8低电压检测器可以有效地保护系统免受电源不稳定性和波动的影响,提高系统的可靠性和稳定性。

使用特权

评论回复
12
sanfuzi| | 2023-6-10 16:54 | 只看该作者
想用单片机做电压和电流量的检测,有哪些芯片好用

使用特权

评论回复
13
primojones| | 2023-6-10 17:00 | 只看该作者
如何检测隔离电源端电压              

使用特权

评论回复
14
ingramward| | 2023-6-10 17:28 | 只看该作者
可以实现在供电电源电压低于一定阈值时进行自动复位或中断处理,以避免因电压不稳定而导致的系统故障和数据丢失。

使用特权

评论回复
15
dspmana| | 2023-6-10 17:34 | 只看该作者
单片机怎么进行低压检测              

使用特权

评论回复
16
kkzz| | 2023-6-10 17:53 | 只看该作者
在处理LVD中断时,还需要考虑系统资源和安全性等方面的问题,以保证系统运行的可靠性和稳定性。

使用特权

评论回复
17
jtracy3| | 2023-6-13 20:40 | 只看该作者
单片机掉电复位(BOR)模块有什么作用

使用特权

评论回复
18
georgeliu2016| | 2023-7-1 12:43 | 只看该作者
功能实用,挺不错。

使用特权

评论回复
19
OKAKAKO| | 2023-8-27 22:42 | 只看该作者
LVD功能很实用,能够快速进行电压确认并进行防错

使用特权

评论回复
20
weifeng90| | 2023-9-14 08:23 | 只看该作者
这个功能可以用来做掉电保存。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

36

帖子

0

粉丝