eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaMały MCU z rozbudowanym PWMRe: Mały MCU z rozbudowanym PWM
  • Data: 2022-12-29 22:33:34
    Temat: Re: Mały MCU z rozbudowanym PWM
    Od: Janusz <j...@o...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2022-12-29 o 18:07, M M pisze:
    > czwartek, 29 grudnia 2022 o 17:51:20 UTC+1 Janusz napisał(a):
    >> W czym widzisz problem? ustawiasz odpowiednio rejestry io masz bez
    >> przesunięcia.
    > W tym że z przesunięciem miałbym mniejsze tętnienia bo częściowo się znoszą. 2
    kanały co 180 stopni da się zrobić na jednym timerze (bo dalej wszystkie 4 są
    wycentrowane tak samo) ale 3 co 120 nie widzę jak.
    Więcej timerów maja atxmegi i nowe atmegi 3208, 3209 (3+1) czy 4809 czy
    4809 (4+1)

    > Bez przesunięcia to mogę po prostu sterować wszystkie razem, ale wtedy tętnienia
    nośnej do odfiltrowania będą sporo większe, nie chcę za mocno siać zakłóceniami po
    okolicy, a instalacja PV to spora antena.
    Strasznie mieszasz, PWM z 'natury' sieje, dlatego na wyjściu falownika
    są filtry 'odsiewające' PWM-a.
    Co do przesunięcia, możesz to próbować robić bezpośrednio na timerach w
    przerwaniach ale to bez sensu, bo nie jesteś w stanie przerwań odbierać
    w tym samym czasie, dlatego do timerów są dodane rejestry compare, w tym
    procku 3, i one sprzętowo ci machają nogami a ty w przerwaniu od
    przepełnienia timera karmisz je danymi, tu mój falownik

    ISR(TIMER1_OVF_vect)
    {static U16 faza_R=0, faza_S=21845, faza_T=43690;
    U16 tmp16;

    //generacja 3pwm-ow na wyjsciach PB1,PB3,PB5
    faza_R+=krok;
    if (faza_R>32768) faza_R=faza_R-32768;
    tmp16=pgm_read_byte(&sin256[faza_R>>7]);//*nap;
    OCR1A=tmp16;

    faza_S+=krok;
    if (faza_S>32768) faza_S=faza_S-32768;
    tmp16=pgm_read_byte(&sin256[faza_S>>7]);//*nap;
    OCR1B=tmp16;

    faza_T+=krok;
    if (faza_T>32768) faza_T=faza_T-32768;
    tmp16=pgm_read_byte(&sin256[faza_T>>7]);//*nap;
    OCR1D=tmp16;

    BIT->Bit_ADC_start=1;
    }

    'krok' to zmiana częstotliwości u mnie to od 20 do 255;
    'faza_x' to akumulatory fazy, starszą częścią jest adresowana baza
    sinusów 'sin256', tablica jest 'dodatnia' czyli od 0-255, i obejmuje
    pełny okres czyli 360 st.
    Inicjację ich masz w nagłówku w static, wpisując tam inne wartości
    dosttaniesz inne przesunięcie. Akumulatory specjalnie 'skróciłem' do
    32768 żeby uzyskać odpowiedznie częstotliwości i nie przekroczyć czasu
    wykonania przerwania.
    OCR1X to są rejestry compare które generują pwm-y


    >
    >> Opowiadasz głupoty. Klucze spalisz z zupełnie innego powodu.
    >
    > Chętnie się dowiem na co jeszcze uważać.
    W innych musisz sam zadbać o deadtime-y tu masz jes ustawione, ja dałem
    1uS i wejście szybkiego resetu które wyłącza wszystko. Masz przykład
    mój, główny timer na 64Mhz, procek na 16

    // HF PLL Clock dla I/O =64Mhz, Fcpu=16Mhz
    PLLCSR=(1<<PLLE);
    _delay_us(200);
    if (TEST(PLL_test)) //PLLCSR,PLOCK
    {PLLCSR=(1<<PCKE); }
    // 64Mhz/8=8Mhz
    TCCR1A=(1<<PWM1A) | (1<<PWM1B) | (1<<COM1A0) | (1<<COM1B0);
    // Fclk=8Mhz /256 = fpwm=31 746
    OCR1C=255;
    // DEAD TIME prescaler /8 = 1uS
    TCCR1B=(1<<DTPS11) | (1<<DTPS10) | (1<<CS12);// | (1<<CS10) ;
    TCCR1C=(1<<COM1D0)|(1<<PWM1D) | (1<<COM1A1S)|(1<<COM1B1S);
    TCCR1D=0;//(1<<WGM10);
    //liczba impulsow
    DT1=0x11; //1 impuls naprostym, 1 na zanegowanym
    TIMSK=(1<<TOIE1);


    Robiłem już wcześniej przetwornice ale jednak sporo mniejszej mocy.
    Jakby był jakiś gotowiec (choćby gotowa płytka mostka IGBT do której
    dorabiam tylko sterowanie) to bym skorzystał zamiast rzeźbić samodzielnie.
    Marzyciel :)

    --
    Janusz

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: