ADC STM32L476RG: ¿Por qué tengo un offset cuando estoy conectado a 0V?

1

Estoy trabajando en una solución de software que configura el Pin PC2 para "restablecer el estado" si mi señal de entrada (conectada a ADC) está por encima de 2V.

Estoy probando mi código con STM32 Studio para ver en tiempo real la salida digital de mi ADC.

Aquí es cómo configuré el ADC1:

  hadc3.Instance = ADC1;
  hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV6;
  hadc3.Init.Resolution = ADC_RESOLUTION_12B;
  hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc3.Init.EOCSelection = DISABLE;
  hadc3.Init.LowPowerAutoWait = DISABLE;
  hadc3.Init.ContinuousConvMode = ENABLE;
  hadc3.Init.NbrOfConversion = 1;
  hadc3.Init.DiscontinuousConvMode = DISABLE;
  hadc3.Init.NbrOfDiscConversion = 0;
  hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T1_CC1;
  hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc3.Init.DMAContinuousRequests = DISABLE;
  hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  hadc3.Init.OversamplingMode = DISABLE;

sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5; sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0;

Puedo recuperar correctamente el número de salida de mi ADC con DMA, pero creo que tengo un problema electrónico:

En Nucleo STM32L476-RG, el Canal 1 de ADC1 & 2 están conectados al pin PC0 y PC1.

Cuando conecto el pin PC1 al STM32L4 GND y el pin PC0 al 3.3V , puedo recuperar el valor 4095 del ADC, eso es bueno.

Pero, cuando conecto el pin PC0 a GND o una fuente 0V , el ADC debería devolverme 0 valor pero no lo hace, devuelve valor 1981 .

Para reanudar:

Entrada de ADC1: 3.3V | Salida de ADC1: 4095 | Config: PC1 en GND; PC0 en 3.3V
Entrada de ADC1: 0V | Salida de ADC1: 1981 | Config: PC1 en GND; PC0 en 0V / GND

No sé por qué tengo este Offset. He leído la hoja de datos miles de veces, STMicroElectronics menciona una referencia de 0V que se llama VSSA o VREF- pero no entiendo cómo conectar mis Pins.

Los únicos pines que uso son el PC0 y el PC1. ¿Debo conectar otro PIN a una conexión a tierra o algo? Alguien tuvo este problema antes?

    

1 respuesta

4

En realidad todo funciona perfectamente. Acaba de configurar el ADC en modo diferencial para que mida la diferencia entre PC0 y PC1. Esta diferencia puede ser positiva o negativa dependiendo de si PC0 es mayor que PC1 o PC1 es mayor que PC0. Cuando son iguales entre sí, la lectura del ADC está en el medio, que es lo que estás observando con el valor de 1981 (aproximadamente la mitad de la escala completa de 4096).

Cambie la constante ADC_DIFFERENTIAL_ENDED para poner el ADC en modo de finalización única (medidas relativas a VREF) si no desea este comportamiento.

    
respondido por el Jon

Lea otras preguntas en las etiquetas