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模式的?
为了充分利用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采样结果没有数值显现的,不知道怎么回事?是不是在配置过程中哪个环节遗漏了?如果有可能,希望能提供一个完整的调试通过的代码,谢谢了!