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.

[参考译文] CC2640R2F:传感器控制器比较基准切换

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1501527/cc2640r2f-sensor-controller-compa-reference-switching

器件型号:CC2640R2F

工具/软件:

我们使用传感器控制器来测量电容式传感器。 简化版原理图:

开关 S1/S2代表 COMPA 参考 C1是我们的传感器。 测量类似于 https://dev.ti.com/tirex/explore/node?node=A__AAxJaXIOcaqqfHxSDzQv8g__com.ti.SIMPLELINK_ACADEMY_CC2640R2SDK__7unKOT8__LATEST、但我们不是使用电阻器和2uA 电流源生成基准电压、而是从外部设置电压。 我们观察到、与 TI 示例配置相比、这可以降低测量数据中的噪声。 高级传感器控制器代码流程:

  1. 配置 TDC 以在 COMPA 输出 tdcSetTriggers 时启动和停止计数(TDC_STARTTRIG_COMPA_HIGH、TDC_STOPTRIG_COMPA_HIGH、1);
  2. 释放 ISRC、使电容器上的电压开始上升
  3. 等待 COMPA 首次触发
  4. 更改 COMPA 基准源 compaSelectGpioRef (AUXIO_Axs_REF_3V);
  5. 等待 TDC 完成

我担心 compaSelectGpioRef (AUXIO_Axs_REF_3V);API 描述 https://software-dl.ti.com/lprf/sensor_controller_studio/docs/cc13x0_cc26x0_help/html/compa__0.html#compa-0-compaselectgpioref 说  在连接 GPIO 引脚之前、会断开之前使用的任何基准源 。 这是否意味着在开关期间基准输入悬空? 悬空的 COMPA 基准输入是否会在 COMPA 输出上触发错误的正?

