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.

F28335的ADC使用外部基准的问题

F28335的ADC使用外部基准时,就无需调用ADC_cal了吧?? 疑问:由于处理器始终按3.0v(并非真正的)来计算输入的模拟电压值的,处理器应该需要知道内部3.0v与真实的3.0v之间的差异吧,告诉处理器外部是2.048v的基准后,处理器应该根据此refer来执行一段校准程序以校准内部3.0v与真实的差值的吧??而ADC_cal是内部校准用的,那外部怎么校准呢,需要校准么??我已按照powerup 顺序写了程序的。。。。。

  • 这里的ADC_cal同时针对内部和外部的基准,为了芯片能够达到datasheet说的ADC Electrical Characteristics,所以无论用内部还是外部的基准都要调用ADC_cal。

    文档中说明的ADC_cal中的AAAA,BBBB只是代称,在实际芯片中会根据不同芯片给予不同值。

    如果还希望进一步矫正,可以参考下面的文档:

    www.ti.com/.../litabsmultiplefilelist.tsp

  • 谢谢,Forrest的回答

    AAAA,BBBB是代称,我也验证。

    另一疑问:在ADC_cal前已执行AdcRegs.ADCREFSEL.bit.REF_SEL = 1;即使用外部2.048v的基准,在执行ADC_cal后该位变为0了,我是否需要再执行AdcRegs.ADCREFSEL.bit.REF_SEL = 1呢?

  • ADC_cal只需要在启动时调用一次,至于您说的,在执行ADC_cal后,只能修改 ADCREFSEL.bit.REFSEL,不能修改ADCREFSEL全部。

  • 好的,谢了

  • 你好,以下是我的ADC初始化代码

    #if USING_INTERNAL_REF

    //internal ref

    InitAdc();

    #else

    //external ref

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V  

    EALLOW;

    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;

    ADC_cal();

    EDIS;

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V

    AdcRegs.ADCTRL3.all = 0x00E0;  // all the analog circuitry besides bandgap/reference/ADC circuits

       DELAY_US(5000L);

    #endif

    ADC的输入信号是直流1.024v 使用内部基准采样的结果是1355 使用外部基准采样结果为1100,显然使用外部基准的采样结果是不正确的,但我想请教ADC使用外部基准的详细流程或初始化代码,谢谢

  • 你好,以下是我的ADC初始化代码

    #if USING_INTERNAL_REF

    //internal ref

    InitAdc();

    #else

    //external ref

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V  

    EALLOW;

    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;

    ADC_cal();

    EDIS;

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V

    AdcRegs.ADCTRL3.all = 0x00E0;  // all the analog circuitry besides bandgap/reference/ADC circuits

       DELAY_US(5000L);

    #endif

    ADC的输入信号是直流1.024v 使用内部基准采样的结果是1355 使用外部基准采样结果为1100,显然使用外部基准的采样结果是不正确的,但我想请教ADC使用外部基准的详细流程或初始化代码,谢谢

  • 你好,以下是我的ADC初始化代码

    #if USING_INTERNAL_REF

    //internal ref

    InitAdc();

    #else

    //external ref

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V  

    EALLOW;

    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;

    ADC_cal();

    EDIS;

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V

    AdcRegs.ADCTRL3.all = 0x00E0;  // all the analog circuitry besides bandgap/reference/ADC circuits

       DELAY_US(5000L);

    #endif

    ADC的输入信号是直流1.024v 使用内部基准采样的结果是1355 使用外部基准采样结果为1100,显然使用外部基准的采样结果是不正确的,但我想请教ADC使用外部基准的详细流程或初始化代码,谢谢

  • 你好,以下是我的ADC初始化代码

    #if USING_INTERNAL_REF

    //internal ref

    InitAdc();

    #else

    //external ref

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V  

    EALLOW;

    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;

    ADC_cal();

    EDIS;

    AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //0: use internal ref 1: use 2.048V

    AdcRegs.ADCTRL3.all = 0x00E0;  // all the analog circuitry besides bandgap/reference/ADC circuits

       DELAY_US(5000L);

    #endif

    ADC的输入信号是直流1.024v 使用内部基准采样的结果是1355 使用外部基准采样结果为1100,显然使用外部基准的采样结果是不正确的,但我想请教ADC使用外部基准的详细流程或初始化代码,谢谢

  • 这两个值是采样平均值吗?

    程序这样写没有错,offset error不应该有这么多,估计是外部的基准的问题。

  • 谢谢,您的回答,突然想起这个实验在另一个板子上做的,呵呵不好意思,你说对了 谢谢。