Arduino Uno leyendo señal analógica de 24v DC

Descargo de responsabilidad: por favor sea amable, soy un novato con la electrónica.

Descripción general

Tengo una señal de sensor analógico de 24 V CC patentada con la que estoy tratando de interactuar usando un microcontrolador basado en Arduino. El sensor tiene solo dos conexiones que se utilizan tanto para alimentación como para señalización.

Acercarse

He buscado en varias publicaciones y sitios relacionados con la conversión de la señal analógica de 0-24v al rango de 0-5v que puede interpretar el ADC en el Arduino Uno (en realidad, Freetronics Eleven con ATmega328P).

De lo que he reconstruido:

  • El ADC es de 10 bits para 0-5v, por lo que tengo aproximadamente 4,88 mV por paso (un total de 1023 pasos). La resolución es lo suficientemente buena para mis necesidades.
  • Puedo usar un circuito divisor de voltaje simple para "reducir" a un rango de 0 - 5v.
  • Debo elegir mis valores de resistencia no solo para lograr el voltaje dividido deseado, sino también para adaptarse a la impedancia del ADC. Todavía estoy perdido con todo el asunto de la impedancia, así que todavía no estoy seguro de si usar R1 y R2 de tamaño como, por ejemplo, 4.7Kohm y 1.2Kohm o más grandes en un orden de magnitud o dos.
  • Búfer de voltaje / amplificador operacional: vi referencias para incluir esto como parte del circuito, pero nuevamente mi ignorancia solo me hace peligroso en este punto. No estoy seguro de por qué esto es útil o qué logra, pero creo que parece ayudar a abordar la falta de coincidencia de la impedancia de la señal de 24v y la del ADC. Pero podría estar equivocado.

Una pregunta particular que tengo es sobre el hecho de que el ADC y la señal del sensor de 24v que estoy tratando de conectar es que tienen diferentes fuentes de energía y aparentemente esto es un problema porque no comparten la misma GND. Fuera de mi profundidad, por lo que una idea sería útil. El Arduino está funcionando a 5v DC.

Me doy cuenta de que SE prefiere el tipo de publicaciones de preguntas y respuestas, pero para mí lo anterior es un contexto que encaja en el circuito más grande, al menos eso es lo que pienso.

Realmente apreciaría si aquellos con más comprensión y conocimiento pudieran ofrecer sus puntos de vista y afirmar mis pensamientos anteriores e incluso elaborarlos para mejorar mi comprensión y aclarar algunos de mis malentendidos.

¡Muchas gracias!

