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.

28377上ADC配置中A口和B口可否分别设置为12bit和16bit模式的?

Other Parts Discussed in Thread: CONTROLSUITE

28377上ADC配置中A口和B口可否分别设置为12bit和16bit模式的?

为了充分利用AD口资源,如部分数据要求精度高,但只需要几个就可以了.而部分数据精度要求不高,但为了采集较多的数据,需要用到多个AD采样管脚,这样就需要考虑将ADC的配置设置成既有可以采集16bit 的端口,如A口,又有可以采集12bit数据的端口,如B口;ADC模块的C口、D口分析同,请教了??不知道能否如此处理?

只是本人在设置的过程中这两种模式设置的时候就只能16bit模式的端口数据有刷新,而12bit模式的端口数据没有刷新,均为0.

  • 28377上ADC配置中A口和B口可否分别设置为12bit和16bit模式的?

    为了充分利用AD口资源,如部分数据要求精度高,但只需要几个就可以了.而部分数据精度要求不高,但为了采集较多的数据,需要用到多个AD采样管脚,这样就需要考虑将ADC的配置设置成既有可以采集16bit 的端口,如A口,又有可以采集12bit数据的端口,如B口;ADC模块的C口、D口分析同,请教了??不知道能否如此处理?

    只是本人在设置的过程中这两种模式设置的时候就只能16bit模式的端口数据有刷新,而12bit模式的端口数据没有刷新,均为0.

    ERIC:

    F28377的内部ADC有四个模块,ADC A B C D. 每个模块都可以独立配置,每个模块智能配置为12位或16位的一种模式。参考controlSUIE里面的例程设置:

    C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Cpu1\adc_soc_epwm

  • 你好,你上面所述的例程仅仅只是关于12bit单端采样的一个AD管脚的配置,没有涉及我问题中所描述的,我问题中所描述的例程原型本身也是从TI提供的例程中来的,希望可以有如我所描述的那样的例程或参考程序,谢谢.

  • 你好,你上面所述的例程仅仅只是关于12bit单端采样的一个AD管脚的配置,没有涉及我问题中所描述的,我问题中所描述的例程原型本身也是从TI提供的例程中来的,希望可以有如我所描述的那样的例程或参考程序,谢谢

    ERIC:

    void DRV_setupAdcs(void)
    {
    EALLOW;

    //setup ADCCLK
    AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4
    AdcbRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4

    //setup ADCA as 16 bits differential mode, ADCB as 12 bit single end mode
    AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);
    AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);

    //Set pulse positions to late
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;

    //power up the ADC
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;

    //delay for 1ms to allow ADC time to power up
    DELAY_US(1000);

    //Select the channels to convert
    AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2; // ADCASOC0 -> ADCINA2 for a_I_V
    AdcaRegs.ADCSOC0CTL.bit.ACQPS = 63; // sample window is 320ns
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C

    AdcaRegs.ADCSOC1CTL.bit.CHSEL = 4; // ADCASOC1 > ADCINA4 for a_I_U
    AdcaRegs.ADCSOC1CTL.bit.ACQPS = 63; // 320ns
    AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 5; //trigger on ePWM1 SOCA/C

    AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; // ADCBSOC0 -> ADCINB0 for THIN
    AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14; // 75ns
    AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C

    AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; // ADCBSOC1 -> ADCINB1 for VDCIN
    AdcbRegs.ADCSOC1CTL.bit.ACQPS = 14; // 75ns
    AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C

    AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2; // ADCBSOC2 -> ADCINB2 for I_bat
    AdcbRegs.ADCSOC2CTL.bit.ACQPS = 14; // 75ns
    AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C

    AdcbRegs.ADCSOC3CTL.bit.CHSEL = 3; // ADCBSOC3 -> ADCINB3 for V_bat
    AdcbRegs.ADCSOC3CTL.bit.ACQPS = 14; // 75ns
    AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C

    // configure the ADCA interrupt sources
    AdcaRegs.ADCINTSEL1N2.bit.INT1CONT = 0; //no continue mode
    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1; //end of ADCASOC1 will set INT1 flag
    AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared

    // configure the ADCB interrupt sources
    AdcbRegs.ADCINTSEL1N2.bit.INT1CONT = 0; //no continue mode
    AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 3; //end of ADCBSOC3 will set INT1 flag
    AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
    AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared

    EDIS;
    }

    可以参考一下。

  • Eric,

          你好!

           我就是参照例程上把12位采样模式和16位采样模式加到了一起的,看你上面提供的参考例程和我所理解的应该是一样的,只是在具体代码执行的时候就不是这么回事了,AD采样结果没有数值显现的,不知道怎么回事?是不是在配置过程中哪个环节遗漏了?如果有可能,希望能提供一个完整的调试通过的代码,谢谢了!