Elektroda.pl
Elektroda.pl
X
Deimic One - Szkolenia
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC

gary0707 24 Lis 2011 16:51 6471 42
  • #1 24 Lis 2011 16:51
    gary0707
    Poziom 9  

    Witam,
    posiadam płytkę testową firmy And-tech. Model AVR EVB 4.3 z uC ATmega32.
    Chciałbym podłączyć do niej sondę konduktometryczną wyposażoną dodatkowo w termistor NTC (dla 25 stopni C - 210kOhm) tak aby mierzyć wartości z konduktometru i termistora.
    Na wyjściu sondy otrzymuję napięcie prostokątne, 10kHz, w zakresie 0-12VAC.
    Do pomiaru temperatury, niestety nie mogę wykorzystać
    1-Wire i DS18B20.
    Stosownie do pomiarów sterowałbym mały elektrozaworem - ale to nie powinien być problem.
    Z supportu producenta otrzymałem taki schemat ale nie jestem pewien czy on zapewni mi tylko funkcję dzielnika, żeby nie rozwalić uC, który toleruj 0-5V, czy też umożliwi rejestrację sygnału z sondy:
    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC

    Przeglądam fora andtechu, zapoznałem się z odpowiednim rodziałem kursu BASCOMa jednak chciałbym poznać zdanie doświadczonych osób. Może istnieje
    jakaś lepsza konfiguracja uwzględniająca AVR?

    Z góry dziękuję za wszelkie wskazówki w tej sprawie.

    0 29
  • Deimic One - Szkolenia
  • #2 24 Lis 2011 17:23
    opamp
    Użytkownik obserwowany

    Nie możesz dać samego NTC?

    0
  • #3 24 Lis 2011 20:06
    gary0707
    Poziom 9  

    Chyba niezbyt precyzyjnie wyraziłem to w treści posta. Poza temperaturą chcę oczywiście rejestrować napięcie z sondy konduktometrycznej. Czyli mówiąc inaczej... te dwa parametry.

    0
  • #5 24 Lis 2011 20:15
    gary0707
    Poziom 9  

    piotrva napisał:
    Rozumiem, że pomiar rezystancji termistora nie stanowi dla Ciebie problemu

    Nie robiłem tego praktycznie, mam tu swoje wykłady z czasów studiów jeszcze (5 lat temu). Chętnie poznam Twoją sugestię :-)
    Co do rozwiązania z dzielnikiem to rozumiem, że jest to rozwiązanie uwzględniające charakter napięcia z sondy?

    0
  • #6 24 Lis 2011 23:05
    sebazaz
    Poziom 13  

    Ten dzielnik wystarczy, tylko wywal diodę zenera bo zepsuje Ci pomiar.
    Zamiast tego lepiej zwiększyć rezystor z 10K do 47K na przykład i procesorowi na pewno nic się nie stanie. Każdy pin I/O ma wbudowane diody zabezpieczające.
    W ściemniaczu podłączyłem napięcie sieciowe przez rezystor 1M bezpośrednio do pinu i procesorowi nic się nie stało. To najprostszy detektor przejścia przez zero.
    Pozdrawiam.

    0
  • #7 25 Lis 2011 09:17
    gary0707
    Poziom 9  

    Dziękuję za pomoc. W weekend posiedzę nad tym i może mi się coś uda.
    Pozdrawiam i miłego weekendu!

    0
  • Deimic One - Szkolenia
  • #8 30 Lis 2011 23:54
    gary0707
    Poziom 9  

    W weekend odbyła się mała walka, z której połowicznie wyszedłem zwycięsko.
    O ile temperaturka już jest mierzona to gorzej z napięciem prostokątnym z sondy.
    Zamiast stosować dzielnik, przerobiłem sondę tak, że otrzymuję od niej napięcie zmienne z zakresu 0-5V. Sygnał prostokątny, częstotliwość 10kHz. Niestety nie udaje mi się tego pomierzyć AVRowym ADCkiem. Pokazują się różne wartości, jakby to był sinus (a nie jest, sprawdzałem na oscyloskopie). Kodzik wygląda tak:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Czy przyczyną może być ustawienie prescalera na "auto"? Będę wdzięczny za każdą dobrą wskazówkę.

    0
  • #9 01 Gru 2011 08:30
    sebazaz
    Poziom 13  

    Jak wygląda ten sygnał prostokątny i co chcesz w nim mierzyć?
    Aby zmierzyć wartość średnią musisz dodać układ całkujący RC o stałej czasowej wielokrotnie większej od okresu sygnału mierzonego. Taki pomiar będzie obarczony pewną bezwładnością ale za to wynik będzie stabilny.
    Przestawienie prescalera nic nie da, bo częstotliwość pomiarów będzie i tak bliska lub niższa od częstotliwości sygnału mierzonego.
    Pozdrawiam.

    0
  • #10 01 Gru 2011 10:32
    gary0707
    Poziom 9  

    Dziękuję za odpowiedź. Generalnie interesuje mnie napięcie skuteczne. W przypadku prostokąta jest ono chyba równa wartości szczytowej(?). Jak pisałem, dawno już się tym nie zajmowałem i pewne oczywistości mogłby wylecieć mi z głowy. Czytam o tym na bieżąco w materiałach jeszcze z czasów studiów.
    Sygnał nie jest symetryczny, prostokąt jest od zera do 5V więc teoretycznie nie muszę martwić się przejściem przez 0.

    0
  • #11 01 Gru 2011 11:00
    sebazaz
    Poziom 13  

    Nie jedynym ale najprostszym.
    Zakładam, że na chcesz mierzyć wartość średnią dla przebiegu prostokątnego o stałej amplitudzie która jest równa też wartości skutecznej (dla prostokąta). Możesz mierzyć czasy "0" i "1" a następnie je porównywać z czego wyjdzie wartość PWM. Przy częstotliwości 10KHz trzeba użyć timera. Prościej chyba dać RC i mierzyć za pomocą ADC.

    0
  • #12 01 Gru 2011 22:16
    gary0707
    Poziom 9  

    sebazaz napisał:
    Możesz mierzyć czasy "0" i "1" a następnie je porównywać z czego wyjdzie wartość PWM

    Czy mógłbym prosić o jakieś wyjaśnienie mierzenia czasów "0" i "1"? W jakim trybie powinien pracować timer? Licznika impulsów? Czytałem o timerach na kursie And-Techu oraz w książce o programowaniu uC ale nie mam doświadczenia aby od razu "zobaczyć" rozwiązanie problemu.

    0
  • #13 02 Gru 2011 17:12
    gary0707
    Poziom 9  

    Analizując działanie timerów na AVR dokopałem się do obsługi PWM:
    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC
    Gdzie:
    VH napięcie wyjściowe stanu wysokiego
    VL napięcie wyjściowe stany niskiego
    VAV uśrednione napięcie wyjściowe
    x czas trwania stanu wysokiego
    y czas trwania stanu niskiego

    Sygnał wyjściowy PWM opisany jest takim równaniem:
    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC

    W związku z tym mam pytanie odnośnie ew. pomiarów czasu trwania "0" i "1". Czy powyższą zależność mogę wykorzystać w moim przypadku do otrzymania/wyliczenia wartości napięcia prostokątnego?
    Jeśli w miejsce x i y podstawiłbym odpowiednie wartości wyznaczające czas trwania impulsów "0" i "1":
    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC

    to otrzymałbym taką zależność umożliwiającą wyznaczenie wartości napięcia:
    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC

    Czy to jest jakiś trop?

    Szanowni koledzy nie oczekuję od Was gotowca, a jedynie pomocy, wskazówki, naprowadzenia bo moje doświadczenie z AVR sprowadza się do 2-3 odbytych kursów, gdzie nie rozwiązywane były problemy pomiaru napięć zmiennych.
    Zawodowo zajmuję się programowaniem, a nie elektroniką stąd moje niektóre pytania dla Was wydają się może nie na miejscu(?) Wydaje mi się, że to forum chyba też po to jest.

    0
  • #14 02 Gru 2011 19:07
    dondu
    Moderator Mikrokontrolery Projektowanie

    Pierwszy wzór jest prawidłowy. Obliczysz nim średnią wartość napięcia w czasie t=x+y.
    Nie bardzo rozumie, co masz na myśli pisząc:

    gary0707 napisał:
    Czy powyższą zależność mogę wykorzystać w moim przypadku do ... wyliczenia wartości napięcia prostokątnego?


    co do OCRx pytania:
    Czy Ty generujesz PWM, czy mierzysz sygnał PWM dostarczony z zewnątrz?
    W jakim trybie pracuje Twój timer?

    0
  • Pomocny post
    #15 02 Gru 2011 19:29
    piotrva
    Moderator na urlopie...

    Nie tędy droga, Ty musisz zrobić coś dokładnie odwrotnego - nie wygenerować sygnał, ale go zmierzyć.
    Rozwiązania są 2, ale jeśli programujesz w bascomie i nie masz ochoty na operacje na rejestrach w procesora to kurczą się do jednego.
    Mianowicie:
    0. ustawiasz timer na zliczanie impulsów i zmianę wartości jakiejś zmiennej - parametry dobierz w zależności od f impulsu i oczekiwanej dokładności - masz 4 zmienne - jedną (Vt) automatycznie inkrementuje timer w przerwaniu, pozostałe (Th, Tc) bez zmian
    1. ustawiasz przerwanie INTx na wyzwalanie zmianą stanu (Change)
    2. w przerwaniu sprawdzasz aktualny stan tego pinu, jeśli jest wysoki to miałeś zbocze narastające, jeśli niski to opadające i teraz jeśli zbocze było narastające to:
    a) zapisujesz do zmiennej Tc wartość całego okresu (Tc=Vt(*pojemność timera+Timern)(patrz ad1))
    b) masz czasy: całego okresu i trwania impulsu stanu wysokiego - z tego nie trudno zauważyć, że % wypełnienia = Th/Tc*100% - ale w przerwaniu nie wykonuj obliczeń - ustaw po prostu teraz jakąś flagę wskazującą na konieczność wykonania obliczeń w pętli głównej.
    c) Vt ustawiasz na 0 (Vt=0), oraz Timern=0
    jeśli zbocze było opadające to:
    a) zapisujesz aktualną wartość Vt do zmiennej Th (Th=Vt(*pojemność timera+Timern))
    3. w pętli wyliczasz współczynnik wypełnienia i co z tym dalej zrobić chyba wiesz ;-)
    (ad1. - część w nawiasach, czyli *pojemność timera + Timern dodaj jeśli chcesz podnieść dokładność timera, ale wtedy będziesz musiał użyć zmiennych o większych pojemnościach.)

    Drugie rozwiązanie, wymagające operacji na rejestrach jest realizowane w większości sprzętowo za pomocą funkcji ICP jednego z timerów - poczytaj o tym w datasheet Twojego procesora.

    0
  • #16 02 Gru 2011 20:15
    gary0707
    Poziom 9  

    piotrva jesteś Wielki przez duże "W". Bardzo dziękuję i wersję Bascomową spróbuję zrealizować jak tylko znajdę wolną chwilę (bo niestety uC nie zajmuję się codziennie).
    Co do rozwiązania sprzętowego to czy masz na myśli, że musiałbym użyć C? Język ten akurat znam b.dobrze. Biblioteki do AVRa niekoniecznie ale i tak planuję przesiąść się na C jeśli chodzi o prog. uC, bo z tego co widzę w różnych dokumentach, to w C można zrobić duuużo więcej i lepiej kontroluje się sprzęt.

    0
  • #19 02 Gru 2011 22:44
    gary0707
    Poziom 9  

    Użytkowniku janbernat dziękuję. Widziałem ten link już kilka razy podczas moich poszukiwań ale zapomniałem o nim, a tam znajduje się piękny wzór dot. "prostokąta".

    0
  • Pomocny post
    #20 03 Gru 2011 06:35
    dondu
    Moderator Mikrokontrolery Projektowanie

    gary0707 napisał:
    Użytkowniku janbernat dziękuję. Widziałem ten link już kilka razy podczas moich poszukiwań ale zapomniałem o nim, a tam znajduje się piękny wzór dot. "prostokąta".

    Pierwsze pytanie, to:
    Czy sygnał PWM, który mierzysz spełnia warunek tego wzoru?:

    Cytat:
    Dla napięcia prostokątnego jednopołówkowego o wartości maksymalnej równej U0, zerowym napięciu minimalnym i wypełnieniu n, napięcie skuteczne Usk wynosi:

    Bo jeżeli nie, to wzór ten będzie obarczony błędem.

    Wzór podany przez Janka jest dokładnie tym samym wzorem, który podałeś jako pierwszy, tylko dla przypadku gdy VL=0 (patrz wytłuszczony tekst).
    Okres T to nic innego jak suma czasów x+y (z Twojego wzoru):

    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC

    Innymi słowy, Twój pierwszy wzór jest wzorem najwłaściwszym (ogólnym) i zapewnia dokładne policzenie napięcia w szczególności w przypadku, gdy napięcie zera logicznego VL nie jest równe 0V.

    Stąd pytanie:
    Co właściwie chcesz liczyć? Czy dokładną wartość napięcia, czy tylko orientacyjną (nie biorąc pod uwagę, że VL nie jest zerem)?

    0
  • #21 03 Gru 2011 12:06
    gary0707
    Poziom 9  

    dondu dziękuję za zainteresowanie moim problemem. Producent sondy, z którą mam do czynienia pokazywał mi sygnał wyjściowy na oscyloskopie.
    Przy wzroście amplitudy "dołek" prostokąta pozostawał na poziomie zera, a "górka" rosła lub malała. Czy taki stan rzeczy można traktować to jako wartość minimalną na poziomie 0?

    Odpowiadająć na Twoje pytanie, (co właściwie chcę liczyć) tak na prawdę interesuje mnie amplituda tego sygnału z sondy.
    To co pokazuje mi woltomierz podłączony do niej bezpośrednio (Woltomierz zwykły, tani bez TrueRMS itp.). Jeśli sonda mierzy dużo przewodność cieczy to na wyjściu mam 5V (skrajny przypadek), wraz ze spadkiem przewodności maleje napięcie na wyjściu.
    Częstotliwość sygnału jest stała i utrzymuje się na poziomie 10kHz.

    dondu napisał:
    Czy dokładną wartość napięcia, czy tylko orientacyjną (nie biorąc pod uwagę, że VL nie jest zerem)?

    W moim przypadku nie bardzo rozumiem różnicę między tymi dwoma napięciami. Pisząc o dokładnym masz na myśli obarczone mniejszym błędem wynikającym z metody pomiaru czy z zastosowanego wzoru?

    0
  • Pomocny post
    #22 03 Gru 2011 12:10
    dondu
    Moderator Mikrokontrolery Projektowanie

    Moja propozycja jest taka, abyś przyjął wersję uproszczoną wzoru, zastosował ją i porównał obliczenia ze wskazaniami miernika.
    Jeżeli będą niezadowalające odchyłki to wtedy trzeba będzie dokonać pomiaru napięcia stanu H i L i zastosowanie wzoru pełnego.

    0
  • Pomocny post
    #23 03 Gru 2011 12:21
    sebazaz
    Poziom 13  

    gary0707 napisał:
    Producent sondy, z którą mam do czynienia pokazywał mi sygnał wyjściowy na oscyloskopie.
    Przy wzroście amplitudy "dołek" prostokąta pozostawał na poziomie zera, a "górka" rosła lub malała.

    Co to właściwie znaczy? Zmieniała się wysokość czy szerokość "górki"?
    Musimy w końcu to ustalić, bo w przypadku zmiany amplitudy stanu wysokiego nic nam nie da pomiar czasów i cała zabawa z timerami.
    Pozdrawiam.

    0
  • #24 03 Gru 2011 12:34
    gary0707
    Poziom 9  

    sebazaz napisał:
    Co to właściwie znaczy? Zmieniała się wysokość czy szerokość "górki"?
    Qrcze, masz rację... Chyba jednak najpierw się wykuruję (aktualnie 38,5 Celsjusza na czole), a potem będę rozwiązywał takie problemy i zawracał ludziom gitarę.
    Wraz ze wzrostem przewodności sonda podaje mi sygnał w prostokącie, 10kHz ale to amplituda się zmienia, a nie szerokość. Czyli rozważania około PWMowe chyba pozostaną w tym przypadku daremne (Ale przydadzą mi się w innym problemie). Czy w takim razie z amplitudą mogę coś zrobić?

    0
  • #25 03 Gru 2011 12:56
    sebazaz
    Poziom 13  

    gary0707 napisał:
    Chyba jednak najpierw się wykuruję (aktualnie 38,5 Celsjusza na czole)

    Spoko, ja wczoraj miałem 39,5 ale już dziś zwlokłem się z wyra :D

    gary0707 napisał:
    Czy w takim razie z amplitudą mogę coś zrobić?

    Najprościej filtr i ADC.
    Pozdrawiam.

    0
  • Pomocny post
    #26 03 Gru 2011 18:04
    janbernat
    Poziom 38  

    Możesz zrobić detektor wartości szczytowej na wzmacniaczu operacyjnym.

    0
  • #27 03 Gru 2011 20:11
    gary0707
    Poziom 9  

    sebazaz napisał:
    Spoko, ja wczoraj miałem 39,5 ale już dziś zwlokłem się z wyra
    No to zdrowia życzę i polecam jednak dobrze wyleżeć choróbsko.
    Szanowni forumowicze bardzo Wam dziękuję. Na tym etapie zebranych informacji postaram się jakoś ogarnąć temat i na razie nie zanudzać. Dam znać o efektach. Pozdrawiam i udanej drugiej połówki weekendu.

    0
  • #28 03 Gru 2011 21:50
    INTOUCH
    Poziom 30  

    Sygnał o częstotliwości 10 kHz. Częstotliwość ADC dla 10 Bitów to 100kHz i to dla jednego kanału. Dla 8 kanałów wynosi 100kHz/8 .
    Czyli masz 10 pomiarów na okres dla pojedyńczego kanału. Względna dokładność. Do takich pomiarów to według mnie lepiej użyć C niż Bascoma. I broń Boże nie stosuj typów zmiennoprzecinkowych. Co najwyżej 32bitowy typ stałoprzecinkowy.

    0
  • #29 05 Gru 2011 16:07
    gary0707
    Poziom 9  

    jabernat napisał:
    Możesz zrobić detektor wartości szczytowej na wzmacniaczu operacyjnym.

    Brzmi interesująco ale chyba za cienki Bolek jestem na zabawy z operaczem. Znalazłem coś takiego:
    AVR EVB.4.3 ATmega32, pomiar napięcia prostokątnego 10kHz, 0-12VAC
    Czy taki układ trudno jest zbudować samemu (przy założeniu, że umiem liczyć i posługiwać się lutownicą nie robiąc sobie krzywdy)? Oczywiście w roli generatora będzie wyjście konduktometru, a w roli oscyloskopu - wspaniały ADC na AVR.
    sebazaz napisał:
    Najprościej filtr i ADC.

    Dla pewności wolę spytać. Chodzi o filtr dolnoprzepustowy RC? Czy z niego wyciągnę składową stałą napięcia wejściowego? Czy do dobrania parametrów, poza obliczeniami na kartce można wspomóc się symulatorem obwodów, czy to kompletnie nierzeczywista zabawka?
    Symulator na falstad.com

    0
  • #30 05 Gru 2011 16:18
    janbernat
    Poziom 38  

    To co narysowałeś to jest dwupołówkowy prostownik szczytowy.
    Z tym że stała czasowa rozładowania jest bardzo duża- ok. 1s.

    0