Jak próbkować sygnał analogowy -2 V do +2 V za pomocą mikrokontrolera PIC?


10

Używam mikroprocesora PIC z 10-bitowym przetwornikiem ADC do pobierania odczytów z sygnału analogowego o częstotliwości mniejszej niż 300 Hz. Jednak ten sygnał analogowy zawiera się w przedziale -2 V i +2 V. Jak mogę kondycjonować sygnał, aby znalazł się w użytecznym zakresie (zakładając, że wejście do ADC musi być dodatnie) Również nie mam dodatniego i ujemny zasilacz.





@Kellenjb - pytania, które łączysz, aby nie dotyczyć obliczeń dla tego konkretnego przypadku, w którym napięcie wejściowe wykracza poza obie szyny.
stevenvh

Następujące pytania zostały zamknięte jako duplikaty tego i mają przydatne odpowiedzi: electronics.stackexchange.com/questions/15985/… , electronics.stackexchange.com/questions/15940/…
Kevin Vermeer

Odpowiedzi:


14

ważna uwaga:
ta odpowiedź została opublikowana w celu rozwiązania problemu dla wejścia -20 V do + 20 V , ponieważ o to pytano. Jest to sprytna metoda, ale nie działa, jeśli limit napięcia wejściowego pozostaje między szynami.

Będziesz musiał skalować napięcie za pomocą dzielnika rezystora, aby uzyskać napięcie między -2,5 V a + 2,5 V i dodać 2,5 V. (Zakładam, że Twój PIC ma zasilacz 5 V.)

Poniższe obliczenia wyglądają na długie, ale tylko dlatego, że szczegółowo wyjaśniam każdy krok. W rzeczywistości jest to tak łatwe, że możesz to zrobić w mgnieniu oka.

Najpierw to:

R1 oznacza rezystor między i V O U T , R2 oznacza rezystor pomiędzy + 5 V oraz V O U , T , i R3 oznacza rezystor między V O U T i G N D . VINVOUT
+5VVOUT
VOUTGND

Ile mamy niewiadomych? Trzy, R1, R2 i R3. Nie do końca, możemy dowolnie wybrać jedną wartość, a pozostałe dwie są od niej zależne. Wybierzmy R3 = 1k. Matematyczna sposób znalezienia innych wartości jest stworzenie zestawu dwóch równań z dwiema grupami ( , V O U T ) pary, a rozwiązanie z nieznanymi wartościami rezystorów. Zrobią to dowolne pary ( V I N , V O U T ), ale przekonamy się, że możemy ogromnie uprościć rzeczy, starannie wybierając te pary, a mianowicie wartości ekstremalne: ( + 20 V , + 5 V ) i ( -VINVOUTVINVOUT+20V+5V , 0 V ). 20V0V

Pierwszy przypadek: , V O U T = + 5 V Zauważ, że (i to jest klucz do rozwiązania!) Oba końce R2 widzą + 5 V , więc nie ma spadku napięcia, a zatem nie prąd przez R2. Oznacza to, że I R 1 musi być taki sam jak I R 3 (KCL). I R 3 = + 5 V - 0 V.VIN=+20VVOUT=+5V
+5VIR1IR3
. Znamy prąd przez R1, a także napięcie nad nim, więc możemy obliczyć jego rezystancję:R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
. Znaleziono naszą pierwszą nieznaną! R1=+20V5V5mA=3kΩ

Drugi przypadek: , V O U T = 0 V To samo, co z R2 dzieje się teraz z R3: brak spadku napięcia, więc brak prądu. Ponownie zgodnie z KCL, teraz I R 1 = I R 2 . I R 1 = - 20 V - 0 V.VIN=20VVOUT=0V
IR1IR2
. Znamy prąd przez R2, a także napięcie nad nim, więc możemy obliczyć jego rezystancję:R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
. Znaleziono naszą drugą nieznaną! R2=+5V0V6.67mA=0.75kΩ

Tak więc rozwiązaniem jest: . R1=3kΩ,R2=0.75kΩ,R3=1kΩ

