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


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

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

    电压比较器框架图

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

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

    vc_detect_falling_irq

    1. Gpio_SetFunc_VC1_OUT_P32(); //配置VC输出口
    2. //配置IO为模拟IO口
    3. Gpio_SetAnalog(3, 3, TRUE);
    4. genChannel = VcChannel1; //配置VC输入通道
    5. stcVcGeneralCfg.bDivEn = FALSE; // 6位DAC不使能
    6. stcVcGeneralCfg.enDivVref = VcDivVrefAvcc; //分压的参考电压为VCC
    7. stcVcGeneralCfg.u8DivVal = 0x3F; //分压值为1
    8. stcVcChannelCfg.enVcChannel = genChannel; // VC通道设置
    9. stcVcChannelCfg.enVcCmpDly = VcDelayoff; //迟滞配置
    10. stcVcChannelCfg.enVcBiasCurrent = VcBias300na;
    11. stcVcChannelCfg.enVcFilterTime = VcFilter28800us;
    12. stcVcChannelCfg.enVcInPin_P = VcInPCh3; //P33
    13. stcVcChannelCfg.enVcInPin_N = AiBg1p2;
    14. stcVcChannelCfg.enVcOutConfig = VcOutDisable;
    15. stcVcChannelCfg.enVcIrqSel = VcIrqFall;
    16. stcVcChannelCfg.pfnAnalogCmpCb = VcIrqCallback;
    17. Vc_GeneralInit(&stcVcGeneralCfg);
    18. Vc_ChannelInit(genChannel, &stcVcChannelCfg);
    19. Vc_EnableFilter(genChannel);
    20. if (Ok != Vc_ConfigIrq(stcVcChannelCfg.enVcChannel, stcVcChannelCfg.enVcIrqSel)) {
    21. return 1;
    22. }
    23. if (Ok != Vc_EnableIrq(stcVcChannelCfg.enVcChannel)) {
    24. return 1;
    25. }
    26. if (Ok != Vc_EnableChannel(stcVcChannelCfg.enVcChannel)) {
    27. return 1;
    28. }

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

    1. void VcIrqCallback(void)
    2. {
    3. boolean_t bPortVal;
    4. Vc_DisableIrq(genChannel);
    5. bPortVal = Gpio_GetIO(TEST_PORT, TEST_PIN);
    6. Gpio_SetIO(TEST_PORT, TEST_PIN, bPortVal ^ 1u);
    7. gu32Cnt++;
    8. }

    在中断中翻转LED1。

  • 相关阅读:
    手机app开发可选技术——webview
    北京 JAVA 开发 3 年,拿到美团 35K 的 offer 面试心得(全干货)
    1024程序员节|JavaScript代码之美—代码优化,减少if-else冗余的技巧
    袁庭新ES系列12节 | Elasticsearch高级查询操作
    【Java】已解决java.lang.ClassNotFoundException异常
    LeetCode #94.二叉树的中序遍历
    04_SpingBoot 前端使用JSP
    Redis高级数据类型
    数据结构-栈ArrayDeque的实现
    Net Core Swagger 加上JWT 登录
  • 原文地址:https://blog.csdn.net/andylauren/article/details/126384770