Skocz do zawartości

Kurs STM32L4 – #9 – przetworniki analogowo-cyfrowe (ADC)


Wiadomość dodana przez Treker,

Uwaga! Program STM Studio nie jest już rozwijany przez producenta, więc może nie działać poprawnie. Zamiennikiem może być znacznie bardziej rozbudowany program STM32Cube Monitor. Warto również sprawdzić aplikację, której autorem jest jeden z użytkowników Forbota: STMViewer.

Pomocna odpowiedź

Na początek małe wyjaśnienie - w przypadku odczytu więcej niż jednego kanału zalecane jest używanie DMA, co pokazujemy w kolejnym ćwiczeniu. Używanie wielu kanałów w trybie odpytywania (ang. polling) miało na celu jedynie ułatwić zrozumienie przejścia od prostego odczytu jednej wartości do nieco bardziej skomplikowanego trybu z użyciem DMA.

Problem z użyciem funkcji printf() wynika z opóźnienia które ona wprowadza. Konwerter analogowo-cyfrowy ma tylko jeden sprzętowy rejestr, w którym może zapisywać wyniki. Ponieważ używamy trybu scan, więc odczytane zostaną 2 kanały i program musi je odczytać "na czas", inaczej wyniki zostaną nadpisane kolejnymi. W przypadku DMA nie ma problemu, bo sprzęt kopiuje kolejne wyniki do pamięci RAM i program nie musi się tym przejmować.

Aby sprawdzić, że przyczyną problemu jest opóźnienie, a nie wywołanie printf, można je zastąpić opóźnieniem, czyli np. HAL_Delay. Efekt powinien być ten sam.

A przy okazji - niepotrzebne jest ponowne wywołanie HAL_ADC_Start(). W kursie chyba zostało jako pozostałość po kopiuj-wklej 😞 (linia 13, więc ma prawo być pechowa).

 

  • Lubię! 1
  • Pomogłeś! 1
2 godziny temu, Elvis napisał:

A przy okazji - niepotrzebne jest ponowne wywołanie HAL_ADC_Start(). W kursie chyba zostało jako pozostałość po kopiuj-wklej 😞

Poprawiłem na blogu 🚀

  • Lubię! 1

@Elvis @Treker Panowie, dzięki! To nadmiarowe HAL_ADC_Start() sprawiało wrażenie, że można drugi pomiar zacząć w dowolnym momencie.

  • Lubię! 1

@gtx dobrze, że to zgłosiłeś swój problem, udało się wyłapać tę sprawę, więc nie będzie to już mylące dla innych 😉

  • 2 tygodnie później...

Hej ja mam taki problem:

Mam ustawione czytanie napięć z dwóch potencjometrów, i przy ustawieniu 2 kanałów

wisi mi na drugim HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); <------ linijka 119

image.thumb.png.42fe977053a2099e5c35f9e8a57b8bb6.png

image.thumb.png.072d06769521fd6fb6056f943e9c53d4.png

A w srodku tej funkcji wisi na takiej pętli i chyba czeka na podniesienie flagi zakońńczenia konwersji:
image.thumb.png.0a848791a902e1eb78e54e7989745ee3.png

@dudoxx w ramach formalności daj tylko znać czy odtwarzasz dokładnie taki sam przykład jak jest w kursie (konfiguracja i kod), czy zmieniłeś coś względem przykładu?

41 minut temu, Treker napisał:

@dudoxx w ramach formalności daj tylko znać czy odtwarzasz dokładnie taki sam przykład jak jest w kursie (konfiguracja i kod), czy zmieniłeś coś względem przykładu?

Używam UARTA1 jako moduł USB (zamiast uarta2 przez programator) , ale próbowałem również 1 do 1 z kursu i nie trybi tak samo. Oba potencjometyry działają osobno oraz kanał 1 i 2 na ADC1 również działa osobno. Problem jest dopiero przy próbie ustawienia dwóch

11 minut temu, Elvis napisał:

@dudoxx Której wersji CubeHAL używasz? Próbowałeś dodać HAL_ADC_Start() przed drugim wywołaniem HAL_ADC_PollForConversion() ?

Sprawdzę w pracy ale prawdopodobnie najnowszej bo ściągałem IDE z cubemx tydzień temu. Próbowałem drugie wywołanie ale nie pomaga. Zauważyłem że jak zbierasz z jednego kanału to nie musisz mieć nawet pod pin nic podpięte i wejście analogowe głupoty z powietrza zbiera. Jak ustawisz dwa kanały to nawet przed podłączeniem już zawiesza na tej drugiej funkcji. 

  • 4 tygodnie później...
Dnia 20.01.2023 o 13:18, dudoxx napisał:

Z jakiegoś powodu opcja
image.thumb.png.751a8e77311ce52422f720e3fd9e480d.png

powoduje że wszystko działa jak należy 😐

Oo, właśnie dzięki za wpis. Miałem ten sam błąd i opcja 'Low Pawer Auto Wait' - zadziałała. Pytanie dlaczego.

  • 2 tygodnie później...
(edytowany)

Mam problem z wykonaniem ćwiczenia z wykresami w STM Studio- wygląda na to, że program jest w wersji tylko na Windowsa, ja używam Mac OS-a więc nie za bardzo mam jak to zrobić. Czy istnieje jakaś możliwość wykonania tego na macu, czy mam odpuścić/zrobić na innym komputerze?

Edytowano przez StefanekP
  • 1 miesiąc później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...