CW32L083 內(nèi)部集成 2 個(gè)模擬電壓比較器(VC),用于比較兩路模擬輸入電壓,并將比較結(jié)果從引腳輸出。兩路信號(hào)的正端支持8路外部模擬輸入,負(fù)端既支持外部輸入,也支持內(nèi)部電壓基準(zhǔn)等四種內(nèi)部電壓參考。比較結(jié)果輸出具有濾波功能、遲滯窗口功能,以及極性選擇。支持比較中斷,可用于低功耗模式下喚醒 MCU。
模擬電壓比較器主要特性
? 雙路模擬電壓比較器 VC1、VC2
? 內(nèi)部64階電阻分壓器
? 多達(dá)8路外部模擬信號(hào)輸入
? 4路片內(nèi)模擬輸入信號(hào)
- 內(nèi)置電阻分壓器輸出電壓
- 內(nèi)置溫度傳感器輸出電壓
- 內(nèi)置1.2V基準(zhǔn)電壓
- ADC參考電壓
? 可選擇輸出極性
? 支持遲滯窗口比較功能
? 3種中斷觸發(fā)方式,可組合使用
- 高電平觸發(fā)
- 上升沿觸發(fā)
- 下降沿觸發(fā)
? 支持低功耗模式下運(yùn)行,中斷喚醒 MCU
下圖為模擬電壓比較器的功能框圖:
VC模擬電壓比較器將兩路模擬信號(hào)比較時(shí)可配置多種參數(shù),如VC1_CR0.EN和VC1_CR0.HYS位分別控制VC使能及VC遲滯窗口配置。VC1_CR0.POL控制輸出結(jié)果極性,后端還有窗口比較功能配置及數(shù)字濾波模塊的配置。
VC1、VC2 的正負(fù)端輸入選擇,由控制寄存器 VCx_CR0 的 INP、INN 位域選擇,如下表所示:
模擬電壓比較器支持 8路外部模擬信號(hào)輸入,用戶必須將對(duì)應(yīng) GPIO端口配置為模擬功能(GPIOx_ANALOG.PINy = 1)。模擬電壓比較器支持將比較結(jié)果從引腳輸出,用戶必須將對(duì)應(yīng) GPIO 端口配置為數(shù)字輸出,同時(shí)選擇功能復(fù)用。VC1、VC2 支持的輸入輸出引腳如下表所示:
模擬電壓比較器還具有延遲/響應(yīng)時(shí)間配置,從VC使能或VC的正負(fù)兩端輸入電壓變化,到電壓比較器輸出正確比較結(jié)果的時(shí)間,被定義為比較器的延遲/響應(yīng)時(shí)間。延遲/響應(yīng)時(shí)間由控制寄存器 VCx_CR0 的 RESP 位域配置,響應(yīng)時(shí)間值從200ns到20μs四檔可調(diào)。
模擬電壓比較器可進(jìn)行輸出極性選擇,由控制寄存器VCx_CR0的POL位域設(shè)置,POL為1,即正端大于負(fù)端時(shí)VCx輸出低電平;POL為0,正端大于負(fù)端時(shí)VCx輸出高電平。
模擬電壓比較器具有數(shù)字濾波功能,電壓比較器內(nèi)置的數(shù)字濾波器,用于對(duì)電壓比較器的輸出信號(hào)進(jìn)行數(shù)字濾波,由控制寄存器VCx_CR1的FLTEN位域控制,F(xiàn)LTEN為1使能數(shù)字濾波,F(xiàn)LTEN為0禁止數(shù)字濾波。
模擬電壓比較器支持遲滯功能,使用遲滯功能后,比較器的輸出結(jié)果不會(huì)隨輸入信號(hào)的變化而立即翻轉(zhuǎn),而是在兩路輸入信號(hào)的偏移值高于或低于遲滯閾值電壓后才發(fā)生翻轉(zhuǎn)。遲滯閾值電壓由控制寄存器VCx_CR0的HYS位域決定,配置為00時(shí),沒(méi)有遲滯;配置為01時(shí)遲滯窗口大約10mV;配置為10時(shí),遲滯窗口大約為20mV;配置為11時(shí),遲滯窗口大約30mV。
模擬電壓比較器支持窗口比較功能,可將VC1和VC2的比較結(jié)果進(jìn)行異或操作后輸出,由控制寄存器VCx_CR0的WINDOW位域使能。WINDOW為1時(shí),VCx_OUTW信號(hào)為 VC1_OUTP信號(hào)與VC2_OUTP 信號(hào)的異或值;WINDOW為0時(shí),VCx_OUTW信號(hào)與VCx_OUTP 信號(hào)電平相同。
模擬電壓比較器支持BLANK窗口功能,在保持VCx模塊工作的同時(shí),如果想暫時(shí)停止電壓比較功能,或者為避免某些應(yīng)用系統(tǒng)(比如電機(jī)控制)中,被監(jiān)測(cè)信號(hào)短時(shí)間的合理波動(dòng)造成電壓比較器的輸出電平發(fā)生不必要的翻轉(zhuǎn),本芯片的電壓比較器增加了BLANK窗口功能,即當(dāng)指定的外部觸發(fā)條件啟動(dòng)BLANK窗口時(shí),在設(shè)定的BLANK窗口期內(nèi),不進(jìn)行電壓比較,電壓比較器的輸出電平保持當(dāng)前電平狀態(tài)。BLANK窗口期之后,電壓比較器恢復(fù)正常工作。BLANK窗口持續(xù)時(shí)間,由控制寄存器 VCx_CR1的BLANKFLT位域配置。BLANK窗口的觸發(fā)啟動(dòng)條件,由控制寄存器VCx_CR1的 BLANKCH1B、BLANKCH2B、BLANKCH3B位域配置,分別由ATIM的CH1B、CH2B、CH3B上升沿觸發(fā)啟動(dòng)BLANK窗口。
CW32L083 的電壓比較器支持在低功耗模式下工作,比較中斷可將芯片從低功耗模式下喚醒。設(shè)置控制寄存器 VCx_CR0 的 IE 位域?yàn)?1,使能 VCx 中斷,產(chǎn)生中斷時(shí)狀態(tài)寄存器 VCx_SR 的中斷標(biāo)志位 INTF 會(huì) 被硬件置 1,用戶可以向 INTF 位寫(xiě) 0,清除中斷標(biāo)志。
設(shè)置控制寄存器 VCx_CR1 的 HIGHIE、RISEIE、FALLIE 位域,可選擇不同的中斷觸發(fā)方式:
? HIGHIE 為 1,VCx_OUT 輸出信號(hào)高電平觸發(fā)中斷
? RISEIE 為 1,VCx_OUT 輸出信號(hào)上升沿觸發(fā)中斷
? FALLIE 為 1,VCx_OUT 輸出信號(hào)下降沿觸發(fā)中斷
根據(jù)上述內(nèi)容介紹以下例程,通過(guò)VC模塊輸出信號(hào)的上升沿/下降沿觸發(fā)中斷功能。
//VC I/O初始化
void VC_PortInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
//打開(kāi)GPIO時(shí)鐘
REGBITS_SET( CW_SYSCTRL->AHBEN, SYSCTRL_AHBEN_GPIOA_Msk );
//打開(kāi)VC時(shí)鐘
REGBITS_SET( CW_SYSCTRL->APBEN2, SYSCTRL_APBEN2_VC_Msk );
//set PA11 as output
GPIO_InitStructure.Pins = GPIO_PIN_11;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOA, &GPIO_InitStructure);
//set PA11 as VC output
PA11_AFx_VC1OUT();
//set PA00 as VC1_CH0 P-INPUT
PA00_ANALOG_ENABLE();
//set PA01 as VC1_CH1 N-INPUT
PA01_ANALOG_ENABLE();
}
int main(void)
{
VC_InitTypeDef VC_InitStruct = {0};
VC_BlankTypeDef VC_BlankStruct = {0};
VC_OutTypeDef VC_OutStruct = {0};
//LED初始化
LED_Init();
//配置測(cè)試IO口
VC_PortInit();
//VC通道初始化
VC_InitStruct.VC_InputP = VC_InputP_Ch0;//將VC正端輸入為PA00的輸入信號(hào)
VC_InitStruct.VC_InputN = VC_InputN_Bgr1P2; //將VC負(fù)端輸入設(shè)置為內(nèi)部1.2V基準(zhǔn)電壓
VC_InitStruct.VC_Hys = VC_Hys_10mV;//將VC遲滯功能配置為10mV
VC_InitStruct.VC_Resp = VC_Resp_High;//VC反應(yīng)速度為高速
VC_InitStruct.VC_FilterEn = VC_Filter_Enable;//VC數(shù)字濾波模塊開(kāi)啟
VC_InitStruct.VC_FilterClk = VC_FltClk_RC150K;//VC數(shù)字濾波時(shí)鐘為150KHz的RC振蕩器
VC_InitStruct.VC_FilterTime = VC_FltTime_4095Clk;//VC的數(shù)字濾波時(shí)間配置為濾波小于4095個(gè)時(shí)鐘信號(hào)
VC_InitStruct.VC_Window = VC_Window_Disable;//VC窗口比較功能關(guān)閉
VC_InitStruct.VC_Polarity = VC_Polarity_Low;
VC1_ChannelInit(&VC_InitStruct);
//VC Blank窗口初始化
VC1VC2_BlankInit(&VC_BlankStruct);
VC1_BlankCfg(&VC_BlankStruct);
//VC輸出連接初始化
VC1VC2_OutInit(&VC_OutStruct);
VC1_OutputCfg(&VC_OutStruct);
//VC中斷設(shè)置
VC1_ITConfig(VC_IT_FALL | VC_IT_RISE, ENABLE);
VC1_EnableIrq(VC_INT_PRIORITY);
VC1_ClearIrq();
VC1_EnableChannel();
while (1)
{
if(gFlagIrq)
{
PC03_TOG();
gFlagIrq = FALSE;
}
}
}
//LED I/O初始化
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
//打開(kāi)GPIOC時(shí)鐘
REGBITS_SET(CW_SYSCTRL->AHBEN, SYSCTRL_AHBEN_GPIOC_Msk);
GPIO_InitStructure.Pins = GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOC, &GPIO_InitStructure);
//LED的初始狀態(tài)為滅
PC02_SETLOW();
PC03_SETLOW();
}
//VC1的中斷服務(wù)函數(shù)
void VC1_IRQHandler(void)
{
VC1_ClearIrq();
gFlagIrq = TRUE;
}
實(shí)驗(yàn)現(xiàn)象
使用電源向PA00輸入電壓,PA11被復(fù)用為VC1的比較結(jié)果輸出引腳,當(dāng)電壓大于1.2V時(shí), PA11輸出高電平,當(dāng)PA00輸入電壓小于1.2V時(shí),PA11輸出低電平,而當(dāng)PA00的輸入電壓由1.2V以下變?yōu)?.2V以上或者從1.2V以上變?yōu)?.2V以下,LED的狀態(tài)會(huì)發(fā)生翻轉(zhuǎn)。
-
單片機(jī)
+關(guān)注
關(guān)注
6039文章
44574瀏覽量
636314 -
mcu
+關(guān)注
關(guān)注
146文章
17173瀏覽量
351628
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論