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

[Atmega8]Fast PWM 16bit, niechciane zachowanie

manekinen 14 Lis 2010 15:28 2643 3
REKLAMA
  • #1 8742675
    manekinen
    Poziom 29  
    Korzystam z Fast PWM, tryb 14, bez preskalera. Czyli na dwóch kanałach OC1A i OC1B otrzymuje regulowane wypełnienie o rozdzielczości 16bit przy ~122Hz (zegar uC to 8MHz).

    Działa to bardzo ładnie, jednak przy zerowym wypełnieniu (pwm1a = 0) na wyjściu są jakieś śmieci. Czas trwania to tylko 230ns, ale to wystarczy żeby na wyjściu filtra RC dostać 8mV zamiast równego 0V. A zależy mi żeby zejść do zera. Tak to wygląda:
    [Atmega8]Fast PWM 16bit, niechciane zachowanie
    (pomiar na nogach GND i OC1A)

    PWM ustawiam tak:

    Tccr1a = A2h
    Tccr1b = 19h
    Icr1 = FFFFh

    Czy gdzieś robię błąd? Czy może spodziewam się cudów? Jeśli to drugie, to jak w prosty sposób obejść ten problem? Dodam że nie zależy mi na liniowości, która i tak przy najmniejszym wypełnieniu się rozjeżdża.

    Pozdrawiam.
  • REKLAMA
  • #2 8742800
    pancio
    Poziom 16  
    Może się mylę, ale żeby wyeliminować zakłócenia powinieneś może skorzystać z trybu PWM z korekcją fazy?
  • REKLAMA
  • Pomocny post
    #3 8742844
    Andrzej__S
    Poziom 28  
    Atmel napisał:

    The extreme values for the OCR1x Register represents special cases when generating a PWM waveform output in the fast PWM mode.
    If the OCR1x is set equal to BOTTOM (0x0000) the output will be a narrow spike for each TOP+1 timer clock cycle.
    Setting the OCR1x equal to TOP will result in a constant high or low output (depending on the polarity of the output set by the COM1x1:0 bits.)

    Myślę, że wyjściem z sytuacji jest ustawienie bitów COM1A1:COM1A0 na 3 i sterowanie wypełnieniem poprzez (0xFFFF - wypełnienie). Stracisz wtedy możliwość ustawienia maksymalnego napięcia, bo przy maksymalnym wypełnieniu pojawi się krótkotrwale 0 (tak jak teraz 1), ale dla ustawienia zerowego na wyjściu otrzymasz 0V.

    Dodano po 8 [minuty]:

    pancio napisał:

    Może się mylę, ale żeby wyeliminować zakłócenia powinieneś może skorzystać z trybu PWM z korekcją fazy?

    To też rozwiązuje problem, o ile możesz sobie pozwolić na zmniejszenie częstotliwości PWM (będzie o połowę mniejsza) albo na zwiększenie częstotliwości taktowania procesora.
  • #4 8742962
    manekinen
    Poziom 29  
    Że nie skojarzyłem że tymi "śmieciami" jest właśnie wypełnienie 1/65535...

    Na maksymalnym wypełnieniu mi nie zależy, już jest cudnie.

    Dzięki ogromne!

    dodano....

    P.S. Co do częstotliwości, musi być jak najwyższa aby filtr nie wprowadzał dużych opóźnień. Docelowo układ będzie chyba pracował na 20MHz, da to coś w okolicy 300Hz.
REKLAMA