1 votos

ADC STM32L476RG : ¿Por qué tengo un desplazamiento cuando se conecta a 0V?

Estoy trabajando en una solución de software que establece el Pin PC2 a "estado de reset" si mi señal de entrada (conectado a ADC) es superior a 2V.

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

Así es como he configurado 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 tengo un problema electrónico creo :

En Nucleo STM32L476-RG, los canales 1 y 2 del ADC1 están conectados a los pines PC0 y PC1.

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

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

Para curriculum vitae :

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 mil veces, STMicroElectronics menciona una referencia de 0V que se llama VSSA o VREF- pero no entiendo como conectar mis Pins.

Los únicos pines que utilizo son PC0 y PC1. ¿Debo conectar otros PIN a tierra o algo así? ¿Alguien ha tenido este problema antes?

4voto

Loïc d'Anterroches Puntos 148

En realidad, todo funciona perfectamente. Acabas 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 del fondo de escala de 4096).

Cambia la constante ADC_DIFFERENTIAL_ENDED para poner el ADC en modo single ended (medidas relativas a VREF) si no quieres este comportamiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X