Skocz do zawartości
Komentator

Kurs STM32 F4 - #8 - Zaawansowane funkcje liczników

Pomocna odpowiedź

html_mig_img
Większość urządzeń uzależnia swoją pracę od czasu. W celu skutecznej i optymalnej realizacji zadań wykorzystuje się timery (liczniki).W tym artykule zostaną opisane zagadnienia takie jak generowanie PWM, dekodowanie sygnału kwadraturowego z enkoderów, a nawet analiza sygnału PWM, pochodzącego np. z aparatury RC.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Udostępnij ten post


Link to post
Share on other sites

Wielkie dzięki za długo wyczekiwany rozdział kursu!

Rewelacyjna narracja pozwala mi na bezproblemową przesiadkę ze środowiska Arduino do dużo bardziej skomplikowanego kodowania STM32 przy użyciu Cube.

Opis jest prosty, systematyczny i treściwy.

Z niecierpliwością czekam na dalsze odcinki (m.in. USB host)!

Udostępnij ten post


Link to post
Share on other sites

beroduar, super wiadomość - teraz będę wiedział, że kurs można śmiało polecać osobom, które nie miały wcześniej styczności z większymi procesorami 🙂

Udostępnij ten post


Link to post
Share on other sites

czekam na nastepną czesc ta laduje w moim archiwum

Udostępnij ten post


Link to post
Share on other sites

Witam, mam pytanie, chciałbym odczytać na jednym timerze dwa sygnały PWM. Wydaje mi się, że można to zrobić skoro jeden timer posiada 4 kanały, jednak nie potrafię skonfigurować go w ten sposób a zwyczajnie podłączenie dwóch sygnałów do timera daje wpływające na siebie pomiary. Wydaje mi się, że należy inaczej niż dla jednego sygnału skonstruować callback, ale nie wiem jeszcze jak to zrobić. Realizował ktoś kiedyś coś takiego i mógłby mi podsunąć jakiś pomysł?

A co do poradnika to jest ekstra i czekam na kolejną część, pozdrawiam!

Udostępnij ten post


Link to post
Share on other sites

Czeć wszystkim czy tryb "imput capture direct mode" w Timer to jest to samo co w ATmedze tryb ICP dla Timera

Udostępnij ten post


Link to post
Share on other sites

Czy nie łatwiej byłoby skorzystac od razu z __HAL_TIM_GET_COUNTER(&timer1) aby odczytać wartość licznika?

Udostępnij ten post


Link to post
Share on other sites
Witam, mam pytanie, chciałbym odczytać na jednym timerze dwa sygnały PWM. Wydaje mi się, że można to zrobić skoro jeden timer posiada 4 kanały, jednak nie potrafię skonfigurować go w ten sposób a zwyczajnie podłączenie dwóch sygnałów do timera daje wpływające na siebie pomiary. Wydaje mi się, że należy inaczej niż dla jednego sygnału skonstruować callback, ale nie wiem jeszcze jak to zrobić. Realizował ktoś kiedyś coś takiego i mógłby mi podsunąć jakiś pomysł?

A co do poradnika to jest ekstra i czekam na kolejną część, pozdrawiam!

Jeśli chciałbyś wykorzystać do tego tryb Combined Channels PWM Input On CH1/2, to niestety, ale nie da się włączyć dwóch na raz w jednym timerze. Jedyne co mógłbyś zrobić, to ustawić wejścia timera na Input capture i wtedy samemu wyciągnąć potrzebne informacje.

Czeć wszystkim czy tryb "imput capture direct mode" w Timer to jest to samo co w ATmedze tryb ICP dla Timera

Zasada działania jest ta sama, ale jeśli interesują Cię szczegóły, to należałoby zajrzeć do dokumentacji i porównać opisy tych trybów.

Czy nie łatwiej byłoby skorzystac od razu z __HAL_TIM_GET_COUNTER(&timer1) aby odczytać wartość licznika?

Oczywiście że tak! Dziękuję Ci bardzo za to spostrzeżenie, bo mi umknęły gdzieś te makra i zawsze wszystkie takie rzeczy po prostu dopracowywałem sobie na rejestrach, a przecież aż dziwne że nikt nie zrobił od tego funkcji. Postaram się poprawić to w artykule 🙂

Udostępnij ten post


Link to post
Share on other sites

Cześć

Troszkę nie kumam jak działa HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_3, &Duty, 1);

Jeśli za Duty będzie tablicą np 3 elementów, a więc HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_3, *Duty, 3); - jaki wyjdzie PWM ? Co 1 okres timera kolejne wypełnienie z tablicy ? Tak kombinuję pod kątem WS2818...

Udostępnij ten post


Link to post
Share on other sites

Podłączam się do pytania, również kombinuję pod kątek zastosowania STM32 do WS2812 i moje pytanie gdzie podajemy zdarzenie po którym ma nastąpić aktualizacja DMA?

Udostępnij ten post


Link to post
Share on other sites

Witam . Mam pytanie odnośnie wykorzystania PWM np. do sterowania zasilaczem potrzebuję sygnał PWM z dwóch wyjść z max wypełnienie 50%. Drugie wyjście zanegowane z małym opóżnieniem czasowym pomiędzy przełączeniami by był czas na wyłączenie tranzystorów. Proszę o informację jak można wygenerować takie sygnały. Drugie pytanie dotyczy częstotliwości którym parametrem ustawiamy np. potrzebuję 20kHz jak mam to wykonać.Chciałbym wykonać to na Arduino lub STM32.

Pozdrawiam i dziękuję za podpowiedż.Adam

Udostępnij ten post


Link to post
Share on other sites

Witam.

Posiadam STM32f103RBT6 i enkoder AS5040 (tryb standardowy wyjść - kwadraturowy). Chciałbym na porcie pb6 i pb7 uruchomić sprzętową obsługę enkodera. Korzystając z ustawień w tym poradniku niezależnie od kierunku obroty położenie (TIM4->CNT) przyjmuje wartości 0 lub 1 tzn przeskakuje z jednej na drugą przy obrocie. Dla tych samych ustawień TIM3 działa poprawnie. Czy ktoś może domyśla się w czym leży problem.

Udostępnij ten post


Link to post
Share on other sites

Witam.

Inspirując się poradnikiem i całym kursem chciał bym skonfigurować timer tak aby po naciśnięciu przycisku na jednym z pinów pojawiła mi się fala prostokątna o zadanej częstotliwości i czasie trwania. Chciał bym wykorzystać tryb Output Compare tak aby przerwanie samo generowało falę na danym pinie (nie chcę wchodzić do przerwania i w nim ustawiać stanu danego pinu uC). A więc opiszę może jaki efekt chcę uzyskać:

Po starcie programu na pinie na którym chcę generować falę chcę mieć cały czas stan niski, naciśnięcie przycisku powoduje uruchomienie timera z częstotliwością np: 1kHz i fala ma mieć długość np: 4 ms, po tym czasie na wyjściu timera znowu pojawia się stan niski. Mój problem polega na tym, że nie potrafię wymusić aby timer wyłączyć czyli mieć stan niski na danym pinie. Generowanie częstotliwości rozwiązałem wpisując do rejestru ARR wartość odpowiadającą generowaniu fali o interesującej mnie częstotliwości. Może ktoś wie w jaki sposób można uzyskać stan niski na wyjściu timera ? Wpisanie do ARR wartości 0 nie pomaga.

Z góry dzięki za pomoc.

Udostępnij ten post


Link to post
Share on other sites

Witam.

Mam pytanie, jak można zliczać obroty enkodera z uwzględnieniem kierunku?

Mam enkoder generujący na obrót 8000 impulsów. Muszę zliczyć co najmniej 400 000, a to przekręca licznik 16 bitowy. Rozwiązaniem jest zliczanie obrotów z dodawaniem i odejmowaniem w zależności od kierunku, ale nie wiem jak wygenerować odpowiednie przerwanie.

Ktoś pomoże?

Udostępnij ten post


Link to post
Share on other sites

Witam,
czy jest możliwość w enkoder mode generować przerwanie od każdego zliczonego zbocza ? potrzebuje zliczać impulsy z enkodera ale jednocześnie na każdym zboczu zerować pewną zmienną.

Z góry dziękuję za pomoc 🙂

Udostępnij ten post


Link to post
Share on other sites

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ę »

×