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

LPC17xx + PWM [aktualizacja częśtotliwości - rejestr MR0]

Kubbaz 04 Paź 2011 18:51 1458 6
REKLAMA
  • #1 9992906
    Kubbaz
    Poziom 26  
    Posty: 1237
    Pomógł: 9
    Ocena: 30
    Witam wszystkich Elektrodowiczów!

    Muszę w głównej pętli for (;; ) programu aktualizować (zwiększać) częstotliwość PWM (o stałym współczynniku wypełnienia 50 %) i PWM nie chce się aktualizować. Zawsze pamięta tę pierwszą ustawioną wartość. Za każdym razem "przewalam" pełną funkcję do inicjalizacji PWM i mogę dojść po całym dniu co jest nie tak, dlatego proszę o pomoc.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 9993066
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Rejestry MRx są "zablokowane" gdy działa PWM. Jest bit którego ustawienie wymusza aktualizację rejestrów MRx przy następnym cyklu.

    Cytat:
    PWM mode is enabled (counter resets to 1). PWM mode causes the shadow
    registers to operate in connection with the Match registers. A program write to a
    Match register will not have an effect on the Match result until the corresponding
    bit in PWMLER has been set, followed by the occurrence of a PWM Match 0
    event. Note that the PWM Match register that determines the PWM rate (PWM
    Match Register 0 - MR0) must be set up prior to the PWM being enabled.
    Otherwise a Match event will not occur to cause shadow register contents to
    become effective.


    Generalnie więc bez jeśli chcesz zmieniać nie tylko wypełnienie ale i okres, to musisz wyłączać PWM na czas zmiany. Żeby w momencie zmiany nie było żadnych zakłóceń, trzeba by użyć przerwań lub choć pollingu, żeby trafić ze zmianą w odpowiednim momencie.

    4\/3!!
  • REKLAMA
  • #3 9993113
    Kubbaz
    Poziom 26  
    Posty: 1237
    Pomógł: 9
    Ocena: 30
    Czy dobrze rozumiem, że jeżeli przy obecnej funkcji PWM1_Init (); bedę dodatkowo odpowiednio ustawiał bit 0 i 1 (Enable PWM Match 0 Latch i Enable PWM Match 1 Latch) w rejestrze PWMLER, to w następnym cyklu działania PWMu, PWM będzie się aktualizował do aktualnej wartości rejestru MR0 i MR1?
  • REKLAMA
  • #4 9993124
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Opis nie do końca jest jasny... W sumie może chodzić tylko o PIERWSZE ustawienie rejestru MR0, bo jakby miał początkową wartość 0, to pewnie faktycznie nie będzie tego matcha... Sprawdź <:

    4\/3!!
  • REKLAMA

Podsumowanie tematu

✨ Użytkownik ma problem z aktualizacją częstotliwości PWM w mikrokontrolerze LPC17xx, gdzie PWM nie zmienia ustawionej wartości. Odpowiedzi sugerują, że rejestry MRx są "zablokowane" podczas działania PWM, co wymaga wyłączenia PWM przed zmianą częstotliwości. Użytkownik powinien ustawić odpowiednie bity w rejestrze PWMLER, aby umożliwić aktualizację rejestrów MR0 i MR1 w następnym cyklu. Po zastosowaniu tych wskazówek, problem został rozwiązany.
Wygenerowane przez model językowy.
REKLAMA