Como mínimo, necesitamos saber más acerca de este misterioso "sensor analógico de 24 V CC patentado", así como la frecuencia con la que debe probarlo, para poder asesorarlo.
@Techydude Disculpas por la información limitada. Yo mismo no tengo mucho más. Es un sensor inalámbrico de lluvia y ET de Hunter que estoy tratando de "reapropiar" para un proyecto. Es probable que lo que espero obtener del sensor sea una señal similar a PWM, pero no puedo confirmarlo. De qué se trata todo esto, así que puedo ver si puedo encontrar una manera de usar sus datos. Desafortunadamente, no tengo acceso a equipos costosos como osciloscopios o analizadores lógicos, pero me gustaría probar lo que pueda con el ADC básico disponible, etc. Sin embargo, no sé si eso te ayuda a hacer alguna pregunta.
sí, la versión inalámbrica de solar sync. En concreto, el módulo receptor (WSS-SEN). Para referencia hunterindustries.com/sites/default/files/OM_WirelessSS_em.pdf
Aquí hay mucha confusión. el "Receptor inalámbrico de sincronización solar" parece ser un complemento alimentado por batería para algún producto Hunter que interactúa con 2 cables a los controladores X-Core o ACC, y algunos otros productos Hunter necesitan un 'Módulo de sincronización solar' intermediario adicional ( en cuyo caso su enlace con el SSModule también es inalámbrico). ¿Supongo que desea conectar un "Receptor inalámbrico de sincronización solar" a su Arduino? Si es así, dudo que reciba una señal de 24 V CC.
En otras palabras, ha hecho un montón de suposiciones que no creo que sean el caso (24 V (sin mención de CC en el doco), sensor de salida analógica?, ¿PWM?). No estoy convencido de que ninguno de estos se aplique. Sospecho que el receptor Solar Sync alimentado por batería simplemente cierra (cortocircuita) sus contactos de 2 cables, lo que el controlador interpreta como "¡Está lloviendo!" y actúa en consecuencia (apaga el riego, etc.). Si mi lectura de esto es correcta, entonces una sola entrada digital en su Arduino con un pull-up de 10kohm probablemente hará el trabajo, para decirle a su Arduino lo mismo '¡Está lloviendo!' señal.
En otras palabras, el Solar Sync no es un pluviómetro, no le da una señal analógica de cuánto está lloviendo; observa la evapotranspiración y luego simplemente le dice al controlador: "Está lloviendo, vaya y compórtese apropiadamente con esa nueva información"; una salida binaria.
Debería poder probar la mayoría de estas hipótesis con un multímetro. Dependiendo de cuál sea la correcta, su solución de interfaz podría ser incluso más simple de lo que esperaba.
@Techydude No funciona con batería. Tengo un multímetro que muestra un suministro de 24 V CC a ~ 10 mA cuando se maneja desde un controlador X-Core. No usa un "Módulo de sincronización solar", lo habría dicho si lo hiciera. Recibe datos del sensor remoto para lluvia y ET. Sí, estoy haciendo las mejores conjeturas: después de todo, es propietario y afirmé que de eso se trata, de experimentar, de aprender con la ayuda y las ideas de otros entusiastas, algo así como el objetivo de mi publicación, ¿no crees? En pocas palabras, cómo muestrear la señal de CC de 24 V con el ADC de 10 bits de Arduino y ver qué obtengo. Tal vez sea PWM o voltaje lineal o codificado o no.
Gracias @NickJohnson - Eso espero. MM proporciona un suministro de CC de 24 V a 10 mA cuando se conecta al controlador x-core original.
Tranquilízate: no tenía la intención de atacarte, aunque se me puede acusar de no endulzar mis palabras :). Al leer más ese pdf, creo que si el controlador X-Core está proporcionando 24 V CC al SSReceiver, entonces dudo que la tarea que tiene por delante sea leer una señal de 0 a 24 V CC; de lo contrario, el SSReceiver no tendrá una fuente de alimentación. cuando está emitiendo un voltaje bajo (pollo y huevo). Como dije anteriormente, creo que su trabajo es generar una señal binaria, llueva o no.
Así que mi corazonada es que este esquema de 2 hilos se comunicará mediante la aplicación de una carga al suministro de 24 V CC que detecta el controlador, o se está utilizando algún tipo de esquema de PLC (Power Line Comms). Si este esquema de 2 hilos se usa en otros sensores que SÍ proporcionan un rango de señal 'analógico' (a diferencia de un estado binario), entonces mi apuesta sería un esquema de PLC.
El manual dice que el módulo que tiene usa 24 VCA, no CC. ¿Puede verificar que en realidad es CC?
@Techydude Gracias por el aporte: otra vía para explorar. Yo tampoco creo que sea necesariamente una señal de 0 a 24 V CC, probablemente binaria. Intentaré aprender más sobre PLC. Entonces, tal vez esta sea una pregunta tonta, pero suponiendo que sea una señal analógica (tal vez un rango de voltaje más pequeño por encima de un nivel de potencia) o PWM o de tipo binario, ¿cómo leería una señal de los 2 cables en primer lugar? ? Dado que el Arduino no está alimentando el sensor, ¿cómo se conectaría un pin analógico/PWM (por ejemplo, después del divisor de voltaje)? ¿O primero necesitaría un circuito separado en el lado del sensor?
@NickJohnson Sí... Lo noté, pero la energía que se suministra al sensor es definitivamente CC. El controlador usa 24 Vac, pero ¿quizás la conexión del sensor es CC para permitir la señalización?
@NickJohnson Creo que el 24Vac al que se hace referencia en el documento es lo que alimenta el módulo Solar Sync (para los controladores que necesitan usarlo como intermediario).

