selección de dirección de bus de 4 bits a través del pin de entrada analógica: la simulación de Monte Carlo muestra valores de dirección superpuestos

16

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

Paracomunicarmeentreelcontroladorylasplacasdesensores,escribímipropiobusde1pin(basadoentemporización).Elúnicoproblemaesquelaplacadelsensordebetenerunadirecciónparasabersuubicaciónenlared,cuandoenvíosusdatosalaplacadelcontrolador.

Comosolomequedaba1pinenelATtiny,semeocurrióuncircuitoDACbasadoenpuentequedeberíagenerarunatensiónanalógicabasadaenlaconfiguracióndecuatropuentes.Comoelcircuitodelsensorusalosvalores(47,470,1k,3k,4k7,10k,100ky220k)yqueríaoptimizarparalaproducción,utilicélosvaloressiguientesparaelDAC(básicamente100k,50k,20ky10k).).Loquedeberíadarmeunbuenvalorentre0Vy760mVsegúnlaconfiguracióndelpuente.Exactamenteloquenecesitabaleercomounatensiónanalógicaconlareferenciainternade1.1VdelaATtiny.Enelarranque,elATtinyleeestevoltajeydebeconocersuposición.

simular este circuito : esquema creado usando 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.

Ahoraprodujevarios(afortunadamenteno200)deestostablerosy,sinembargo,algunosnolograronobtenerlecturascorrectasensudirección(especialmenteenlasregionesdedireccionessuperioresdondetodaslastoleranciasvienenajugaralmismotiempo).Medítodaslassolucionesposiblesyfinalmenteresolvímiproblema.Mianálisisoriginalnoincluíalatoleranciadelatensióndealimentaciónde5V,quesegeneralocalmenteapartirde12Vconun MC7805 en cada placa del controlador. Según la hoja de datos, el MC7805 tiene un voltaje de salida entre 4.8 y 5.2 V.

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

Como puede ver, hay áreas superpuestas agradables, donde no puedo decir definitivamente 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 quisiera agregar valores de resistencia diferentes a los que ya se usaron en la pizarra (en cuanto a la tesis que quiero optimizar para la producción).

no desea 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 un regulador de voltaje más preciso).

¡ puedo seguir modificando el diseño / esquema de PCB de la placa del sensor!

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

    
pregunta KarlKarlsom

2 respuestas

19

De acuerdo con sus simulaciones, su esquema de direccionamiento funciona bien siempre y cuando 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 una referencia al ADC. Puede hacerlo programando los bits REFS en el registro ADMUX , como se explica en la hoja de datos :

UnavezquecambieaVCCcomovoltajedereferenciaparaADC,yanoestarámidiendoelvoltaje,sinounarelaciónentrelosvaloresderesistencia,yestossonprecisosal1%.Noserequierencambiosenelesquema(aunqueesposiblequedeseeaumentarelvalordeR7paraobtenersusmedidasenmediodelrangodeconversióndeADC),soloelfirmwaredeAttinydebeactualizarse.

Siaúnestádispuestoavolveratrabajarlaplacadelsensor,puedereemplazarsuesquemaporunaescaleraR-2RcomosugiereCano64:

simular este circuito : esquema creado usando CircuitLab

Esto optimizará la resolución haciendo que todos los pasos en la escalera sean iguales. Los resistores al 1% son lo suficientemente precisos para construir monotonic escalas de hasta 5 bits.

    
respondido por el Dmitry Grigoryev
3

Tuve que resolver un problema similar una vez. Necesitaba conectar 4 botones a un pin analógico en arduino, sin embargo, necesitaba reconocer pulsaciones simultáneas (todas las combinaciones). Se me ocurrió el mismo circuito que el tuyo, luego escribí un programa para buscar todas las combinaciones posibles de valores de resistencia, de modo 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 todo, 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 que la parte inferior del divisor tiene un valor de R. Su circuito ya está cerca del óptimo, solo necesita reemplazar R7 con resistencia de 10k.

Pero hay una buena noticia para ti. Ya que solo necesita configurar una dirección (no operará el interruptor mientras el dispositivo esté en funcionamiento) Recomiendo usar los interruptores SPDT y R2R escalera en su lugar.

    
respondido por el Cano64

Lea otras preguntas en las etiquetas