Skocz do zawartości

Kurs STM32L4 – #8 – liczniki sprzętowe (PWM, enkoder)


Pomocna odpowiedź

Cieszę się, że problem rozwiązany, a dla formalności dodam jeszcze przypomnienie, że te enkodery występują w 2 wersjach, które wyglądają identycznie, a ich działanie jest nieco inne. Więcej na ten temat pisaliśmy na wcześniejszych stronach tego tematu: https://forbot.pl/forum/topic/20099-kurs-stm32l4---8---liczniki-sprzetowe-pwm-enkoder/page/2/#comment-165141

 

  • 3 miesiące później...

@michalkepka zmień dla testu priorytety przerwań na takie jak były w kursie (kolumna Preemption...) na Twoim ostatnim zrzucie ekrany. Podczas tworzenia kursu Cube ustawiał domyślnie inne priorytety. Jeśli to nie pomoże to dodaj jako załącznik (archiwum zip) swój projekt - sprawdzę go dokładnie 🙂

(edytowany)

Udało mi się w końcu usiąść do tego kursu i coś porobić. Poniżej znajduje się film z działania symulatora trójfazówki. Jest zrobiony w całości na timerach (PWM) i przerwaniach (tj pętla główna jest pusta). Mamy tablicę która przechowuje wartości sinusa oraz 3 zmienne wskazujące na indeks, który ustala wartość PWM. Przerwanie od licznika o okresie 15ms odpowiada za inkrementację indeksów tak aby wartości PWM na poszczególnych "fazach" zmieniały się tak jak w sinusoidzie. Generalnie wygląda to jakby migała jedna na raz ale to kwestia tego że od pewnego momentu ciężko uchwycić zmiany jasności).

20230712_213704 - Trim.gif

Edytowano przez daneil737
dodanie wyjaśnienia dlaczego wygląda jakby migała jedna dioda na raz
  • Lubię! 1
  • 1 miesiąc później...

Jeden z czytelników zgłosił drobny błąd w tej części kursu, który właśnie poprawiłem.

Było:

Cytat

W dokumentacji mikrokontrolera znajdziemy informację, do której magistrali podłączony jest dany licznik – liczniki od TIM2 do TIM7 są podłączone do magistrali APB2, a pozostałe do APB1.

Powinno być:

Cytat

W dokumentacji mikrokontrolera znajdziemy informację, do której magistrali podłączony jest dany licznik – liczniki od TIM2 do TIM7 są podłączone do magistrali APB1, a pozostałe do APB2.

  • 2 tygodnie później...

[..](czyli częstotliwość może być dzielona przez wartości od 1 do 65 536).

powinno być oczywiście 65 535. ok czytam dalej i pozdrawiam

Aktualizacja:

Można też było rozwinąć obsługę enkodera i pokazać przykład na np. przerwaniach lub DMA zamiast na odpytywaniu.

można wykorzystać tutaj: void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

a w niej:

HAL_TIM_ReadCapturedValue();

__HAL_TIM_IS_TIM_COUNTING_DOWN()

Czyli odczyt wartości i kierunku obrotu enkodera. Sprawdzałem i ładnie działa ( testuje na STMG031 ale to nie ma znaczenia)

  • Lubię! 1
(edytowany)

Preskaler ustawiony na 65535 daje w efekcie podział częstotliwości przez 65536, wiec ja tutaj błędu nie widzę.

A co do reszty uwag, to kurs nie opisuje wszystkich możliwości stm32, trzeba było tematy do omówienia wybrać, a z wielu rzeczy zrezygnować.

Edytowano przez Elvis
  • Lubię! 1
  • 11 miesiące później...

W ostatnim ćwiczeniu kursu powiedziane jest, że enkoder działa prawidłowo nawet bez włączonej filtracji. Co może być nie tak, jeśli u mnie jako tako enkoder działa, ale jedynie z dwoma filtrami RC? I to nie tak idealnie, bo przy szybszym kręceniu pojawiają się pewne obsuwy.

  • 5 miesiące później...

Bardzo fajny temat - timery. Zwłaszcza sprzętowa obsługa enkoderów. Niestety nie wiem z jakiego powodu ta opcja nie zadziałała. Mam co prawda nieco inny enkoder, tzn. "goły" sam element enkodera. Nie posiada rezystorów pull-up, ale włączam w MX opcja PULL-UP i dopiero w ćwiczeniu encoder-mode nie chce działać. Cały czas value jest zero. Sprawdziłem miernikiem, że wewnętrzny pull-up działa, stany zmieniają się podczas kręcenia, więc nie powinno być z tym problemów. Być może wykasowałem zbyt dużo kodu związanego z timer3 z poprzednich ćwiczeń. W opisie nie podano co dokładnie wykasować a co zostawić. Nie kupowałem całego zestawu, ponieważ gratów związanych z mikrokontrolerami, kabelków, breadboardów, displayów, ledów, czujnkówm i co tam jeszcze mam aż za dużo i kupiłem tylko Nucleo dokładnie takie same jak używane w szkoleniu. Korzystam z CUBE-IDE v. najnowsza 1.17.0 windows 11.

Treker
Ta treść została wynagrodzona przez moderatora!

aimeiz otrzymał odznakę: "Odkrywca (podanie odp. na własne pytanie)"

Problem rozwiązany.
Początkowo poszperałem w zasobach i podłączyłem taki sam enkoder jak pokazany na rysunkach, ale to nie pomogło.
Wygenerowałem zupełnie nowy projekt, pozostawiłem domyślną konfigurację clock, ustawiłem UART2 i timer3 w trybie encoder i parametry takie jak pokazane w ćwiczeniu. Skopiowałem kod i tylko dodałem kod do właściwej obsługi \n przy wypisie na terminal. Tym razem zadziałało.
Podłączyłem "goły" enkoder i w MX dodałem Pull_UP dla portów timera. Też działa. Zastanawiam nad przyczyna i chyba chodzi o ten kawałem ustawienia timera, który nie był widoczny w opisie ćwiczenia.
obraz.thumb.png.c04395c9f3bb7b263928adc17a819e5c.png
Chodzi mi o ustawienie Prescaler(PSC 16 bit value) - 0. Z poprzednich ćwiczeń było 7999, ale nie mam pewności.
Ustawiłem konfigurację zegarów, tak aby był 80MHz. Też działa poprawnie. moja dociekliwość nie została zaspokojona, więc zmieniłem ustawienie Prescaler(PSC - 16 bits value na 7999 i przestało działać, co potwierdziło moje wcześniejsze przypuszczenia. Widocznie sprzętowy mechanizm obsługi enkoderów wymaga własnie takich-domyślnych ustawień.

 

  • Lubię! 2
  • 7 miesiące później...
Treker
Ta treść została wynagrodzona przez moderatora!

pirx1988 otrzymał odznakę: "Korektor (za znalezienie błędu w artykule)"

Mam zagwozdkę odnośnie zasilania 3,3V. 

W tekście jest napisane:

"Dioda RGB dostarczana z zestawem ma wspólną anodę – nasz układ nie ma więc wspólnej masy, co jest typowym rozwiązaniem. Zamiast tego mamy wspólne zasilanie 3,3 V, a sterowanie jest odwrócone." - Czy to nie jest tak, że dioda użyta w kursie: https://botland.com.pl/diody-led-rgb/543-dioda-led-5mm-rgb-wsp-anoda-5-szt-5903351244176.html

która ma Vf = 3.5V dla kolorów zielonego i niebieskiego nie ruszy przy zasialniu Vdd = 3.3V? 
Czy to możę przeoczenie i używacie tam 5.0V?

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...