Respuestas (3)

Parece que su primera tarea será determinar qué tipo de señalización se está utilizando, por lo que necesita comenzar con un "osciloscopio de pobre" en forma de microcontrolador con ADC. Querrá usarlo para medir tanto el voltaje a través de los cables del sensor como la corriente a través de ellos; si los cables se utilizan tanto para la alimentación como para la comunicación, es probable que la forma en que se comunica sea aumentando y disminuyendo la cantidad de corriente que consume, en cuyo caso su información más útil vendrá midiendo la forma de onda actual.

Como observaste, el Arduino puede medir voltajes entre 0 y 5 voltios en sus puertos analógicos. Para medir un rango más amplio, hasta 24 voltios, necesitamos un divisor de voltaje, como este:

esquemático

simular este circuito : esquema creado con CircuitLab

El funcionamiento básico de un divisor de resistencia es simple. Ignore 'Radc' por un momento y suponga que 'IN' está conectado a una fuente de voltaje. La corriente fluirá desde IN, a través de Ra y Rb, a tierra; la cantidad de esa corriente depende del voltaje en IN. Podemos calcular esto con i = Vin / (Ra + Rb). El voltaje donde se encuentran Ra y Rb dependerá de la corriente que fluya y del valor de Rb: es Vdiv = i * Rb.

Sabiendo esto, podemos construir un divisor para cualquier razón que queramos simplemente determinando los valores relativos de Ra y Rb. Pero ¿qué pasa con los valores absolutos? En principio podemos elegir la magnitud que queramos, pero en la práctica hay varias consideraciones importantes:

  1. Es probable que 'In' no sea una verdadera fuente de voltaje, capaz de suministrar corriente ilimitada, sino que tenga su propia resistencia interna, a la que llamamos impedancia de salida. Si extraemos suficiente energía de él, hará que la entrada se hunda, produciendo resultados inexactos y afectando potencialmente al resto del circuito.
  2. Disipar una gran cantidad de corriente a través de nuestro divisor mediante el uso de resistencias pequeñas también desperdicia mucha energía y produce mucho calor no deseado.
  3. Es probable que nuestro dispositivo de medición tampoco sea perfecto. Nuestras ecuaciones anteriores asumen que el ADC no pone ninguna carga en el divisor de resistencia, pero eso no es correcto. Diferentes tipos de entrada cargarán lo que están midiendo en diferentes grados; aquí es donde entra Radc: es una representación de la carga que el ADC pone en el circuito, no un componente físico discreto. En el caso de un Arduino, podemos suponer que está en el rango de 10 kiloohmios a 100 kiloohmios, dependiendo de cosas como la frecuencia de muestreo.

El punto 1 anterior significa que queremos hacer que la impedancia de nuestro divisor de resistencia, la suma de los valores de ambas resistencias, sea mucho más alta que la impedancia de salida del circuito que estamos midiendo, para que no afecte nuestras medidas. El punto 3 anterior significa que queremos hacer que la resistencia que ve nuestro ADC (Ra, en este caso) sea mucho más pequeña que su propia impedancia de entrada, de modo que la impedancia del ADC no afecte las mediciones. Si es posible, queremos seleccionar un valor intermedio: una resistencia para Ra+Rb que sea más de, digamos, 100 veces la impedancia de salida del circuito de entrada, y una resistencia para Ra que sea menos de, digamos, 1/100 del ADC. Impedancia de entrada.

Pero, ¿y si esos dos requisitos están en conflicto? Ahí es donde entra un opamp.

Un opamp (amplificador operacional) ideal tiene una impedancia de entrada infinita (no perturba en absoluto la señal que está midiendo) y una impedancia de salida cero (su salida es una fuente de voltaje perfecta). Los amplificadores operacionales de la vida real difieren de este ideal en mayor o menor medida, pero para nuestros propósitos es lo suficientemente cercano a la realidad.

