Usando un POT para ADC

0

Estoy utilizando un potenciómetro con una tolerancia del 5% como divisor de voltaje para enviar señales de voltaje a un microcontrolador. El mcu lee la tensión y la convierte en números digitales que luego se convierten en tiempo. El problema que tengo es que cuando el sistema se reinicia, el reloj cambia su lectura, no sé realmente por qué sucede esto, pero sucede con frecuencia.

    
pregunta Andy Graddis

2 respuestas

1

Yo diría que tiene un error de precisión. El microcontrolador lee el voltaje del potenciómetro con una referencia a algo , generalmente Vcc, pero también puede estar haciendo referencia a tierra, o algún otro voltaje interno.

Si su voltaje cambia, el valor convertido por el ADC también cambiará. Los cambios de voltaje pueden surgir de muchas cosas, incluidos, entre otros, los cambios de temperatura ambiente, la carga de la fuente de alimentación, la temperatura de los componentes, etc.

Si todo es bastante consistente, es posible que tenga un error de redondeo. Por ejemplo, antes de restablecer puede obtener un valor arbitrario de 10.4 (por ejemplo), pero después de restablecer o una segunda lectura de ADC obtendrá 10.5. Este último se redondearía a 11 si se usaran números enteros.

Es posible que desee modificar su código para que tenga menos "pasos" o más amplios para convertir a tiempo, de modo que los valores de entrada no necesariamente tengan que ser tan precisos.

    
respondido por el JYelton
0

Si simplemente transmite una conversión analógica a digital del punto medio de un divisor de voltaje al puerto serie, es casi seguro que el valor informado no será el mismo cada vez. Siempre hay cierta cantidad de ruido en un sistema, y eso generalmente se manifiesta como una variación en los bits menos significativos de su lectura de ADC. En su caso, es probable que solo tenga 12 o 60 pasos de voltaje que necesite discriminar (según el hecho de que parece que está configurando un reloj). Si tiene un ADC de 10 bits, puede desechar la mayoría de los bits inferiores de forma segura (es decir, cambiar lógicamente la lectura de ADC a la derecha).

Cada bit que mueves a la derecha es una división por 2. Entonces, si tienes un valor de 10 bits, el valor más grande es 2 ^ 10 - 1 = 1023. Puedes dividir eso por 16 y aún tener 64 valores discernibles . Si fuera tú, solo dividiría entre 8 (cambiar a la derecha por 3) y operaré con lecturas efectivas de 0 a 128. Al hacerlo, efectivamente "filtrarás" los bits ruidosos de tus lecturas y obtendrás más predecible comportamiento.

Otro enfoque es promediar muchas lecturas locales temporales. Acumule 1000 lecturas ADC consecutivas en una variable de 32 bits y luego divida la suma resultante por 1000. Suponiendo que el ruido es imparcial, esto hará un trabajo decente de eliminarlo porque los errores se cancelarán en promedio. Me gusta este enfoque en general, pero en su caso creo que deshacerse de partes insignificantes es una buena idea.

    
respondido por el vicatcu

Lea otras preguntas en las etiquetas