This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2553:无法使用 CapSense 技术设置开关的灵敏度

Guru**** 2535150 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/984647/msp430g2553-unable-to-set-sensitivity-for-switch-using-capsense-technology

器件型号:MSP430G2553

尊敬的 TI 专家:

我们正在尝试使用 CapSense 技术来调整两个开关的灵敏度。 下面是您可以在代码之后查看的代码、我将对我的问题进行总结。

#include "structure.h"

//关键元素(P3.4)
const 结构元素键={
.inputPxselRegister =(uint8_t *)&P3SEL、
.inputPxsel2Register =(uint8_t *)&P3SEL2、
.inputBits = BIT4、
.maxResponse = 800、
.threshold = 200、

};
//关键元素(P3.6)
const 结构元素 key2 ={
.inputPxselRegister =(uint8_t *)&P3SEL、
.inputPxsel2Register =(uint8_t *)&P3SEL2、
.inputBits = BIT6、
.maxResponse = 800、
.threshold = 280、

};

//单按钮传感器
struct Sensor keySensor =

halDefinition = RO_PINOSC_TA0_WDTp、//感测方法
.numElements,//元素数量
baseOffset = 0、//第一个元素索引= 0
//指向元素的指针
.arrayPtr[0]=&key、//指向 key1元素
.arrayPtr[1]=&key2、//指向 key2元素
//定时器信息
measGateSource= GATE _WDTp_SMCLK、// 0->SMCLK、1->ACLK
accumulationCycles= WDTp_GATE _512、//64 -默认值
};

我已初始化两个开关并在其中创建了一个 keySensor 变量、我已初始化这两个开关并使用名为的 API 扫描这两个开关  

(结构元素*) TI_CAPT_buttons (&keySensor);

