使用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;}
感谢分享啊! 真是不错啊! 请问内外电容是怎么分压的呀?
感谢分享,这个确实不错的应用的。 基础贴,必须要好好学习一下的。 有触摸按键的应用吗 dql2015 发表于 2021-6-9 13:19
有触摸按键的应用吗
触摸按键可以 http://ww1.microchip.com/downloads/en/AppNotes/01298A.pdf 本帖最后由 mxkw0514 于 2021-6-9 22:10 编辑
楼主的图好像有一点点出入,电容上的电压不能突变的
页:
[1]