Podemos explotar estas propiedades para mejorar nuestro circuito de medición colocando el opamp entre el divisor de resistencia y la entrada ADC, así:

esquemático

simular este circuito

Ahora, nuestro divisor de resistencia 've' una impedancia de salida muy alta desde la entrada del Opamp, y nuestro ADC 've' una impedancia de entrada muy baja desde la salida del Opamp: ¡lo mejor de ambos mundos!

Elegir un amplificador operacional

Pero, ¿qué opamp necesitamos? Bueno, tenemos algunos requisitos:

  1. Queremos poder alimentarlo desde el suministro de 5v de nuestro Arduino
  2. Debe estar en un paquete fácil de soldar.
  3. La entrada y la salida deben ir desde tierra hasta el voltaje de suministro; esto se denomina "E/S de riel a riel".
  4. Debe estar fácilmente disponible y asequible.
  5. Debería ser capaz de manejar señales hasta la velocidad máxima de nuestro ADC, alrededor de 10-20 KHz.
  6. Su impedancia de entrada debe ser bastante alta.

Una búsqueda rápida en digi-key revela el MCP6241 , que admite voltajes de entrada tan bajos como 0,3 voltios por debajo del riel negativo y tan altos como 0,3 voltios por encima del riel positivo (5v), y voltajes de salida dentro de los 35 milivoltios de los rieles negativo y positivo , que es fácilmente lo suficientemente bueno para nuestros propósitos. Los pines de alimentación de este opamp se pueden conectar directamente a GND y VCC en el Arduino, con el resto cableado como se muestra en el diagrama de arriba.

¿Qué pasa con el divisor de resistencia? Bueno, la hoja de datos del MCP6241 dice que su impedancia de entrada es de 10 13 ohmios, unos absurdos 100 teraohmios, o cien millones de megaohmios. Esto es alto incluso para un amplificador operacional, y significa que podemos usar un divisor de resistencia tan grande como desee, o eso cree.

Una última arruga al elegir el valor de nuestro divisor de resistencia es que tampoco vivimos en un mundo ideal cuando se trata de construir nuestro circuito. Los PCB no son aislantes perfectos, y tampoco lo son las placas de prueba; la contaminación de la superficie también afectará la resistencia, y si toca su circuito, puede garantizar que la resistencia a través de su piel sea mucho más baja que un teraohm. Todo esto significa que debemos elegir un valor de divisor de resistencia que sea mucho más bajo que el máximo teórico: una buena regla general es algo en el rango de 100 kiloohmios a 1 megaohmio.

Queremos dividir nuestra entrada para que 24 voltios de entrada sean aproximadamente 5 voltios de salida, lo que significa que necesitamos una proporción de 5/24 = ~ 20%. Supongamos que establecemos Rb en ​​100 kiloohmios; eso significa que Ra debería ser 4 veces más grande, o alrededor de 400 kiloohmios. 402 kiloohmios es un valor fácilmente disponible, lo que nos da una relación de división final de 100/(100+402) = 19,9 %, lo que significa que 24 voltios de entrada se medirán como 4,78 voltios de salida.

Corriente de medición

Todo lo anterior tiene como objetivo permitirle medir fácilmente una señal de 24 voltios en su microcontrolador sin perturbar mucho la entrada. Si desea medir una corriente, su vida es mucho más simple: determine el rango probable de corrientes que desea medir y elija una resistencia que cree una caída de voltaje pequeña pero medible en esos niveles. Con su sistema de 24 voltios, cualquier cosa de hasta 1 voltio puede ser aceptable. Luego, coloque esa resistencia entre tierra y el cable negativo de su sensor, y mida el voltaje a través de él directamente con su ADC, o a través del opamp sin el divisor de resistencia si lo desea.

