Skocz do zawartości

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


Komentator

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.

Link do komentarza
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)!

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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!

Link do komentarza
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 🙂

Link do komentarza
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...

Link do komentarza
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

Link do komentarza
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.

Link do komentarza
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.

Link do komentarza
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?

Link do komentarza
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 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.