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.

[参考译文] CC2652R7:当 MCU 退出待机模式时、ADC 结果会受到影响

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1502836/cc2652r7-adc-results-are-affected-when-the-mcu-comes-out-of-standby-mode

器件型号:CC2652R7

工具/软件:

你好。

我正在开发一个电压传感器、这个传感器使用传感器控制器来持续读取 ADC、对读数求平均值、然后将 ADC 值加一个 FIFO。  然后、主 MCU 代码会定期唤醒 TI-RTOS 消息循环以处理传感器控制器的 FIFO 数据、并使用测量的数据更新 OLED 显示。  我还通过 BLE 将采样的数据推送到我们的数据分析应用。

我的问题是当 MCU 唤醒以处理数据时、从待机模式到运行模式的转换会导致 ADC 数据偏斜一个或两个 LSB。  我假设这是由于新打开的电源域影响 ADC 的 Vref 所导致的。

我尝试了通过 Power_setConstraint (PowerCC26XX_SB_disallow)阻止电源域切换来缓解这种情况、但它只将问题减少了大约一半。

下面是我看到的数据图:

ADC 每10us 进行一次采样、但每1000次 ADC 读取一次我都会对值计算、因此每个数据点之间的间隔都是10ms。  我处理数据并每500ms 更新一次显示内容、需要~100ms 来进行处理。  可以看到、在100ms 周期内、ADC 值向上移动一位。  请注意、在除以1000之前、我将 ADC 和乘以16、结果看起来平均读数来自16位 ADC、而不是实际的12位 ADC、因此实际误差是一个或两个 ADC LSB、而不是您在图上看到的20个 LSB。

对于如何防止这种情况发生、您有什么建议吗?

谢谢你
Scott

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

    我在主任务循环中尝试了此操作、它似乎有效。  当然、缺点是运行时电流消耗增加:

            // Hard loop waiting for events to prevent going into sleep mode while waiting for events.
            // This prevents perturbations in the ADC data when the power domains are being switched on/off.
            while( !(Event_getPostedEvents( syncEvent ) & (SP_ALL_EVENTS | SBP_ALL_EVENTS)) )
                continue;
    
            events = Event_pend( syncEvent, Event_Id_NONE, SP_ALL_EVENTS | SBP_ALL_EVENTS, ICALL_TIMEOUT_FOREVER );
    

    有没有人 能更节能的想法?

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

    您好、Scott:

    我们的器件上有多种功耗模式、包括运行、待机和空闲。 防止待机仍可以进入空闲状态、此时的电流消耗低于工作模式。 因此、当器件从空闲转换为运行时、这可能导致电压瞬态下降。

    防止待机模式(SLEEP)的循环方法实际上也会阻止空闲模式、因此这会保持器件的稳定电流消耗、同时保持 ADC 电压读数稳定。

    从 SW 的角度来看、要提高电源效率、需要从电源模式转换、这意味着将实时进行这些电压读数。 软件解决方案可以专门滤除这些读数、例如、系统只关心待机模式下电压的情况。

    从硬件的角度来看、您可能会添加一个足够大的电容器来消除任何100ms 的尖峰-如果您对其他硬件解决方案感兴趣、我可以请教一位硬件专家。

    谢谢、
    Toby

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

    你好、Toby。

    感谢您的建议,但不幸的是,我需要持续采样数据,以便我可以平均/平滑它,并 实时绘制.  我不能做任何涉及破坏采样数据连续性的事情。

    我采取了以下措施来降低噪音、它似乎足以满足我的需求:

    • 我的小不眠事件循环把戏。
    • power_setConstraint()以防止在进行其他系统调用时进入空闲或待机模式。
    • 将 ADC Vref 从 VDDS 更改为内部固定基准、从而防止 BLE 无线电传输通过 VDD 抖动引起噪声。

    它看起来我可以生活与额外的几毫安它会花费我。

    感谢你的帮助。
    Scott