打印
[PIC®/AVR®/dsPIC®产品]

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

[复制链接]
2999|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 oxygenzz 于 2019-4-3 17:48 编辑


ADCC外设除了数模转换和计算功能外,还有一大功能,即电容分压器CVD)。
这一特性是将ADC内部采样保持电容作为参考,来对引脚上连接的外部电容进行相对电容测量
此功能主要应用于触摸按键和接近检测。

下面是MCC的配置图和数据手册上的原理简图。




CVD分为预充,采集和转换三个工作阶段。在各个阶段中,CVD需要控制很多开关,如原理简图中的K1-K4Kpre,和附加采样保持电容上的开关。KpreK1-4在不同的工作阶段开关状态会有变化,附加采样保持电容开关在三个阶段开关状态不改变。
预充阶段
Kpre OFFK1-K4根据预充极性选择确定ON/OFF状态。有一个基本原则是,K1K4状态相同,K2K3状态相同,K1/K4 K2/K3状态相反。这样保证PIN脚外电容Csensor和内部采样保持电容Chold 被预充到相反的电平。

采集阶段
Kpre ONK1-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;
}


835575ca47ee165427.png (83.91 KB )

835575ca47ee165427.png

使用特权

评论回复
沙发
请叫我树人| | 2019-4-4 09:41 | 只看该作者
感谢分享啊! 真是不错啊!

使用特权

评论回复
板凳
mxkw0514| | 2021-6-8 17:09 | 只看该作者
请问内外电容是怎么分压的呀?

使用特权

评论回复
地板
便携手到老| | 2021-6-8 17:26 | 只看该作者
感谢分享,这个确实不错的应用的。

使用特权

评论回复
5
自己造声卡| | 2021-6-9 12:34 | 只看该作者
基础贴,必须要好好学习一下的。

使用特权

评论回复
6
dql2015| | 2021-6-9 13:19 | 只看该作者
有触摸按键的应用吗

使用特权

评论回复
7
lcczg| | 2021-6-9 14:49 | 只看该作者

使用特权

评论回复
8
mxkw0514| | 2021-6-9 22:09 | 只看该作者
本帖最后由 mxkw0514 于 2021-6-9 22:10 编辑


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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

190

帖子

11

粉丝