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.

[参考译文] CC1312PSIP:传感器控制器#39;s ADC 偏差

Guru**** 2386620 points
Other Parts Discussed in Thread: CC1312PSIP, LP-XDS110ET, LP-EM-CC1312PSIP, CC1312R
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1375238/cc1312psip-sensor-controller-s-adc-deviation

器件型号:CC1312PSIP
主题中讨论的其他器件: LP-XDS110ET、、 CC1312R

工具与软件:

你好

请务必参阅 以下说明和问题:

设置:

这是带 CC1312PSIP 的专有板。 该代码利用传感器控制器 ADC 对模拟输入进行采样。

ADC 的基准是 VVDS、它以同步方式运行、开启调节和手动触发。  

我们还 对检索到的 ADC 结果使用 AUXADCAdjustValueForGainAndOffset()以提高结果的准确性

目前的问题是:  

我们不断看到 ADC 值的偏差、ADC 结果比预期低~20mV 至~50mV。   

偏差似乎作为输入电压幅度的函数增加(3.3V 为最大值)。

例如、 在当前测试设置中以及我们期望获得3.3V (0xFFF)的条件下-我们得到3.287V (0xFEE)……

问题:

1) 1)从启用、触发和读取 ADC 开始是否应该有稳定时间?  

  1.1)如果是-建议的延迟是什么、应如何在启用、触发和读取之间分配?  

2) 2) ADC 可以接收相对基准电压(VDDS)或固定基准电压。 使用相对基准时- ADC 如何检索电压?

  2.1)是仅路由以连接到 VDDS、从而接收模拟值或的 ADC 基准入口

      是保留的参考值是 ADC 读取的寄存器、 而 VDDS 采样 由芯片中的其他机制执行。

  2.2)如果中的后者是(2.1是否是正确的运行描述- VDDS 采样电压是否保持在寄存器 BAT @ AON_BATMON 寄存器中、偏移量0x28?  

    2.2.1)在 BAT 寄存器中对 VDDS 进行采样所使用的基准是什么?  

    2.2.2)   函数 AONBatMonBatteryVoltageGet ()的返回值是否给出了传感器控制器 ADC 使用的 VDDS 值的准确表示?

非常感谢  

