4-bitowy wybór adresu magistrali za pomocą analogowego pinu wejściowego: symulacja Monte Carlo pokazuje nakładające się wartości adresów


16

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:

Wpisz opis zdjęcia tutaj

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.

schematyczny

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.

Wpisz opis zdjęcia tutaj Wpisz opis zdjęcia tutaj

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:

Wpisz opis zdjęcia tutaj Wpisz opis zdjęcia tutaj

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)?


3
+1 fajne pytanie. Czy możesz podać gdzieś ostatni plik asc LTspice w pastebin? Więc możemy przetestować inne kombinacje?
słaba utrata wiary w SE

2
Świetne pytanie, fajna praca nad ustaleniem, co go spowodowało, zanim poprosiłem o wskazówki. Teraz pytanie i odpowiedź są dobrą lekturą dla każdego, kto przejedzie, a nie tylko ty :-)
Mast

Odpowiedzi:


19

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 REFSbity w ADMUXrejestrze, jak wyjaśniono w arkuszu danych :

wprowadź opis zdjęcia tutaj

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:

schematyczny

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.


Doh! Nie widziałem lasu dla drzew. Byłem tak skupiony na tym 1.1V ... Wielkie dzięki! Spróbuję tego.
KarlKarlsom

1
Przetestowałem to i działa. Świetny!
KarlKarlsom,

Przetestowałem to z VCC jako AREF i rezystorem 220k dla R7. Może później spróbuję zasymulować drabinę R-2R 100k, 220k i zobaczę, czy daje to jeszcze lepsze wyniki. Dzięki jeszcze raz!
KarlKarlsom

3

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 .


Dlaczego nie można tego zrobić? Co się stało, gdy podłączyłeś przełączniki do rezystorów (R, 2R, 4R, 8R)? Jakie kombinacje nie działały?
Dmitrij Grigoryev,

Nawiasem mówiąc, drabina R-2R jest doskonałą propozycją!
Dmitrij Grigoryev,

+ Dmitry Miałem na myśli to samo, że napięcia wyjściowe są zbyt bliskie, aby je wiarygodnie rozróżnić.
Cano64
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.