Que respuesta!! Nick, gracias por explicar con tanta paciencia y por el detalle y el razonamiento relevante. Obtuve una comprensión de su respuesta (es cierto que después de leerla lentamente de nuevo 5 o 6 veces) que es muy práctica. La impedancia en relación con la señal, a través del divisor de voltaje y lo que es ideal para el ADC tiene mucho más sentido ahora, al igual que el papel del amplificador operacional. Aunque no resulte nada, estoy aprendiendo :) Ordenaré el MCP6241 y lo probaré.
En cuanto a la señal actual, dado que el multímetro mostró alrededor de 10 mA, un rango de 5-50 mA debería ser un punto de partida aproximado. Es cierto que estoy un poco inseguro con este aspecto de medir la corriente como una señal. Digamos que uso una resistencia de 2.4kOhm de la manera que sugieres, ¿estoy midiendo con el ADC solo en esta resistencia? o desde el lado GND de la resistencia y el lado positivo de la señal de 24v? De nuevo, gracias por tu ayuda.
Para medir la corriente, coloca la resistencia en serie con la señal que está midiendo. En este caso, entre el cable de retorno del sensor y su tierra (compartida). El voltaje a través de la resistencia que crea el flujo de corriente es lo que mide, y se denomina "voltaje de carga"; nuevamente, es un caso de compensaciones, desea minimizar el voltaje de carga debido a su impacto en el dispositivo que está midiendo, pero maximizarlo para la precisión de la medición.
50 miliamperios a 2,4 kiloohmios son 120 voltios, ¡obviamente demasiado alto! Desea algo más cercano a los 20 ohmios, lo que le dará un voltaje de carga de 1 voltio a 50 miliamperios.

El ADC estará feliz con < 10K de impedancia de fuente. Si tiene un divisor de voltaje R1 R2 conectado a una fuente de voltaje, la impedancia de la fuente es 1/(1/R1 + 1/R2).

La relación debe estar cerca de 3,8:1 para la aplicación.

Entonces puede elegir R1 = 38.3K 1% y R2 = 10.0K 1% (de los valores estándar E96 ).

La impedancia de la fuente (vista por el ADC) es de 7,9 K, la relación es tal que 24 V -> 4,98 V.

Siempre que una carga de 48 K (10 K + 38,3 K) no afecte indebidamente su señal de 24 V, debería estar bien.

Agradezco los comentarios. Lo intentaré. ¿Algún problema con el sensor que tiene una fuente de alimentación separada que no comparte GND con el ADC?
Tiene que haber un terreno común (uno solo) en alguna parte. Sin un esquema, no puedo imaginar todas las formas en que las cosas podrían estar mal y las pocas formas en que podrían estar bien.
OK, anotado - gracias. Buscará la opción de amplificador de aislamiento como lo sugiere @jim-fischer.

Una pregunta particular que tengo es sobre el hecho de que el ADC y la señal del sensor de 24v que estoy tratando de conectar es que tienen diferentes fuentes de energía y aparentemente esto es un problema porque no comparten la misma GND.

Sí, esto es definitivamente una preocupación. Si las conexiones a tierra de los sistemas de 24 V CC y 5 V CC están galvánicamente aisladas entre sí y deben permanecer así por motivos de seguridad, deberá utilizar un circuito amplificador de aislamiento (por ejemplo) para conectar de forma segura el voltaje reducido proporcionado por la salida del divisor de voltaje resistivo en el lado de 24 VDC a la entrada ADC en el lado de 5 VDC.

Sampled 24V out -> [IA] -> ADC in (5V side)

Para obtener más información, realice una búsqueda en Internet en galvanic isolationy isolation amplifier IC, por ejemplo.