/Gil  

 

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

    尊敬的 Gil:

    我将尝试找到一些有关这方面的数据、今天让我回到您的身边。

    此致、

    Arthur

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

    尊敬的 Gil:

    在数据表中:

    您看到的变体似乎与该图不匹配。 您启用了输入缩放吗? :

    总的来说、我推荐您查看 ADCC26XX.c:ADCC26XX_CONVERT 中的参考实施、我希望您能回答一些问题。

    此致、

    Arthur

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

    您好、Arthur

    感谢您的答复

    有。 输入缩放已打开。  

    我很抱歉……但我没有完全理解你的建议…

    我们目前正在实施的代码位于 Sensor Controller 中、遵循 TI 给出的示例(在"CC26xx、CC13xx Sensor Controller Studio 入门指南"文档中)。  

    据我所知、与传感器控制器的 ADC 相关的函数未包括您的建议。  

     ADCCC26XX_CONVERT 是否与"main CPU"相关?  

    如果  ADCCC26XX_CONVERT 追溯到传感器控制器、您是否能够通过电子邮件发送一个指向该实现的链接?

    谢谢你  

    /Gil  

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

    尊敬的 Gil:

    我的错误、我选择了错误的 CPU。 我会继续寻找更有用的信息。

    此致、

    Arthur

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

    不用担心  

    也许我们应该考虑在更长的时间内采样(?)  

    当前在转换前采样需要42.6us。  

    此致

    /Gil  

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

    这可能是相关的:  

    e2e.ti.com/.../ccs-cc1312r-how-to-convert-the-sensor-controller-adc-value-to-voltage

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

    你好  (名:))

    您的主题中的建议是针对传入到"主 CPU"的原始 ADC 数据应用的补偿过程。

    我们在设计中也使用该方法。  

    问题在于、尽管应用了补偿、但仍会出现偏差。

    还应注意的是、在今天进行的一系列实验中、我尝试在启用 ADC 之前增加电压脉冲宽度。

    我还尝试在函数 adcEnableSync ()中转换时间之前增加 ADC 样本、但都不起作用。 尽管电压脉冲增加、采样之后转换时间和补偿方法也会持续存在偏差。

    此致

    /Gil  

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

    传感器控制器会返回"原始"值、并需要与 ADC 驱动器中相同的补偿。 请确保您执行的步骤完全相同。 我已经看到了一个相当多的帖子与类似的问题(价值偏离预期),其中大多数似乎是由 FW 引起的。 若要进行检查、请使用 ADC 驱动程序(使用 M4)并查看是否获得相同结果。

    使用什么作为这些测量的输入(电源、分压器...) 您如何知道您的结果过低?  

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

    让我们做一个实验…

    消息

    ~~~~~μ A

    LP-EM-CC1312PSIP LaunchPad 连接到 LP-XDS110ET (较小的部分)、该部分将用作测试平台。

     LP-EM-CC1312PSIP 部分应由3V CRA123电池供电、以确保尽可能减小电压纹波。 μ A   

    同一电源电压也应作为 ADC 模拟入口@ DIO25馈电。  

       

    该设置应通过 Sensor Controller Studio 运行一个代码、该代码将重复采样 DIO25 (每秒):

    宏 sampleAuxInput(){

    S16 adcValue;

    // ADC 分配 AUX 模拟输入

    adcSelectGpioInput (AUXIO_A_ADC_IN);

    //使用 VDDS 相对参考和手动触发启用 ADC

    adcEnableSync (ADC_REF_VDDS_REL、ADC_SAMPLE_TIME_42P6_US、ADC_TRIGGER_MANUAL);//将 REF 更改为相对

    //触发 ADC 采样

    adcGenManualTrigger();

    //读取 ADC 值

    adcReadFifo (adcValue);

    //禁用 ADC

    adcDisable();

    //将 ADC 值复制到输出缓冲区

    State.adcValue = adcValue;

    }

    //---------------------------------------------------------------------------------------------------------------------------

    sampleAuxInput();

    evhSetupTimer1Trigger (01000、2);

    基准

    ~~~~~~~~μ A

    现在、我们使用任务测试 通过 state.adcValue 来查看 ADC 结果。

    如果我的理解是正确的、因为我们为 ADC 电源轨提供与3.3V 电源轨相同的电压-我期望从 ADC 获得所有 F 的结果或非常接近该结果。 但是、结果不同。 不是得到接近4096的结果,我们得到大约3980的结果(排除波动)

     

    测试

    ~~~~~~~~~~~~~~~~μ A

    现在、让我们返回到原始硬件并通过 IAR 运行完整的测试代码。  

    我将进行10次原始 ADC 测量并进行计算、以显示补偿电压:

    # ADC 原始数据
    1. 3989
    2. 3989
    3. 3986
    4. 3991.
    5. 3990
    6. 3990
    7. 3990
    8. 3991.
    9. 3992.
    10. 3991.
    一般般   3989.9. ->让我们的故事3990…
    PMBus 接口  
    增益: 33233.
    失调电压:   -3.
    补偿值 =(((adcValue + offset)* gain)+ 16384)/ 32768; (取自 CC26xx 驱动程序库)
    补偿值 =(((3990-3)* 33233)+ 16384)/ 32768 = 4044
    v (ADC_COMPENSATED)= 4044/4096*3.058 = 3.019V ->存在39mV 偏差

     可以看出、采用原始 HW 的原始 ADC 结果似乎与使用基准时的结果接近。

    尽管如此、尽管使用了补偿、但仍存在偏差。

    这种偏差目前导致我们的应用出现问题。

    这是传感器控制器 ADC 的预期偏差吗?  

    此致

    /Gil   

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

    如果我不记得错了、 AUXADCValueToMicrovolts 函数会对结果进行第三次调整(我认为函数中的最后一行、我没有在这台 PC 上安装 CCS、因此我无法轻松分步浏览代码)。 检查函数中的最后一行。 如果在上述实验中使用该函数、您是否得到了正确的结果?  

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

    以下是摘自较早主题(CCS/CC1312R:如何将传感器控制器 ADC 值转换为电压?):

    如果查看 adcsinglechChannel 示例、则会使用函数 ADC_convertRawToMicroVolts  来转换该值。

    此函数如下所示:

    /**====
    ADCCC26XX_convertToMicroVolts ===
    */
    uint32_t ADCCC26XX_convertToMicroVolts (ADC_Handle handle、uint16_t adcValue){
    ADCCC26XX_HWAttrs const *hwAttrs;
    uint32_t adrustedValue;
    
    DebugP_assert (handle);
    
    /*获取指向 hwAttrs 的指针*/
    hwAttrs = handle->hwAttrs;
    
    /*仅在指定时应用修整*/
    if (hwAttrs->returnAdjustDVal){
    adjustedValue = adcValue;
    }
    否则{
    uint32_t gain = AUXADCGetAdjustmentGain (hwAttrs->refSource);
    uint32_t offset = AUXADCGetAdjustmentOffset (hwAttrs->refSource);
    adjustedValue = AUXADCAdjustValueForGainAndOffset (adcValue、增益、偏移);
    }
    
    返回 AUXADCValueToMicrovoltes((hwAttrs->InputScalingEnabled? AUXADC_FIXED_REF_VOLTAGE_NORMAL:AUXADC_FIXED_REF_VOLTAGE_UNSCALED)、adjustedValue);
    }" 

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A

    假设它是 CC1312PSI 的同一个函数、convertToMicroVolts ()在检索预编程的芯片值后调用增益和偏移校正函数
    但是-这与我们在准则中所采取的程序完全相同、但存在偏差。

    在中、应注意 CC1312PSIP 的增益和偏移位于寄存器 FCFG1中
    由于我们使用 VDDS 作为基准(相对基准)、因此要从 FCFG1中获取的值为:
    用于增益的 SoC_ADC_REL_GAIN。

    但对于偏移-提供的唯一值似乎是绝对参考...
    如果基准是相对的(相同的)、则使用什么偏移值?
    换句话说- AUXADCAdjustValueForGainAndOffset()不限于绝对引用。 但如果是这种情况、那么当基准是相对的时、所使用的失调电压是多少?

    这可以解释我们看到的偏差吗?

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

    你好  

    问题已解决。

    事实证明、返回增益和偏移校正的函数(AUXADCGetAdjustmentGain ( )、AUXADCGetAdjustmentOffset ())
    设置为返回与固定基准电压相关的参数、而不是相对基准电压。

    一旦固定和通过 AUXADCAdjustValueForGainAndOffset()应用补偿后-结果如预期的那样准确。  
    因此,人为错误....我们生活-我们学习。  

     感谢您发送编修  

    Arthur -非常感谢您的宝贵帮助