因此、每当我扫描开关时、无论按下哪个开关、它都会返回数组的指针、直到该指针正常工作。 现在、我们尝试通过 查看 TI 的一个示例来调整我后来添加的敏感度.maxResponse。 如果我为高于300的两个开关提供阈值、那么我无法检测到任何开关、如果我将阈值保持在低于100、则会自动检测开关。 两个开关之间的距离为1cm。 是否有人可以指出为什么我看到这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否想在开关上获得更长的距离、以便尝试调节灵敏度?  

    您可以先尝试更高的 SMCLK 频率。 您还可以尝试不同的累积周期。

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HI Cash Hao11、

    为便于理解、我说两个开关之间的距离为1cm。

    正如您在我的上一篇文章中看到的、我只尝试在这里使用更高的频率

    measGateSource= GATE _WDTp_SMCLK、// 0->SMCLK、1->ACLK
    accumulationCycles= WDTp_GATE _512、//64 -默认值

    我们已经用玻璃板和聚碳酸酯板测试了开关、并且工作正常。 当我们放置一些玻璃板或聚碳酸酯板时、不会检测到触摸、或者始终通过更改其阈值来检测到触摸。

    如果有两个按钮可用的示例、请分享。 这将是一个很大的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    好的、我将查看有关此应用的一些示例。  

    我们还在电容式触控方面采用了称为 CapTIvate 的更新技术。 它可以帮助您解决问题。 您可以在此处查看。

    https://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/CapTIvate_Design_Center/latest/exports/docs/users_guide/html/CapTIvate_Technology_Guide_html/markdown/ch_getting_started.html

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cash、

    随着我们的项目即将结束、我们无法改变我们的技术。

    我们几乎解决了我们的问题、但仍然存在一个小问题、即在启动时扫描我们的开关(我们有两个开关、例如开关 X 和开关 Y)、 当我按下开关 X 时、它能够扫描该信号、但当我们按下开关 Y 超过一秒时、开关 X 就会被检测到。 我们如何解决看到一个名为 deltaCnt 的变量来检查开关的状态? 按下开关 Y 时为什么检测到开关 X?

    下面是我更新的 structure.c 文件内容:


    #include "structure.h"

    //关键元素(P3.4)
    const 结构元素键={
                 .inputPxselRegister =(uint8_t *)&P3SEL、
                 .inputPxsel2Register =(uint8_t *)&P3SEL2、
                 .inputBits = BIT4、
                 .maxResponse = 970、
                 .threshold = 20、

    };
    //关键元素(P3.6)
    const 结构元素 key2 ={
                 .inputPxselRegister =(uint8_t *)&P3SEL、
                 .inputPxsel2Register =(uint8_t *)&P3SEL2、
                 .inputBits = BIT6、
                 .maxResponse = 970、
                 .threshold = 20、

    };

    //单按钮传感器
    struct Sensor keySensor =
                  {
                     halDefinition = RO_PINOSC_TA0_WDTp、   //感测方法
                     .numElements,         //元素数量
                     baseOffset = 0、         //第一个元素索引= 0
                     //指向元素的指针
                     .arrayPtr[0]=&key、    //指向 key1元素
                    //.arrayPtr[1]=&key2,        //指向 key2元素
                     //定时器信息
                     measGateSource= GATE _WDTp_SMCLK、    // 0->SMCLK、1->ACLK
                     accumulationCycles = WDTp_GATE _512、
                  };

    结构传感器键2传感器=
                  {
                     halDefinition = RO_PINOSC_TA0_WDTp、   //感测方法
                     .numElements,         //元素数量
                     baseOffset = 1、         //第一个元素索引= 0
                     //指向元素的指针
                     .arrayPtr[0]=&key2、    //指向 key1元素
                     //定时器信息
                     measGateSource= GATE _WDTp_SMCLK、    // 0->SMCLK、1->ACLK
                     accumulationCycles= WDTp_GATE _512、  //64 -默认值
                  };

    您能指出问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否还看到、当您按住开关 X 超过1秒、然后检测到开关 Y 时?

    此致、

    现金 Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、现金、

    是的、当我按下一个开关时、我看到这种情况、另一个开关也被检测到。 我还注意到、在调试过程中、即使没有按下任何开关、我们也会看到它超过了我们设置的阈值。

    当前的情况是、如果我按下开关 x 一次、然后第二次未检测到同一开关。

    下面是我的 structure.c 代码:

    #include "structure.h"

    //关键元素(P3.4)
    const 结构元素键={
                 .inputPxselRegister =(uint8_t *)&P3SEL、
                 .inputPxsel2Register =(uint8_t *)&P3SEL2、
                 .inputBits = BIT4、
                 //.maxResponse = 985、
                 .threshold = 500、

    };
    //关键元素(P3.6)
    const 结构元素 key2 ={
                 .inputPxselRegister =(uint8_t *)&P3SEL、
                 .inputPxsel2Register =(uint8_t *)&P3SEL2、
                 .inputBits = BIT6、
                 //.maxResponse = 900、
                 .threshold = 600、

    };

    //单按钮传感器
    struct Sensor keySensor =
                  {
                     halDefinition = RO_PINOSC_TA0_WDTp、   //感测方法
                     .numElements,         //元素数量
                     baseOffset = 0、         //第一个元素索引= 0
                     //指向元素的指针
                     .arrayPtr[0]=&key、    //指向 key1元素
                    //.arrayPtr[1]=&key2,        //指向 key2元素
                     //定时器信息
                     measGateSource= GATE _WDTp_SMCLK、    // 0->SMCLK、1->ACLK
                     accumulationCycles = WDTp_GATE _8192、
                  };

    结构传感器键2传感器=
                  {
                     halDefinition = RO_PINOSC_TA0_WDTp、   //感测方法
                     .numElements,         //元素数量
                     baseOffset = 1、         //第一个元素索引= 0
                     //指向元素的指针
                     .arrayPtr[0]=&key2、    //指向 key1元素
                     //定时器信息
                     measGateSource= GATE _WDTp_SMCLK、    // 0->SMCLK、1->ACLK
                     accumulationCycles= WDTp_GATE _8192、  //64 -默认值
                  };