ACMP 开发人员指南
模块简介
ET6001芯片内置 4个Dual-ACMP 比较器模块,每个 Dual-ACMP比较器模块包含 2个ACMP (分别称为高电平 ACMP_CHANNEL_H 和低电平 ACMP_CHANNEL_L)。 每个高电平 ACMP 包括一个下斜坡(RAMP)产生器,只能产生下斜坡波形,输入到高电平 ACMP 内部的 DAC。每个 ACMP 包含 1 个内部 DAC,1个 CMP 和对应的 CMP 数字滤波模块。
CMP比较器在每个模块内用“+”或“-”表示输入信号源,其中“+”和“-”分别表示输入量和参考量。比较器产生一个数字量输出,指示正输入上的电压是否大于负输入上的电压。 同时,可在有噪声信号时避免发生意外输出转换。比较器的正输入和负输入都可以选择外部引脚或DAC驱动或内部输入。
ACMP适用于功率应用,如峰值电流模式控制 (例如:电荷控制的LLC)、软开关电路处理(例如:CrM模式PFC)、OCP、OVP、OTP等保护功能,功率因数校正、电压跳闸监测,与XBAR (内部互联总线模块)外设联手,实现复杂的硬件控制逻辑。
功能概述
可选的参考端和比较端的模拟输入;
Daul-ACMP可以配置两个DAC,模拟比较器和数字模块成对工作;
特定的ACMP支持产生RAMP波形输入到内部DAC;
模拟比较器针对输出窄脉冲具有消隐功能;
模拟比较器具有数字输出滤波处理;
模拟比较器具有失调校正功能;
模拟比较器内置 DAC 基准可选择内部参考电压或者引脚外灌输入基准电压;
备注
ACMP中的CDAC的外部参考电压与BDAC共用一个引脚输入,但是CDAC的内部参考电压源为VDDA,不是内部参考Vref(2p5V); DAC的输出电压校准包括偏置和增益,默认使用出厂的校准设置值;
配置流程详解
输入端选择
ET6001 模拟IO和模拟开关复用关系映射表 中列出了模拟IO和模拟开关的复用关系。
代码举例:
ACMP_Comparator config;
/* 选择外部信号作为正端输入 */
config.cmpPositiveInputSelect = ACMP_INPUT_MUX_SELECT_5;
/* 选择外部信号作为负端输入 */
config.cmpNegativeInputSelect = ACMP_REF_MUX_SELECT_0;
// /* 选择内部DAC作为负端输入 */
// config.cmpNegativeInputSelect = ACMP_REF_MUX_DAC;
ACMP_configComparator(ACMP2, ACMP_CHANNEL_H, &config);
备注
代码中的ACMP是从0开始命名的,模拟IO和模拟开关复用关系映射表中的ACMP是从1开始命名的,所以代码中的ACMP2对应afe模拟引脚与内部互联表中的ACMP3。
代码中选择 ACMP2_H 的正端输入为 MUX_SELECT_5,负端输入为 MUX_SELECT_0。
在模拟IO和模拟开关复用关系映射表中的对应关系如下图所示:
以上述比较器信息 CMP3_HP5 的命名为例:
CMPx_[H/L]_[P/N]_[src]
CMPx: 比较器编号,x=1,2,3,4
H/L: H = 高电平 ACMP; L = 低电平 ACMP
P/N: P = ACMP正端输入; N = ACMP负端输入
src: 输入源选择, 高电平ACMP时src = 0,1,2,3,4,5;低电平ACMP时src = 0,1,2
例如: - CMP3_HP5 表示 ACMP2 CHANNEL_H 正端的 MUX_SELECT_5,横向查看即可找到对应的IO引脚; - CMP3_HN0 表示 ACMP2 CHANNEL_H 负端的 MUX_SELECT_0,横向查看即可找到对应的IO引脚;
备注
此处CMP命名从1开始,为适应编程习惯,在代码中ACMP命名从0开始。即CMP3在代码中为ACMP2以此类推。
其他详细内容请参考: Analog MUX 配置指南
非直连配置
在模拟IO和模拟开关复用关系映射表中,非直连配置的输入端,在代码中需要配置对应的模拟开关。
如上图所示中的CMP3_HP5为非直连,此时就需要配置对应的模拟开关,代码如下:
SYSCTRL_selectAnalogPinMux(SYSCTL_PINMUX_A3_B9_C7_MUX_A3_CMP2_HP5_LP5);
上述函数中输入参数 SYSCTL_PINMUX_A3_B9_C7_MUX_A3_CMP2_HP5_LP5 的格式说明如下:
SYSCTL_PINMUX\_[pin_name]_MUX_[muxed_adc_signal]_[muxed_acmp_signal]
SYSCTL_PINMUX: 前缀字符串
pin_name: IO管脚名称,参考数据手册4.1章节
MUX : 固定连接字符,表示模拟IO和模拟开关复用关系映射表中的连接关系
muxed_adc_signal: 连接后的ADC信号名称 格式: Ax_Bx_Cx x= 0~15
muxed_acmp_signal: 连接后的ACMP信号名称 格式: CMPx_HPy_HNz_LPy_LNz x= 1,2,3 y=0,1,2,3,4,5 z=0,1,2
内部DAC配置
若比较器负端选择内部DAC作为输入端,则需配置内部DAC。
内部DAC配置代码举例
ACMP_DAC_Config config;
/* 选择加载模式 */
config.loadMode = ACMP_DAC_LOADMODE_IMMEDIATE;
/* 选择SRPWM作为触发源 */
config.triggerSel = ACMP_DAC_TRIGGER_SEL_SRPWM;
/* CMPH DAC源选择 */
config.dacHsrcSel = ACMP_DAC_H_RAMP_OUTPUT;
/* 发送寄存器选择 */
config.tdatSel = ACMP_DAC_TDAT_EXTERNAL;
/* 选择DAC基准电压 */
config.dacRefSelect = ACMP_DACREF_VDDA;
ACMP_configDAC(ACMP2, ACMP_CHANNEL_H, &config);
备注
以上代码并非完整参数配置,仅作示例使用。完整配置请参考示例代码。
SRPWM触发ACMP代码举例
SRPWM_TBInitTypeDef stTBInit;
SRPWM_CMPInitTypeDef stCMPInit;
/* SRPWM1 初始化 输出PWM波形*/
SRPWM_initTBStruct(&stTBInit);
stTBInit.period = 20000;
stTBInit.countMode = SRPWM_COUNTMODE_UP;
SRPWM_initTB(SRPWM1, &stTBInit);
/* CMP初始化 */
SRPWM_initCMPStruct(&stCMPInit);
stCMPInit.cmpA = stTBInit.period / 2;
SRPWM_initCMP(SRPWM1, &stCMPInit);
/* PG初始化 */
SRPWM_setPG(SRPWM1, SRPWM_A, SRPWM_PG_EVT_CMPA_UP, SRPWM_PG_SET);
SRPWM_setPG(SRPWM1, SRPWM_A, SRPWM_PG_EVT_ZERO, SRPWM_PG_CLEAR);
/* SRPWM1 选择过零事件输出到ACMP2_H作为触发源 */
SRPWM_setACMPTrigger(SRPWM_CHANNEL_1, SRPWM_OUTEVT_SYNC_ZERO_EVT, SRPWMCOM_ACMP2_H);
SRPWMCOM_enable(SRPWM_CHANNEL_1);
更多ACMP功能配置请参考ACMP API文档
ACMP相关配置参考: 模拟比较器 (ACMP)