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

[attiny2313] [c/AvrStudio] zbyt niska częstotliwość programowego PWM

zbyszekJed 29 Wrz 2011 11:10 1809 6
REKLAMA
  • #1 9974922
    zbyszekJed
    Poziom 10  
    Witam,
    tak jak napisałem w temacie - piszę programowy pwm na attiny2313. Program działa w oparciu o przerwania od przepełnienia timer0. Timer0 ustawiam w normal mode. Fusebity daję na wewnętrzny oscylator 8MHz (bez dzielenia). Z moich obliczeń wynika, że przy rozdzielczości 256 powinienem uzyskać częstotliwość 8MHz/256 = 30kHz (ok), a mierzona oscyloskopem wychodzi mi 114Hz. Nie wiem z czego wynika błąd. Projekt piszę w AvrStudio 4 - w opcjach projektu również mam ustawione 8MHz taktowanie zegara.

    Od razu zaznaczę, że nie wiem jeszcze dokładnie ilu kanałów będę potrzebował i dlatego proszę o nie dawanie rad by wykorzystać sprzętowy pwm.

    main:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    fusebity:
    - hFuse D4
    - lFuse E4
    - eFuse FF
  • REKLAMA
  • REKLAMA
  • #3 9975306
    janbernat
    Poziom 38  
    Chyba wszystko się zgadza.
    Co 32us licznik się przepełnia i zwiększana jest zmienna licznik o 1.
    Po 256 takich zwiększeniach zmienna licznik sie przekręca.
    Teoretycznie powinno być 122Hz.
  • #4 9975325
    mirekk36
    Poziom 42  
    janbernat napisał:
    Chyba wszystko się zgadza.
    Co 32us licznik się przepełnia i zwiększana jest zmienna licznik o 1.
    Po 256 takich zwiększeniach zmienna licznik sie przekręca.
    Teoretycznie powinno być 122Hz.


    Dokładnie, przecież częstotliwość takiego programowego PWM'a oblicza się w ten sposób:

    F_CPU / pojemność timera sprzętowego (tutaj 256) / rozdzielczość PWM'a (tutaj 256)

    co daje ci przy tym taktowaniu :

    8MHz / 256 / 256 = 122Hz

    Dodano po 1 [minuty]:

    Gdybyś skorzystał z trybu CTC timera to mógłbyś jeszcze niec zwiększyć częstotliwość swojego PWM'a.
  • REKLAMA
  • #5 9977279
    zbyszekJed
    Poziom 10  
    Zgadza się, macie rację - podzieliłem częstotliwość procka przez rozdzielczość pwm'a, ale zapomniałem podzielić przez wielkość licznika timer0. Dzięki za pomoc.

    Aha - jak już jesteśmy przy temacie to może podpowiecie jaki dobrać filtr żeby uzyskać z tego pwm'a sygnał analogowy? Chodzi mi o sposób doboru wielkości elementów filtra RC: jak zależy częstotliwość graniczna od częstotliwości pwm'a, którego chce przerobić na sygnał analogowy?[/quote]
  • REKLAMA
  • #7 9977468
    janbernat
    Poziom 38  
    Stała RC prostego filtra jest zwykle kompromisem.
    Powinna ona być dużo większa niż 1/f częstotliwości wyjściowej co pozwoli wyeliminować "schodki".
    Ale gdy jest zbyt duża- odpowiedź na zmiany wypełnienia będzie wolna.
    Obrazowo pisząc- chcesz na wyjściu prostokąt a dostaniesz trójkąt.
    No i przy takich małych czestotliwościach należy poczytać o filtrach aktywnych na wzmacniaczach operacyjnych.
    No i poszukaj noty Atmela avr136- jest tam przykładowy kod na softPWM.
    Chwalą się że do 22 kanałów.
    Sprawdzałem dla 6 kanałów- działa z ładnym zapasem.
REKLAMA