CW32的LVD低電壓檢測器適用于監(jiān)測VDDA電源電壓或外部引腳輸入電壓,當(dāng)被監(jiān)測電壓與LVD閾值的比較結(jié)果滿足觸發(fā)的條件時(shí),LVD將會(huì)產(chǎn)生中斷或者復(fù)位信號(hào),通常用來處理一些緊急任務(wù)。LVD產(chǎn)生的中斷或復(fù)位標(biāo)志,只能通過軟件程序清零,并且只有當(dāng)中斷或復(fù)位標(biāo)志被清零后,在再次達(dá)到觸發(fā)條件時(shí),LVD才能再次產(chǎn)生中斷或復(fù)位信號(hào)。在本文中以CW32L083系列為例,介紹LVD的基本功能和使用例程。
LVD的基本功能介紹:
1、4路監(jiān)測電壓源
VDDA電源電壓,PA00引腳輸入,PB00引腳輸入,PB11引腳輸入
2、16階閾值電壓,范圍2.02V-3.76V
3、3種觸發(fā)條件,可以組合使用
電平觸發(fā):電壓低于閾值
下降沿觸發(fā):電壓跌落到閾值以下的下降沿
上升沿觸發(fā):電壓回升到閾值以上的上升沿
4、可觸發(fā)產(chǎn)生中斷或復(fù)位信號(hào),二者不能同時(shí)產(chǎn)生
5、8階濾波可配置
6、支持遲滯功能
7、支持低功耗模式下運(yùn)行,中斷喚醒MCU
通過LVD的控制寄存器LVD_CR0的SOURCE位域來選擇LVD模塊監(jiān)控的電壓(VDDA電源/ PA00引腳/PB00引腳/PB11引腳),在監(jiān)測外部引腳電壓時(shí),需將對(duì)應(yīng)的GPIO端口配置為模擬輸入模式(GPIOx_ANALOG.PINy = 1)。
LVD的比較結(jié)果可以從PA01/PA08/PC12/PE02/PF02腳輸出,在此之前,需將對(duì)應(yīng)的GPIO口配置為數(shù)字輸出模式,同時(shí)選擇端口位LVDOUT復(fù)用功能。
LVD 內(nèi)置的電壓比較器具有遲滯功能,只有當(dāng)被監(jiān)測電壓高于或低于閾值電壓達(dá)到 20mV 時(shí),比較器輸出信號(hào)才會(huì)發(fā)生翻轉(zhuǎn),可避免當(dāng) LVD 的監(jiān)測電壓在閾值電壓附近時(shí),電壓比較器的輸出結(jié)果發(fā)生頻繁翻轉(zhuǎn),增強(qiáng)系統(tǒng)抗干擾能力。具體波形如下圖所示:
LVD的閾值電壓根據(jù)LVD控制寄存器LVD_CR0的VTH位控制。
LVD支持?jǐn)?shù)字濾波功能,可以增強(qiáng)系統(tǒng)的魯棒性(系統(tǒng)在一定的參數(shù)抖動(dòng)下,維持起某些性能的特性),可以將LVD電壓比較的輸出結(jié)果信號(hào)進(jìn)行數(shù)字濾波,小于濾波寬度的信號(hào)被濾除,不會(huì)被觸發(fā)中斷或復(fù)位,如下圖所示,圖中兩處噪音或其他信號(hào)就被濾除了。
通過設(shè)置控制寄存器LVD_CR1的FLTEN位域,可以使能數(shù)字濾波模塊,當(dāng)將該位設(shè)置為1的時(shí)候,會(huì)使能數(shù)字濾波模塊。
通過設(shè)置控制寄存器 LVD_CR1 的 FLTCLK 位域可以選擇數(shù)字濾波的時(shí)鐘:
? FLTCLK 位為 1,選擇 HSIOSC 作為濾波時(shí)鐘
? FLTCLK 位為 0,選擇內(nèi)置 RC 振蕩器時(shí)鐘作為濾波時(shí)鐘,其頻率約 150kHz
控制寄存器 LVD_CR1 的 FLTTIME 位域用于選擇數(shù)字濾波的時(shí)鐘個(gè)數(shù),如下表所示:
從 LVD 狀態(tài)寄存器 LVD_SR 的 FLTV 位域,可以讀出經(jīng) LVD 數(shù)字濾波后的信號(hào)電平;當(dāng) GPIO 的功能復(fù)用為 LVD_OUT 時(shí),數(shù)字濾波后的信號(hào)就可以從 GPIO 輸出,以方便觀察測量。
LVD 支持在低功耗模式下工作,中斷輸出可將芯片從低功耗模式下喚醒。當(dāng)被監(jiān)測電壓與 LVD 閾值的比較結(jié)果滿足觸發(fā)條件時(shí),可產(chǎn)生中斷或復(fù)位信號(hào)。產(chǎn)生中斷還是復(fù)位信號(hào)由控制寄存器 LVD_CR0 的 ACTION 位域控制:
? ACTION 為 1,LVD 觸發(fā)產(chǎn)生復(fù)位 #define LVD_Action_Reset ((uint32_t)0x00000002)
? ACTION 為 0,LVD 觸發(fā)產(chǎn)生中斷 #define LVD_Action_Irq ((uint32_t)0x00000000)
LVD可以通過設(shè)置控制寄存器 LVD_CR0 的 IE 位域?yàn)?1,使能 LVD 中斷,滿足觸發(fā)條件時(shí)將產(chǎn)生 LVD 中斷,中斷標(biāo)志位 LVD_SR.INTF 會(huì)被硬件置 1,用戶可以向 INTF 位寫 0,清除中斷標(biāo)志。設(shè)置控制寄存器 LVD_CR1 的 LEVEL、FALL、RISE 位域,可選擇不同的中斷或復(fù)位觸發(fā)方式,三者可組合使用:
? LEVEL 為 1,被監(jiān)測電壓低于閾值時(shí)觸發(fā)中斷或產(chǎn)生復(fù)位
? FALL 為 1,被監(jiān)測電壓跌落到閾值以下的下降沿觸發(fā)中斷或產(chǎn)生復(fù)位
? RISE 為 1,被監(jiān)測電壓回升到閾值以上的上升沿觸發(fā)中斷或產(chǎn)生復(fù)位
LVD使用例程介紹:
根據(jù)上述內(nèi)容,可以配置一個(gè)關(guān)于CW32L083的電壓監(jiān)測例程,LVD的輸入通道設(shè)置為PA00,輸出端口為PA08,門限電壓為2.02V,利用LVD的中斷實(shí)現(xiàn)當(dāng)LVD輸入通道電壓低于或者高于門限電壓時(shí)刻(利用上升沿和下降沿),PC03輸出電平翻轉(zhuǎn)一次。
voidLVD_PortInit(void) { GPIO_InitTypeDefGPIO_InitStructure={0}; //打開GPIOA時(shí)鐘 __RCC_GPIOA_CLK_ENABLE(); //將PA08設(shè)置為LVD比較結(jié)果輸出 GPIO_InitStructure.Pins=GPIO_PIN_8; GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; GPIO_Init(CW_GPIOA, GPIO_InitStructure); //將PA08復(fù)用為LVD比較結(jié)果輸出 PA08_AFx_LVDOUT(); //將PA00設(shè)置為LVD的輸入口 PA00_ANALOG_ENABLE(); } intmain(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基準(zhǔn)電壓為2.02v LVD_InitStruct.LVD_FilterEn=LVD_Filter_Enable;//LVD濾波模塊開啟 LVD_InitStruct.LVD_FilterClk=LVD_FilterClk_RC150K;//LVD濾波時(shí)鐘為150KHz LVD_InitStruct.LVD_FilterTime=LVD_FilterTime_4095Clk; LVD_Init( LVD_InitStruct); LVD_TrigConfig(LVD_TRIG_FALL|LVD_TRIG_RISE,ENABLE);//LVD中斷為上升沿和下降沿觸發(fā) LVD_EnableIrq(LVD_INT_PRIORITY); LVD_ClearIrq(); FirmwareDelay(4800); LVD_Enable();//LVD使能 while(1) { if(gFlagIrq) { PC03_TOG(); gFlagIrq=FALSE; } } } /** *@briefLEDI/O初始化 * */ voidLED_Init(void) { GPIO_InitTypeDefGPIO_InitStructure={0}; //打開GPIOC時(shí)鐘 REGBITS_SET(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOC_Msk); /*ConfiguretheGPIO_LEDpin*/ GPIO_InitStructure.Pins=GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; GPIO_Init(CW_GPIOC, GPIO_InitStructure); //LEDsareoff. PC02_SETLOW(); PC03_SETLOW(); } //LVD中斷服務(wù)函數(shù) voidLVD_IRQHandler(void) { LVD_ClearIrq();//清除中斷標(biāo)志 gFlagIrq=TRUE;//將gFlagIrq賦值為TURE }
根據(jù)上述例程可以得到在PA00的輸入電壓值低于2.02v或高于2.02v的瞬間時(shí)刻,LVD會(huì)產(chǎn)生中斷,PC03的輸出電平會(huì)產(chǎn)生翻轉(zhuǎn),可利用CW32L083的開發(fā)板和一根杜邦線,將PA00和DVCC連接,在連接上的時(shí)刻以及拔掉杜邦線的時(shí)刻,LED1的狀態(tài)會(huì)發(fā)生翻轉(zhuǎn)。
來源:武漢芯源半導(dǎo)體
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635400 -
mcu
+關(guān)注
關(guān)注
146文章
17149瀏覽量
351224 -
檢測器
+關(guān)注
關(guān)注
1文章
864瀏覽量
47689 -
武漢芯源
+關(guān)注
關(guān)注
1文章
66瀏覽量
256
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論