TI CC2541 adc 分压器值错误

问题描述 投票:0回答:1

我正在开发一个使用 TI CC2541 的项目(放置在 jdy-08 BLE 模块上)。我尝试使用 adc 接口获取锂电池电量。我参考了这篇文章https://sunmaysky.blogspot.com/2013/12/cc2530-adc-howto-in-ti-z-stack.html?m=1。要读取 adc 值,我使用以下代码:

        uint16 adc_ain2=0;
        HalAdcSetReference(HAL_ADC_REF_125V);
        adc_ain2=HalAdcRead(HAL_ADC_CHN_AIN2,HAL_ADC_RESOLUTION_10);

如果我不使用分压器并直接将电压源连接到 P0_2 引脚,则没有问题。 例如:

0,35V ==> adc 170 
0,70V ==> adc 310
1,17V ==> adc 498

但是如果我使用分压器,我会得到错误的值(R1 = 820K,R2 = 820K)。 例如:

0,33V ==> adc 347
0,53V ==> adc 368 

提前谢谢您!!

c bluetooth embedded bluetooth-lowenergy iar
1个回答
0
投票

答案可能是您的外部电阻网络延长了 ADC 的时间常数,使得采样电容器无法在采样窗口内达到输入电压。

我在这里写了一篇较长的文章:“使用 ADC:基础知识,为什么我会得到有趣的读数以及如何解决它?”。 如果您还不熟悉该主题,我强烈建议任何使用模拟输入的人阅读它。

这是针对您的具体问题的快速版本,据我快速阅读后了解。

基本概念是所有(或几乎所有)ADC 都有一个开关电容器网络来对输入进行采样。 当电容器无法在分配给它的时间内充电并对输入进行采样时,他们会给您错误的答案。

这是 SPICE 中的一个示例,将电阻分压器直接连接到 ADC 输入级。

第一张图显示了电压源和分压器抽头处的电压。 第二个显示采样电容器上的电压。 该模型来自应用笔记 “LTSpice,模拟 SAR ADC 模拟输入”.

您可以看到分压器(SAR 的输入)抽头处的电压有很大的下降,并且在第一个开关 S1 打开以将电容器与输入分离之前电压不会恢复。 此时,第二个开关 S2 通常会将电容器连接到读出电路,在模型中,它将电容器接地,以便我们可以执行模型中的下一个时钟周期。但想象一下 S2 关闭之前的最终状态保持固定,直到读出完成。

Spice model, resistor divider network as input to SAR type ADC

为了完全清楚发生了什么,该图显示了采样电容器上的电压。 如上所述,当 S1 打开且转换将在实际 ADC 中开始时,电压尚未达到预期的位置。 这可能是你的阅读错误。

Voltage on the SAR sampling capacitor

最好的解决方案是使用运算放大器和 RC 网络作为 SAR 电容器的电荷库,如下所示:

OPAMP and RC as charge reservoir for the sampling capacitor

在这里,您可以看到为电容器充电的电流来自外部电容器中存储的电荷,并且输出上只有一个小脉冲来为电容器充电

Charge flows from the external capacitor to replenish the sampling capacitor

第二个最佳解决方案是至少使用一个运算放大器缓冲区,如下所示。 在这种情况下,缓冲器为采样电容器提供足够的电流,使其能够快速恢复,因此看起来不像一个大的负向电压尖峰。

OPAMP buffer with compensation resistor

© www.soinside.com 2019 - 2024. All rights reserved.