Autor Tema: ADC del STM32F103C8  (Leído 788 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3154
    • Pinballsp
Re:ADC del STM32F103C8
« Respuesta #15 en: 08 de Febrero de 2018, 08:31:40 »


¿ Y no te resultaría mejor, para descartar problemas de hardware, probar con el código que te dí, que está probado que funciona ?,  https://github.com/avislab/STM32F103?files=1 , ahí tienes ejemplos listos para usar el ADC de ese micro, con y sin DMA.

Si este te funciona, entonces es un problema de software, compáralo con el tuyo y busca las diferencias, o directamente parte de este código, añadiendo tus rutinas. Y si te aparece el mismo problema, ya sabes que es de hardware y no andas perdiendo el tiempo, cambiando cosas en el software, que no van a resolver nada.

No se, es una sugerencia, yo lo haría así, para centrarme en el problema y no andar dando tumbos sin saber por donde anda la cosa.


Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
Re:ADC del STM32F103C8
« Respuesta #16 en: 08 de Febrero de 2018, 12:34:12 »
Sí, tengo pendiente hacerlo, pero no me he podido poner con ello todavía.
Como dije, es por hobby, y ya sabéis lo que pasa con estas cosas...

Desconectado tsk

  • PIC16
  • ***
  • Mensajes: 245
Re:ADC del STM32F103C8
« Respuesta #17 en: 08 de Febrero de 2018, 14:40:07 »
Si lees el archivo que enlacé, la mayoría de los errores son esperados pero muestran formas de como disminuir sus efectos tanto en hardware como en software.

La primera tarjeta con la que probé, de antemano se que está mal, pero la siguiente es el resultado de una prueba con otra tarjeta del mismo tipo con 13.5 ciclos (ADC_IN0, V_TEMP, VREFINT)

Código: [Seleccionar]
4095 4094 4094 1712 1715 1715 1399 1396 1395
4095 4095 4095 1713 1714 1716 1398 1396 1396
4095 4095 4095 1713 1715 1715 1400 1396 1395
4095 4095 4095 1715 1715 1715 1394 1394 1396
4095 4092 4094 1714 1715 1715 1396 1397 1394
4095 4094 4091 1715 1715 1714 1395 1396 1396
4095 4095 4094 1713 1715 1716 1399 1399 1398
4095 4095 4095 1714 1715 1713 1398 1396 1396
4095 4095 4095 1714 1715 1718 1400 1395 1393
4095 4094 4094 1714 1714 1716 1397 1395 1396
4090 4095 4095 1714 1715 1715 1396 1395 1396

Código: [Seleccionar]
0 0 0 1766 1769 1766 1382 1381 1379
0 0 0 1766 1766 1767 1382 1381 1384
0 0 0 1765 1766 1768 1380 1382 1380
0 0 0 1767 1768 1767 1379 1380 1381
0 0 0 1765 1766 1769 1382 1379 1377
0 0 0 1765 1768 1768 1379 1382 1379
0 0 0 1767 1768 1765 1380 1381 1382
1 0 0 1768 1767 1766 1381 1381 1380
0 0 0 1766 1767 1767 1379 1385 1380
0 0 0 1767 1768 1768 1383 1380 1380
3 0 0 1766 1768 1767 1382 1381 1379

Y no he cambiado nada del código de prueba.

Volví a leer las hojas de datos y el tiempo total de conversión se calcula

Tconv <= Sampling Time + 12.5 cycles.

Así si se elije 13.5 ciclos Tconv sería de 2.16us, pero en la misma hoja de datos hace referencia a los tiempos en los cuales está garantizada una lectura precisa. La lectura de la temperatura la garantizan con un tiempo de muestreo de 17.1us, así que la muevo al final y la configuro con 239.5 ciclos. De igual forma incremento el tiempo de muestreo a 239.5 ciclos para la lectura de VREFINT, ya que también su lectura está garantizada con un tiempo de muestreo de 17.1us.




(ADC_IN0, VREFINT, V_TEMP)
Código: [Seleccionar]
4095 4095 4095 1489 1489 1490 1757 1757 1757
4095 4095 4095 1489 1488 1489 1759 1757 1757
4095 4095 4095 1490 1488 1489 1753 1759 1757
4095 4095 4095 1489 1488 1489 1757 1757 1758
4095 4095 4095 1490 1489 1490 1755 1759 1759
4095 4095 4095 1491 1488 1487 1759 1757 1757
4095 4094 4095 1489 1489 1492 1757 1758 1756
4095 4095 4095 1492 1489 1489 1758 1760 1757
4095 4095 4095 1488 1489 1491 1757 1757 1757
4095 4095 4095 1492 1490 1489 1757 1757 1761
4095 4095 4095 1489 1488 1491 1759 1759 1759

Código: [Seleccionar]
0 0 0 1493 1494 1495 1760 1756 1757
0 0 0 1494 1493 1493 1759 1756 1757
0 0 0 1492 1492 1494 1758 1757 1757
0 0 0 1494 1492 1492 1758 1753 1757
0 0 0 1493 1492 1496 1759 1758 1757
0 0 1 1494 1493 1491 1757 1758 1757
0 0 0 1493 1490 1493 1757 1757 1756
0 0 0 1491 1493 1493 1758 1758 1756
0 0 0 1492 1493 1492 1757 1757 1756
0 0 0 1493 1495 1493 1757 1757 1755
0 0 0 1493 1493 1492 1757 1759 1757

Y no sólo se estabilizaron las lecturas, sino que obtengo valores dentro de lo que la hoja de datos me dice.

Por ejemplo VREFINT puede tener valores entre, 1.16 a 1.26, siendo 1.20 el típico. Sin considerar la hoja de datos, lo que en apariencia leía era alrededor de 1V, pero con estos resultados está alrededor de 1.18V que está dentro de los parámetros.

Adjunto el .hex y el .bin por si lo quieres probar en tu placa. Para ver las lecturas conectalo por USB y lo va a reconocer como puerto serie (115200 8 bits, 1 bit de stop sin paridad).

*build.zip
(30.33 kB - descargado 23 veces)
« Última modificación: 08 de Febrero de 2018, 14:56:03 por tsk »

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
Re:ADC del STM32F103C8
« Respuesta #18 en: 08 de Febrero de 2018, 16:36:27 »
Pues entonces debe ser cosa de la placa.
planeta9999, acabo de probar con los ejemplos que pusiste.
Pongo los archivos de las lecturas que he obtenido, uno con A1 puesto a 3,3V y otro con A1 puesto a GND.
Al poner A1 a GND se obtienen valores que llegan hasta 13. Aquí algo mejora. Pero cuando pongo A1 a 3,3V empeora.

*STM32F103_33.txt
(3.57 kB - descargado 25 veces)

*STM32F103_GND.txt
(47.39 kB - descargado 22 veces)


tsk, he vuelto a probar subiendo el tiempo de muestreo al máximo, 239,5 ciclos, y en otra prueba además he reducido la velocidad del ADC poniendo el prescaler a 8, con lo que la frecuencia del ADC queda en 9MHz. No he hecho captura de las salidas, pero no ha mejorado nada.

Queda echarle un repaso a la placa...


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6769
Re:ADC del STM32F103C8
« Respuesta #19 en: 09 de Febrero de 2018, 17:40:08 »
Bueno despues de probar no logro hacer funcionar el DMA xD jeje

Correccion, no me funciona el callback... no me lo ejecuta....

EDIT:
Finalmente consegui ver que .... llama a todos lso callback ( half, complete y error ), lo peor de todo es que me llama al de error tambien :P.
Logre que funcionara. Y acabo de ver que tiene el mismo efecto que indico tsk

Ponerlo a GND, dependiendo de la entrada incluso con el mayor tiempo de sampling implica un cambio que va desde 1 a 4 en algunos canales, y de 1 a 2 en otros.
Ponerlo a 3V3, tambien modifica un poco la lectura dejandolo entre 4094 y 4095.
« Última modificación: 09 de Febrero de 2018, 20:05:46 por KILLERJC »

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
Re:ADC del STM32F103C8
« Respuesta #20 en: 11 de Febrero de 2018, 13:55:31 »
Pues entonces confirmado, debe ser cosa de la placa que estoy utilizando.
El caso es que después de repasarla sigue igual.
Muchísimas gracias a todos por vuestra ayuda.

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 158
Re:ADC del STM32F103C8
« Respuesta #21 en: 11 de Febrero de 2018, 19:00:20 »
Hola,

Encontré una AppNote sobre el ADC en los STM32 (al parecer todos traen el mismo ADC SAR), la puedes ver acá: AN2834 - How to get the best ADC accuracy in STM32 microcontrollers.

Tiene una lista de los errores más comunes:
- Errores del ADC:
  • Offset Error
  • Gain Error
  • Differential linearity error
  • Integral linearity error
  • Total Unadjusted error
- Errores debido al ambiente:
  • Reference voltage noise
  • Reference voltage/ power supply regulation
  • External reference voltage parameters
  • Analog input signal noise
  • ADC dynamic range bad match for maximum input signal amplitude
  • Effect of the analog signal source resistance
  • Effect of source capacitance and parasitic capacitance of the PCB
  • Injection current effect
  • Temperature influence
  • I/O pin crosstalk
  • EMI-induces noise

El error que comentaba era el de la PCB, que es uno de los pocos que enumeran, también trae como mejorar la precisión del ADC (por software y hardware).

Saludos


 

anything