Ich habe eine kleine Sensorplatine für meine Masterarbeit mit einem ATtiny44- Mikrocontroller entworfen. Ich benötige ungefähr 200 dieser Karten für meine Anwendung und 16 sind immer lokal mit der Controller-Karte verbunden. Das gesamte Netzwerk sieht folgendermaßen aus:
Für die Kommunikation zwischen dem Controller und den Sensorplatinen habe ich einen eigenen 1-Pin-Bus geschrieben (zeitbasiert). Das einzige Problem ist, dass die Sensorplatine eine Adresse haben muss, um ihren Standort im Netzwerk zu kennen, wenn ich ihre Daten an die Controllerplatine sende.
Da ich nur noch 1 Pin auf dem ATtiny hatte, kam ich auf eine jumperbasierte DAC-Schaltung, die basierend auf der Einstellung von vier Jumpern eine analoge Spannung erzeugen sollte. Da die Sensorschaltung die Werte (47, 470, 1k, 3k, 4k7, 10k, 100k und 220k) verwendet und ich für die Produktion optimieren wollte, habe ich die folgenden Werte für den DAC verwendet (im Grunde 100k, 50k, 20k und 10k) ). Welches sollte mir einen schönen Wert zwischen 0 V und 760 mV basierend auf der Jumper-Einstellung geben. Genau das, was ich als analoge Spannung mit der internen 1,1-V-Referenz des ATtiny lesen musste. Beim Einschalten liest der ATtiny diese Spannung und sollte ihre Position kennen.
simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab
Theoretisch funktioniert das gut. Ich habe sogar eine Monte-Carlo-Analyse in LTspice durchgeführt , um zu bestätigen, dass ich keine überlappenden Bereiche erhalte, wenn ich die Toleranz der Widerstände berücksichtige (alle sind 1% BTW). Nachfolgend finden Sie die Bilder dieser Analyse.
Jetzt habe ich mehrere (zum Glück nicht 200) dieser Boards hergestellt und dennoch konnten einige nicht die richtigen Werte für ihre Adresse erhalten (insbesondere in den Regionen mit höheren Adressen, in denen alle Toleranzen auf einmal auftreten). Ich habe alle möglichen Lösungen ausgemessen und schließlich mein Problem herausgefunden. Meine ursprüngliche Analyse enthielt nicht die Toleranz der 5-V-Versorgungsspannung, die lokal mit einem MC7805 auf jeder Controller- Karte aus 12 V erzeugt wird . Der MC7805 hat laut Datenblatt eine Ausgangsspannung zwischen 4,8 und 5,2 V.
Nachdem ich das herausgefunden hatte, änderte ich die Monte-Carlo-Analyse. Es sieht jetzt so aus:
Wie Sie sehen, gibt es schöne Überlappungsbereiche, in denen ich nicht definitiv sagen kann, dass diese Spannung nur diese Adresse bedeuten kann. Grundsätzlich sind alle Adressen beginnend mit nr. 8 kann einen falschen Messwert erhalten (mit höheren Möglichkeiten für falsche Messwerte für höhere Adressen).
Ich möchte keine anderen Widerstandswerte als die bereits auf der Platine verwendeten hinzufügen (wie für die These, die ich für die Produktion optimieren möchte).
Ich möchte keine Spannungsreferenz (z. B. Zenerdiode) hinzufügen, um das DAC-Widerstandsnetzwerk zu speisen.
Ich kann die Anschaltbaugruppe nicht mehr ändern (und dort einen genaueren Spannungsregler verwenden).
Ich kann das PCB-Design / Schema der Sensorplatine noch ändern!
Wie kann ich sicherstellen, dass die Adresse immer korrekt angezeigt wird (entweder durch Programmieren oder durch Ändern der Schaltung)?