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í:
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.
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.
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í:
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)?
fuente
Respuestas:
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 el
REFS
bits en elADMUX
registro, como se explica en la hoja de datos :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ó:
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.
fuente
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 .
fuente