J'ai conçu un petit PCB de capteur pour ma thèse de maîtrise avec un microcontrôleur ATtiny44 . J'ai besoin d'environ 200 de ces cartes pour mon application et 16 sont toujours connectées localement à la carte contrôleur. L'ensemble du réseau ressemble à ceci:
Pour communiquer entre le contrôleur et les cartes de capteurs, j'ai écrit mon propre bus à 1 broche (basé sur le timing). Le seul problème est que la carte capteur doit avoir une adresse pour connaître son emplacement dans le réseau, lorsque j'envoie ses données à la carte contrôleur.
Comme il ne me restait qu'une seule broche sur l'ATtiny, j'ai trouvé un circuit DAC basé sur des cavaliers qui devrait générer une tension analogique basée sur le réglage de quatre cavaliers. Comme le circuit du capteur utilise les valeurs (47, 470, 1k, 3k, 4k7, 10k, 100k et 220k) et que je voulais optimiser pour la production, j'ai utilisé les valeurs ci-dessous pour le DAC (essentiellement 100k, 50k, 20k et 10k ). Ce qui devrait me donner une belle valeur entre 0 V et 760 mV en fonction du réglage du cavalier. Exactement ce que j'avais besoin de lire comme une tension analogique avec la référence interne 1,1 V de l'ATtiny. Au démarrage, l'ATtiny lit cette tension et doit connaître sa position.
simuler ce circuit - Schéma créé à l'aide de CircuitLab
En théorie, cela fonctionne bien. J'ai même fait une analyse de Monte Carlo dans LTspice pour confirmer que je n'ai pas de zones de chevauchement, en considérant la tolérance des résistances (toutes sont de 1% BTW). Vous trouverez ci-dessous les photos de cette analyse.
Maintenant, j'ai produit plusieurs (heureusement pas 200) de ces cartes et pourtant certaines n'ont pas réussi à obtenir des lectures correctes sur leur adresse (en particulier dans les régions à adresse supérieure où toutes les tolérances viennent jouer en même temps). J'ai mesuré toutes les solutions possibles et finalement trouvé mon problème. Mon analyse d'origine ne comprenait pas la tolérance de la tension d'alimentation de 5 V, qui est générée localement à partir de 12 V avec un MC7805 sur chaque carte contrôleur. Par fiche technique, le MC7805 a une tension de sortie comprise entre 4,8 et 5,2 V.
Après avoir compris cela, j'ai modifié l'analyse de Monte Carlo. Cela ressemble maintenant à ceci:
Comme vous pouvez le voir, il y a de belles zones qui se chevauchent, où je ne peux pas dire avec certitude que cette tension ne peut signifier que cette adresse. Fondamentalement, toutes les adresses commençant par no. 8 peut obtenir une fausse lecture (avec des possibilités plus élevées de fausses lectures pour des adresses plus élevées).
Je ne voudrais pas ajouter des valeurs de résistance différentes de celle déjà utilisée sur la carte (comme pour la thèse que je souhaite optimiser pour la production).
Je ne voudrais pas ajouter une référence de tension (par exemple, la diode Zener) pour alimenter le réseau de résistances DAC.
Je ne peux plus modifier la carte contrôleur (et y utiliser un régulateur de tension plus précis).
Je peux toujours modifier la conception / le schéma PCB de la carte du capteur!
Comment puis-je m'assurer d'obtenir des lectures toujours correctes sur l'adresse (soit par programme, soit en changeant de circuit)?