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)?
źródło
Odpowiedzi:
Zgodnie z twoimi symulacjami, twój schemat adresowania działa dobrze, o ile uwzględniane są tylko niepewności w wartościach rezystorów. Niepewność napięcia powoduje jego awarię.
Radzę zlikwidować wahania VCC, wykorzystując je jako odniesienie do ADC. Możesz to zrobić, programując
REFS
bity wADMUX
rejestrze, jak wyjaśniono w arkuszu danych :Po przejściu na VCC jako napięcie odniesienia dla ADC, nie będziesz już mierzyć napięcia, ale stosunek wartości rezystorów, a te są dokładne do 1%. Nie są wymagane żadne zmiany na schemacie (chociaż możesz chcieć zwiększyć wartość R7, aby uzyskać pomiary w środku zakresu konwersji ADC), tylko oprogramowanie układowe Attiny musi zostać zaktualizowane.
Jeśli nadal chcesz przerobić płytę czujnika, możesz zastąpić swój schemat drabiną R-2R, jak sugeruje Cano64:
symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab
Pozwoli to zoptymalizować rozdzielczość, wyrównując wszystkie kroki w drabinie. Rezystory 1% są wystarczająco precyzyjne, aby budować monotoniczne drabiny o długości do 5 bitów.
źródło
Raz musiałem rozwiązać podobny problem. Musiałem podłączyć 4 przyciski do jednego analogowego pinu w arduino, jednak musiałem rozpoznać jednoczesne naciśnięcia (wszystkie kombinacje). Wymyśliłem ten sam obwód co ty, a potem napisałem program do przeszukiwania wszystkich możliwych kombinacji wartości rezystorów, tak aby końcowe wartości po naciśnięciu przycisków były jak najbardziej oddzielne. Zgadnij co? Jesteśmy wkręceni, nie da się tego zrobić. To wszystko, miłego dnia.
Dowiedziałem się, że optymalne wartości rezystorów dla przełączników są zbliżone do R, 2R, 4R, 8R, a dolna część dzielnika ma wartość R. Twój obwód jest już blisko optymalnego, wystarczy zastąpić R7 10k rezystor
Ale jest dla ciebie dobra wiadomość. Ponieważ musisz tylko ustawić adres (nie będziesz obsługiwać przełącznika, gdy urządzenie jest uruchomione), zalecam użycie przełączników SPDT i drabiny R2R .
źródło