Zaprojektowałem małą płytkę z czujnikiem do mojej pracy magisterskiej z mikrokontrolerem ATtiny44 . Potrzebuję około 200 takich kart do mojej aplikacji, a 16 jest zawsze podłączonych lokalnie do płyty kontrolera. Cała sieć wygląda następująco:
Aby komunikować się między sterownikiem a płytkami czujników, napisałem własną 1-pinową magistralę (na podstawie czasu). Jedynym problemem jest to, że płytka czujnika musi mieć adres, aby znać swoje położenie w sieci, kiedy przesyłam jej dane do płyty kontrolera.
Ponieważ na ATtiny został mi tylko 1 pin, wymyśliłem układ DAC oparty na zworce, który powinien generować napięcie analogowe na podstawie ustawienia czterech zworek. Ponieważ zespół czujników wykorzystuje wartości (47, 470, 1k, 3k, 4k7, 10k, 100k i 220k) i chciałem zoptymalizować pod kątem produkcji, zastosowałem poniższe wartości dla przetwornika cyfrowo-analogowego (w zasadzie 100k, 50k, 20k i 10k ). Co powinno dać mi niezłą wartość między 0 V a 760 mV w oparciu o ustawienie zworki. Dokładnie to, co musiałem odczytać jako napięcie analogowe z wewnętrznym napięciem odniesienia 1,1 V ATtiny. Przy uruchomieniu ATtiny odczytuje to napięcie i powinien znać jego położenie.
symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab
Teoretycznie działa to dobrze. Zrobiłem nawet analizę Monte Carlo w LTspice, aby potwierdzić, że nie dostaję nakładających się obszarów, biorąc pod uwagę tolerancję rezystorów (wszystkie mają 1% BTW). Poniżej znajdują się zdjęcia z tej analizy.
Teraz stworzyłem kilka (na szczęście nie 200) tych tablic, a jednak niektóre nie uzyskały poprawnych odczytów na ich adresach (szczególnie w regionach o wyższych adresach, w których wszystkie tolerancje przychodzą jednocześnie). Zmierzyłem wszystkie możliwe rozwiązania i w końcu odkryłem mój problem. Moja oryginalna analiza nie obejmowała tolerancji napięcia zasilania 5 V, które jest generowane lokalnie z 12 V za pomocą MC7805 na każdej płycie kontrolera. Zgodnie z arkuszem danych MC7805 ma napięcie wyjściowe od 4,8 do 5,2 V.
Po tym, jak się zorientowałem, zmodyfikowałem analizę Monte Carlo. Teraz wygląda to tak:
Jak widać, są ładne nakładające się obszary, w których nie mogę zdecydowanie powiedzieć, że to napięcie może oznaczać tylko ten adres. Zasadniczo wszystkie adresy zaczynające się od „nie”. 8 może uzyskać fałszywy odczyt (z większymi możliwościami fałszywych odczytów dla wyższych adresów).
Chciałbym nie jak dodać różne wartości rezystorów niż ten już używany na pokładzie (co do tezy, że chcesz zoptymalizować dla produkcji).
Bym nie chciał dodać odniesienie napięcia (np Zener Diode), aby zasilać sieć rezystorów DAC.
Nie mogę już modyfikować płyty kontrolera (i używać tam bardziej precyzyjnego regulatora napięcia).
I może jeszcze zmodyfikować projekt PCB / schemat tablicy czujnika!
Jak mogę się upewnić, że zawsze otrzymuję poprawne odczyty adresu (programowo lub zmieniając obwód)?