E / S analógica de alta precisión con pines digitales

Leer la temperatura de su entorno es bastante fácil, ¿no? Una búsqueda rápida sugiere el DHT11 completamente omnipresente, que habla un protocolo bien documentado y tiene bibliotecas para todos los microcontroladores y plataformas imaginables. Inserte eso en sus interpretaciones de Arduino y explosión, temperatura (¡y humedad!). Pero la solución simple no satisface todas las necesidades, a veces las cosas tienen que volverse más esotéricas.

La técnica resumida por una imagen de Microchip Appnote AN685

Hemos estado observando durante años [Edward]esfuerzos heroicos para construir hardware de detección subacuático accesible. La última vez que supimos de él, estaba trabajando para mejorar la precisión de las medidas de su Arduino del humilde termistor NTC. Ahora el objetivo es el mismo, pero tiene un plan aún más sorprendente, descarta el ADC por completo y prueba un termistor analógico con IO digital. De hecho, es un truco bastante simple basado en la observación intuitiva de que los microcontroladores son mejores para medir el tiempo que el voltaje.

El circuito básico

El circuito tiene un mínimo de cuatro componentes: una resistencia de referencia, el termistor y un pequeño condensador con una resistencia de descarga. Para detectar, configura un temporizador para que cuente y una interrupción de borde para capturar el valor en el temporizador cuando se alterna su entrada. Un ciclo de detección consiste en descargar la tapa a través de la resistencia de descarga, habilitar el temporizador y la interrupción, luego cargarlo con el valor medido. El valor capturado por el temporizador se correlacionará con el tiempo que tardó el límite en cargarse por encima del umbral máximo lógico cuando comienza la interrupción. Al comparar el tiempo de carga según la referencia con el tiempo de carga a través del termistor, puede calcular su resistencia relativa. Y realizar varios ciclos de calibración a diferentes temperaturas ([Edward] sugiere al menos 10 grados de distancia) puede anclar el sistema de medición a la temperatura real.

