Ho progettato un piccolo sensore PCB per la mia tesi di laurea con un microcontrollore ATtiny44 . Ho bisogno di circa 200 di queste schede per la mia applicazione e 16 sono sempre localmente connesse alla scheda controller. L'intera rete si presenta così:
Per comunicare tra il controller e le schede dei sensori ho scritto il mio bus a 1 pin (basato sul timing). L'unico problema è che la scheda del sensore deve avere un indirizzo per conoscere la sua posizione nella rete, quando invio i suoi dati alla scheda del controller.
Dato che mi era rimasto solo 1 pin sull'ATtiny, ho creato un circuito DAC basato su jumper che dovrebbe generare una tensione analogica basata sull'impostazione di quattro jumper. Poiché la circuiteria del sensore utilizza i valori (47, 470, 1k, 3k, 4k7, 10k, 100k e 220k) e volevo ottimizzare la produzione, ho usato i valori seguenti per il DAC (sostanzialmente 100k, 50k, 20k e 10k ). Il che dovrebbe darmi un buon valore tra 0 V e 760 mV in base all'impostazione del jumper. Esattamente quello che dovevo leggere come tensione analogica con il riferimento interno 1.1 V dell'ATtiny. All'avvio, ATtiny legge questa tensione e dovrebbe conoscere la sua posizione.
simula questo circuito - Schema creato usando CircuitLab
In teoria funziona bene. Ho anche fatto un'analisi Monte Carlo in LTspice per confermare che non ho aree sovrapposte, considerando la tolleranza dei resistori (tutti sono 1% BTW). Di seguito puoi trovare le immagini di questa analisi.
Ora ho prodotto diverse (fortunatamente non 200) di queste bacheche e tuttavia alcune non sono riuscite a ottenere letture corrette sul loro indirizzo (specialmente nelle regioni di indirizzo più alte in cui tutte le tolleranze vengono in gioco contemporaneamente). Ho misurato tutte le possibili soluzioni e finalmente ho capito il mio problema. La mia analisi originale non includeva la tolleranza della tensione di alimentazione a 5 V, che è generata localmente da 12 V con un MC7805 su ciascuna scheda controller. Per scheda tecnica, l'MC7805 ha una tensione di uscita compresa tra 4,8 e 5,2 V.
Dopo averlo capito ho modificato l'analisi di Monte Carlo. Ora sembra così:
Come puoi vedere ci sono belle aree sovrapposte, dove non posso assolutamente dire che questa tensione può significare solo questo indirizzo. Fondamentalmente tutti gli indirizzi che iniziano con n. 8 può ottenere una lettura falsa (con maggiori possibilità di letture false per indirizzi più alti).
Vorrei non come aggiungere diversi valori di resistenza rispetto a quello già utilizzato sulla scheda (come per la tesi che voglio ottimizzare per la produzione).
Io non desidera aggiungere un riferimento di tensione (ad esempio, il diodo Zener) per alimentare la rete di resistenza DAC.
Non riesco più a modificare la scheda controller (e non uso un regolatore di tensione più preciso).
Io posso comunque modificare il progetto del PCB / schematica della scheda del sensore!
Come posso assicurarmi di ottenere sempre letture corrette sull'indirizzo (o per programma o cambiando il circuito)?