触摸基线数值获取

公告

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

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

cross mob
yach_4179311
Level 2
Level 2
10 replies posted 5 replies posted 5 questions asked

你好:

        我的客户有个调试需求,就是在I2C中传送触摸的每一个按键的基线数值,我在程序中给他传的是

  /**

     *  The sensor baseline.

     */

    uint16 bsln [CapSense_NUM_SCAN_FREQS];

这个值不知道是不是跟TUNER中获取的基线值是一样的?谢谢

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

基本确定是温漂导致的,长时间打印 rawdata 数据,如果rawdata 缓慢上升,然后最终区域稳定,这就是典型的温漂。鉴于客户的温漂范围很小,且增长斜率缓慢,所以无风险。

在原帖中查看解决方案

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

这个参数就是 sensor baseline 的放置位置。不过你可以直接用下面的函数来获取 rc/bl/df, 方便一些。

uint16 GetRaw(uint8 widget)

{

    uint16 raw = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    raw = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->raw[0];

   

    return raw;

}

uint16 GetBaseline(uint8 widget)

{

    uint16 baseline = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    baseline = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->bsln[0];

   

    return baseline;

}

uint16 GetDiff(uint8 widget)

{

    uint16 diff = 0;

    CapSense_FLASH_WD_STRUCT const * ptrFlashWdgt;

    ptrFlashWdgt = &CapSense_dsFlash.wdgtArray[widget];

    diff = ((CapSense_RAM_SNS_STRUCT *)ptrFlashWdgt->ptr2SnsRam)->diff;

   

    return diff;

}

dear sir

         感谢回复,是这个数据就好,但是我的客户在实际使用时遇到个问题,就是他的这个获取基线值功能是一个特殊功能,他在平时正常操作时是不会切换到这个功能的,但是在切换到这个功能后这个基线数据会一直向上飘,我正常用TUNER看某一个按键的基线是2400-2403左右,但是用这个功能读取基线时就会一直升高从2433升到2490,客户提出他是正常上电后使用了1个小时左右,如果有不稳定升高这一个小时时间也该稳定了,为什么是切换到他这个获取基线数值功能时才会有这个上升的变化?

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

Baseline 是通过 Rawdata  的增长趋势计算得出的,你可以把它理解为是 Rawdata 经过特定滤波之后的输出值,Baseline 自身的增加和减小均是由 Rawdata 的波动来决定。你看到的现象应该是 sensor  rawdata 缓慢增长导致的结果,至于 sensor rawdata 的缓慢增长,常见的因素有环境温度的增加,环境湿度的增加等。 请问你的产品中 sensor pad 周围是否有大屏幕,功率LED灯等发热源,会导致结构温升?

0 点赞

dear sir

        这个项目没有您说的大屏幕,客户使用的是LED灯IO口扫描显示的数字,客户是2个控制芯片,我们的是4014SXI-421,我们这个只负责触摸按键功能,而数字显示和控制是另外一个主芯片操作的,他们之间是I2C通信的。环境温度这个也是正常的室温。

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

按键的扫描周期与是否打印 baseline 数据是否有关系,比如使能 baseline 打印功能以后,按键的扫描周期会比之前更小?

请问目前的产品是否有低功耗设计,如果芯片会进入深睡眠的话,EZI2C 被主机 ping 时,触摸芯片也会被唤醒(使能 EZI2C Wakeup from deepsleep 功能),此时芯片的正常扫描周期就被打断了,每一次正常唤醒和每一次EZI2C 被主机 ping 都会让芯片唤醒并执行一遍按键扫描逻辑,按键本身扫描周期从固定值变为不定值,此时 sensor 的 rawdata 可能会从之前的一个数值过度到另一个数值,因为按键的寄生电容 CP 并不是恒定不变的, 如果周围的电场环境发生了变化,CP也会发生微弱的变化,并最终导致 rawdata 从一个稳态过渡到另一个稳态。 

同样的道理,默认情况下 baseline 数据不打印,固件执行一套逻辑, baseline 数据开始打印,固件执行的是另一套逻辑。这两套逻辑如果差别很大的话,也会导致 sensor 周围场环境发生变化。 你可以让客户从板子上电开始一直使能打印,看这个问题是否还可以复现。

0 点赞

1,按键的扫描周期不变,唯一的差别就是在进入获取基线功能后主控芯片获取的数据要多些(增加了基线的数值),4010一共10个按键,就丢10个基线的数据,主控的板子要获取哪个自己获取就可以。

2,低功耗功能不在这个逻辑操作里跑,只在主芯片待机后会执行。

3,2个功能逻辑差别不大,只是在正常逻辑下增加了显示基线的逻辑

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

把数据改成打印 rawdata 把, 这个才是电容转换的量化值,比较直观,然后查看一下 rawdata 是否也存在同样的特征,一打印数据就上升(不打印的话数据在回归之前水平?)

0 点赞

rawdata值变化比较快,在显示时低2位一直在跳动,不能稳定显示,也不好确认这个问题。

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

我们看的是 RAWDATA 的增长趋势,不是具体数值,波动不影响判断,只要采集的窗口时间够长就可以。 如果所有 sensor 的 rawdata 都存在上电缓慢上涨并最终保持稳定的情况,那么就判定上涨与温漂相关,否则的话就需要更深入的判断了,比如触摸走线上如果有 TVS 管的话,有时也会引起此类现象,因为 TVS管的工作电压与结电容有一定的相关性。

0 点赞

Hi VisonZ_71,

       客户这边把整个板子都涂了防水胶,4014 芯片也被封在内部,厚度大约在3mm 左右,这种情况下,会导致基线漂移这种情况么?

       Thanks.     

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

灌胶和 rawdata 漂移之前没有必然联系。TVS 管在触摸走线上有使用吗?

0 点赞

Hi Vison ,

    没有使用TVS 。

    Thanks.

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

基本确定是温漂导致的,长时间打印 rawdata 数据,如果rawdata 缓慢上升,然后最终区域稳定,这就是典型的温漂。鉴于客户的温漂范围很小,且增长斜率缓慢,所以无风险。

0 点赞