"先断后合"是否是 COMPA MUX 或传感器控制器库的一项功能? 对于我们的用例、"先合后断"会起作用、短接 REF1和 REF2不是问题。

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

    1.任何输入 GPIO 都应始终在内部或外部上拉或下拉。 在这种情况下、"断开连接"仅意味着开关被关闭、但 GPIO 仍被上拉以防止输入悬空。

    2. BBM 内置在 compa 库中。 我将再次与软件团队核实。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 任何输入 GPIO 都应始终在内部或外部上拉或下拉。 在这种情况下、"已断开连接"仅意味着开关被关闭、但 GPIO 仍被上拉以防止输入悬空。

    感谢您记下 GPIO 端发生的情况。 您能谈谈 COMPA 基准输入侧发生的情况吗? 在 compaSelectGpioRef 期间、COMPA 基准输入是否短暂保持悬空? 如果 COMPA 基准输入悬空、我会假设 COMPA 输出未定义、并可能触发 TDC 过早停止。

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

    如果基准输入上的 GPIO 被上拉或下拉、则它将始终为0或 VDD。 只有在电压源和 GPIO 之间放置开关时、才能做到这一点。

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

    我想我们有些困惑、不是关于 GPIO 端的问题。 我想知道通过 compaSelectGpioRef 将基准(负输入)从一个输入切换到另一个输入时内部会发生什么情况 。 我在 software-dl.ti.com/.../compa__0.html 的 COMPA 框图中标记了位置。

    请查看改进的示例代码:

    compaEnable();
    compaSelectGpioRef(AUXIO_AXS_REF_025V);
    isrcEnable(BV_ISRC_CURR_4P5U); //Current is found in page 1336 of user_guide
    
    // Select 2 x 48 MHz from RCOSC_HF as TDC counter clock source
    tdcSetCntSource(TDC_CNTSRC_96M_RCOSC); //96 M TDC clock FTW
    
    // Enable the TDC with start trigger on ISRC reset release and stop trigger on COMPA
    tdcSetTriggers(TDC_STARTTRIG_COMPA_HIGH, TDC_STOPTRIG_COMPA_HIGH, 1); // (#startTrigger, #stopTrigger, ignoredStopTriggerCount). ignoredStopTriggerCount - Number of stop triggers to ignore before stopping the counter (0-65535)
    tdcEnable();
    
    // Select COMPA input/ISRC output
    compaSelectGpioInput(AUXIO_AXD_CAP_POS);
    
    
    // Prepare the TDC and trigger start of measurement
    tdcArm(TDC_START_ASYNC);
    fwDelayUs(50,FW_DELAY_RANGE_100_US);
    isrcRelease(AUXIO_AXD_CAP_POS);
    
    // Wait for the COMPA output to go high, and then switch the reference pin.
    
    //Add timeout for this first treshold using TIMER 0
    
    
    timer0Start(TIMER0_MODE_SINGLE, 9600, 0);
    U16 first_th_reached=0;
    U16 first_timeout=0;
    U16 time_took_to_reach_th1=0;
    do {
        // Check whether the timeout has occured
        U16 timer0IsRunning;
        timer0CheckState(timer0IsRunning);
        first_timeout = timer0IsRunning ^ 0x0001; //XOR, if both are 1 it results in 0 (while timer is running), if it is timeout it will return 1
        
        // Check whether the interrupt has occurred
        compaGetOutput(first_th_reached);
        
        U16 done = first_th_reached | first_timeout;
    } while (done == 0);
    timer0Stop();
    
    compaSelectGpioRef(AUXIO_AXS_REF_3V);
    
    U16 isTdcDone;
    tdcWaitUs(700); //Max charge time in us for now
    tdcCheckDoneEv(isTdcDone);
    
    
    // Re-clamp the pin to ground
    isrcClamp(AUXIO_AXD_CAP_POS);

    第二次调用 compapSelectGpioRef 时、COMPA 输出是否会保持稳定? 根据 API 说明、COMPA 基准输入似乎会瞬间悬空。

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

    感谢您的澄清。 在输入悬空的任何转换期间、COMPA 输出可能不稳定、但通常会增加延迟以允许基准输入切换、而 COMPA 输出可解决此问题。 这是最便宜、最快速的解决方案。

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

    在这种配置中、使用 COMPA 输出来启动和停止 TDC 时、不确定延迟是否有用。 TDC 配置为在第一个 COMPA 输出高电平时启动、在第二个 COMPA 输出高电平时停止(示例中的第9行)。 你能否澄清延误对防止贸发局意外过早停工有何帮助?

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

    让我由我的团队来运行。 我将在一周结束时得到回应。

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

    我需要向软件团队循环、看看是否可以先合后断、因为这将是您的最佳解决方案、因为您可以使用它。

    否则、这是在迟滞、稳定时间和 TDC 速度之间进行斗争。

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

    是否可以启用2uA 电流源以确保在先断后合开关期间使 COMPA 基准输入饱和? 从 COMPA 方框图中可以看出、2uA 电流源似乎与多路复用器无关。 Sensor Controller Studio 目前不支持该功能、但我假设有几行传感器控制器汇编代码可以实现。

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

    这是软件团队的回应:

    compapSelectGpioRef 功能可以通过将其复制到 Sensor Controller Studio 的用户空间来进行更改。 您还可以通过修改函数名称(或在 Sensor Controller Studio 中调用的过程)来制作自己的变体。
     
    例如:
    1. 副本 /proc_defs/compa_select_gpio_ref*(1 prd 和2个 asm 文件)添加到用户空间:
               C:\Users\ \Documents\Texas Instruments\Sensor Controller Studio\proc_defs\。
    2. 修改内容。
      也可以重命名文件和文件中指定的过程的名称。 然后、您可以从 SCStudio 获得可供使用的您自己的变体。 此外、还要记住重命名汇编文件中使用的标签。

    至于 COMPA 饱和、在这种情况下未进行验证、因此不知道它能够在饱和状态下维持多长时间。 我需要检查一下。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 compa ref 输入悬空并且可能触发 TDC 过早停止、我会假设 compa 输出未定义。

    测试确认、可以过早触发 COMPA、TDC 将输出31 -~500范围内的某个低值、而不是14-24k 范围内的正常值。 有趣的是、这种情况发生的频率取决于压缩正输入噪声以及将 COMPA 基准切换到更高电平的速度。

    在我们的噪声设置中、我共享的示例代码每~20k 个样本会产生1个干扰。 通过代码改进( 在基准开关之前将 AUXIO_Axs_REF_025V 钳位到 VDD、启用2uA 电流源以使 COMPA 基准输入饱和、删除超时检查)、每~1M 个样本就会得到1个干扰。 为避免这种压差基准开关的不稳定、我们将对设计进行修改、以包含外部比较器。 具有0.25V 基准的 COMPA 将启动 TDC、具有3V 基准的外部比较器将停止 TDC。

    顺便说一下、感谢您指出如何为传感器控制器创建自定义函数、在调试此类函数时有很大帮助。