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

Falownik napięcia na STM32F407

felekfala 01 Lut 2013 13:25 26520 42
  • #31
    kyp89
    Poziom 9  
    Witam
    Powiem szerze że o ile zasadę sterownia jestem w stanie zrozumieć i nawet rozumiem:) o tyle problem stanowi dla mnie przeniesienie to na praktykę. Generalnie chodzi o to jak zmusić te sześć kanałów PWM by działały w taki sposób jak mają. Jak zsynchronizować ich działanie. Można by połączyć kaskadowo dwa timery ale to chyba nie o to chodzi, poza tym Timer 1 w F4 ma chyba dostatecznie dużo kanałów. Będę jeszcze próbował się dowiedzieć jak do tego podejść ale właśnie problem jest głównie taki: Od czego zacząć? Jak do tego podejść? I jak przemielić wartości z pomiarów i nadajników na odpowiednie działanie kanałów PWM. Nie proszę o gotowy kod, raczej o wskazówki
  • IGE-XAO
  • #32
    RalfPi86
    Poziom 13  
    Poczytaj książkę z napędu elektrycznego - najlepiej zacząć od czegoś takiego.
    Rozrysuje sobie 6 tranzystorów (falowinik) i każdy możliwy stan zasialnia uzwojeń (3 uzwojenia skojarzone w gwiazdę).
    Zobacz jakie napięcia się odkładają na każdej fazie i wtedy będzie lepszy obraz tego co chcesz zrobić.. samemu też długo do tego dochodziłem.
    no tak.. i rozrysuj to w czasie...(wyjdą tobie takie przebiegi quasi-prostokątne)
    Jeżeli wiesz jak działają timery.. to dasz radę :)
  • IGE-XAO
  • #33
    felekfala
    Poziom 19  
    kyp89 napisał:
    Jak zsynchronizować ich działanie. Można by połączyć kaskadowo dwa timery ale to chyba nie o to chodzi, poza tym Timer 1 w F4 ma chyba dostatecznie dużo kanałów. Będę jeszcze próbował się dowiedzieć jak do tego podejść ale właśnie problem jest głównie taki: Od czego zacząć? Jak do tego podejść? I jak przemielić wartości z pomiarów i nadajników na odpowiednie działanie kanałów PWM. Nie proszę o gotowy kod, raczej o wskazówki

    Musisz dokładnie sprecyzować o co ci chodzi.
    Zrób tak jak mówi kolega RalfPi86. Jeśli chcesz już później coś implementować to może zacznij od U/f to Ci pomoże zrozumieć jak to się dzieje "sprzętowo".
    Pamiętaj że metody sterowania są różne i nie każda potrzebuje modulatora PWM na wyjściu.
  • #34
    kyp89
    Poziom 9  
    Troszkę to trwało ze względu na sesję i natłok pracy...w pracy:D
    No więc: Spróbuję najpierw ze sterowaniem skalarnym:
    tworzymy jakąś tablice w której będziemy przechowywać wartości PWM dla danej chwili.
    Zakładając że na wytworzenie jednej połówki będę potrzebował 100 impulsów (przykładowo),
    to wartości od 0-50 są rosnące, a od 51-100 malejące.
    Jeśli teraz za pomocą systika będę sobie odmierzał jakieś odcinki czasu i generował przerwanie w którym będę przypisywał do PWM (np. TIM1), kolejne elementy tablicy z wartościami to chyba powinna mi powstać jakaś taka pokraczna połówka. Oczywiście okres trwania sygnału PWM musi być chyba taki sam jak odcinki czasu odmierzane przez SYSTik. Na razie tak teoretycznie gdybam. Czekam na oscyloskop żeby se to podlgądnąć.
    Znając życie jest pewnie poostrzy sposób:D
  • #35
    kszumek
    Poziom 16  
    Witam
    a ja mam jeszcze pytanie do autora odnośnie liczenia sinusa
    liczyłeś czy miałeś ztablicowany i z jaką dokładnością ?
    oraz co najbardziej zajmowało procesor , które obliczenia ?
    pozdrawiam
  • #36
    felekfala
    Poziom 19  
    kyp89 napisał:
    Troszkę to trwało ze względu na sesję i natłok pracy...w pracy:D
    No więc: Spróbuję najpierw ze sterowaniem skalarnym:
    tworzymy jakąś tablice w której będziemy przechowywać wartości PWM dla danej chwili.
    Zakładając że na wytworzenie jednej połówki będę potrzebował 100 impulsów (przykładowo),
    to wartości od 0-50 są rosnące, a od 51-100 malejące.
    Jeśli teraz za pomocą systika będę sobie odmierzał jakieś odcinki czasu i generował przerwanie w którym będę przypisywał do PWM (np. TIM1), kolejne elementy tablicy z wartościami to chyba powinna mi powstać jakaś taka pokraczna połówka. Oczywiście okres trwania sygnału PWM musi być chyba taki sam jak odcinki czasu odmierzane przez SYSTik. Na razie tak teoretycznie gdybam. Czekam na oscyloskop żeby se to podlgądnąć.
    Znając życie jest pewnie poostrzy sposób:D


    Są rożne sposoby, najprostszym jest:
    PWM chodzi z stałą częstotliwością, kolejne elementy z tablicy sinusa podawane są w przerwaniu do rejestrów PWM co jakiś okres czasu, zmieniając ten okres zmieniasz częstotliwość pierwszej harmonicznej napięcia. Inny sposób to stały okres wpisywania do rejestrów PWM wypełnienia, poprzez np skokową zmianę elementów z tablicy, lub mając szybki procesor wyliczanie wartości online.

    kszumek napisał:
    Witam
    a ja mam jeszcze pytanie do autora odnośnie liczenia sinusa
    liczyłeś czy miałeś ztablicowany i z jaką dokładnością ?
    oraz co najbardziej zajmowało procesor , które obliczenia ?
    pozdrawiam


    W DTC i FOC nie liczy się sinusa. Najbardziej czasochłonne obliczenia to te związane z estymatorami strumienia magnetycznego i wielkościami potrzebnymi do jego uzyskania.
  • #37
    kyp89
    Poziom 9  
    Witam ponownie.
    Walczę ze sterowaniem skalarnym do nadal:) Ale było dużo przerwy na przelotowe nauczenie się conieco o samych STM'ach.
    Mam takie pytanie: Wygenerowałem sobie połówkę sinusa i wrzucam ją na jeden kanał. Drugą połówkę wrzucam na drug kanał? Czy można do tego wykorzystać wyjścia komplementarne? Próbowałem z tym dzisiaj walczyć i nie za bardzo mi się to udało. W sensie miałem po prostu dwie połówki, jedna pod drugą. Nie można jakoś przesunąć tego sygnału? Druga opcja jest dla mnie taka że będę działał na dwóch timerach ale najpierw chcę sprawdzić tą pierwszą opcję.
    Z góry dziękuję za pomoc:)
  • #38
    felekfala
    Poziom 19  
    kyp89 napisał:
    Czy można do tego wykorzystać wyjścia komplementarne?

    Trzeba do tego wykorzystać wyjścia komplementarne i nie zapominaj o deadtime.

    kyp89 napisał:
    Wygenerowałem sobie połówkę sinusa i wrzucam ją na jeden kanał. Drugą połówkę wrzucam na drug kanał?

    Masz np. rejestr CCR1 który będzie odpowiedzialny za sterowanie kanałem CH1 i CHN1.
    W liczniku ARR wpisujesz wartość, która będzie wartością maksymalną sinusa np. 2047.
    Gdy CCR1 == 2047 to sin = max.
    Następnie gdy sinus ma mieć zerową wartość to wpiszesz do CCR1 == ARR/2.
    Gdy CRR1 == 0 to sin = min.
    Wszystkie wartości pośrednie reprezentują pośrednie dyskretne wartości twojego sinusa
  • #39
    kyp89
    Poziom 9  
    Dzięki za odpowiedź.
    Próbowałem tak zrobić i wyszły mi dwie połówki jedna pod drugą...
    T.z zmieniałem wartości CCR1 w czasie.
  • #40
    kyp89
    Poziom 9  
    Sekundę, od początku:
    Zrobiłem tablicę która posiadało 180 elementów - wartości sinusa od 0-180. Przerobiłem je tak by pokrywały się z wypełnieniem w PWM. Skonfigurowałem sobie dwa Timery - TIM2 był skonfigurowany jako przerwanie w którym inkrementowana była wartość od 0-360. W przedziale od 0-180 zapisuję do TIM1->CCR1 wartości z tablicy sinusa. Uruchomienie wyjścia komplementarnego dało w tym wypadku że mam obie połówki, jedna pod drugą. Już jedną połówkę mam teraz trzeba zrobić drugą:D
    Jeśli dobrze rozumiem dokumentację to CCRx odpowiada za porównanie, czyli za wypełnienie, a ARR za częstotliwość sygnału PWM. Pytanie: Jak przesunąć w czasie tą drugą połówkę, wyjścia komplementarnego? Czy jest na to inna metoda?
  • #42
    kyp89
    Poziom 9  
    No oki....
    Czyli tak -> Ładujemy wszystkie wartości sinusa do CCR1 i kiedy mamy sinusowe zero to zmieniamy ARR/2 - Czyli po 180 stopniach, a przy 360 wracamy z powrotem do ARR/1 ?
    Pytanie jak to wpływa? ARR to rejestr odpowiedzialny za częstotliwość sygnału.
    Sorrki że tyle pytam ale mam dostęp do oscyloskopu raz w tygodniu, więc chcę jak najwięcej sobie poukładać żeby dobrze wykorzystać.
  • #43
    kamil94goldman
    Poziom 3  
    Witam, mam takie pytanie o wytworzenie sygnałów sterujących 6 tranzystorami na stm32. Można zrobić tak, że w trzech tablicach definiuje się wartości sinusa (wypelnienie PWM) i za pomocą DMA (za pomocą trzech kanalow) całkowicie sprzętowo będą wysyłane dane do rejestrów CCRx, a czestotliwosc przesylania bedzie ustalana za pomoca rządań DMA przez np. jakiś timer? Czy może wystarczy jedna tablica, ale na razie nie widzę jak za pomocą jednej tablicy wytworzyć przesunięcie trzech faz.