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

[STM32] akwizycja danych - czy to zadziała? - początkujący

Zar_K 10 Gru 2010 02:22 2924 12
  • #1 10 Gru 2010 02:22
    Zar_K
    Poziom 8  

    Dzien dobry,

    Temat ten jest kontynuacją tematu z https://www.elektroda.pl/rtvforum/viewtopic.php?t=1823679.

    Skorzystałam z udzielonej mi rady i postanowiłam użyć STM32F103. Mam już płytkę ewaluacyjną, teraz zajęłam się projektem płytki układu akwizycji danych.

    Zaznaczam, że jest to mój pierwszy samodzielny projekt, nigdy dotąd nie projektowałam żadnego układu. Bardzo proszę więc o krytykę i uwagi, co jest nie tak i co powinnam zmienić i czy w ogóle mój tok rozumowania jest poprawny. Wszystko poniżej jest kompilacją informacji znalezionych na różnych stronach internetowych oraz Elektrodzie.

    Oto co przygotowałam:


    Analog – Digital Data Acquisition
    Draft project – Version 0.1

    1. Cel projektu:
    Zadaniem jest zbudowanie układu akwizycji danych - mają to być sygnały analogowe (z czujników), oraz cyfrowe (przyciski).

    2. Specyfikacja:
    2.1. Wejścia analogowe
    • Napięcie wejściowe - -10V/+10V
    • Liczba kanałów - 10 (8 dostarczonych na konektorze RS232 + 2 piny do wykorzystania w przyszlosci)
    • Częstotliwość próbkowania 512Hz
    • Rozdzielczość 12 bit
    • Filtr antyaliasingowy
    • Programowy downsampling do dowolnej częstotliwości

    2.2. Wejścia cyfrowe
    • 10 kanałów (8 na RS232 + 2 na pinach do przyszlego użytku)
    • Wykrywanie stanu przycisku (otwarty/zamkniety)

    3. Schemat blokowy
    Wg. mnie powinno to wyglądać mniej więcej tak

    [STM32] akwizycja danych - czy to zadziała? - początkujący

    4. Uwagi
    Wiem już, że żeby to działało muszę:
    • rozdzielić gnd obu układów jak najbliżej źródła zasilania, ponieważ sygnały cyfrowe niosą ze sobą bardzo duże zakłócenia, które mogłyby "psuć" dokładność części analogowej
    • żeby ADC STM32 pracował poprawnie muszę zadbać o
    [STM32] akwizycja danych - czy to zadziała? - początkujący

    5. Mój projekt

    5.1. Część cyfrowa
    Użyłam bufora 74HC244, wyjścia bufora podane bezpośrednio na wejścia STM32.

    [STM32] akwizycja danych - czy to zadziała? - początkujący

    Pytanie 1.
    Czy potrzebuję jeszcze dodatkowej ochrony przed przepięciami? Czy bufor wystarczy? Czy układ ten jest poprawny?





    5.2. Część analogowa

    Część trudniejsza, tu napotkałam dużo problemów i spędziłam nad tym kilka dni, zastanawiając się jak to wszystko połączyć. Dlatego tez podejrzewam, że zaprojektowany przez mnie układ nie spełnia swojego zadania. Największą trudność dla mnie stanowi prawidłowy dobór elementów.

    Elementy
    1. ochrona przed przepięciami za pomocą diod schottky'ego.
    2. układ do konwersji napięcia z 20Vpp do 0-3.3V (na mikrokontroler nie może wejść więcej!)
    3. Filtr analogowy dolnoprzepustowy + timer do obsługi filtra

    Schemat dla jednego pinu - jednego sygnału wejściowegp
    [STM32] akwizycja danych - czy to zadziała? - początkujący

    Obliczenia
    1. Diody zabezpieczające - nie mam pojęcia jakie parametry. Czy powinny to być diody:
    Uzasilania + Udiody = Umax_wejscia?
    Jaką powinny mieć moc?

    2. Układ konwertujący napięcie do zadanego poziomu
    Wzmocnienie
    A = (R4/R1) x (R1+R2)/(R3+R4)
    R1= R3, R2=R4,
    A= (R4/R1)

    Wzmocnienie napięcia offsetowego:
    Aoffset= (R2+R1)/R1 x R3/(R3+R4) = R3/R1.

    Konwersja 20Vpp do 3.3Vpp, czyli A=3.3/20=0.165=16.5/100
    Skoro R1=R3=100kΩ i R4=A*R1 to otrzymuję R4=A*R1=16.6/100*100=16.5 kΩ.

    Należy przesunąć napięcie, żeby środkowa wartość znajdowała się w 1.6V -należy dodać dodatkowe napięcie referencyjne
    Aoffset=R3/R1=1, więc napięcie referencyjne 1.6V

    Ostateczne wartości rezystorów: R1=R3=100kΩ, R2=R4=16.5kΩ

    3. Filtr analogowy
    Wyczytałam, że powinien być jak najwyższego rzędu, Butterworth lub Bessel.
    Przy 12 bitach precyzji - filter attenuation powinno byc przynajmniej -76dB. Do tego chciałam, żeby był zasilany 3.3V.

    Muszę odfiltrować przynajmniej częstotliwości ≥ 1/2*512Hz = 256Hz, czyli zakładam, że częstotliwość graniczna to 200Hz.

    Myślałam o użyciu filtra Maxim seria MAX74XX. Wg ich parametrów Fclk/Fcorner = 100, więc moja Fclk = 20kHz.Używam zegara LMC555, tryb pracy astabilny, parametry obliczone ze wzoru:
    [STM32] akwizycja danych - czy to zadziała? - początkujący
    Czyli: RA=470Ω, C=0.01uF, RB=3.3kΩ.

    Pytanie 2. Czy filtr MAX74XX nadaje się do moich celów? Jeśli tak to który wybrać (myślałam o MAX7414, jest jednym z tańszych, a potrzebuję ich 10.. ):|
    Przeczytałam że ma na wyjściu Uout = (Uin_min + 0.25, Uin_max + 0.25) jednak to sprawiłoby, że nie wykorzystywałabym całego zakresu ADC w STM32 i traciłabym dane.

    Ponadto czytałam, że zegar MAX74XX powinien być zsynchronizowany z zegarem ADC, a do tego na płytce ewaluacyjnej nie mam raczej dostępu. Gdy nie są zsynchronizowane, pojawi się efekt aliasingu. Czy da się to jakoś obejść?
    Może powinnam użyć zupełnie innego filtru?

    Pytanie 3. Jakich wzmacniaczy operacyjnych użyć? Naczytałam się tylu różnych specyfikacji, że już kompletnie się w tym pogubiłam, czy ma być precyzyjny, czy szybki? czy mało zakłóceń?

    Pytanie 4. Jak uzyskać napięcie referencyjne 1.6V?

    Pytanie 5. Proszę o pomoc w obliczeniu parametrów diod zabezpieczających

    Pytanie 6. Czy moje obliczenia są prawidłowe?

    6. Referencje i linki do datasheetow danych układów:

    1 http://elektronikab2b.pl/biznes/1864-wzmacniacze-operacyjne-ochrona-przed-przepieciem, DOA 2010.12.08
    2 Electronic forum, https://www.elektroda.pl/rtvforum/topic1633456-0.html, DOA 2010.12.08
    3 Analog Devices, In-Amp Input Overvoltage Protection, http://www.analog.com/static/imported-files/tutorials/MT-069.pdf, DOA 2010.12.08
    4 Non-Inverting Op-Amp Level Shifter, http://www.daycounter.com/Circuits/OpAmp-Level-Shifter/OpAmp-Level-Shifter.phtml, DOA 2010.12.06
    5 STM32F103 datasheet, http://pdf1.alldatasheet.com/datasheet-pdf/vi...03620/STMICROELECTRONICS/STM32F103RET6TR.html, DAO 2010.12.06
    6 Fio_std evaluation board datasheet, https://www.aimagin.com/images/stories/products/fiostdv2_0/fiostdv20_datasheet.pdf, DAO 2010.12.06
    7 RapidSTM32 blockset webpage, http://www.aimagin.com/learning-resources/get-started.html, DAO 2010.12.09
    8 Hardware design techniques for mixed signal systems, http://www.analog.com/static/imported-files/tech_docs/MixedSignal_Sect10.pdf, DAO 2010.12.08
    9 MAX74XX series datasheet, http://datasheets.maxim-ic.com/en/ds/MAX7409-MAX7414.pdf
    10 LMC555 datasheet, http://www.national.com/ds/LM/LMC555.pdf
    11 CD74HC244 datasheet, http://focus.ti.com/lit/ds/symlink/cd74hc244.pdf

    Tak wygląda wszystko, co do tej pory przygotowałam. Będę wdzięczna za każdą pomoc i uwagę.

    0 12
  • #2 10 Gru 2010 08:58
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Zamiast HC244 zastosuj układ HC541 - ma wejścia po jednej stronie a wyjścia po drugiej - będzie prościej zrobić płytkę. Koszt ten sam - żaden [;

    Jako najprostsze zabezpieczenie polecam szeregowe rezystory na wejściach - wartość należy dobrać biorąc pod uwagę max prąd diod zabezpieczających wejścia tego układu (clamp diodes) i max przewidywane przepięcia. Można też zamiast HC zastosować jakąś bardziej odporną wersję - VHC na przykład.

    Układ diod masz niepoprawny - jeśli masz napięcie -10 - +10V, to diody te powinny być dołączone do -10 i +10V przed całością najlepiej, a nie tak jak teraz. Układ wzmacniacza różnicowego na elementach dyskretnych odpuść sobie od razu, bo niedokładność elementów niestety wszystko rozwala - przesymuluj sobie co będzie jak jeden rezystor 100k będzie o 5% większy, a drugi o 5% mniejszy niż idealny. Jeśli mierzyć chcesz sygnały zmienne, to aby je przesunąć wystarczy w zasadzie przepuścić je przez kondensator. Jeśli jednak są to sygnały stałe, to tak się nie da... Proponowałbym wtedy jakiś zintegrowany wzmacniacz różnicowy albo sumacyjny z Analog Devices - na pewno znajdziesz coś odpowiedniego, ale... nie są to rzeczy tanie.

    Timer na NE555? Bez przesady - w tym mikrokontrolerze masz ze 4 timery (zależy od dokładnego modelu), na każdym ze 4 kanały PWM, więc nie ma potrzeby dokładania kolejnego układu.

    Z tym filtrem antyaliasingowym to nie przesadzajmy - jeśli masz tak wolne sygnały (częstotliwość próbkowania 500Hz), to wystarczyłby nawet pasywny filtr RC (również może być wyższego rzędu), ewentualnie 1-2 rząd aktywnego na wzmacniaczu operacyjnym i kilku elementach dyskretnych - jeśli masz mieć 10 kanałów, to będzie taniej zrobić ze wzmacniaczy niż jakieś specjalne filtry zintegrowane.

    Do projektowania całego układu wejściowego trzeba sobie skombinować PSPICEa i symulować co z tego będzie. Pamiętając jednak o niedokładności elementów... niestety.

    4\/3!!

    0
  • #3 10 Gru 2010 10:20
    Zar_K
    Poziom 8  

    Cytat:
    Z tym filtrem antyaliasingowym to nie przesadzajmy - jeśli masz tak wolne sygnały (częstotliwość próbkowania 500Hz), to wystarczyłby nawet pasywny filtr RC (również może być wyższego rzędu), ewentualnie 1-2 rząd aktywnego na wzmacniaczu operacyjnym i kilku elementach dyskretnych - jeśli masz mieć 10 kanałów, to będzie taniej zrobić ze wzmacniaczy niż jakieś specjalne filtry zintegrowane.


    Tak tez zrobie. Tak wydawalo mi sie ze ten filtr to chyba zle dobralam

    Cytat:
    Układ wzmacniacza różnicowego na elementach dyskretnych odpuść sobie od razu, bo niedokładność elementów niestety wszystko rozwala - przesymuluj sobie co będzie jak jeden rezystor 100k będzie o 5% większy, a drugi o 5% mniejszy niż idealny. Jeśli mierzyć chcesz sygnały zmienne, to aby je przesunąć wystarczy w zasadzie przepuścić je przez kondensator. Jeśli jednak są to sygnały stałe, to tak się nie da... Proponowałbym wtedy jakiś zintegrowany wzmacniacz różnicowy albo sumacyjny z Analog Devices


    Sprawdzilam ceny, niestety sa bardzo drogie. Czy jest moze jakis inny sposob?

    0
  • #4 10 Gru 2010 10:47
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Na to drugie pytanie odpowiem Ci wieczorkiem. W swojej pracy magisterskiej musiałem rozwiązać podobny problem, ale teraz już nie pamiętam jak to zrobiłem <; Podstawowe pytanie jest jednak następujące - czy mierzysz sygnały zmienne czy stałe? Jeśli zmienne - tak jak było u mnie - wystarczy chyba kondensator w szereg, a za nim dzielnik do spolaryzowania sygnału (dodania składowej stałej VCC/2) - szczegóły sprawdzę wieczorem. Jeśli sygnały mogą być stałe, to kondensator nie zda egzaminu i trzeba będzie niestety kombinować inaczej...

    Rozważ też opcję wykorzystania multipleksera analogowego (np tani układ "4051") i mierzenia wszystkich wejść przy użyciu tylko jednego kanału ADC, a co za tym idzie tylko jednego toru analogowego - koszt spada 10x, więc można poszaleć trochę z "ułatwiającymi" elementami. W STM32 i tak nie można mierzyć 10-ciu sygnałów na raz, a tylko sekwencyjnie, więc taki układ z multiplekserem wiele by nie zmienił w idei pomiaru, a BARDZO uprościł by fizyczny układ.

    4\/3!!

    0
  • #5 10 Gru 2010 10:57
    MirekCz
    Poziom 35  

    Pytanie jest jaką potrzebujesz dokładność (nie rozdzielczość) i jak bardzo chcesz się tym bawić?

    1. Jak to jest jedna sztuka czy niewielka ilość to spokojnie możesz olać sprawę, zastosować rezystory 1% (które są minimalnie droższe od zwykłych) i kalibrować wejścia programowo (ustalić dokładne miejsce zera i wzmocnienie, przy czym pamiętaj, że powinieneś mieć zakres z zapasem czyli zamiast +/-10V bierz pod uwagę zakres +/- 10.5V. Oczywiście musisz korekcję obliczyć oddzielnie dla każdego wejścia ADC. (w zasadzie trzy pomiary przy 0V,-10V i 10V powinny podać Tobie rozsądne wartości korekcji po których błąd będzie <0.1%).

    2. Wzmacniacz musi mieć zasilanie większe od sygnału, a nie 0..3.3V.

    0
  • #6 10 Gru 2010 11:03
    Freddie Chopin
    Specjalista - Mikrokontrolery

    MirekCz napisał:
    1. Jak to jest jedna sztuka czy niewielka ilość to spokojnie możesz olać sprawę, zastosować rezystory 1% (które są minimalnie droższe od zwykłych) i kalibrować wejścia programowo (ustalić dokładne miejsce zera i wzmocnienie, przy czym pamiętaj, że powinieneś mieć zakres z zapasem czyli zamiast +/-10V bierz pod uwagę zakres +/- 10.5V. Oczywiście musisz korekcję obliczyć oddzielnie dla każdego wejścia ADC. (w zasadzie trzy pomiary przy 0V,-10V i 10V powinny podać Tobie rozsądne wartości korekcji po których błąd będzie <0.1%).

    Nawet 1% rezystory mogą nie wystarczyć - trzeba przesymulować jak to będzie wyglądało...

    Cytat:
    2. Wzmacniacz musi mieć zasilanie większe od sygnału, a nie 0..3.3V.

    Są takie wzmacniacze, że wcale nie musi mieć większego zasilania [; AD855x, AD863x, ... Pojedyncze zasilanie od 2.7 do 5.5V, rail-to-rail, minimalne / maxymalne napięcie wejściowe i wyjściowe różne od szyn zasilania o kilka mV. Niestety niekoniecznie są tanie, ale AD855x nie są też szczególnie drogie [;

    4\/3!!

    0
  • #7 10 Gru 2010 11:29
    MirekCz
    Poziom 35  

    Freddie Chopin napisał:
    MirekCz napisał:
    1. Jak to jest jedna sztuka czy niewielka ilość to spokojnie możesz olać sprawę, zastosować rezystory 1% (które są minimalnie droższe od zwykłych) i kalibrować wejścia programowo (ustalić dokładne miejsce zera i wzmocnienie, przy czym pamiętaj, że powinieneś mieć zakres z zapasem czyli zamiast +/-10V bierz pod uwagę zakres +/- 10.5V. Oczywiście musisz korekcję obliczyć oddzielnie dla każdego wejścia ADC. (w zasadzie trzy pomiary przy 0V,-10V i 10V powinny podać Tobie rozsądne wartości korekcji po których błąd będzie <0.1%).

    Nawet 1% rezystory mogą nie wystarczyć - trzeba przesymulować jak to będzie wyglądało...


    Rezystory nie mają tutaj dużego znaczenia skoro będzie programowa korekcja wyniku wg. wcześniej zmierzonego punktu zera i wzmocnienia...

    Freddie Chopin napisał:
    Cytat:
    2. Wzmacniacz musi mieć zasilanie większe od sygnału, a nie 0..3.3V.

    Są takie wzmacniacze, że wcale nie musi mieć większego zasilania [; AD855x, AD863x, ... Pojedyncze zasilanie od 2.7 do 5.5V, rail-to-rail, minimalne / maxymalne napięcie wejściowe i wyjściowe różne od szyn zasilania o kilka mV. Niestety niekoniecznie są tanie, ale AD855x nie są też szczególnie drogie [;

    4\/3!!


    Tak, tylko musi pamiętać o zakupie takowych wzmacniaczy a nie o wybraniu najtańszego :-) Tutaj tez pomaga wzięcie pod uwagę trochę większego zakresu (+/-10.5V), bo korekcja taka silna nie będzie potrzebna, a te kilka mV przy dolnej/górnej granicy zapasu ułatwi pracę wzmacniaczowi.

    0
  • #8 10 Gru 2010 11:31
    94075
    Użytkownik usunął konto  
  • #9 10 Gru 2010 12:20
    atom1477
    Poziom 43  

    Eee. Multirate wcale nie jest trudne.

    0
  • #10 10 Gru 2010 13:45
    94075
    Użytkownik usunął konto  
  • #11 10 Gru 2010 14:00
    atom1477
    Poziom 43  

    :D
    No ale poważnie. Trzeba tylko dać większą częstotliwość próbkowania. Przefiltrować FIRem albo IIRem. I zmniejszyć częstotliwość próbkowania. Tyle. No ale racja, dla kogoś może to być za dużo.

    EDIT. A się zastanawiałem o jaką autorkę chodzi. A to o autorkę tego tematu:D Dopiero zauważyłem :D YoungLady nadać!

    0
  • #12 10 Gru 2010 20:28
    Zar_K
    Poziom 8  

    Bardzo dziękuję wszystkim za odpowiedzi :)

    To jest projekt zaliczeniowy na uczelnie, nie placa dyplomowa. Uważam, że nieco mnie przerasta i już spędziłam mnóstwo czasu próbując zgromadzic wszystkie niezbedne informacje i zrozumieć jak to wszystko działa. A czas ten, niestety nie jest adekwatny do moich postępów.. Dlatego też szukam jak najprostszego rozwiązania, które pozwoliłoby mi jak najszybciej się z tym uporać.

    Dodano po 11 [minuty]:

    Jesli chodzi o sygnaly wejsciowe - dostalam taka specyfikacje jak powyzej, wydaje mi się że są to sygnały stałe.
    Jeśli chodzi o częstotliwość próbkowania, muszę trzymać się specyfikacji.

    Programowanie może nie będzie takie bardzo trudne - moja uczelnia posiada płytkę, którą można programować bezpośrednio za pomocą bloczków Simulinka - link tutaj: http://www.aimagin.com/learning-resources/get-started.html
    Poza tym programowanie jest mi znacznie milsze od projektowania układów.. :)

    Dodano po 18 [minuty]:

    Czyli podsumowując:
    1. Muszę poprawić ochronę przed wyższym napięciem
    2. Filtr antyaliasingowy mógłby zostać zrobiony na wzmacniaczach operacyjnych i elementach R, C, muszę pamiętać o wyższym zasilaniu wzmacniacza.
    3. Podoba mi się opcja użycia precyzyjnych rezystorów i korekcji sygnału. Płytka, do której mam dostęp wspiera "Enable Rapid Prototyping and Hardware in the Loop (HIL) simulations." więc chyba odczytanie tych sygnałów i skalibrowanie ich używając Simulinka, nie wydaje się być trudne. A programowanie jest dla mnie naprawdę prostsze od elektroniki
    4. Raczej odpada opcja z wyższą częstotliwością próbkowania
    5. Powinnam użyć układu HC541 zamiast HC244

    O kalibracji - czy rozumiem poprawnie? Odczytuję wartość dla -10, +10 i 0V i odpowiednio skaluję każde z wejść ADC, żeby otrzymać pełny zakres konwersji?

    Jeśli chodzi o dokładność, chyba nie musi być to bardzo-bardzo dokładne, powiedzieli mi, że dlatego właśnie chcą 12 bit, żeby nie musieć się tym przejmować.

    Dodano po 12 [minuty]:

    Nigdy wcześniej nie słyszałam o PSPice, dziękuję za radę, jak będę miała chwilę czasu spróbuję to symulować, znalazłam już fajny tutorial do nauki obsługi programu.

    Jeszcze dodatkowe pytanie - jak skutecznie oddzielać część analogową i cyfrową, żeby nie wystąpiły zbyt duże zakłócenia? Czytałam o rozdzielaniu masy, jak najbliżej źródła zasilania i o dużej powierzchni gnd dla części cyfrowej, oraz używania kabla skrętki. Czy coś jeszcze?

    0
  • #13 10 Gru 2010 20:38
    janbernat
    Poziom 38  

    Przyzwoity wzmacniacz pomiarowy można zbudować z trzech tanich wzmacniaczy operacyjnych.
    A czwarty z istniejących na strukturze poczwórnego wzmacniacza wykorzystać do przesunięcia poziomu napięcia wyjściowego.
    A oporniki w tym wypadku nie muszą być dokładne- ale jednakowe.
    A robi się to tak- bierzemy garść oporników np. 100k i mierzymy ich wartości zwykłym miernikiem.
    I sortujemy na grupy o możliwie zbliżonych wartościach.
    Miernik ma błędy- ale zawsze takie same.
    A nam nie chodzi o dokładną wartość opornika- ale żeby dwa (albo cztery)
    oporniki miały tę samą wartość.
    Zobacz tu:
    http://zese.wel.wat.edu.pl/adobrowolski/do_pobrania/Pomiarowe_cz1.pdf
    I tu:
    http://zese.wel.wat.edu.pl/adobrowolski/do_pobrania/Pomiarowe_cz2.pdf

    0