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.

[参考译文] MSP430FR5949:测量小值时出现ADC问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/586709/msp430fr5949-adc-issue-when-measuring-small-value

部件号:MSP430FR5949

我们在使用端口WFP 1.4 测量低于5mV的低电压时遇到问题。 对WFP 1.4 的输入进行缓冲。 当输入为2mV时,我们 必须在 'ADC12CTL0 |= ADC12ENC | ADC12SC'语句后添加30秒延迟,否则,测量结果为0或1计数。 有人知道这是什么原因吗? 感谢您的参与。  

   //打开电源
   Power_Port_DIR || Ac_on;
   Power_Port_Out || Ac_on;
   //配置ADC
   ADC_PORT_SEL1 || RMS_ADC;
   ADC_PORT_SEL0 |= RMS_ADC;
   ADC12CTL0 &=~ADC12ENC;                   //启用修改
   ADC12CTL0 = ADC12SHT0_2 + ADC12ON + ADC12MSC;       // ADC12ON,S&H=64 ADC CLKS;5M/(64+15)=65.8KHz
   ADC12CTL1 = ADC12SSEL_0 + ADC12SHS_0 + ADC12SHP + ADC12DIV_5 + ADC12CONSEQ_2;     // ADCCLK = MODOSC = 5MHz
                                                                                       //ADC12SC位,采样保持源选择
                                                                      //SAMPCON信号来自采样计时器//除以6=83.3333万
                                                                                      //重复单通道
   ADC12CTL2 = ADC12RES_2;    // 12位转换结果
   ADC12MCTL0 = ADC12INCH_4 +ADC12VRSEL_1;
   while (REFCTL0 & REFGENBUSY);           //如果ref发生器忙,请等待
   REFCTL0 || REFVSEL_1+REFON;            //选择内部参考= 2.0V
   ADC12CTL0 || ADC12ENC | ADC12SC;      //开始转换

   配置Timer_B0(150);//150* 0.2    =30秒
   while (!timed_outB0)__bis_sr_register (LPM3_BITS + GIE);
   TB0CTL = MC_0 ;        //MC=00已停止
   timed_outB0 = 0;

   用于(i=0;i<tSample;i++)
      {
         // 移动AVG = 0;
         // ADCresult = 0;
         //用于(j=0;j<256;j++)
         //{
            同时(!(ADC12IFGR0和BIT0));
         //   movingAVG += ADC12MEM0;
         //}
         // ADCresult =移动AVG >> 4;
         // ADCresult =移动AVG/10;
      //      __delay_cycles (100万);
         *FRAM_WRITE_PTR++= ADC12MEM0;
      }
   ADC12CTL0 &=~ADC12SC;

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

    您好,Xiaowei:

    我怀疑REF尚未准备就绪。 尝试将代码修改为以下内容:

    同时(REFCTL0和REFGENBUSY); //如果ref发生器忙,请等待
    REFCTL0 |= REFVSEL_1+REFON; //选择内部参考= 2.0V
    //待办:添加以下行
    。while (!(REFCTL0 & REFGENRDY)); //等待参考发生器稳定
    
    ADC12CTL0 || ADC12ENC | ADC12SC; //开始转换 

    我还要确保您的样品保留时间足够长,但您似乎已经计算了该时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Cameron,
    感谢您的建议。 我只是试图将SH时间增加到512个时钟,并添加该行等待参考,但仍测量0或1,没有30秒的长延迟。


    小维
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC输入具有RC电路,您看到的输入电阻是多少? 实际ADC输入可能需要一段时间才能达到输入电压。
    请参阅用户指南中的28.2 .6.3。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Xiaowei:
    Agustin的建议是否有帮助? 如果不是,请告知我们,我们可以继续调试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Xiaowei:
    我将关闭此线程,如果此线程未回答您的问题,请回复,它将重新打开。 如果没有,请单击Verify Answer (验证答案)以确认答案。