CW32L083 內部集成 2 個模擬電壓比較器(VC),用于比較兩路模擬輸入電壓,并將比較結果從引腳輸出。兩路信號的正端支持8路外部模擬輸入,負端既支持外部輸入,也支持內部電壓基準等四種內部電壓參考。比較結果輸出具有濾波功能、遲滯窗口功能,以及極性選擇。支持比較中斷,可用于低功耗模式下喚醒 MCU。
模擬電壓比較器主要特性
? 雙路模擬電壓比較器 VC1、VC2
? 內部64階電阻分壓器
? 多達8路外部模擬信號輸入
? 4路片內模擬輸入信號
- 內置電阻分壓器輸出電壓
- 內置溫度傳感器輸出電壓
- 內置1.2V基準電壓
- ADC參考電壓
? 可選擇輸出極性
? 支持遲滯窗口比較功能
? 3種中斷觸發方式,可組合使用
- 高電平觸發
- 上升沿觸發
- 下降沿觸發
? 支持低功耗模式下運行,中斷喚醒 MCU
下圖為模擬電壓比較器的功能框圖:
VC模擬電壓比較器將兩路模擬信號比較時可配置多種參數,如VC1_CR0.EN和VC1_CR0.HYS位分別控制VC使能及VC遲滯窗口配置。VC1_CR0.POL控制輸出結果極性,后端還有窗口比較功能配置及數字濾波模塊的配置。
VC1、VC2 的正負端輸入選擇,由控制寄存器 VCx_CR0 的 INP、INN 位域選擇,如下表所示:
模擬電壓比較器支持 8路外部模擬信號輸入,用戶必須將對應 GPIO端口配置為模擬功能(GPIOx_ANALOG.PINy = 1)。模擬電壓比較器支持將比較結果從引腳輸出,用戶必須將對應 GPIO 端口配置為數字輸出,同時選擇功能復用。VC1、VC2 支持的輸入輸出引腳如下表所示:
模擬電壓比較器還具有延遲/響應時間配置,從VC使能或VC的正負兩端輸入電壓變化,到電壓比較器輸出正確比較結果的時間,被定義為比較器的延遲/響應時間。延遲/響應時間由控制寄存器 VCx_CR0 的 RESP 位域配置,響應時間值從200ns到20μs四檔可調。
模擬電壓比較器可進行輸出極性選擇,由控制寄存器VCx_CR0的POL位域設置,POL為1,即正端大于負端時VCx輸出低電平;POL為0,正端大于負端時VCx輸出高電平。
模擬電壓比較器具有數字濾波功能,電壓比較器內置的數字濾波器,用于對電壓比較器的輸出信號進行數字濾波,由控制寄存器VCx_CR1的FLTEN位域控制,FLTEN為1使能數字濾波,FLTEN為0禁止數字濾波。
模擬電壓比較器支持遲滯功能,使用遲滯功能后,比較器的輸出結果不會隨輸入信號的變化而立即翻轉,而是在兩路輸入信號的偏移值高于或低于遲滯閾值電壓后才發生翻轉。遲滯閾值電壓由控制寄存器VCx_CR0的HYS位域決定,配置為00時,沒有遲滯;配置為01時遲滯窗口大約10mV;配置為10時,遲滯窗口大約為20mV;配置為11時,遲滯窗口大約30mV。
模擬電壓比較器支持窗口比較功能,可將VC1和VC2的比較結果進行異或操作后輸出,由控制寄存器VCx_CR0的WINDOW位域使能。WINDOW為1時,VCx_OUTW信號為 VC1_OUTP信號與VC2_OUTP 信號的異或值;WINDOW為0時,VCx_OUTW信號與VCx_OUTP 信號電平相同。
模擬電壓比較器支持BLANK窗口功能,在保持VCx模塊工作的同時,如果想暫時停止電壓比較功能,或者為避免某些應用系統(比如電機控制)中,被監測信號短時間的合理波動造成電壓比較器的輸出電平發生不必要的翻轉,本芯片的電壓比較器增加了BLANK窗口功能,即當指定的外部觸發條件啟動BLANK窗口時,在設定的BLANK窗口期內,不進行電壓比較,電壓比較器的輸出電平保持當前電平狀態。BLANK窗口期之后,電壓比較器恢復正常工作。BLANK窗口持續時間,由控制寄存器 VCx_CR1的BLANKFLT位域配置。BLANK窗口的觸發啟動條件,由控制寄存器VCx_CR1的 BLANKCH1B、BLANKCH2B、BLANKCH3B位域配置,分別由ATIM的CH1B、CH2B、CH3B上升沿觸發啟動BLANK窗口。
CW32L083 的電壓比較器支持在低功耗模式下工作,比較中斷可將芯片從低功耗模式下喚醒。設置控制寄存器 VCx_CR0 的 IE 位域為 1,使能 VCx 中斷,產生中斷時狀態寄存器 VCx_SR 的中斷標志位 INTF 會 被硬件置 1,用戶可以向 INTF 位寫 0,清除中斷標志。
設置控制寄存器 VCx_CR1 的 HIGHIE、RISEIE、FALLIE 位域,可選擇不同的中斷觸發方式:
? HIGHIE 為 1,VCx_OUT 輸出信號高電平觸發中斷
? RISEIE 為 1,VCx_OUT 輸出信號上升沿觸發中斷
? FALLIE 為 1,VCx_OUT 輸出信號下降沿觸發中斷
根據上述內容介紹以下例程,通過VC模塊輸出信號的上升沿/下降沿觸發中斷功能。
//VC I/O初始化
void VC_PortInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
//打開GPIO時鐘
REGBITS_SET( CW_SYSCTRL->AHBEN, SYSCTRL_AHBEN_GPIOA_Msk );
//打開VC時鐘
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();
//配置測試IO口
VC_PortInit();
//VC通道初始化
VC_InitStruct.VC_InputP = VC_InputP_Ch0;//將VC正端輸入為PA00的輸入信號
VC_InitStruct.VC_InputN = VC_InputN_Bgr1P2; //將VC負端輸入設置為內部1.2V基準電壓
VC_InitStruct.VC_Hys = VC_Hys_10mV;//將VC遲滯功能配置為10mV
VC_InitStruct.VC_Resp = VC_Resp_High;//VC反應速度為高速
VC_InitStruct.VC_FilterEn = VC_Filter_Enable;//VC數字濾波模塊開啟
VC_InitStruct.VC_FilterClk = VC_FltClk_RC150K;//VC數字濾波時鐘為150KHz的RC振蕩器
VC_InitStruct.VC_FilterTime = VC_FltTime_4095Clk;//VC的數字濾波時間配置為濾波小于4095個時鐘信號
VC_InitStruct.VC_Window = VC_Window_Disable;//VC窗口比較功能關閉
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中斷設置
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};
//打開GPIOC時鐘
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的初始狀態為滅
PC02_SETLOW();
PC03_SETLOW();
}
//VC1的中斷服務函數
void VC1_IRQHandler(void)
{
VC1_ClearIrq();
gFlagIrq = TRUE;
}
實驗現象
使用電源向PA00輸入電壓,PA11被復用為VC1的比較結果輸出引腳,當電壓大于1.2V時, PA11輸出高電平,當PA00輸入電壓小于1.2V時,PA11輸出低電平,而當PA00的輸入電壓由1.2V以下變為1.2V以上或者從1.2V以上變為1.2V以下,LED的狀態會發生翻轉。
-
單片機
+關注
關注
6035文章
44554瀏覽量
634697 -
mcu
+關注
關注
146文章
17129瀏覽量
351007
發布評論請先 登錄
相關推薦
評論