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.

[参考译文] MSP430F5172:较低电压下的 ADC 输入行为

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/867648/msp430f5172-adc-input-behavior-at-lower-voltages

器件型号:MSP430F5172

我将使用 MSP430F5172 uC 并以500ms 的间隔读取电池电压。  以下是用于对电池电压进行采样的电路:

当 EN_VBATT_READ 变为高电平时、分压器激活。  分压器以1:0.7848的比率进行分频 、以便 VBATT = 3.2V 的最大输入电压导致 VBATT_DIV 上的输出电压为~2.5V。    MSP430的设置 VREF=2.5V、因此3.2V 输入提供满量程10位0x3FFF 输出。   当 EN_VBATT_READ 变为低电平时、分压器关闭、不消耗电流。

电容 C32可用作 LPF、但也有助于在 ADC 采样时间内保持电压。   分压器中相对较低的电阻值可让我实现到 ADC 的低输入阻抗。

在3.2V ~ 2.1V 之间的 VBATT 输入电压下、ADC 读数在1或2个计数内均为点对点。   很好。   下面的示波器屏幕截图显示了电阻分压器打开(黄色迹线为 VBATT_DIV)。   在 C32上建立电荷的时间存在延迟;  然后绿色线迹变为高电平(ADC 转换开始),然后绿色线迹变为低电平(ADC 转换结束)

随着 VBATT 输入电压降低、VBATT_DIV 波形变得怪异。  奇怪的是、它没有达到我期望的稳态值、当转换完成时、会有一点嗡嗡声。  以下示波器快照的 VBATT 输入为2.0V:

在1.9V 电压下、VBATT_DIV 波形完全不稳定并且有一个很大的下降:

最终结果是 VBATT 输入电压读数的低端远低于预期。   我猜 ADC 对模拟输入引脚的加载比我预期的要多。   数据表指出、ADC 输入阻抗介于36k 至96k 和3.5pF 之间、远高于分压器的~887 Ω 阻抗。   因此、我看不到这种情况是怎样的。

此外、我不明白为什么在更高的输入电压下也不会看到这种影响。   我已经尝试了所有采样时间和转换 clock...in 的组合、但最终这并不重要。   较低的输入电压也会在 VBATT_DIV 模拟输入引脚中产生这种颠簸的波形。

在所有这些波形中、uC 的电源电压稳定且在3.3V 时正常。  通过在 AVCC 和 DVCC 上进行探测、可以看到稳定且无噪声的3.3V 电压。  

MCLK 由外部产生的16MHz 并且无条件稳定。

设置模拟输入引脚 P3.7并使 ADC 读取:

// P3.7 -> VBATT_DIV/A6 ADC 通道
P3DIR &=~(BIT7);
P3SEL |= BIT7;
P3REN &=~(BIT7);
//解锁端口映射控制器
PMAPKEYID = PMAPKEY;
//禁止进行任何进一步的重映射
PMAPCTL &=~(PMAPRECFG);
//将 P3.7设置为 A6模拟输入引脚
P3MAP7 = 31;
//重新锁定端口映射控制器
PMAPKEYID = 0x00; 

ADC10CTL0 = 0x00; //重置寄存器内容
ADC10CTL0 |= ADC10SHT_4 + ADC10ON; // S&H=64 ADC CLKS、ADC10ON

ADC10CTL1 = 0x00; //重置寄存器内容

// ADCCLK = MCLK;SAMPCON 源自采样定时器;输入时钟/8
ADC10CTL1 |= ADC10SSEL_2 + ADC10SHP + ADC10DIV_7;

ADC10CTL2 = 0x00; //重置寄存器内容
ADC10CTL2 |= ADC10RES; // 10位转换结果

ADC10MCTL0 = 0x00;
ADC10MCTL0 |= ADC10SREF_1; //选择 V (R+)=VREG 和 V (R-)=AVSS
ADC10MCTL0 |= ADC10INCH_6; // A6 (P3.7) ADC 输入选择

ADC10IE |= ADC10IE0; //启用 ADC 转换完成中断 

内联 void takeAdcRad_Ch6 (void)
{
//启用 VBATT 分频器 
//下面的线路将 EN_VBATT_READ 拉为高电平 P3OUT |= BIT4; //等待 C32至少75us //滤波电容器以充电至采样值 _DELAY_CYCLES (2400); //采样和转换开始 // ADC ISR 在结果就绪时触发 P1OUT |= BIT5; //这是被拉高的绿色迹线 ADC10CTL0 |= ADC10SC + ADC10ENC; }

// ADC10中断服务例程
#pragma vector = ADC10_vector
__interrupt void ADC10_ISR (void)
{

switch (__event_in_range (ADC10IV、12))
{
情况0:中断; //无中断
案例2:中断; //转换结果溢出
案例4:中断; //转换时间溢出
案例6:中断; // ADC10HI
案例8:中断; // ADC10LO
案例10:中断; // ADC10IN
情况12: //转换完成、ADC10IFG0已被置位、
// ADC10MEM0已就绪

P1OUT &=~BIT4; //这是被拉低的绿色迹线


//存储新结果
ADC_Ch6_Result = ADC10MEM0;

//关闭电阻分压器,我们使用电流 ADC 采样帧来完成 
//此行会将 EN_VBATT_READ 拉为低电平 P3OUT &=~(BIT4); //告知 main()我们有一个要处理的新 ADC 样本 sysFlags.adcSampleReady = 1; 中断; 默认值:break; } }


是否有任何想法可能会是什么问题?  当 ADC 打开且电压低于2.1V 时、为什么 ADC 引脚似乎正在加载输入引脚?  

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

    我不是 EE、但 EE 不断提醒我、随着电池电量耗尽、其输出电阻会增加、因此在电流较低时会发生压降。

    我记得、2.1V 的锂离子电池几乎耗尽了。

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

    随着 VBATT 降低、Q2B 上的栅源极电压也会下降。 这意味着漏源电阻增大。

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

    我在上面提到过这一点、但可能不清楚:  uC 的电源是由 TPS610994提供的稳定3.3V 电压。   探测 uC 的 DVCC 和 AVCC 引脚可发现稳定且无干扰的3.3V 电压轨、噪声极小。   在此测试设置中、VBATT 实际上只是连接到台式机电源。  我以0.1V 为步长将电源从3.0V 向下变化。   ADC 返回分频的 VBATT 输入(实际上是现在的工作台电源)的正确值、直到大约2.1V、此时 VBATT_DIV 波形失真、如上面的黄色示波器快照中所示。  

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

    AVCC 和 DVCC 未连接到 Q2B 的源极。 VBATT 是。 如果将栅极下拉至接地、则 Vgs 为-VBATT。

    确保 Q2A 获得良好的稳定栅极驱动、但 Q2B 没有。 随着 VBATT 降低、其导通电阻会增加。

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

    你是对的... 该 PMOS 的 Vth 最大为-2.6V,最小为-1V ... 我想您在这个上达到了标准。  感谢您指出我的这一业余错误。