能否通过原始计数来推导出感应电容的大小?

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_4653071
Level 3
Level 3
25 replies posted 10 replies posted 5 replies posted

我现在用的是CY8CKIT-040这一套件搭配着CY8CKIT-024屏蔽板,来实现实例项目“10厘米的接近感应”,参考文档是“AN92239_Proximity_Sensing_with_CapSense”。

所有的配置和代码用的都是官网上下载的。现在我想通过原始计数raw counts和公式文档AN85951中的公式3-9来计算电容值Cs,不知道这样一种方法是否具有可行性?

但是目前遇到的困难是无法知道公式3-9中其他必要的参数,因为示例中用得是CapSense CSD v2.6,不能通过查看CSD配置来获得所有参数,比如补偿IDAC和调制IDAC的电流,以及感应时钟频率Fsw等。

另外想问一下,是否有其他方法能够获得电容Cs的值?如果有的话,应该如何获取读数呢?

0 点赞
1 解答
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

我们假设你参考的工程名称是 “Proximity_Distance_040”, 在这个工程中调校模式选择的是 Manual,使能了 auto-calibration 功能,感应时钟频率Fsw 是组件参数设定的,调制 IDAC 和补偿 IDAC 的值是芯片上电是根据算法计算得到的。CapSense 组件设定,接近传感器的 Sense clock Divider 是 2,模式是 PRS-Auto,系统时钟 HFCLK 频率是 12MHz。根据下图得知,Fsw 的计算值为:

Fsw = (HFCLK/ASD)/4 = (12MHz/2)/4 = 1.5MHz

Capture.PNG

调制 IDAC 和补偿 IDAC 的值是系统计算得到的,所以没有办法得知具体指,只能在芯片上电以后通过代码读取出来。你可以在 main.c 中声明下面两个数组,然后直接把接近传感器的两个 IDAC 值读取出来,如果你没有修改过工程的话,接近传感器 sensor 的数组元素ID应该是0, 所以CapSense_modulationIDAC[0] 和 CapSense_compensationIDAC [0] 中存放着接近传感器 sensor 的两个 IDAC 计算值。我们假设两个值都是5,那么实际的 Imod = 5 * 1200nA =  6uA, Icomp = 5*1200nA = 6uA.

extern uint8 CapSense_modulationIDAC[CapSense_TOTAL_SENSOR_COUNT];

extern uint8 CapSense_compensationIDAC[CapSense_TOTAL_SENSOR_COUNT];

在原帖中查看解决方案

0 点赞
5 回复数
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

首先你要确定 CapSense 组件中IDAC是设置成了 Sinking 还是 Sourcing(默认) 模式,如果是 Sourcing 模式的话那么需要参考 3-8 的公式来做计算

参数的话, N 指的是扫描分辨率,Fswitch 指的是 sense clock 的频率值(如果选择PRS的话,平均频率值=设置频率值/2), Imod/Icomp 指的是两个 IDAC 的实际电流值,实际电流值=  1200nA(per bit) * IDAC 设置值,设置值可以通过 tuner 看到。

0 点赞
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

我们假设你参考的工程名称是 “Proximity_Distance_040”, 在这个工程中调校模式选择的是 Manual,使能了 auto-calibration 功能,感应时钟频率Fsw 是组件参数设定的,调制 IDAC 和补偿 IDAC 的值是芯片上电是根据算法计算得到的。CapSense 组件设定,接近传感器的 Sense clock Divider 是 2,模式是 PRS-Auto,系统时钟 HFCLK 频率是 12MHz。根据下图得知,Fsw 的计算值为:

Fsw = (HFCLK/ASD)/4 = (12MHz/2)/4 = 1.5MHz

Capture.PNG

调制 IDAC 和补偿 IDAC 的值是系统计算得到的,所以没有办法得知具体指,只能在芯片上电以后通过代码读取出来。你可以在 main.c 中声明下面两个数组,然后直接把接近传感器的两个 IDAC 值读取出来,如果你没有修改过工程的话,接近传感器 sensor 的数组元素ID应该是0, 所以CapSense_modulationIDAC[0] 和 CapSense_compensationIDAC [0] 中存放着接近传感器 sensor 的两个 IDAC 计算值。我们假设两个值都是5,那么实际的 Imod = 5 * 1200nA =  6uA, Icomp = 5*1200nA = 6uA.

extern uint8 CapSense_modulationIDAC[CapSense_TOTAL_SENSOR_COUNT];

extern uint8 CapSense_compensationIDAC[CapSense_TOTAL_SENSOR_COUNT];

0 点赞

非常感谢您的回复,对我很有帮助!

0 点赞

另外有个问题想请教一下,就是感应时钟频率Fsw,在有些文档中给出的计算公式是直接用Fsw=HFCLK/ASD来进行计算,这样得到的结果是您所说的公式计算结果的1/4,(您提到的公式我也见到过)目前这两种计算方式我不知道应该选择哪个。

pastedImage_0.png

另外就是,在PSOC Creator 中,有一个SenseClk,他显示的值是47.059kHz。更是相差甚远。pastedImage_2.png

麻烦您帮忙解答一下,谢谢

0 点赞

我想再请教您一下,按照您说的方法,我在main.c中加了这两行代码,然后编译运行之后的带这样的结果,这是不是就是意味着调制 IDAC 和补偿 IDAC 的值就是5呢?(运行之后代码中两个值一样的)

pastedImage_0.png

0 点赞