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-模拟电压比较器例程的主要内容,如果未能解决你的问题,请参考以下文章