本帖最后由 oxygenzz 于 2019-4-3 17:48 编辑
ADCC外设除了数模转换和计算功能外,还有一大功能,即电容分压器(CVD)。 这一特性是将ADC内部采样保持电容作为参考,来对引脚上连接的外部电容进行相对电容测量。 此功能主要应用于触摸按键和接近检测。
下面是MCC的配置图和数据手册上的原理简图。
CVD分为预充,采集和转换三个工作阶段。在各个阶段中,CVD需要控制很多开关,如原理简图中的K1-K4,Kpre,和附加采样保持电容上的开关。Kpre和K1-4在不同的工作阶段开关状态会有变化,附加采样保持电容开关在三个阶段开关状态不改变。 预充阶段 Kpre OFF,K1-K4根据预充极性选择确定ON/OFF状态。有一个基本原则是,K1与K4状态相同,K2与K3状态相同,K1/K4 与K2/K3状态相反。这样保证PIN脚外电容Csensor和内部采样保持电容Chold 被预充到相反的电平。
采集阶段 Kpre ON,K1-4全部OFF,内外电容分压开始,最后达到电压稳定状态
转换阶段 ADC将采样保持电容的电压转换为数字量,得出结果。
下图是CVD运行时内外电容上电压变化的波形图。红色为内部采样保持电容电压波形,蓝色为外部引脚上触摸按键的电容。图上显示的是连续完成了两次CVD操作,两次采集结果相减,即可得到差分结果。这种两次CVD的差分操作可有效减小温度等带来的共模干扰。ADCC双采样设置启动后,每次运行自动进行两次CVD操作,获得两个采样值。
MCC代码 MCC 生成代码后,可在adcc.c文件中找到CVD相关的代码。
设置预充时间 void ADCC_SetPrechargeTime(uint16_tprechargeTime) { //Load the ADPREH and ADPREL registers. ADPREH = prechargeTime >> 8;
ADPREL = prechargeTime;
}
设置采集阶段时间 void ADCC_LoadAcquisitionRegister(uint16_tacquisitionValue) { //Load the ADACQH and ADACQL registers. ADACQH = acquisitionValue >> 8; ADACQL = acquisitionValue; }
启动双采样模式,每次运行自动进行两次CVD操作,获得两个采样值。两次结果分别保存在ADPREV 和ADRES中。 void ADCC_EnableDoubleSampling(void) { //Sets the ADCON1bits.ADDSEN ADCON1bits.ADDSEN = 1; }
|