Jak powiedziałem , ważny jest tylko stosunek tych wartości, więc równie dobrze mogę wybrać . Możemy sprawdzić to rozwiązanie w stosunku do innejpary( V I N , V O U T ), np. ( 0 V , 2,5 V ). R1 i R3 są teraz równoległe (oba mają + 2,5 V-0 V nad nimi, więc gdy obliczamy ich łączną wartość, znajdujemy 0,75R1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V , dokładnie wartość R2 i wartość, której potrzebowaliśmy, aby uzyskać + 2,5 V z + 5 V ! Więc nasze rozwiązanie jest rzeczywiście poprawne. [Znaczek kontroli jakości idzie tutaj]0.75kΩ+2.5V+5V

Ostatnią rzeczą do zrobienia jest podłączenie do ADC PIC. ADC często mają dość niskie rezystancje wejściowe, więc może to zakłócać naszą starannie obliczoną równowagę. Nie ma się jednak czym martwić, musimy po prostu zwiększyć R3, aby RVOUT . Załóżmy, że R A D C = 5 k Ω , a następnie 1R3//RADC=1kΩRADC=5kΩ Z tego wynika, żeR3=1,25kΩ. 11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


edytuj
OK, to było sprytne i bardzo proste, nawet jeśli sam tak mówię. ;-) Ale dlaczego nie miałoby to działać, jeśli napięcie wejściowe pozostaje między szynami? W powyższych sytuacjach zawsze mieliśmy rezystor, przez który nie przepływał żaden prąd, tak że po KCL prąd przychodzący do węzła przez jeden opornik opuszczał drugi. Oznaczało to, że jedno napięcie musi być wyższe niż V O U T , a drugie niższe. Jeśli oba napięcia są niższe, prąd przepływałby tylko od tego węzła, a KCL tego zabrania.VOUTVOUT


-20 V na wejściu spowoduje nieco poniżej 0 V na wyjściu.
Olin Lathrop

(i może Olin Lathrop): Próbowałem dowiedzieć się, jak znaleźć wartość rezystora 7k. Zauważyłem, że gdy napięcie wejściowe wynosi 2,5 V, do węzła nie przepłynie prąd, niezależnie od wartości rezystora, ponieważ nie ma różnicy napięć. Ale to napięcie wejściowe 2,5 V nie jest w średnim zakresie, a wyjście wyjściowe 2,5 V również. Czy to nie znaczy, że dzielnik powinien mieć dwa różne oporniki? Jeśli wiesz co mam na myśli.
Federico Russo

Może to także wyjaśnia komentarz @Olin Lathrop.
Federico Russo

@Frederico: Tak, nie będzie całkowicie symetryczny. Omawiam to w mojej odpowiedzi. Możliwe jest dostosowanie trzech rezystorów do mapowania -20 do +20 woltów do 0 do 5 woltów, ale zarówno Steven, jak i ja pokazaliśmy prostsze przypadki, w których otrzymujesz małą asymetrię.
Olin Lathrop

6

Najprostszym sposobem jest użycie „dzielnika rezystora”.

Nie powiedziałeś, jakie napięcie ma ten PIC, a zatem zakres wejściowy A / D jest, więc zastosujmy na przykład 5 V. Twój zakres napięcia wejściowego wynosi 40 V, a wyjściowy 5 V, więc potrzebujesz czegoś, co tłumi co najmniej 8. Musisz także wyśrodkować wynik na 1/2 Vdd, czyli 2,5 V, podczas gdy twoje napięcie wejściowe jest wyśrodkowane na 0 V .

Można to osiągnąć za pomocą 3 rezystorów. Jeden koniec wszystkich trzech rezystorów jest połączony ze sobą i do styku wejściowego PIC A / D. Drugi koniec R1 idzie do sygnału wejściowego, R2 idzie do Vdd, a R3 do ziemi. Dzielnik rezystora jest utworzony przez R1 i równoległą kombinację R2 i R3. Możesz wyregulować R2 i R3, aby wyśrodkować wynikowy zakres na 2,5 V, ale dla uproszczenia wyjaśniamy, że będziemy żyć z odrobiną asymetrii i nieco osłabić, aby upewnić się, że oba końce są ograniczone do zakresu Vss-Vdd.

Powiedzmy, że PIC chce, aby sygnał analogowy miał impedancję 10 kΩ lub mniejszą. Ponownie dla uproszczenia, zróbmy R2 i R3 20 kΩ. Impedancja zasilająca PIC będzie nie większa niż równoległa kombinacja tych, wynosząca 10 kΩ. Aby uzyskać tłumienie 8, R1 musi być 7 razy R2 // R3, czyli 70 kΩ. Ponieważ jednak wynik nie będzie dokładnie symetryczny, musimy nieco osłabić, aby mieć pewność, że -20 V nie spowoduje, że wartość PIC będzie mniejsza niż 0 V. To faktycznie wymaga tłumienia 9, więc R1 musi być co najmniej 8 razy R2 // R3, czyli 80 kΩ. Standardowa wartość 82 kΩ pozwoli na pewne nachylenie i margines, ale nadal otrzymujesz większość zakresu A / D do pomiaru oryginalnego sygnału.

Dodany:

Oto przykład znalezienia dokładnego rozwiązania podobnego problemu. Nie ma asymetrii i ma określoną określoną impedancję wyjściową. Tego rodzaju rozwiązanie można zawsze zastosować, gdy zakres A / D znajduje się całkowicie w zakresie napięcia wejściowego.