Para todos los detalles tristes, incluidos consejos sobre cómo ahorrar hasta la última gota de energía, eche un vistazo [Edward]y la anotación de Microchip AN685 a la que alude. Además de esta serie [Edward]“Cave Pearl Project ya ha publicado un número impresionante de publicaciones en Hackday. Para obtener más programas de hardware excelentes, consulte el hardware general para un solo nodo o el “sensor de temperatura”. [Edward] hecho completamente sin partes externas!

  • Consultando a Joe dice:

    Primero.

    Net aunque

  • Guille dice:

    Pero … pero … histeria, inexactitudes en Vlow (max), Vhigh (min) … ¿no importa? PSRR? ¿Caída de VDD debido a la descarga de la batería? ¿Este método tampoco está vinculado a las capacidades de voltaje medido de la CPU? Debido a que usa carga / descarga de capacitores, las entradas y salidas ya no se comportarán como digitales. Por ejemplo, un LED conectado a otra salida afectará el voltaje utilizado como referencia para el condensador.

    • Arte Mezins dice:

      Tus preocupaciones son reales. Hoy en día, la mayoría de las piezas son CMOS, donde la “C” significa complemento. Cuando cambia la salida CMOS, hay una transición en la que los dispositivos de los canales NP y NP se encienden, lo que puede generar una gran cantidad de ruido autoinducido tanto en la pieza como en el suministro del sistema. Por eso es tan importante un BUEN desvío. Algunos microscopios le permiten apagar el transistor del canal N o P, lo que puede ayudar con el ruido si ayuda con la proyección del objetivo. Además, los umbrales de cambio pueden cambiar significativamente con la temperatura, que rara vez se caracteriza en las hojas de datos, por lo que no existe una forma confiable de “diseñar” para esas variaciones. A veces, incluso tener tablas de calibración de temperatura extensas dentro del equipo para adaptarse a los cambios MEDIDOS durante la calibración de diseño (preferida) o de fábrica (costosa y lenta); por supuesto, esto depende de la capacidad para medir la temperatura de manera confiable (no necesariamente con precisión en sí misma, pero constantemente dentro de marco definido, porque el equipo de ajuste externo de fábrica asegura la precisión de la temperatura de la prueba).

      Trabajé para una empresa que fabricaba aviones terrestres para la FAA. Los requisitos de temperatura del equipo eran que el equipo debía operar “dentro de las especificaciones” por encima de la temperatura en un rango de -40 (norte de Alaska) a +75 (Valle de la Muerte) ° C. Debido a la baja temperatura, originalmente SOLO podríamos usar (muy costosas) mil piezas para cumplir con los requisitos de temperatura. Después de que la industria decidió que ya no querían fabricar mil piezas de prueba exóticas, ofrecieron cada vez más piezas de tiempo industrial a las que finalmente cambiamos a pesar de las protestas de la FAA (se olvidaron de que el propósito de usar mil piezas era el rango de temperatura, no la confiabilidad, lo que de hecho, a menudo fue menor debido al alto estrés de las pruebas Mil). Todos nuestros proyectos han sido probados exhaustivamente en cámaras de temperatura, pequeñas (para tableros) y grandes (para sistemas completos), bajo contrato. Las pruebas de temperatura tienen una forma de sacudir rápidamente los proyectos inadecuados. Y cuanto más tarde el problema, más caro se reestructurará. Se acaban de traer demasiadas mil piezas, lo que paraliza la capacidad de realizar una simple reestructuración de reemplazo de piezas.

      También una mina mascota es la práctica habitual de usar resolución, exactitud y precisión indistintamente, aunque las dos últimas están estrechamente relacionadas. No son iguales y es importante conocer sus distinciones, especialmente en contratos grandes y especialmente en aplicaciones críticas para la seguridad (por ejemplo, aviación). El hecho de que pueda obtener más resolución con “trucos” no garantiza que la precisión también mejore.

    • Jason Doege dice:

      ¿Cómo varía la constante de tiempo de un circuito RC con el voltaje? Sin embargo, la verdadera pregunta es si el circuito es lo suficientemente bueno para este propósito. Apuesto por el jugador local, la respuesta es “sí”, especialmente si la constante de tiempo es lo suficientemente grande,

      • Comedias dice:

        La tensión no aparece en la expresión de la constante de tiempo.

        • Jason Doege dice:

          Solo mi punto.

        • Lucas dice:

          Los condensadores varían su capacidad con el voltaje, especialmente los condensadores cerámicos. Esto puede ser tan alto como 70-80% del valor nominal por encima del rango de voltaje nominal.

          También hay absorción dieléctrica, que provoca un cambio de capacidad variable con el tiempo.

  • magia efervescente dice:

    Reinventó el Wilkinson ADC, que se fabricó por primera vez en la década de 1950. Tiene la ventaja de una linealidad diferencial muy buena pero es muy lento. En general, sin embargo, para el ADC tipo Wilkinson, el tiempo de descarga del condensador se mide en lugar del tiempo de carga, evitando así todos los problemas de estabilidad del suministro de voltaje. Si se desea, se pueden descargar dos condensadores calibrados, uno con resistencia conocida y otro con resistencia variable.

  • smerrett79 dice:

    ¿Puede calibrar el autocalentamiento del termistor? Quizás las curvas normales de carga del condensador puedan ayudar. Sus otras publicaciones sugieren que son muy sensibles a pequeñas cargas de calor. ¿Cómo sabe que tiene 0v en su gorra cada vez que inicia el ciclo? Tal vez gire, ¿de qué lado se mide primero cada vez?

    ¿No requiere eso también un reloj de error bajo en las escalas de tiempo relevantes si comparamos dos veces? Puede que lo recuerde mal, pero usa RTC externos en otras partes de la perla de la cueva. Posible fuente de mejora del tiempo

  • MH dice:

    Similar a la forma de leer los joysticks usando el puerto de juegos de computadora de IBM.

    • Ene. dice:

      Y muchas otras marcas, tipos y modelos de ordenadores de los 80.

      Pero a pesar de que el “pequeño truco” mencionado en este artículo no es nada nuevo. Siempre es bueno desenterrar los trucos del pasado, simplemente porque parece que nos olvidamos de las cosas fáciles, porque los circuitos de alta calidad nos arruinan debido a los costos de casi nada. Al jugar con estos conceptos del pasado, permite una mejor comprensión de lo que estamos haciendo o podríamos hacer en nuestro diseño actual o futuro. A veces, no necesitamos alta calidad, pero necesitamos saltar a través de anillos para que un proyecto funcione mejor o sea más versátil. A veces, incluso cuando el diseño ha alcanzado un estado estable y el hardware no se puede cambiar, excepto por valores de componentes simples. Entonces es bueno tener muchos trucos en los que sumergirse …

      Hace mucho tiempo tuve un proyecto que no tenía un IO de respaldo, pero tenía 2 usos diferentes. Por lo tanto, requería dos tipos diferentes de firmware, PERO tenía que tener el mismo firmware en ambos. Por lo tanto, se requirió combinar ambas versiones del firmware y detectar automáticamente con qué hardware se estaba ejecutando, para poder elegir el código correcto desde allí. No hubo IO de respaldo. Usé el ADC del microcontrolador, que estaba conectado a una serie de resistencias y botones (los botones se colocaron en un conjunto de resistencias formando un divisor de voltaje, por lo que presionar un botón crea un voltaje diferente), tenía un pequeño capacitor para reducir el ruido de entrada. Así que decidí tener un valor de 100nF en un PCB y 220nF en el otro. Esto podría detectarse de alguna manera similar (en realidad más simple porque la precisión no era un gran problema) como aquí, apagué el ADC, usé el pin IO como un IO regular, lo cargué haciendo que el IO fuera alto (1) y luego cambié el pin IO para ingresar y midió cuánto tiempo tardó en caer a 0. Después de eso, el microcontrolador cambió el pin IO al modo ADC para medir los botones normalmente. Este truco no afectó el funcionamiento normal y sirvió de amuleto.

  • Andy Pugh dice:

    He considerado, pero nunca construido, una variación sobre este tema mediante un comparador.
    La idea es emitir un ciclo de trabajo PWM a un filtro de paso bajo y pasar ese voltaje analógico a un lado del comparador, con la salida comparativa llevada a la entrada digital.
    Si el comparador baja, reduce el ciclo de impuestos, si no, lo aumenta. Por lo tanto, el ciclo de trabajo PWM rastrea el voltaje de entrada y se puede usar como sustituto.
    No puedo decidir si este ADC con seguimiento ofrece un ancho de banda mejor o peor que la versión de prueba única.
    Esta idea se pensó como una forma de leer voltajes analógicos con un puerto paralelo y software PWM, pero debería funcionar mejor con hardware de microprocesador PWM.

    • tekkieneet dice:

      Es simple, PERO PWM con paso bajo sigue siendo una fuente muy ruidosa. Basura en un lado de un comparador = desperdicio. Está mucho mejor con un ADC sigma delta con su comparador o simplemente una carga / descarga RC porque tienen una resolución mucho más alta.

      • Andy Pugh dice:

        El voltaje de referencia de ruido en realidad podría ser una ventaja, dando más transiciones comparativas para trabajar.

        • tekkieneet dice:

          Hay muchos problemas con PWM, por eso no se usa en ningún ADC real.
          – intercambio con resolución PWM por frecuencia.
          – difícil de filtrar sin utilizar una constante de tiempo alta, es decir, un tiempo de configuración muy largo
          Entre estos dos, realmente puede obtener resultados altos sin un filtro RC de alto orden, un tiempo de conversión prolongado.

          Debería al menos probar una especia o usar un alcance para mirar el PWM filtrado. Solo desea que su ruido sea una pequeña fracción de su señal lo suficiente como para temblar, o simplemente ahogaría la SNR. Solo la conversión directa tomaría mucho tiempo y desea obtener varias muestras solo para una lectura bastante limpia. Podrías tener mucho mejor N / N, resolución y tiempo de conversión con esos otros métodos.

          • Andy Pugh dice:

            Todos son buenos puntos, aunque aquí estamos hablando de medir la temperatura ambiente, por lo que una constante larga es probablemente tolerable.
            El ADC dedicado SPI que supera los bits es probablemente al menos igual de útil, en la práctica.

    • drenehtsral dice:

      IIRC Apple II utilizó un esquema similar para leer el joystick.

    • Andy Dodd dice:

      Eso suena como un delta sigma (a veces llamado sigma delta, olvido cuál es el correcto) ADC. No es el mismo concepto, pero es similar.

  • Felipe dice:

    ¿Qué tan preciso lo obtuvo a través de PVT?

  • drenehtsral dice:

    Desea asegurarse de que el pin GPIO digital del microcontrolador elegido no se comporte mal cuando la línea de entrada se encuentra en voltaje medio (por encima del máximo para 0 y por debajo del mínimo para 1) como algunos búferes CMOS. La mayoría de las computadoras modernas pueden manejar esto, aunque vale la pena mirar la hoja de datos, ya que el modo de falla cuando un pin es vulnerable es una disipación de energía demasiado específica en el lado de salida del búfer de entrada, ya que tanto los controladores altos como los bajos pueden ser parcialmente sobre. La búsqueda de una entrada activada por Schmidt es una forma de orden 0 para ver si el diseñador ha considerado entradas intermedias.

    Muchos microscopios colocan entradas analógicas y digitales en el mismo pin, pero tienen un mezclador o interruptor que desconecta la entrada digital y la conecta a un menú desplegable interno si habilita la función analógica en ese pin (por ejemplo, ANSELx en las partes PIC32).

    • Greg A. dice:

      Este es un buen punto. No sé acerca de las piezas de atmel, pero la mayoría de los PIC tienen algunos rompecabezas schmitt en sus pines GPIO. Siempre es una buena idea buscar el diagrama del pin que planea usar, ya que existe una gran variedad entre los diferentes GPIO en algunos de estos dispositivos.

  • Greg A. dice:

    Me parece que tiene todos los componentes (incluido el microcontrolador) al mismo tiempo, entonces no necesita precisión, solo repetibilidad. el hecho de que la base de tiempo, las puertas lógicas, el condensador y la resistencia de referencia cambien con la temperatura no importa siempre que repita el mismo comportamiento que mostró cuando se calibró.

  • Beau Schwabe dice:

    El 558 (básicamente un temporizador Quad 555) era popular en los joysticks de las computadoras. Se necesitaban cuatro canales para obtener X e Y para dos joysticks. No hace falta decir que seguía siendo un impulso constante de RC desde los 555 y luego a la computadora en lugar de conducir directamente la computadora.

    El enfoque 555 puede ser “más limpio” para la computadora y requiere menos luz de software (es decir, solo mide el ancho del pulso), sin embargo, la resistencia de referencia en el acceso directo a la computadora podría dar un resultado más preciso, ya que se puede usar para proporcionar una conexión: un valor métrico que niega / minimiza las variaciones debidas a la temperatura en el condensador base y la resistencia medida.

  • GekkePrutser dice:

    “Conecte eso a sus interpretaciones Arduino y explosión, temperatura (¡y humedad!). Pero la solución simple no satisface todas las necesidades”.

    En verdad, DHT11 no satisface muchas necesidades. La precisión es terrible: / Solo hace grados enteros y generalmente pocos. Bwah.

    El DHT22 / AM2304 es un poco mejor, pero los módulos más modernos son mucho mejores.

    • GekkePrutser dice:

      Además, para la temperatura, realmente recomiendo el Dallas DS18B20. Son geniales y el bus de un solo cable es útil (aunque un poco lento) si tiene muchos de ellos.

      Para temp / hum, realmente no conozco ninguna buena primera vez. Pero he escuchado cosas buenas sobre la serie SHTxx de Sensirion.

  • Edward Mallon dice:

    También puede medir la temperatura cronometrando la caída de carga de polarización inversa en cualquier tipo de diodo. Esto permite lecturas de alta resolución sin el amplificador operacional, que a menudo se ve utilizado por métodos de diodo que miden el cambio en el voltaje frontal. Así que ahora estamos tratando de decidir entre termistores y diodos para la detección de temperatura ambiente. Como beneficio adicional, los dos dispositivos están lo suficientemente cerca como para que pueda usar los mismos cálculos de Steinhart & Hart a alrededor de 30 ° C:

    https://thecavepearlproject.org/2019/11/04/single-diode-temperature-sensor-with-arduino-icu-via-reverse-bias- fuga /

Miguel Vidal
Miguel Vidal

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *