0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32 低电压检测器介绍

武汉芯源半导体有限公司 2022-12-08 14:05 次阅读

低电压检测器(LVD)适用于监测VDDA电源电压或外部引脚输入电压,当被监测电压与LVD阈值的比较结果满足触发的条件时,LVD将会产生中断或者复位信号,通常用来处理一些紧急任务。LVD产生的中断或复位标志,只能通过软件程序清零,只有当中断或复位标志被清零后,在再次达到触发条件时,LVD才能再次产生中断或复位信号。本文以CW32L083为例,介绍LVD的使用方法。

低电压检测器(LVD)的主要特性:

1. 4路监测电压源:VDDA电源电压,PA00、PB00、PB11引脚输入

2. 16阶阈值电压,范围2.02V-3.76V

3. 3种触发条件,可以组合使用

电平触发:电压低于阈值

下降沿触发:电压跌落到阈值以下的下降沿

上升沿触发:电压回升到阈值以上的上升沿

4. 可触发产生中断或复位信号,二者不能同时产生

5. 8阶滤波可配置

6. 支持迟滞功能

7. 支持低功耗模式下运行,中断唤醒MCU

pYYBAGORfImAegxGAABA_d05W_E662.jpg

上图为CW32L083低电压检测器(LVD)的功能框图,LVD不仅可以监测VDDA电源电压,也可以监测外部引脚 (PA00、PB00、PB11)输入电压,通过控制寄存器LVD_CR0的SOURCE位域来选择,当使用外部引脚来监测电压时,需将对应的GPIO端口配置为模拟输入模式(GPIOx_ANALOG.PINy = 1)。

LVD的输出结果可以从PA01/PA08/PC12/PE02/PF02引脚输出,需将对应的GPIO口配置为数字输出模式,同时选择功能复用,下面为具体配置

//LVD I/O口初始化

void LVD_PortInit(void)

{

GPIO_InitTypeDef GPIO_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();

}

迟滞功能

LVD 内置的电压比较器具有迟滞功能,可避免当 LVD 的被监测电压在阈值电压附近时,电压比较器的输出结果发生频繁翻转,增强系统抗干扰能力。只有当被监测电压高于或低于阈值电压达到20mV时,比较器输出信号才会发生翻转。具体波形如下图所示:

pYYBAGORfIqAQx8UAAA8Znz2QEc664.jpg

LVD的阈值电压根据LVD控制寄存器LVD_CR0的VTH位值决定,有效值0 ~ 15,如下表所示:

poYBAGORfIqALUXtAADCN_mLJ5M121.jpg

数字滤波功能

CW32L083的LVD支持数字滤波功能,以增强系统的鲁棒性,可将LVD电压比较的输出结果信号进行数字滤波,小于滤波宽度的信号被滤除,不会触发中断或复位,如下图所示:

poYBAGORfIqADizyAAAUCrccdZ0989.jpg

通过设置控制寄存器LVD_CR1的FLTEN位域为1,可使能数字滤波模块。设置控制寄存器 LVD_CR1 的 FLTCLK 位域可以选择数字滤波的时钟:

• FLTCLK位为1,选择HSIOSC作为滤波时钟

• FLTCLK位为0,选择内置RC振荡器时钟作为滤波时钟,其频率约150kHz

相关的宏定义如下所示:

#define LVD_FilterClk_RC150K ((uint32_t)0x00000000)

#define LVD_FilterClk_HSI ((uint32_t)0x00000010)

控制寄存器LVD_CR1的FLTTIME位域用于选择数字滤波的时钟个数,如下表所示:

poYBAGORfImAdALEAABYlXa0mBU740.jpg

从LVD状态寄存器LVD_SR的FLTV位域,可以读出经LVD数字滤波后的信号电平;当 GPIO 的功能复用为LVD_OUT时,数字滤波后的信号就可以从GPIO输出,以方便观察测量。

LVD中断

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_CR0的IE位域为1,使能LVD中断,满足触发条件时将产生LVD中断,中断标志位LVD_SR.INTF会被硬件置1,用户可以向INTF位写0,清除中断标志。设置控制寄存器LVD_CR1的LEVEL、FALL、RISE位域,可选择不同的中断或复位触发方式,三者可组合使用:

• LEVEL为1,被监测电压低于阈值时触发中断或产生复位

• FALL为1,被监测电压跌落到阈值以下的下降沿触发中断或产生复位

• RISE为1,被监测电压回升到阈值以上的上升沿触发中断或产生复位

相关的寄存器具体位域可参考下表:

pYYBAGORfIqAER7RAAOHOD8IGzE857.jpgpoYBAGORfImARo6NAAULbX0Gxk0476.jpgpoYBAGORfImAG3ZQAAGiLz3P118924.jpg

根据上述内容,简单介绍配置电压监测例程。LVD的输入通道设置为PA00,输出端口为PA08,门限电压为2.02V,利用LVD的中断实现当LVD输入通道电压低于或者高于门限电压时刻(利用上升沿和下降沿),PC03输出电平翻转一次。

void LVD_PortInit(void)

{

GPIO_InitTypeDef GPIO_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_InitTypeDef LVD_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_InitTypeDef GPIO_InitStructure = {0};

//打开GPIOC时钟

__RCC_GPIOC_CLK_ENABLE();

/* 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,使main函数中的if判断语句生效

}

上述例程中的LVD_PortInit()为前文LVD的IO口配置函数,下面例程为通过寄存器配置LVD,具体功能与上述例程一样。

void LVD_PortInit(void)

{

GPIO_InitTypeDef GPIO_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)

{

//LED初始化

LED_Init();

//配置测试IO口

LVD_PortInit();

CW_LVD->CR0_f.SOURCE=1; //选择待监测的电压来源为PA00

CW_LVD->CR0_f.VTH=0; //选择阈值电压为2.02V

CW_LVD->CR1_f.FLTTIME=7; //选择 LVD 滤波宽度为4095个时钟周期信号

CW_LVD->CR1_f.FLTCLK=0; //选择滤波时钟为150KHz的RC振荡时钟

CW_LVD->CR1_f.FLTEN=1; //使能 LVD 滤波

CW_LVD->CR1_f.RISE=1; //下降沿触发

CW_LVD->CR1_f.FALL=1; //上升沿触发

CW_LVD->CR0_f.ACTION=0; //选择LVD触发为中断

CW_LVD->CR0_f.IE=1; //使能LVD中断

NVIC_ClearPendingIRQ(LVD_IRQn); //使能NVIC中断向量表中的LVD中断

NVIC_SetPriority(LVD_IRQn, 3);

NVIC_EnableIRQ(LVD_IRQn);

FirmwareDelay(4800);

CW_LVD->CR0_f.EN=1; //使能LVD

CW_LVD->SR_f.INTF=0; //清除LVD中断标志

while (1)

{

if (gFlagIrq)

{

PC03_TOG();

gFlagIrq = FALSE;

}

}

}

/**@brief LED I/O初始化**/

void LED_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure = {0};

//打开GPIOC时钟

__RCC_GPIOC_CLK_ENABLE();

/* 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,使main函数中的if判断语句生效

}

上述例程功能为在PA00的输入电压值低于2.02v或高于2.02v的时刻,LVD会产生中断,PC03的输出电平会产生翻转,可利用CW32L083的开发板和数字电源进行测试,将PA00和数字电源连接,调节数字电源输出电压,在升高至门限电压以上或者下降至门限电压以下,LED1的状态会发生翻转。

LVD的相关函数及功能,可参考下述介绍。

1.void LVD_EnableNvic(uint8_t intPriority);

//使能NVIC中LVD中断

2.void LVD_DisableNvic(void);

//禁止NVIC中LVD中断

3.void LVD_TrigConfig(uint16_t LVD_TRIG, FunctionalState NewState);

//配置LVD中断/系统复位触发方式

4.void LVD_EnableIrq(uint8_t intPriority);

//使能LVD中断

5.void LVD_DisableIrq(void);

//禁止LVD中断

6.void LVD_ClearIrq(void);

//清除LVD中断标志

7.boolean_t LVD_GetIrqStatus(void);

//获取LVD中断标志

8.FlagStatus LVD_GetFlagStatus(uint16_t LVD_FLAG);

//获取LVD指定的状态位

9.boolean_t LVD_GetFilterResult(void);

//获取Filter结果

10.void LVD_Init(LVD_InitTypeDef* LVD_InitStruct);

//LVD初始化

11.void LVD_DeInit(void);

//LVD去初始化

12.void LVD_Enable(void);

//使能LVD

13.void LVD_Disable(void);

//停止LVD

CW32的LVD的使用介绍到此结束。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7481

    浏览量

    150997
  • 单片机
    +关注

    关注

    6032

    文章

    44511

    浏览量

    632629
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16965

    浏览量

    350186
收藏 人收藏

    评论

    相关推荐

    电路检测器和电流检测器的区别

    1. 引言 电路检测器和电流检测器是电子工程中常用的工具,它们帮助工程师和技术人员诊断和监测电子设备的性能。 2. 电路检测器 定义和功能 :电路检测器是一种用于
    的头像 发表于 07-19 16:34 610次阅读

    【项目展示】基于CW32的遥控循迹小车

    CW32循迹小车.zip_免费高速下载|百度网盘-分享无限制  一、概述 CW32循迹、遥控小车具有循迹和遥控两种功能,小车的硬件模块由CW32F030C8T6小蓝板、智能小车控制底板、BT04-E
    的头像 发表于 05-31 17:33 1208次阅读
    【项目展示】基于<b class='flag-5'>CW32</b>的遥控循迹小车

    CW32数字电压电流表软件进阶教程-1.电压电流同时显示

    基于[CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)],可以对电压电流进行同时采集显示。 电流检测电路如下: 本项目设计的采样电流为3A,选择的采样电阻为100m
    的头像 发表于 05-31 15:50 614次阅读
    <b class='flag-5'>CW32</b>数字<b class='flag-5'>电压</b>电流表软件进阶教程-1.<b class='flag-5'>电压</b>电流同时显示

    CW32数字电压电流表软件教程-实验五:ADC采样及显示

    的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 6.1.2. CW32的ADC
    的头像 发表于 05-31 15:28 502次阅读
    <b class='flag-5'>CW32</b>数字<b class='flag-5'>电压</b>电流表软件教程-实验五:ADC采样及显示

    CW32数字电压电流表软件教程-实验四:数码管动态显示

    显示不同的值需要用到CW32的定时功能,在定时的中断服务程序里面执行显示刷新的动作。有关CW32的定时和中断的相关知识请查看链接:【
    的头像 发表于 05-31 15:23 452次阅读
    <b class='flag-5'>CW32</b>数字<b class='flag-5'>电压</b>电流表软件教程-实验四:数码管动态显示

    微波检测器的原理是什么 微波检测器的工作原理和用途

    微波检测器是一种利用微波技术进行检测的设备,广泛应用于通信、雷达、遥感、医疗等领域。本文将详细介绍微波检测器的原理、工作原理和用途。 一、微波检测器
    的头像 发表于 05-27 16:09 1359次阅读

    微波检测器优缺点 微波检测器的功能和作用

    微波检测器是一种利用微波技术对物体进行检测的设备。它广泛应用于军事、工业、医疗、交通等领域。本文将详细介绍微波检测器的优缺点、功能和作用。 一、微波
    的头像 发表于 05-27 15:42 1338次阅读

    CW32量产烧录工具

    本节主要介绍CW32微控制的烧录CW-Writer,以及与之配合的软件CW-Programm
    的头像 发表于 04-25 15:22 1304次阅读
    <b class='flag-5'>CW32</b>量产烧录工具

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 1867次阅读
    <b class='flag-5'>CW32</b>快速开发入门

    电压检测器芯片IC FS61C25MR介绍

    FS61C25MR电压检测器芯片IC是泛海微公司生产的一款高性能、高精度的电压检测器。该芯片采用CMOS工艺,具有N沟道特性,适用于各种需要电压
    的头像 发表于 03-17 22:51 1509次阅读
    <b class='flag-5'>电压</b><b class='flag-5'>检测器</b>芯片IC FS61C25MR<b class='flag-5'>介绍</b>

    全面梳理电压检测器的定义、使用技巧和工作原理知识点

    电压检测器是用于监控电源线的电压,当低于或高于设定电压时输出检测信号的IC。还可把电压
    的头像 发表于 01-02 15:09 3980次阅读
    全面梳理<b class='flag-5'>电压</b><b class='flag-5'>检测器</b>的定义、使用技巧和工作原理知识点

    基于CW32的门禁综合系统

    基于CW32单片机的门禁综合系统是一款功能强大的智能门禁解决方案,它提供了三种开锁方式:密码开锁、指纹开锁和刷卡开锁,为用户提供方便、安全的门禁控制。该系统的核心控制采用了CW32单片机,具备
    的头像 发表于 12-28 11:43 1658次阅读
    基于<b class='flag-5'>CW32</b>的门禁综合系统

    CW32单片机在智能马桶的应用介绍

    和调节。本文将介绍CW32单片机在智能马桶的详细应用。图:CW32的智能马桶控制板CW32单片机在智能马桶的应用介绍1.温度感应与控制智能马
    的头像 发表于 12-20 10:09 574次阅读
    <b class='flag-5'>CW32</b>单片机在智能马桶的应用<b class='flag-5'>介绍</b>

    CW32单片机在智能马桶的应用介绍

    和调节。本文将介绍CW32单片机在智能马桶的详细应用。 图:CW32的智能马桶控制板 CW32单片机在智能马桶的应用介绍 1.温度感应与控
    发表于 12-20 10:06

    CW32单片机在智能马桶的应用介绍

    智能科技的迅速发展使得我们的日常生活变得更加便捷和舒适。智能马桶作为其中一种智能家居产品,通过单片机接受和处理来自传感的数据,然后通过控制模块对智能马桶的各项功能进行控制,实现对智能马桶的全面控制和调节。本文将介绍CW32单片
    的头像 发表于 12-20 10:02 726次阅读
    <b class='flag-5'>CW32</b>单片机在智能马桶的应用<b class='flag-5'>介绍</b>