CMT2380F32模块开发18-模拟电压比较器例程

Posted andylauren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMT2380F32模块开发18-模拟电压比较器例程相关的知识,希望对你有一定的参考价值。

模拟电压比较器 VC 用于比较两个输入模拟电压的大小,并根据比较结果输出高/低电平。当“+”输入端电压高于“-”输入端电压时,电压比较器输出为高电平;当“+”输入端电压低于“-”输入端电压时,电压比较器输出为低电平。

内部集成的模拟电压比较器 VC 具有以下特性:
支持电压比较功能;
支持内部 64 阶 VCC 分压(使用分压来源电压需要大于 1.8V)
支持 8 个外部输入端口和片内 BGR 输出的参考电压作为电压比较器的输入;
支持三种软件可配置的中断触发方式:高电平触发/上升沿触发/下降沿触发;
电压比较器的输出可以作为 Base Timer 和 LPTimer 门控端口的输入;
电压比较器的输出可以作为 Advanced Timer 的刹车输入或者捕获输入;
支持在超低功耗模式下工作,电压比较器的中断输出可以将芯片从超低功耗模式下唤醒;
提供软件可配置的滤波时间以增强芯片的抗干扰能力。

电压比较器框架图

该图很明确的指出了每个比较器的输入端可以使用哪些。
滤波功能需要实际的开发中去慢慢调整了。 

例子给了三个,分别是上升沿、下降沿和电平触发。大同小异,只讲一个下降沿的就差不多了。

vc_detect_falling_irq

    Gpio_SetFunc_VC1_OUT_P32();  //配置VC输出口

    //配置IO为模拟IO口
    Gpio_SetAnalog(3, 3, TRUE);

    genChannel = VcChannel1;  //配置VC输入通道

    stcVcGeneralCfg.bDivEn = FALSE;  // 6位DAC不使能
    stcVcGeneralCfg.enDivVref = VcDivVrefAvcc;  //分压的参考电压为VCC
    stcVcGeneralCfg.u8DivVal = 0x3F;            //分压值为1

    stcVcChannelCfg.enVcChannel = genChannel;  // VC通道设置
    stcVcChannelCfg.enVcCmpDly = VcDelayoff;   //迟滞配置
    stcVcChannelCfg.enVcBiasCurrent = VcBias300na;
    stcVcChannelCfg.enVcFilterTime = VcFilter28800us;
    stcVcChannelCfg.enVcInPin_P = VcInPCh3; //P33
    stcVcChannelCfg.enVcInPin_N = AiBg1p2;
    stcVcChannelCfg.enVcOutConfig = VcOutDisable;
    stcVcChannelCfg.enVcIrqSel = VcIrqFall;
    stcVcChannelCfg.pfnAnalogCmpCb = VcIrqCallback;

    Vc_GeneralInit(&stcVcGeneralCfg);

    Vc_ChannelInit(genChannel, &stcVcChannelCfg);

    Vc_EnableFilter(genChannel);

    if (Ok != Vc_ConfigIrq(stcVcChannelCfg.enVcChannel, stcVcChannelCfg.enVcIrqSel)) 
        return 1;
    

    if (Ok != Vc_EnableIrq(stcVcChannelCfg.enVcChannel)) 
        return 1;
    

    if (Ok != Vc_EnableChannel(stcVcChannelCfg.enVcChannel)) 
        return 1;
    

用一个变阻器链接到P33,作为比较器的P端,N端配置为1.2V基准电压,也就是当改变变阻器阻值造成下降时会触发中断。

void VcIrqCallback(void)

    boolean_t bPortVal;

    Vc_DisableIrq(genChannel);

    bPortVal = Gpio_GetIO(TEST_PORT, TEST_PIN);
    Gpio_SetIO(TEST_PORT, TEST_PIN, bPortVal ^ 1u);
    gu32Cnt++;

在中断中翻转LED1。

以上是关于CMT2380F32模块开发18-模拟电压比较器例程的主要内容,如果未能解决你的问题,请参考以下文章

CMT2380F32模块开发18-模拟电压比较器例程

CMT2380F32模块开发17-ADC例程

CMT2380F32模块开发17-ADC例程

CMT2380F32模块开发17-ADC例程

CMT2380F32模块开发19-LVD例程

CMT2380F32模块开发19-LVD例程