logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Konfiguracja 4xPWM na jednym Timerze STM32 w HAL - jak sterować pinami?

19 Sie 2020 22:44 846 10
REKLAMA
  • #1 18879071
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #2 18879426
    _lazor_
    VIP Zasłużony dla elektroda
    Posty: 3795
    Pomógł: 259
    Ocena: 1130
    Z tego co patrzę to General-purpose timer ma 4 compare unity, więc da się zrobić 4 sygnały PWM na jednym timerze, chociaż musisz sprawdzić czy na Twoim SoC też ma 4 compare units, ja patrzę do dokumentacji SoC'a nad którym aktualnie pracuję, więc mogą być rozbierzności.

    Ściągnij sobie paczkę firmware dla rodziny z którą pracujesz, tam się znajdują example, które bardzo ułatwiają rozwój oprogramowania. Jak podasz nazwę uC na jakim chcesz to zrobić to umożliwi to bardziej konkretne odpowiedzi.
  • REKLAMA
  • #3 18879902
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #4 18880000
    _lazor_
    VIP Zasłużony dla elektroda
    Posty: 3795
    Pomógł: 259
    Ocena: 1130
    Nie mam za wiele czasu na grzebanie, na pewno używasz w kodzie czegoś takiego:
    HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TA2 + HRTIM_OUTPUT_TD1 + HRTIM_OUTPUT_TD2);

    Jeśli używasz hala. Na pewno jest coś analogicnzego do odłączenia outputu. Jeśli chcesz by nie triggerował eventu to po prostu wyłącz compare unit.
  • #5 18880938
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 18881029
    mikolaj_1
    Poziom 6  
    Posty: 5
    Pin najprościej odłaczyć od timera zmieniając jego typ z alternate na inny.

    Na przykład

    GPIOx -> MODER |= 3 << (pin * 2);


    Albo wyzeruj bit PE w CCMRx.

    Albo ustaw wypełnienie 0 albo 100%.

    itd itd.
  • #7 18889549
    Konto nie istnieje
    Poziom 1  
  • #8 18892092
    Konto nie istnieje
    Poziom 1  
  • #9 18893613
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Bo operatorem |= można zmienić bity jedynie z dowolnego stanu na 1, natomiast do zmiany z dowolnego stanu na 0 służy operator &=. Skoro masz już na bitach od funkcji 0b11, to (0b11 | 0b10) == 0b11. Sorry.
  • #10 18893980
    Konto nie istnieje
    Poziom 1  
  • #11 18894026
    piotrek0207
    Poziom 20  
    Posty: 379
    Pomógł: 35
    Ocena: 70
    Mallecki napisał:
    jaki sposób można to zmieniać na rejestrach?


    Jest rejestr TIMx capture/compare enable register (TIMx_CCER).

    Konfiguracja 4xPWM na jednym Timerze STM32 w HAL - jak sterować pinami?

Podsumowanie tematu

✨ Użytkownik poszukuje sposobu na konfigurację 4 kanałów PWM na jednym Timerze w STM32, aby móc kontrolować sygnały PWM na wyjściowych pinach bez wyłączania działania Timera. Odpowiedzi wskazują, że General-purpose timer w STM32 może obsługiwać 4 jednostki porównawcze, co umożliwia generowanie 4 sygnałów PWM. Użytkownik może odłączyć sygnał PWM od pinów, zmieniając tryb pinu z alternatywnego na inny lub ustawiając wypełnienie na 0% lub 100%. Pojawiły się również pytania dotyczące problemów z powrotem do ustawień PWM po ich zmianie oraz zrozumienia zapisu rejestrów. Wskazówki dotyczące rejestrów TIMx i operatorów bitowych były również omawiane.
Wygenerowane przez model językowy.
REKLAMA