¡Genial, gracias por eso, Jim! Voy a mirar en estos. Para verificar, creo que no tengo una GND compartida porque: ADC está en ATMega328P, que es parte de un circuito personalizado alimentado por un transformador de 24 Vac (usando TRIAC para cambiar las salidas de 24 Vac). Obviamente, ese circuito convierte los 24 V CA a 5 V CC para el microcontrolador, pero no hay 24 V CC disponibles para aprovechar. Entonces, para obtener 24 V CC, uso el mismo transformador, aplico rectificador, tapas de filtro y regulador de voltaje. ¿Seguramente no comparten GND dada la separación de la MCU y la fuente de 24 V CC del sensor en la salida de 24 V CA del transformador? Disculpen mi ignorancia, si es que está mal.
No estoy comprendiendo la topología de su circuito solo a partir de sus descripciones verbales. Se dice que "una imagen vale más que mil palabras", entonces, ¿puede proporcionar una figura de diagrama esquemático que muestre la topología del circuito básico que está describiendo? Tal vez dibuje a mano una versión simple de la topología del circuito, tome una foto del esquema con su teléfono inteligente, cargue la imagen desde su teléfono inteligente a Internet (por ejemplo, a imgur.com) y proporcione un enlace al archivo de imagen cargado . para que podamos echarle un vistazo.
Espero sinceramente que esta maqueta no haga que sea más difícil de entender. Consulte este enlace para ver un diagrama esquemático donde cada "circuito" está debajo de su propio "bloque". (Nota personal: trabaje para aprender el equilibrio correcto de demasiado o poco detalle, pero me estoy desviando :)
El bloque 1 (rojo) es la fuente de alimentación y el transformador. El bloque 2 (azul) es un rectificador y regulador de voltaje para convertir la salida del bloque 1 a CC. El bloque 3 (marrón) es un microcontrolador que "cambia" las salidas de 24 Vac en función de la programación y las entradas de sus pines de E/S. El bloque 4 (verde) es el sensor de 2 hilos que estoy tratando de conectar y leer algunas señales de voltaje / corriente. El bloque 5 (negro) tiene dos versiones, una para obtener el voltaje del sensor y la otra para obtener la señal de corriente como entradas a los pines de E/S del microcontrolador (bloque 3). Supongo que la pregunta es si los diversos GND pueden ser comunes.
¡Ups! Aquí está el enlace: i.imgur.com/PmAMQM1.png
Sin conocer la topología del circuito de la fuente de alimentación del ensamblaje 3 (A3) "Circuito personalizado basado en Arduino con ATmega328P", no puedo darle una recomendación confiable. Si A3 tiene un circuito de fuente de alimentación de rectificador de puente de onda completa, del mismo tipo que se muestra para el conjunto 2 (A2) "Rectificador de puente y regulador - 24 VCA a 24 VCC"), entonces me inclino a decir que sí, que pueden conectarse de manera segura A2.SUELO y A3.SUELO. ::AVISO:: Si la fuente de alimentación de A3 es una topología de circuito rectificador de media onda, NO DEBE conectar A2.TIERRA y A3.TIERRA; es probable que se produzca una falla catastrófica si están conectados.
Advertencia: para que conste, NO recomiendo "montar a cuestas" (conectar en paralelo) dos circuitos de fuente de alimentación de CC en el mismo devanado secundario (sin explotar) en el transformador de red, como se está considerando/haciendo aquí. No considero que este sea un diseño electrónico WRT de "mejores prácticas".
Gracias por eso Jim. Examiné la PCB del ensamblaje 3 (circuito ATmega328p) y descubrí que el subcircuito de la fuente de alimentación usa un MC34063 y un 1117-33. Desde la web, el primero es un regulador de conmutación y el segundo un regulador 1117-33 3.3v. Difícil de hacer más detalles de PCB. Se señaló con respecto al uso del transformador: ¿se debe a la retroalimentación de uno a otro o porque uno podría afectar la entrega de energía al otro (corriente o voltios)?
Me pregunto si debería abordar la "potencia y medida" del sensor de manera diferente. Estuve jugando y descubrí que puedo alimentar el sensor con 12v y 15ma (alrededor de 8-9v deja de funcionar pero no tengo fuente de alimentación digital para saber exactamente). ¿Podría potencialmente lograr un aumento de los 5 V CC disponibles en A3 para alimentar el sensor y, por lo tanto, compartir el mismo terreno y poder leerlo a través de un pin de E/S?