+1, ponieważ jeśli chodzi o liczbę części, jest to najprostszy sposób na zbudowanie tego, co jest wymagane. Kilka uwag: możliwe jest zajęcie się asymetrią kodu uC, a poprzez dodanie jednego kondensatora równolegle do rezystora, który przechodzi do GND, sygnał można wygładzić (filtr dolnoprzepustowy). Częstotliwość narożna wynosi 1 / (2 * pi R C), gdzie R jest wartością równoległą wszystkich trzech rezystorów, a C jest wartością dodanego ograniczenia (ADC i tak potrzebuje ograniczenia!). Proszę obliczyć dokładność tego ustawienia biorąc pod uwagę wszystkie tolerancje (R, błąd ADC w +/- maks. LSB, błąd odniesienia, ...) - może być gorszy niż oczekiwano.
zebonaut

@zebonaut - Ponownie wykonałem obliczenia i szczegółowo wyjaśniłem każdy krok w mojej zaktualizowanej odpowiedzi (o wiele mniej skomplikowane, niż wygląda!). Daje dokładne odwzorowanie (-20 V .. + 20 V) na (0 V .. + 5 V)
stevenvh

@zebonaut: Kondensator może być przydatny jako filtr antyaliasingowy, ale nie ma nic wspólnego z asymetrią. Nie sądziłem, że ta mała asymetria to wielka sprawa. Jak powiedziałeś, łatwo jest się zająć oprogramowaniem układowym.
Olin Lathrop,

Jeśli chcesz skompensować asymetrię w oprogramowaniu, musisz obliczyć dokładną funkcję transferu. Jeśli i tak musisz to zrobić, to dlaczego nie użyć w pierwszej kolejności właściwych wartości rezystorów (nie tych z mojej pierwszej (błędnej) odpowiedzi!)
stevenvh

@stevenvh: Nie ma nic złego w korzystaniu z „właściwych” wartości rezystorów. Uświadomiłem sobie, że dokładne mapowanie jest możliwe (jak wspomniałem w mojej odpowiedzi), ale postanowiłem nie wchodzić w złożoność obliczeń i odpowiedzieć na prostszy pod względem koncepcyjnym przypadek, który skutkuje małą asymetrią. W każdym razie musisz nieco osłabić, aby uwzględnić rozrzut i prawdopodobnie i tak powinieneś skalibrować oprogramowanie.
Olin Lathrop,

2

To jest standardowy obwód do tego. Musisz skalować wartości rezystorów dla wymaganej impedancji.


Czy musisz się upewnić, że impedancja źródła jest stosunkowo niska, jeśli ją używasz?
Nick T

Leon, dlaczego nie użyć kondensatora zamiast rezystora 1k?
stevenvh

To rozwiązanie połączone z prądem stałym. Rezystor szeregowy jest potrzebny do prawidłowego działania.
Leon Heller,

3
@Leon Heller: Myślę, że byłaby to lepsza odpowiedź, gdybyś wyjaśnił, jak znaleźć właściwe wartości dla rezystorów.
Federico Russo,

2

Jeśli sygnał nie jest prądem stałym lub jeśli odniesienie napięcia stałego nie jest ważne, sygnał można połączyć pojemnościowo z wejściem ADC.

Alternatywnie, jeśli twoje uziemienie dla PIC jest zmienne, możesz powiązać uziemienie sygnału z 1/2 VDD PIC.


Jeśli używasz sprzężenia pojemnościowego, pozbywasz się komponentu DC, ale ujemna część sygnału nadal będzie pod ziemią, chyba że zapewnisz polaryzację na pinie wejściowym przez dzielnik rezystancyjny, jak w obwodzie Leona.
stevenvh

Napięcie zasilania nie zostało określone - działałoby z ADC 5 V. Jeśli używasz mniejszego Vdd, musisz skalować wejście. W tym momencie zamieniłby się w obwód Leona z kondensatorem.
W5VO,

2

Następujący obwód powinien wykonać zadanie:

3.3V
 +
 |
 \
 / 1k
 \
 |
 +-- ADC input
 |
 \
 /  1k
 \
 |
 +-- Signal input (-2V to +2V)

Jest to potencjalny rozdzielacz. Przy -2 V moc wyjściowa wyniesie 0,65 V. przy + 2 V, 2,65 V.

Cały hałas na szynie 3.3V zostanie przeniesiony na wejście, więc użyj dobrego napięcia odniesienia, aby zmniejszyć ten problem.

Będzie to działać również z innymi materiałami eksploatacyjnymi, ale przesunięcie zmieni się.


Tak, działa, ale byłoby miło skorzystać z pełnego zakresu ADC :-)
stevenvh

@stevenh Możesz to zrobić za pomocą wartości odniesienia 0,65 V i 2,65 V, chociaż równie dobrze możesz wtedy użyć obwodu.
Thomas O

VREF+VREFGND

@stevenh PIC24, dsPIC i PIC32 zdecydowanie mają Vref-. Myślę, że niektóre 18F też.
Thomas O

Tak, OK, nie znam ich wszystkich (jest ich dużo ). OP nie mówi, której części używa i wydaje się, że zniknął, więc nie ma sensu go pytać.
stevenvh

1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

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.