¿Son razonables los valores de resistencia (R1 y R2) en este circuito?

Este circuito simplificado está destinado a detectar dos interruptores de límite (que nunca se pueden cerrar simultáneamente, al menos en teoría). El voltímetro que se muestra es un marcador de posición para una conexión a un pin de entrada analógica de un Arduino. Cuando ambos interruptores están abiertos como se muestra en el diagrama, el pin debe detectar 3V31. Cerrando SW1 da 5V y cerrando SW2 da 0V.

Esto funciona muy bien en la simulación, pero me pregunto acerca de la corriente total que muestra la sonda GND... Mi vaga intuición me dice que debe haber una cantidad mínima de corriente para que el convertidor A/D la detecte. , pero no he podido encontrar (o reconocer) una especificación para este mínimo en ninguna parte. (Por el contrario, las especificaciones de la corriente máxima que un pin puede hundir son ampliamente discutidas).

ingrese la descripción de la imagen aquí

Respuestas (5)

Puedo estar muy equivocado, pero creo que este es un caso en el que no quieres pensar demasiado en el problema, KISS.

Cuando SW2 está cerrado, el pin de entrada está conectado a tierra y debería leer 0. Este es el caso en el que un pin no utilizado está conectado a tierra en lugar de dejarlo flotando.

Cuando SW1 está cerrado, la entrada está vinculada a 5 V (ya sea Vcc o Aref), y debe leer el valor máximo (es decir, todos los bits binarios serán 1)

Para los dos casos anteriores, puede eliminar las resistencias del circuito anterior ya que no afectan el nivel del pin de entrada (es decir, uno u otro de los interruptores está cerrado).

El único caso restante a considerar es cuando ambos interruptores están abiertos. Si no tuviera resistencias, el pin de entrada estaría flotando. Cuando la entrada al ADC se deja flotando, uno esperaría leer valores semialeatorios del puerto, ciertamente no un valor invariable de 0 o MAX (todos los bits activados). Si bien no recomiendo omitir las resistencias, debería poder hacer que esto funcione sin ellas.

Si bien no es parte explícita de su pregunta, el caso más interesante es si desea detectar uno de varios interruptores cerrados con un solo pin de entrada analógica. Para una cantidad razonable de pines, digamos 10, esto se puede hacer fácilmente con una escalera de resistencias ( http://en.wikipedia.org/wiki/Resistor_ladder ). También puedes Google escalera R2-R.

Para ver un recorrido de cómo se implementa esto, consulte: http://embedded-lab.com/blog/?p=4040

Aparte, si solo desea detectar el cierre de un solo interruptor, lo más probable es que use un pin de E/S digital en lugar de uno analógico, si está disponible. La razón más común para usar un pin analógico en lugar de uno digital para detectar cierres de interruptores es cuando la cantidad de pines digitales disponibles es menor que la cantidad de interruptores.

No veo por qué las dos resistencias no son iguales. Eso haría flotar el valor en el medio del rango cuando ninguno de los interruptores está cerrado, y en un extremo u otro cuando uno está cerrado. Eso dejaría el mayor margen para diferenciar entre dos estados.

Las entradas A/D generalmente se especifican para requerir una impedancia de fuente mínima para trabajar a su máxima velocidad o precisión. Tendrá que mirar la documentación de arduino para ver qué es eso, o posiblemente en la hoja de datos del microcontrolador si no hay nada entre las entradas analógicas y el micro. Tenga en cuenta que no necesita ningún lugar cercano a la precisión total. La forma exacta en que se degrada el A/D con una impedancia de fuente superior a la especificada es algo específico del chip y, en su caso, posiblemente un circuito adicional agregado por el arduino.

Tenga en cuenta que en su configuración, la impedancia de la señal es básicamente 0 cuando cualquiera de los interruptores está cerrado. Es la combinación en paralelo de las dos resistencias cuando ambos interruptores están abiertos. Si ambas resistencias fueran de 10 kΩ, entonces la impedancia sería de 5 kΩ. La corriente de reposo es el voltaje de suministro (aparentemente 5V en su caso) dividido por la suma de las dos resistencias. Esto sería 5V / 20kΩ = 250µA si ambas resistencias son de 10 kΩ.

Lo más probable es que las cosas funcionen lo suficientemente bien con una impedancia de fuente de 5 kΩ. Podrías probarlo y ver. Es posible que no obtenga exactamente la mitad de la escala con ambos interruptores abiertos, pero es probable que esté lo suficientemente cerca como para distinguir de manera confiable que cualquiera de los interruptores esté cerrado.

Los convertidores A/D suelen tener una impedancia de entrada baja, que será paralela a su R2, por lo que los 3,31 V teóricos pueden dar una lectura diferente (más baja). Por ejemplo, si la impedancia de entrada es 10k Ω el equivalente de R2 se convertirá en 5k Ω , y la lectura será de 2,5 V.
Si el valor exacto es importante, puede usar un seguidor de voltaje en el nodo R1/R2:

ingrese la descripción de la imagen aquí

Los valores que está utilizando para R1 y R2 deberían estar bien.

Creo que los Atmel tienen una resistencia de entrada de 100 MΩ, aunque no estoy seguro de la impedancia.
@Majenko: No se trata de la impedancia de entrada del A/D. Al ser una entrada CMOS que es muy alta como dices. El problema es qué impedancia requiere el A/D que sea la señal. Eso es a menudo alrededor de 10 kOhm, y significativamente menos para A/D de alta velocidad. Algunos A/D pueden controlarse de manera diferente en el firmware para permitir una mayor impedancia de fuente. Si el Atmel puede, y si eso es opcional a través del software arduino, no lo sé.
@stevenh: Quería preguntar antes... ¿Qué software usas para hacer los diagramas de circuitos que publicas aquí?
@Kaelin: no lo dibujé yo mismo. Lo encontré en Google Imágenes.

Los valores son razonables pero pueden ser más altos.

Cada ADC IC tiene su propia especificación de qué tan alta puede tolerar una entrada de resistencia. Un enlace a la hoja de datos del procesador en cuestión nos permitiría señalarle el valor relevante pero, en ausencia de un valor específico, normalmente está en el rango de 10k a 50k y, a menudo, de 20 a 30 k.

Los valores de 22k o incluso 33k probablemente funcionarán bien allí. El valor máximo especificado generalmente se relaciona con mantener el error debido a la constante de tiempo RC por debajo de 1 bit de resolución ADC. Como no le importa demasiado la resolución aquí, es probable que incluso las resistencias de 100K estén bien.

Murphy dice que ambos interruptores se cerrarán simultáneamente en algún momento. También dice que esto sucederá cuando realmente no quieras.

Hay muchos circuitos alternativos que no corren el riesgo de extraer humo mágico de la fuente de alimentación y los contactos del interruptor. p.ej

(1) coloque una resistencia de 1k (digamos) en serie con cada interruptor. Especialmente con valores de resistencia más altos, esto tendrá un efecto insignificante en lo que desea hacer.

(2) Suponiendo que los interruptores se puedan conectar como se desee.

Diga 22K V+ al punto X
Cambie uno de tierra por 10 k al punto X.
cambie dos de tierra por 33k al punto X.

S1 S2 = 0 0 Vx = 5 V Ambos abiertos
S1 S2 = 1 0 Vx = 5 x 10/(10+22) ~~= 1,6 V S1 cerrado
S1 S2 = 0 1 Vx ~= 3 V S2 cerrado S1 S2 = 1 1 Vx~= 1.3V ambos cerrados

Resultados solo para una mayor claridad

5V ninguno
3V S2
1.6V S1 1.3V S1 + S2

Se obtendrá una difusión aún mejor con un poco de reflexión.

tiene su 'usted

Algunos procesadores tienen pull-ups y pull-downs opcionales en los pines de entrada. Si su procesador tiene ambos, podría omitir las resistencias que ha mostrado, aunque sería bueno agregar resistencias (probablemente de 470 ohmios más o menos) en serie con los interruptores. Encender el pull-up interno del procesador, esperar un momento (probablemente entre unos pocos microsegundos y un milisegundo más o menos) y verificar el estado de entrada revelará si SW1 está cerrado. Activar el menú desplegable interno, esperar y verificar el estado de la entrada revelará si SW2 está cerrado.

Si los interruptores tienen resistencias en serie, se podría acelerar la lectura haciendo que el procesador lleve cada pin a nivel alto brevemente después de habilitar los pull-ups internos, y a nivel bajo brevemente después de habilitar los pull-downs internos.

Si los pull-downs internos no están disponibles (pero los pull-ups sí lo están), y si tiene una resistencia en serie en al menos SW2, podría tener una resistencia desplegable permanente y débil. Para verificar si SW1 está cerrado, encienda el pull-up, suba el pin brevemente y léalo. Para verificar si SW2 está cerrado, apague el pull-up, baje el pin brevemente y léalo.