oxygenzz 发表于 2019-4-3 17:44

使用MCC学习PIC单片机 – ADCC 电容分压器(CVD)

本帖最后由 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;}

请叫我树人 发表于 2019-4-4 09:41

感谢分享啊! 真是不错啊!

mxkw0514 发表于 2021-6-8 17:09

请问内外电容是怎么分压的呀?

便携手到老 发表于 2021-6-8 17:26

感谢分享,这个确实不错的应用的。

自己造声卡 发表于 2021-6-9 12:34

基础贴,必须要好好学习一下的。

dql2015 发表于 2021-6-9 13:19

有触摸按键的应用吗

lcczg 发表于 2021-6-9 14:49

dql2015 发表于 2021-6-9 13:19
有触摸按键的应用吗

触摸按键可以 http://ww1.microchip.com/downloads/en/AppNotes/01298A.pdf

mxkw0514 发表于 2021-6-9 22:09

本帖最后由 mxkw0514 于 2021-6-9 22:10 编辑


楼主的图好像有一点点出入,电容上的电压不能突变的

页: [1]
查看完整版本: 使用MCC学习PIC单片机 – ADCC 电容分压器(CVD)