STM32F20x ADC Dos muestreos de retardo Tconv

0

Necesito calcular el tiempo total de conversión, he estado revisando el manual de referencia pero sin suerte.

Esta es mi configuración:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef ADC_InitStructure;

ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);

ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_28Cycles);

¿Y sé que la tasa de muestreo actual es de 240 kSPS pero no puedo recordar cómo obtuve ese número? Y alguien puede ayudarme a entender el efecto de esto:

ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

en el tiempo total de conversión / muestreo?

    
pregunta Bjqn

1 respuesta

1

Bueno, el tiempo de conversión es: \ $ T = T_ {SH} + 12 \ text {ciclos} \ $ (en el caso de una resolución de 12 bits), en su caso son 40 ciclos.

El ADC_TwoSamplingDelay_5Cycles solo es interesante si está realizando varios modos intercalados de ADC, que no lo está, por lo que no tiene ningún efecto, por lo tanto, no hay 5 ciclos para agregar.

40 ciclos del reloj de entrada, que se divide por dos ( ADC_Prescaler_Div2 ). Eso significaría que, en teoría, se está ejecutando en 19,2 MHz. Eso suena un poco extraño. Lo que falta es el tiempo que necesita para leer el registro de datos y, por lo tanto, borrar el bit EOC antes de que comience la siguiente conversión. Ya estás usando DMA, por lo que probablemente estés ejecutando en 20 MHz y DMA está haciendo lo mejor que puede para sacar los datos del ADC.

Otras encarnaciones del ADC tienen un bit de espera configurable para controlar este comportamiento, así que comienzan justo después de que terminen, lo que lo acercará bastante al valor teórico, pero el F2xx no parece tener esto.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas