Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR - AT-90PWM216, PWM (język C)

fasset 19 Paź 2013 15:40 1353 4
  • #1 19 Paź 2013 15:40
    fasset
    Poziom 13  

    Witam.
    Zamierzam zaprogramować AT-90PWM216 tak, aby na wyjściach PSC (Power Stage Controller) otrzymać PWM o częstotliwości 10-15kHz. Celem jest sterowanie tranzystorów w trójfazowym falowniku (jeden port steruje dwoma tranzystorami - zanegowany sygnał na jednym tranzystorze) i otrzymanie przebiegu sinusoidalnego na odbiorniku.
    Jak na obrazku:
    AVR - AT-90PWM216, PWM (język C)

    Udało mi się jedynie uzyskać zwykły przebieg PWM na wyjściach PSCOUT00 i 01. Nie wiem jak regulować szerokość poszczególnych impulsów prostokątnych. Jedynym wyjściem jest użycie macierzy?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Materiały:
    http://www.atmel.com/Images/doc7670.pdf
    http://www.atmel.com/Images/Atmel-7710-8-bit-Microcontroller-AT90PWM216-316_datasheet.pdf

    0 4
  • #2 19 Paź 2013 19:03
    Father
    Poziom 26  

    fasset napisał:

    Udało mi się jedynie uzyskać zwykły przebieg PWM na wyjściach PSCOUT00 i 01. Nie wiem jak regulować szerokość poszczególnych impulsów prostokątnych.


    Modyfikacja szerokości impulsów jest możliwa po zastosowaniu pewnej sekwencji operacji: ustawiamy bit PLOCK_X w rejestrze PCNF_X na 1, modyfikujemy rejestry OCR_XXX (po ustawieniu bitu PLOCK_X operacje na OCR_XXX nie powodują zakłóceń cyklu PSC) i w ostatnim kroku zerujemy bit PLOCK_X, co powoduje przepisanie zmodyfikowanych rejestrów OCR_XXX do wewnętrznych rejestrów PSC. Warto się też przyjrzeć bitowi PALOCK i możliwości jego wykorzystania. Generalnie synchronizacja poszczególnych kanałów to szerszy temat, więc polecam lekturę not aplikacyjnych Atmela i eksperymentowanie...

    0
  • #3 20 Paź 2013 17:33
    fasset
    Poziom 13  

    Ostatecznie próbuje uzyskać sinus "programowo" przy użyciu tablicy.
    Kod napisałem na podstawie informacji w temacie:
    https://www.elektroda.pl/rtvforum/topic2215875.html

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Niestety efektem jest jedynie pojedynczy impuls prostokątny. Proszę o wskazanie gdzie jest błąd.

    0
  • #4 20 Paź 2013 17:38
    BlueDraco
    Specjalista - Mikrokontrolery

    Pomyśl nad tymi dwiema liniami. Jaki jest skutek tych dwóch zapisów dla timera?
    OCR1A=pwm1[k];

    TCNT1=934;

    0
  • #5 20 Paź 2013 18:10
    fasset
    Poziom 13  

    Ok działa. To co pomogło to usunięcie tej linijki, i zmiana nazwy przerwania. Czyli:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0