Selección de dirección de bus de 4 bits mediante pin de entrada analógica: la simulación Monte Carlo muestra valores de dirección superpuestos


16

Diseñé un pequeño sensor de PCB para mi tesis de maestría con un microcontrolador ATtiny44 . Necesito alrededor de 200 de estas placas para mi aplicación y 16 siempre están conectadas localmente a la placa del controlador. Toda la red se ve así:

Ingrese la descripción de la imagen aquí

Para comunicarme entre el controlador y las placas de sensores escribí mi propio bus de 1 pin (basado en el tiempo). El único problema es que la placa del sensor debe tener una dirección para conocer su ubicación en la red, cuando envío sus datos a la placa del controlador.

Como solo me quedaba 1 pin en el ATtiny, se me ocurrió un circuito DAC basado en puentes que debería generar un voltaje analógico basado en la configuración de cuatro puentes. Como el circuito del sensor utiliza los valores (47, 470, 1k, 3k, 4k7, 10k, 100k y 220k) y quería optimizar para la producción, utilicé los siguientes valores para el DAC (básicamente 100k, 50k, 20k y 10k ) Lo que debería darme un buen valor entre 0 V y 760 mV según la configuración del puente. Exactamente lo que necesitaba leer como voltaje analógico con la referencia interna de 1.1 V del ATtiny. Al arrancar, el ATtiny lee este voltaje y debe conocer su posición.

esquemático

simular este circuito : esquema creado con CircuitLab

En teoría esto funciona bien. Incluso hice un análisis de Monte Carlo en LTspice para confirmar que no tengo áreas superpuestas, al considerar la tolerancia de las resistencias (todas son 1% BTW). A continuación puede encontrar las imágenes de este análisis.

Ingrese la descripción de la imagen aquí Ingrese la descripción de la imagen aquí

Ahora produje varios (afortunadamente no 200) de estos tableros y, sin embargo, algunos no pudieron obtener las lecturas correctas en su dirección (especialmente en las regiones de direcciones más altas donde todas las tolerancias entran en juego a la vez). Medí todas las soluciones posibles y finalmente descubrí mi problema. Mi análisis original no incluía la tolerancia de la tensión de alimentación de 5 V, que se genera localmente a partir de 12 V con un MC7805 en cada placa controladora. Según la hoja de datos, el MC7805 tiene un voltaje de salida entre 4.8 y 5.2 V.

Después de descubrir esto, modifiqué el análisis de Monte Carlo. Ahora se ve así:

Ingrese la descripción de la imagen aquí Ingrese la descripción de la imagen aquí

Como puede ver, hay buenas áreas superpuestas, donde definitivamente no puedo decir que este voltaje solo puede significar esta dirección. Básicamente todas las direcciones que comienzan con no. 8 puede obtener una lectura falsa (con mayores posibilidades de lecturas falsas para direcciones más altas).

No lo haria gustaría agregar valores de resistencia diferentes a los que ya se utilizan en el tablero (en cuanto a la tesis que quiero optimizar para la producción).

No lo haria gustaría agregar una referencia de voltaje (por ejemplo, diodo Zener) para alimentar la red de resistencias DAC.

No puedo modificar la placa del controlador (y usar allí un regulador de voltaje más preciso).

Yo puedo Todavía modificar el diseño / esquema de PCB de la placa del sensor!

¿Cómo puedo asegurarme de obtener lecturas siempre correctas en la dirección (ya sea por programa o cambiando el circuito)?


3
+1 Buena pregunta. ¿Puede proporcionar el último archivo LTspice asc en un pastebin en alguna parte? ¿Entonces podemos probar otras combinaciones?
tenue

2
Gran pregunta, buen trabajo para descubrir qué lo causó realmente antes de pedir orientación aquí. Ahora la pregunta y la respuesta son una buena lectura para cualquiera que pase en lugar de solo usted :-)
Mast

Respuestas:


19

De acuerdo con sus simulaciones, su esquema de direccionamiento funciona bien siempre que solo se consideren las incertidumbres en los valores de resistencia. Es la incertidumbre sobre el voltaje lo que hace que falle.

Mi consejo es cancelar las fluctuaciones en VCC usándolo como referencia para el ADC. Puede hacerlo programando elREFS bits en el ADMUXregistro, como se explica en la hoja de datos :

ingrese la descripción de la imagen aquí

Una vez que cambie a VCC como voltaje de referencia para ADC, ya no medirá el voltaje, sino una relación entre los valores de resistencia y esos son precisos al 1%. No se requieren cambios en el esquema (aunque es posible que desee aumentar el valor de R7 para obtener sus mediciones en el medio del rango de conversión de ADC), solo se debe actualizar el firmware de Attiny.

Si todavía está dispuesto a modificar la placa del sensor, puede reemplazar su esquema por una escalera R-2R como Cano64 sugirió:

esquemático

simular este circuito : esquema creado con CircuitLab

Esto optimizará la resolución al igualar todos los pasos en la escalera. Las resistencias del 1% son lo suficientemente precisas para construir escaleras monótonas de hasta 5 bits.


Doh! No vi el bosque para los árboles. Estaba tan obsesionado con ese 1.1V ... ¡Muchas gracias! Probaré eso.
KarlKarlsom

1
Probado y funciona. ¡Excelente!
KarlKarlsom

Lo probé con VCC como AREF y una resistencia de 220k para R7. Más tarde podría intentar simular una escalera R-2R de 100k y 220k y ver si me da mejores resultados. ¡Gracias de nuevo!
KarlKarlsom

3

Tuve que resolver un problema similar una vez. Necesitaba conectar 4 botones a un pin analógico en arduino, sin embargo, necesitaba reconocer las prensas simultáneas (todas las combinaciones). Se me ocurrió el mismo circuito que tú, luego escribí un programa para buscar todas las combinaciones posibles de valores de resistencia para que los valores finales cuando presionas los botones estén lo más separados posible. ¿Adivina qué? Estamos jodidos, no se puede hacer. Eso es, que tengas un buen día.

Aprendí que los valores de resistencia óptimos para los interruptores están cerca de R, 2R, 4R, 8R y la parte inferior del divisor tiene un valor de R. Su circuito ya está cerca del óptimo, solo necesita reemplazar R7 con 10k resistor.

Pero hay buenas noticias para ti. Dado que solo necesita establecer una dirección (no operará el conmutador mientras el dispositivo se está ejecutando), le recomiendo usar conmutadores SPDT y la escalera R2R .


¿Por qué no se pudo hacer? ¿Qué sucedió cuando conectó sus interruptores a resistencias (R, 2R, 4R, 8R)? ¿Qué combinaciones no funcionaron?
Dmitry Grigoryev

¡La escalera R-2R es una excelente sugerencia por cierto!
Dmitry Grigoryev

+ Dmitry, quise decir que los voltajes de salida están demasiado cerca para distinguirlos de manera confiable.
Cano64
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.