eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaFast PWM - trójkąt zamiast sinusa na wyjściuFast PWM - trójkąt zamiast sinusa na wyjściu
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!wsisiz.edu.pl!.POSTED!not-for-mail
    From: Atlantis <m...@w...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Fast PWM - trójkąt zamiast sinusa na wyjściu
    Date: Sat, 16 Feb 2013 16:27:53 +0100
    Organization: http://www.wit.edu.pl
    Lines: 62
    Message-ID: <kfo8i2$v93$1@portraits.wsisiz.edu.pl>
    NNTP-Posting-Host: abmu44.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: portraits.wsisiz.edu.pl 1361028483 32035 83.7.240.44 (16 Feb 2013 15:28:03
    GMT)
    X-Complaints-To: a...@w...edu.pl
    NNTP-Posting-Date: Sat, 16 Feb 2013 15:28:03 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130107
    Thunderbird/17.0.2
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:642717
    [ ukryj nagłówki ]

    Eksperymentuję właśnie z generowaniem przebiegu sinusoidalnego za pomocą
    Atmegi8. Oparłem się na drugim przykładzie z tej strony:

    http://tinyurl.com/d3tyvex

    Przebieg ma być dialtonem o częstotliwości około 425 Hz.

    Wzór przebiegu znajduje się w tabeli, wypełnionej w następujący sposób:

    for (i=0; i<256; i++) sinus_buffer[i]=128+126*sin(6.26/256*1);

    PWM generowany jest za pomocą TIMER1 ustawionego na Fast PWM (tryb 14).
    Funkcja włączająca generowanie przebiegu wygląda następująco:

    void StartDialtone (void)
    {
    TCCR1A |= _BV(COM1A1) | _BV(WGM11);
    TCCR1B |= _BV(WGM13) | _BV(WGM12) | _BV(CS10);
    ICR1 = 255;
    OCR1A = 0;

    sinus_ind = 0;
    TCNT0 = 182;
    TCCR0 |= _BV(CS00);
    TIMSK |= _BV(TOIE0);
    }

    Z kolei wyłączająca wygląda następująco:

    void StopDialtone (void)
    {
    TCCR0 &= ~_BV(CS00);
    TIMSK &= ~_BV(TOIE0);

    TCCR1A &= ~(_BV(COM1A1) | _BV(WGM11));
    TCCR1B &= ~(_BV(WGM13) | _BV(WGM12) | _BV(CS10));
    ICR1 = 0;

    PORTB &= ~_BV(1);
    }

    Zmiana współczynnika wypełnienia odbywa się w przerwaniu, po
    przepełnieniu TIMER0:

    ISR (TIMER0_OVF_vect)
    {
    OCR1A = sinus_buffer[sinus_ind];

    if (sinus_ind < 255) sinus_ind++;
    else sinus_ind=0;

    TCNT0 = 182;
    }

    Za wyjściem PB1/OC1A znajduje się filtr dolnoprzepustowy RC złożony z
    rezystora 330 omów oraz kondensatora 1uF do masy. Za filtrem nie mam
    jednak sinusoidy, a coś przypominające trójkąt:

    http://imageshack.us/photo/my-images/4/img8927kj.jpg
    /

    Gdzie mogłem popełnić błąd? Problem będzie leżał raczej po stronie softu
    czy sprzętu?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: