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

[atmega] SPWM - falownik - prośba o wyjaśnienie

morswin89 10 Gru 2014 17:38 11637 65
  • #31 10 Gru 2014 17:38
    Wiking18
    Poziom 14  

    Witam
    Zrobiłem bieżące przeliczenie istniejącej już Tablicy (tablica odpowiada dobrym parametrom dla 50 HZ( chociaż przy 200 też jest nie najgorzej)
    Niestety tablice musiałem zrobić 32 bitową co oczywiście odbiło się kosztem miejsca wiem że mogłem przerzucać dane z tablicy do zmiennej i na niej wykonać mnożenie ale nie wiem czy w przerwaniu to dobry pomysł możecie doradzić.

    Niestety musiałem zrezygnować z DMA nad czym ubolewam ponieważ niewiem jak połączyć ze sobą mnożenie i dzielenie z DMA i czy to w ogóle ma sens.
    Niżej kod odpowiedzialny za ten efekt ustawiłem tak że amplituda rośnie do 50Hz
    później jest stała.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Prosił bym o doradzeniem z tym DMA
    Przedstawiam Niżej kilka Oscylogramów już trochę lepszej jakości.
    (podstawy czasu się różnią i w kilku z żutach też napięcie na działkę)
    Niemniej jednak Bardzo łanie mi się to zmienia. [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie

  • Filament
  • #32 10 Gru 2014 18:25
    Tomasz Gumny
    Poziom 27  

    1. Obliczanie próbek w locie to pomyłka, chyba że z jakichś powodów modyfikujesz przebieg w trakcie okresu. Stwórz dwie tablice: z jednej pobieraj próbki, drugą aktualizuj, a potem przełącz.
    2. Jaki jest sens wykorzystywania tablic o 32-bitowych elementach przy 200 próbkach? Przy stałej częstotliwości PWM, iloczyn częstotliwości i długości próbki jest stały. Korzystnie byłoby znaleźć takie wartości tych parametrów, które dadzą minimalne zniekształcenia.
    3. Zwróć uwagę, że jeśli wstępnie przemnożysz próbki w swojej tablicy przez 512/500, to w przerwaniu wystarczy dzielenie przez 512.

  • #33 10 Gru 2014 20:02
    Wiking18
    Poziom 14  

    Witam
    Zmienna FHz jest podawana w dHz czyli 50 Hz To 500 a 400Hz to zmienna =4000
    Próbki mają jakieś 12 bitów używam tablicy 32Bity dlatego że na 16 nie zadziała mnożenie.
    Pomnożyłem wcześniej dlatego aby uniknąć zmienno przecinkowej liczby ale teraz sobie myśle że przy mniejszej wartości tablicy też się pojawiają muszę wytestować jak się to ma w praktyce.

    Co do obliczeń amplitudy to obliczenia sa tylko do 50hz później sa tylko ładowane w niezmienionej postaci.

    Przy częstej zmianie f przeliczenie całych tablic sporo zajmie zastanawiałem się nad tym kilka postów wcześniej. Ale bardzo chętnie wytestuję kilka sposobów. Jednak moja wiedza C nie pozwala mi na wypróbowanie wszystkich sposobów. Musisz mnie nakierowac jakimś przykładem kodu i powinienem coś napisać.
    Pozdrawiam

  • #34 10 Gru 2014 21:23
    Tomasz Gumny
    Poziom 27  

    Wiking18 napisał:
    [...] używam tablicy 32Bity dlatego że na 16 nie zadziała mnożenie.
    W takim razie dxiałaj na 32-bitowej zmiennej, a do tablicy 16-bitowej ładuj gotowy wynik.
    Wiking18 napisał:
    [...]Przy częstej zmianie f przeliczenie całych tablic sporo zajmie zastanawiałem się nad tym kilka postów wcześniej.
    Nic się nie stanie, jeśli przeliczenie tablicy opóźni trochę zmianę przebiegu na wyjściu - zwykle i tak musi być rampa przystosowująca (spowalniająca) takie zmiany do możliwości napędu. Zwróć uwagę, że w zasadzie możesz wprowadzać zmiany w przebiegu po wygenerowaniu przynajmniej jednego pełnego okresu, w przeciwnym wypadku, może pojawić się składowa stała.

  • #35 10 Gru 2014 22:22
    atom1477
    Poziom 43  

    Tomasz Gumny napisał:
    Nic się nie stanie, jeśli przeliczenie tablicy opóźni trochę zmianę przebiegu na wyjściu - zwykle i tak musi być rampa przystosowująca (spowalniająca) takie zmiany do możliwości napędu. Zwróć uwagę, że w zasadzie możesz wprowadzać zmiany w przebiegu po wygenerowaniu przynajmniej jednego pełnego okresu, w przeciwnym wypadku, może pojawić się składowa stała.

    A jak wygenerujesz rampę skoro każda zmiana będzie musiała czekać na przeliczenie całej tablicy?
    Składowa stała jeżeli będzie to będzie niewielka i nie przeszkadza.

  • #36 10 Gru 2014 23:57
    Tomasz Gumny
    Poziom 27  

    atom1477 napisał:
    A jak wygenerujesz rampę skoro każda zmiana będzie musiała czekać na przeliczenie całej tablicy?
    Dokładnie tak - przeliczę drugą tablicę dla kolejnej częstotliwości, wskażę ją jako źródło próbek i zacznę przygotowywać pierwszą tablicę.
    atom1477 napisał:
    Składowa stała jeżeli będzie to będzie niewielka i nie przeszkadza.
    Szybka rampa, odłączony przewód na wejściu sterowania napięciowego i pojawiające się w nim zakłócenia z wyjścia falownika lub z sieci mogą się bardzo źle skończyć. Jeśli nie chcesz hamować prądem stałym, to generuj całe okresy lub przynajmniej koryguj próbki tak, żeby w sumie wystawiać przebieg symetryczny.

  • #37 11 Gru 2014 11:45
    atom1477
    Poziom 43  

    Mi nie chodziło o szybką rampę, lecz o płynną (mniej skokową).
    Zresztą rampa ma dostosować sterowanie do możliwości napędu.
    Więc sterowanie nie będzie aż tak mocno wariowało nawet jak na wejście sterujące podasz zakłócenia, bo rampa to spowolni.
    Ja jednak bym nie zaryzykował stosowania wejścia napięciowego do sterowania falownika (a na pewnie nie takiego nie ściągniętego do masy).
    A co do prądu stałego to w sumie nie słyszałem o tym nic. Symulacje też nie wskazywały tego. Ja z symulacji uzyskałem tylko składową wolnozmienną która jednak oczywiście ustawała po zatrzymaniu się zmian częstotliwości.
    Masz jakieś materiały na ten temat żebym mógł poczytać?
    Składowa stałą to najwyżej się pojawi jak wejście sterujące odbierze zakłócenia zsynchronizowane z sygnałem na wyjściu falownika.

  • #38 11 Gru 2014 12:22
    Tomasz Gumny
    Poziom 27  

    atom1477 napisał:
    [...]Masz jakieś materiały na ten temat żebym mógł poczytać?
    To tylko moje luźne przemyślenia na temat "ile mogę udostępnić użytkownikowi nastaw i wejść", żeby nie narobił szkód w projektowanym falowniku. Sam bym chętnie poczytał, ale raczej trudno o podręcznik projektowania falowników... :D

  • Filament
  • #39 11 Gru 2014 13:01
    Wiking18
    Poziom 14  

    Witam
    Mój falownik jest czysto teoretyczny bo obecnie testuje bez tranzystorów i obciążenia. Jak tylko zrobię końcówkę mocy to potestuje na małym obciążeniu jednak cały gotowy falownik jest dla zaspokojenia mojej ciekawości być może jak wszystko wyjdzie dobrze to zbuduje sobie jakiś pojazd który będzie miał silnik klatkowy od tak dla łamania zasady że wszędzie daje się BLDC :) albo szczotkowy.

    Interesuje mnie zagadnienie wykorzystania silnika klatkowego jako prądnicy czy jest to realne? ( w samochodach elektrycznych jest to stosowane) niestety moja wiedza jest uboga nawet o zasadę działania samych silników z chęcią jak macie coś godnego polecenia to poczytam.

    Druga rzecz jaka mnie interesuje to metoda sterowania silnikiem DTC jednak jest to zbyt skomplikowane dla mnie jednak jeżeli jesteście chętni to mogę podesłać wam materiały jakie mam na temat tego sterowania. (osobiście miałem okazje bawić się takim falownikiem na targach poznańskich)

    Obecnie skupiam się aby uruchomić ten mój mały projekt i żeby był po prostu dobry sama sztuka dla sztuki

    czy kolego Tomaszu mógłbyś mi zapodać jakiś przykład przeliczania z tablicy do tablicy i potem przełączenia tej tablicy bo nie mogę tego ogarnąć jak wcześniej wspomniałem moja znajomość C jest raczej mniej niż średnia.

  • #40 11 Gru 2014 13:30
    Tomasz Gumny
    Poziom 27  

    Tu nie ma żadnej filozofii, chodzi po prostu o to, żeby nie pobierać próbek z tablicy, która jest modyfikowana, bo to może dać nieprzewidywalne skutki.

  • #41 30 Gru 2014 00:22
    zielonykosmita
    Poziom 15  

    Nie chcę zakładać nowego tematu więc tutaj pochwalę się tym co udało mi się dzisiaj uruchomić.
    Zbudowałem sobie falownik trójfazowy na mikrokontrolerze avr. Wzorowałem się na programie falownika jednofazowego kolegów Tomasza Gumnego i Adama Tatusia.
    Niestety większość avr-ów posiada tylko dwa rejestry porównania OCR, tak że niezbyt się nadają do wytwarzania sygnału trójfazowego, wyjątkami są atmega 64 i 128, a także at90pwm3 który to posiada jakiś power stage controller, którego nie umiałbym jednak użyć. Ja astosowałem więc atmegę64 która ma po trzy rejestry OCR w timerach 1 i 3. Problem miałem z obudową smd, bo tylko w takiej jest produkowana, niestety w KiCadzie nie było obudowy TQFP dla atmegi, a ta która była w oficjalnych bibliotekach programu była do lutowania układu na górnej warstwie płytki, musiałem więc na początek przerobić ją. Na szczęście płytkę udało mi się zrobić i polutować (lutownicą transformatorową i grotem z krosówki telefonicznej) - najłatwiejsze miałem za sobą. Później musiałem spędzić kilkanaście wieczorów i nocy na ujarzmieniu asemblera avr (do tej pory programowałem tylko 8051) i samego mikrokontrolera czyli timerów przetwornika ac, układów pwm oraz po tym wszystkim na pisanie programu. Tak jak wspomniałem korzystałem z programu bardziej doświadczonych kolegów jednak musiałem sporo pozmieniać. Moje zmiany to: wykorzystanie dwóch timerów, jeden wyznacza przedziały czasowe, zaś drugi służy jako modulator szerokości impulsu (autorzy pierwowzoru zrobili obie rzeczy na jednym timerze), następnie zmieniłem sposób syntezowania przebiegu wyjściowego (nie mogłem wykombinować jak w prosty sposób sprawdzać kiedy odwracać drugą połówkę sinusoidy dla drugiej i trzeciej fazy) - sporo go uprościłem kosztem utworzenia tablic dla całego sinusa, (w moim mikrokontrolerze mam tyle pamięci że szkoda by było kompikować program a nie wykorzystać dostępnej pamięci, której to mam aż 64 kB), przy okazji moja funkcja sinus obejmuje zakres 255 wartości. Kolejną zmianą która według mnie zasługuje na uwagę jest dodanie wyświetlaczy siemiosegmentowych z aktualną zadaną częstotliwością sterowanych w dość oryginalny sposób.Normalnie aby przygotować liczbę do wyświetlenia z zakresu 0-116 ( odpowiada ona częstotliwości 0-58 Hz) można było podzielić ją przez 20 i aby uzyskać liczbę dziesiątek i jednostek a następnie wysłać je kolejno na wyświetlacze korzystając z tablicy z kodami segmentów - niestety taki sposób wogóle nie nadaje się do mojego zastosowania ponieważ avr-y nie mają dzielenia, operację tą trzeba wykonywać przez wielokrotne odejmowanie i nigdy nie można przewidzieć ile będzie ono trwało, a w programie nie ma zbyt wiele wolnego czasu. Wymyślilem więc inny sposób: utworzyłem dwie tablice 116 elementowe osobno dla jednego i drugiego wyświetlacza, w pierwszej są liczby
    w komórkach o adresach 0-20 wartości 0
    o adresach 21-40 wartości 1
    o adresach 41-60 wartości 2 itp. - czyli wyświetlacz dziesiątek
    zaś w drugiej tablicy w komórkach o adresach 0-1 wartości 0
    w komórkach o adresach 2-3 wartości 1
    w komórkach o adresach 4-5 wartości 2 ...
    w komórkach o adresach 14-15 wartości 2 ...
    w komórkach o adresach 24-25 wartości 2 itp - czyli wyświetlacz jednostek
    Obsługa wyświetlaczy działa tak że najpierw jest wlączany pierwszy wyświetlacz i odczytywana wartość z tablicy pierwszej o adresie odpowiadającym wartości częstotliwości, później drugi wyświetlacz i druga tablica - zajmuje to tylko kilka cykli mikrokontrolera.
    Co do części sprzętowej to podobnie jak koledzy tranzystorami steruję za pomocą drajwerów IR2184, właściwie to na razie na próbę mikrokontroler podłączyłem do płytki z innym falownikem który kiedyś zrobiłem (na at89c2051), jednak później zrobię nową płytkę.
    Do kompilacji użyłem asemblera avra dostępnego w repozytoriach, zaś do zaprogramowania układu avrdude - również jest w repozytoriach, natomiast do programowania fuse bitów nakładki na avrdude - AVR8 Burn-O-Mat. Tablice sinusów zrobiłem za pomocą darmowego odpowienika matlaba - octave ( też jest w repozytoriach).
    Na koniec muszę podziękować koledze Tomaszowi Gumnemu za opublikowanie programu falownika jednofazowego oraz pomoc w zrozumieniu jego działania, pozdrawiam również kolegę tmf.
    A tak to na razie wygląda [atmega] SPWM - falownik - prośba o wyjaśnienie

  • #42 30 Gru 2014 10:21
    Wiking18
    Poziom 14  

    zielonykosmita napisał:
    Później musiałem spędzić kilkanaście wieczorów i nocy na ujarzmieniu asemblera avr (do tej pory programowałem tylko 8051) i samego mikrokontrolera czyli timerów przetwornika ac, układów pwm oraz po tym wszystkim na pisanie programu.


    Rozumiem że cały program powstał w Asemblerze. Jeżeli tak to naprawdę wielki szacunek dla kolegi.

    Jeżeli chodzi o generowanie sinusa w 3f metodą bipolarną ja również skorzystałem z 2 tablic jednej do górnych połówek. drugą do dolnych.
    chociaż czasami wydaje mi się można było by to zrobić na jednej jednak program jest cały czas zmieniany i próbowane są różne pomysły.
    Jednak aby dokładnie wy testować falownik to muszę zbudować końcówkę mocy bez niej to tak naprawdę nie wy testuje falownika.

    Co mogę doradzić to aby zmniejszyć zapotrzebowanie na Ram tablice umieściłem w pamięci Flasch. w moim przypadku zajmują sporo miejsca gdyż każda tablica jest dla 4 przebiegów (jeden pusty to wynika z wysyłania przebiegów przez DMA)

    tablice przeliczam tylko przy zmianie częstotliwości częstotliwość zmieniam z krokiem 0.1 Hz a wielkość amplitudy tylko do wartości 50 Hz (maksymalna częstotliwość jaką można osiągnąć jest naprawdę spora i raczej wystarczająca ja ją ograniczyłem do 400Hz chociaż można dużo więcej.

    Polecam Koledze przejść na Xmega (cenowo prawie się nie różni)
    teraz zastanawiam się jak zmienić kierunek obrotów chodzi mi o cześć programową muszę jakość przeliczać tak tablicę aby zamienić ze sobą 2 wartości ale pewnie do tego dojdę na razie mnie trochę ogranicza czas.
    (przy DMA nie mam możliwości podmiany kanałów PWM bo wysyłanie jest automatyczne i nie mam na to wpływu więc zostaje przeliczenie tablicy)

    Czy kolega może podzielić się schematem końcówki mocy oraz przy jakim napięciu testował falownik?
    Pozdrawiam Damian

  • #43 30 Gru 2014 11:23
    tmf
    Moderator Mikrokontrolery Projektowanie

    @Wiking18 - w XMEGA masz jeszcze układ AWeX, któy służy właśnie jako przełączalna matryca dla przebiegów. Dzięki temu można je przesyłać na różne wyjścia, automatycznie generować dead-time itd. Normanlnie używam tego do komutacji silników BLDC, ale zasadniczo można też tego użyć do stworzenia falownika, w końcu sinusoidalna komutacja BLDC to nic innego jak właśne 3-fazowy falownik.

  • #44 30 Gru 2014 14:15
    Wiking18
    Poziom 14  

    O tym nie wiedziałem muszę poszukać jakichś materiałów o tym AWex dzięki za u kierowanie.

    Pozdrawiam

  • #45 30 Gru 2014 18:40
    zielonykosmita
    Poziom 15  

    Nie znam języków wysokiego poziomu - więc program jest w asemblerze, ale jeszcze raz powtarzam - nie przypisuję go sobie, ja go jedynie dostosowałem do moich potrzeb. Nie jestem programistą ale wydaje mi się że w zastosowaniach gdzie priorytetem jest określony czas obiegu pętli (np w falowniku) asembler się najlepiej sprawdzi, bo mamy kontrolę nad każdym cyklem pracy mikrokontrolera.

    Cytat:
    Czy kolega może podzielić się schematem końcówki mocy oraz przy jakim napięciu testował falownik?

    Schemat to za wielkie słowo, końcówka mocy składa się (dla jednej fazy) z IR2184, diody UF4007, kondensatora 1uF i dwóch tranzystorów STP9NK90Z (chociaż w jednej fazie STP7NK80Z też dają radę), wejścia IR-ów są podłączone do wyjść PWMu: OCR1A, OCR1B i OCR1C. Co do napięcia zasilania to końcówka mocy działała mi zarówno przy napięciu jednej fazy jak i międzyfazowym. Jedna uwaga - do wejść zasilania IR-ów (nóżki 5 i 3) obowązkowo należy dolutować kondensator (ja dałem 100nF). Podczas uruchamiania nawet przy żarówce włączonej szeregowo z zasilaniem falownika, w jednej fazie często mi się uszkadzał drajwer a wraz z nim tranzystory. Do tego drajwera były najdłuższe ścieżki zasialnia 15V i prawdopodobnie tam pojawiały się jakieś zakłócenia - gdy to skojarzyłem, dolutowałem bezpośrednio do układów kondensatory i od tego momentu nie padł mi żaden.

  • #46 30 Gru 2014 18:57
    tmf
    Moderator Mikrokontrolery Projektowanie

    zielonykosmita napisał:
    Nie znam języków wysokiego poziomu - więc program jest w asemblerze, ale jeszcze raz powtarzam - nie przypisuję go sobie, ja go jedynie dostosowałem do moich potrzeb. Nie jestem programistą ale wydaje mi się że w zastosowaniach gdzie priorytetem jest określony czas obiegu pętli (np w falowniku) asembler się najlepiej sprawdzi, bo mamy kontrolę nad każdym cyklem pracy mikrokontrolera.


    To jest syndrom '51. Obenie używane mikrokontrolery posiadają sprzętowe układy do realizacji tego typu zadań - chociażby omawiana w tym wątku XMEGA posiada i 8 timerów i łącznie nawet 32 kanały PWM, do tego timery z rejestrami buforowanymi, dzięki czemu zapis nie jest krytyczny czasowo, bo dane z bufora do timera przepisywane są sprzętowo w ściśle określonym czasie. Do tego np. AWeX, który wspiera dystrybucję sygnałów i ich synchroniczne przełączanie pomiędzy wyjściami.
    Robienie tego wszystkiego "na piechotę" nie jest dobrym pomysłem - owszem, udowodnisz, że się da, ale jeśli ten falownik ma być np. sterowany z USB, czy ma być jakakolwiek interakcją ze światem zewnętrznym to zaczną się schody. Obecnie na rynku jest pewnie z kilka tysięcy różnych typów MCU, praktycznie zawsze da się więc dobrać taki, który ułatwia realizację zadania, a nie tylko umożliwia jego realizację.

  • #47 31 Gru 2014 10:20
    Wiking18
    Poziom 14  

    tmf napisał:

    To jest syndrom '51.

    Tu chyba masz rację ja zaczynałem od 8051 gdzie wpajano nam Asemblera minus taki że trzeba było pojąć całą dokumentację procesora wszystkie rejestry itp. Powiedział bym że Asembler jest naprawdę prosty jednak jego zastosowanie i wykorzystanie napisanie czegoś sensownego to wyzwanie:) jak tylko przestał być obowiązkowy o nim zapomniałem. C oferuje szybsze i prostsze pisanie programu nie trzeba już znać dokładnie całego procesora.

    Z tego co widzę to używasz metody SPWM unipolarnej jest czy jest możliwość zobaczenia jakiegoś oscylogramu? bardzo mnie ciekawi różnica w metodzie bipolarnej i unipolarnej ale różnica taka praktyczna.

    I pytanie do kolegi tmf czy ma jakieś proste przykłady jak działa AWex jego zastosowanie? znalazłem coś w dokumentacji atmela ale nie potrafię tego zastosować.

    Z tego co się doczytałem to że można włączyć do tego cały PORT piny od 0 do 5
    (Tylko czy to może tylko port C czy wszystkie liczniki 0? )sterują górne i dolne tranzystory pozostałe dwa nie bardzo rozumiem chyba ochrona tranzystorów jak by co pewnie można to połączyć z ADC i Event system. Jest jeszcze możliwość wstawienia czasów martwych to zrozumiałem.
    Napisałeś wcześniej że używasz tego do sterowania BLDC.
    Czy też używasz Tablicy do wysyłania stanów (tak by było przy sinusie).
    czy jest możliwość abyś podzieli się kodem dla BLDC wykorzystującym AWex chciałbym to zastosować do tworzenia 3 faz w moim falowniku.
    Po prostu chciałbym zrozumieć i się nauczyć niestety ciężko spotkać jakiegoś Polskiego przykładu.

  • #48 31 Gru 2014 11:19
    BlueDraco
    Specjalista - Mikrokontrolery

    Zapytam tylko: dlaczego nie weźmiesz tańszego, współczesnego uC, który potrafi sprzętowo sterować sześcioma tranzystorami z PWM, a przy okazji ma 10..30x większą moc obliczeniową od AVR i nie wymaga pisania programu w asemblerze ze zliczaniem czasu wykonania poszczególnych instrukcji w celu osiągnięcia wymaganych zależności czasowych?

  • #49 31 Gru 2014 11:59
    tmf
    Moderator Mikrokontrolery Projektowanie

    @BlueDraco Ale do kogo odnosi się twoja wypowiedź? Bo kolega @Wiking18 właśnie wziął współczesny MCU, który ma mechanizmy sprzętowego sterowania nie tylko sześcioma ale i znacznie większą liczbą tranzystorów, ba, ma mechanizmy służące sprzętowej realizacji zadania o którym piszemy w tym wątku, czyli falownika. A z ciekawości zapytam, do czego w tym zadaniu potrzebna jest większa moc obliczeniowa? Bo IMHO nawet ATMega by się tu nudziła, '51 zapewne też, gdyby miał odpowiednie peryferia.
    @Wiking18 - zabezpiecznia realizujesz przy pomocy układu fault detection, można je oczywiście robić softwarowo, ale sprzętowo jest po prostu bezpieczniej. Dodatkową zaletą jest ich poprawne działanie w czasie debugowania MCU i np. przerwania programu przez breakpoint.
    Jeśli chodzi o AWeX to XMEGA ma jeden lub dwa takie układy, przyporządkowane do 8 pinów IO jednego lub dwóch portów, PORTC i PORTE. Generalnie AWeX może pracować w różnych trybach, jednym z nich jest pattern generator, czyli synchroniczny przełącznik, gdzie do rejestrów buforowych wprowadzasz kolejne kroki komutacji, a wprowadzony szablon jest przepisywany synchronicznie ze zdarzeniem OVF timera i służy jako matryca do przełączania sygnałów PWM. Niezależnie dla górnego i dolnego tranzystora możesz wprowadzać dead-time, a także maskę określającą sterowanie w przypadku zajścia zdarzenia fault. Tu różne XMEGA mają mniej lub bardziej rozbudowaną obsługę tego typu zdarzeń. Najbardziej rozbudowany AWeX ma XMEGA E5. Generalnie sterowanie wielofazowe sinusoidalne wygląda tak, że mam tablicę, którą tak jak ty przez DMA ładuję do timera, ale synchronicznie z tym mam drugą tablicę komutacji, którą ładuję do AWeX. Faktem jest, że dokumentacja Atmela jest w tym miejscu trochę pokrętna i IMHO nic nie wyjaśnia, zobacz notę do XMEGA E5, tam jest ciut więcej na ten temat. Ale IMHO najlepiej rozgryźć ten układ podłączając parę LEDów i obserwując działanie w zwolnionym tempie - do tego świetnie się nada debgugger, dzięki czemu możesz się bawić bezpośrednio na rejestrach i obserwować efekty w real-time.
    Przykłady pewnie pojawią się na stronie http://mikrokontrolery.blogspot.com,, ale Dondu ma obecnie sporo innej pracy, więc przyjdzie na to poczekać.

  • #50 31 Gru 2014 20:25
    zielonykosmita
    Poziom 15  

    Wiking18 napisał:
    bardzo mnie ciekawi różnica w metodzie bipolarnej i unipolarnej ale różnica taka praktyczna
    Jeżeli chodzi o mnie to ja zrobiłem falownik trójfazowy - w tym przypadku nie można dokonać podziału na modulację bipolarną czy unipolarną (u Nowaka Barlika modulacja bipolarna nazywa się dwubiegunowa, zaś unipolarna - jednobiegunowa). Sterowanie w modulacji jednobiegunowej (unipolarnej) jest trochę bardziej skomplikowane bo potrzebny jest osobny sygnał dla każdego z 4 tranzystorów, ale również nie wiem jaka jest różnica w praktyce. Być może chodzi o to że przebieg wyjściowy jest lepiej filtrowany bo przy tej samej częstotliwości przełączeń kluczy ma on dwukrotnie większą częstoltliwość.
    Co do wypowiedzi że nie stosuję najnowocześniejszych układów - do mojego zastosowania atmega64 jest aż za "mocna", użyłem jej tylko ze względu na trzeci rejestr OCR. Tak samo bezpośrednia synteza cyfrowa to dosłownie kilka linijek w asemblerze - więc po co stosować skomplikowane kompilatory. Ja wykonałem to co sobie założyłem, no to po co rozbudowywać układ jeśli działa jak należy. Jak to powiedział Leonardo:
    Cytat:
    Prostota jest szczytem wyrafinowania.

  • #51 02 Sty 2015 10:36
    Wiking18
    Poziom 14  

    Na wstępnie chciałbym powiedzieć że cię nie krytykuję wręcz przeciwnie napisanie coś konkretnego w ASM oraz użycie słabego procka to nie lada wyczyn.

    Hmm

    Więc byłem w błędzie :)
    (pomyliłem uni z bi)

    No właśnie zastanawiam się co lepsze widząc że używasz 3 wyjść oraz driverów IR2184 domyśliłem się że to metoda Bipolarna (chociaż pisałem uni bo mi się pomyliło) gdyż dolny tranzystor jest negacją górnego i to ci załatwia driver.


    Ja natomiast chciałbym spróbować obie opcje. Obecnie w tym taki tryb testowania patrz oscylogram (Też jest 3 fazowy niestety mam tylko 2 kanały w oscyloskopie pozostałe wyglądają tak samo tylko są przesunięte o 120°.

    [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie

    Minus że to zajmuje więcej kanałów ale w moim przypadku to nie problem bo mam ich pod dostatkiem jest też bardziej skomplikowane ale w moim przypadku to wynika z tego że moja znajomość C oraz niektórych funkcji mikro-kontrolera jest uboga i muszę nieźle kombinować żeby coś wyszło. Osoby które są biegłe w programowaniu pewnie mieli by niezły ubaw z mojego kodu :D. Jednak liczy się efekt :) Co do AWeX to pewnie przyjdzie mi poczekać bo sam tego nie odpalę.

    Co do Kolegi Zielony kosmita czy możesz napisać na jakim napięciu testujesz? czy wyprostowane 230V ? czy wyprostowane między fazowe 400V ? Czy może jakiś autotransformator?.

  • #52 02 Sty 2015 18:06
    zielonykosmita
    Poziom 15  

    O typach modulacji wiem tyle ile przeczytałem w podręczniku (Nowak Barlik) - i jeszcze raz powtarzam: w układzie trójfazowym nie ma podziału na bipolarną i unipolarną. Niezależnie czy to będzie modulacja bipolarna, unipolarna, jednofazowa czy trójfazowa, zawsze (pomijając niewielki czas martwy) jeden tranzystor w gałęzi musi być załączony a drugi wyłączony, nie ma znaczenia czym one będą sterowane, czy specjalizowanymi drajwerami,czy transoptorami (np. TLP250) czy transformatorkami.
    Swój falownik zasilałem z wyprostowanego napięcia jednej fazy (230 V) jak również z międzyfazowego (400V) - ze względu na to że silniczek ma około 20 W oraz sporą wartość elektrolitów (4x220uF - łączone po dwa szeregowo wraz z rezystorami wyrównującymi) nie chciało mi sie podpinać trzeciej fazy.
    Do pierwszego uruchamiania z napięcia sieci polecam wpiąć w szereg zarówkę lub dwie - za elektrolitami, a przed tranzystorami, jeśli masz autotransformator to też dobrze, ale nie zabezpieczy on gdyby coś się zwarło. Według mnie żarówki są lepsze bo po pierwsze są tańsze a po drugie skutecznie ograniczą prąd, tak że po jakimś zwarciu nie popali nam ścieżek. Zaś jeśli chodzi o bezpieczeństwo to autotransformator też nie separuje od sieci. Trzeba by też zapewnić łagodne ładowanie kondensatorów po włączeniu. Ze względu na małą moc silniczka wpiąłem termistor NTC z zasilacza komputerowego, w układzie docelowym myślę o przekaźniku załączanym z opóźnieniem z mikrokontrolera, po którego załączeniu program zaczynał by dopiero działanie.
    Pozdrawiam i życzę sukcesów w uruchamianiu.

  • #53 03 Sty 2015 11:44
    atom1477
    Poziom 43  

    Przy większych mocach dobre jest też żelazko :D
    Włączone oczywiście tak jak ta żarówka czyli pomiędzy kondensatory a tranzystory.
    Ja uruchamiałem z nim falownik około 1kW.
    Bez żelazka, niezasilany falownik (tylko naładowane kondensatory 3x330uF) odparował mi rezystory pomiarowe prądu. Było to ze 30 równolegle połączonych rezystorów 0,22R. Prądu ciągłego powinny wytrzymać z 30A. Jaki tam musiał być prąd zwarciowy że dosłownie odparowały to chyba nie muszę tłumaczyć.
    Do zwarcia doprowadziła próba zaprogramowania procka (reset procka = podciągnięte do VCC piny sterujące IRami = załączenie jednocześnie dolnych i górnych tranzystorów w mostku). Piny były podciągnięte do VCC bo to były piny JTAGa.
    Od tej pory na pinach sterujących daję silne Pull-Downy (z 1k) oraz nie używam do sterowania pinów JTAGa :D

  • #54 05 Sty 2015 10:17
    zielonykosmita
    Poziom 15  

    Do kolegi Wiking18 - czy zdecydowałeś się już na sposób sterowania tranzystorami? Domyślam się że zrzuty które przedstawiłeś to zero-jedynkowy przebieg PWM przepuszczony przez filtr RC. Falownik który chcesz zbudować ma po prostu wytwarzać trzy przebiegi sinusoidalne przesunięte o około 120 °, bez żadnych transformacji Parka i Clarke, wektora przestrzennego, bezpośredniego sterowania momentem, czy sterowania polowo zorientowanego. Proponował bym ci zejść z drogi sterowana osobno każdym tranzystorem, a wytwarzać tylko trzy przebiegi dla obu tranzystorów w jednej gałęzi i użyć do tego IR-a. Za cenę 3x8 zł masz kompletny układ sterowania. Takie drajwery są też w wersji trójfazowej, ale trudniej będzie zaprojektować do niego płytkę - ze względu na napięcia trzeba zachować odpowiednie odstępy między ścieżkami. Jeżeli jednak chcesz koniecznie sterować osobno każdym tranzystorem to widzę dwie możliwości: transformatorki (3 sztuki jeśli byś sterował nimi tylko górne tranzystory, lub 6 jeśli chcesz mieć pełną izolację galwaniczną od mikrokontrolera), lub transoptory np TLP250, jednak w tym przypadku do każdego z górnych tranzystorów potrzebny był by osobny zasilacz. Napisz o postępach prac i o wybranej koncepcji.

  • #55 05 Sty 2015 12:49
    Wiking18
    Poziom 14  

    Witam
    Co do rady żelazka i żarówki nie omieszkam wypróbować :)


    Co do sterowania tranzystorów narazie zdecydowałem się użyć sterowania takiego przez 3 drivery IR zobaczymy co wyjdzie.

    Odnośnie oscylogramów to tak masz rację jest to oscylogram wyjścia mikro-kontrolera przepuszczony przez filtr RC to tylko tak dla podglądu.

    steruje normalnie wypuszczając sinus z tablicy czyli chyba najprymitywniejsze sterowanie. (do 50Hz przeliczam tylko jeszcze amplitudę) bez żadnych wektorów itp. w sumie o tamtym sterowaniu niewiele wiem nawet czytając jakieś materiały o tym niewiele mi to mówi brakuje mi wiedzy i literatury.

    co do optoizolacji raczej odpada bo będzie się grzało albo musiał bym zmniejszyć częstotliwość PWM.
    Obecnie mam 31Khz albo 15kHz (zależy czy singiel slope czy dualslope tereaz nie pamiętam co mam ustawione)
    moim skromnym marzeniem było by sterowanie momentem metodą DTC jednak X mega chyba nie da rady nawet jak się ją podkręci na 64 Mhz.
    Poza tym producent gwarantuje stabilną prace przy 32 Mhz później może działać może nie działać może być różnie.

    Jeżeli jednak Macie jakieś pomysły czy doświadczenia w DTC to z chęciom poczytam.
    Pozdrawiam

  • #56 05 Sty 2015 16:34
    zielonykosmita
    Poziom 15  

    Szczerze mówiąc, to ja też średnio się w tym orientuję. Chciałem się jedynie popisać że znam karate, kung-fu, sumo i jeszcze kilka japońskich zwrotów. Teraz na poważnie, jak może wiesz silnikiem który najłatwiej jest sterować to silnik obcowzbudny prądu stałego. Jeżeli weźmiemy trzy prądy fazowe silnika indukcyjnego to będą one tworzyły wirujący wektor pola magnetycznego, to tak jakbyś zamiast wirnika włożył do silnika magnes z przyczepioną listewką. Dalej jeżeli wyobrazisz sobie układ współrzędnych w środku stojana to ruch obracającej się listewki będzie można opisać za pomocą dwóch zmiennych iα i iβ zamiast trzech prądów - tak mniej więcej ja rozumię transformację Clarke. Następnie jakbyś usiadł na magnesie i mierzył natężenie pola magnetycznego to znowu byś dostał dwie zmienne id i iq - tak mniej więcej ja rozumię transformację Parka. Wracając do silnika obcowzbudnego - jego obroty są proporcjonalne do napięcia podawanego na wirnik, moment jest proporcjonalny do prądu, natomiast regulując wzbudzeniem (prądem stojana) możemy do rozpędzić do obrotów przekraczających nominalne. Uzyskany po transformacjach prąd id odpowiada prądowi wzbudzenia silnika obcowzbudnego, a iq odpowiada momentowi. Stosując teraz regulator możemy bezpośrednio sterować momentem albo polem. Później odwrotna transformata Parka i specjalny algorytm przełączania tranzystorów zwany metodą wektora przestrzennego. Na zwykłym mikrokontrolerze tego wszystkiego się nie da zrobić, bo o ile pierwsza transformata to tylko mnożenie i dodawanie prądów to w drugiej występuje obliczanie sinusów i kosinusów, a co dopiero dalsze części przetwarzania.
    Jeżeli coś źle wytłumaczyłem to proszę o poprawienie mnie.

  • #57 05 Sty 2015 20:25
    atom1477
    Poziom 43  

    Oczywiście jak kolega nie chce stosować żadnych algorytmów to jednak musi zastosować choćby najprostszy z nich, czyli V/f.
    A to po to żeby nie spalić silnika na niskich obrotach.
    A co do IRów (że mają być 3) to niewiele to mówi :D
    Kiedyś użyłem 3 IR2101, i one pozwalają niezależnie sterować tranzystorami górnymi i dolnymi (nie ma też w nich układu Shoot-Thru Prevention).
    I to na tym sterowniku dokonało się spalenie mojego falownika.
    Teraz używam 3 IR2104, które mają jedno wejście do sterowania dwóch tranzystorów(albo górny albo dolny, nigdy oba na raz).
    IR2104 mają też wejście SD które pozwala wyłączyć oba tranzystory jak jest taka potrzeba (jak trzeba zrobić zabezpieczenie przeciwzwarciowe albo jak trzeba robić pływającą fazę (np. przy sterowaniu BLDC z Back EMF)).
    Ja miałem PWM 40kHz i się nic specjalnie nie grzało.
    Ale IRy były wspomagane wtórnikami emiterowymi na wyjściach (prądy tak do 1A).

  • #58 06 Sty 2015 14:04
    Wiking18
    Poziom 14  

    Witam
    Przeliczenie U/f robię widac to na oscylogramach. Ale tylko do 50 hz jeżeli bym miał silnik 400 hz 400v to bym przeliczał do 400hz.

    Odnośnie grzania to mam na myśli opto izolacje ciężko znaleźć dobre i szybkie układy za kilka zł.
    Strasznie opóźniają działanie i tranzystory sie grzeją byc może sa jakieś szybkie ale chyba lepsze są ir.


    Macie może jakieś materiały odnośnie takiego sterowania ? Silnikiem.

  • #59 19 Sty 2015 22:12
    zielonykosmita
    Poziom 15  

    Witam po przerwie.
    Tym razem chciałem się pochwalić drugą wersją falownika. W stosunku do poprzedniej zmiany są następujące:
    nowa płytka falownika (sterowanie IR2184, tranzystory STW13NK60Z, ładowanie kondensatorów przez rezystor 1k zwierany przekaźnikiem)
    nowa płytka mikrokontrolera (dodane złącze z wyprowadzonymi 4 pinami portu E)
    duże zmiany w programie - oprócz wyłącznika start/stop dodany wyłącznik zmiany obrotów, dodana procedura zapisu do eepromu bajtów określających częstotliwość startu i szybkości rozpędzania i hamowania, wstrzymanie programu przez około 6 sekund na ładowanie kondensatorów elektrolitycznych, po tym czasie załączenie przekaźnika i start programu

    Dużo czasu zajęło mi dopieszczenie programu do obecnej zadowalającej mnie wersji, jako że nie jestem programistą mikrokontrolerów nieraz pół dnia musiałem spędzić na drobnej poprawce (np łagodna zmiana kierunku obrotów, czy procedura wprowadzania danych do zapisu w eeprom). Program też się rozrósł, z 254 bajtów programu autorstwa kolegów do 580 bajtów, nie licząc tablic sinusów. Posiedziałem też trochę aby w miarę estetycznie zaprojektować płytkę drukowaną - niestety nie obyło się bez kilku mostków.
    Docelowo falownik będzie również wyposażony w układy ACS712 do obserwacji prądów oraz zamknięty w obudowie z pleksy

    A tak to wygląda [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie [atmega] SPWM - falownik - prośba o wyjaśnienie

    Do kolegi Wiking18 - wysyłam równierz płytkę falownika - jeśli jeszcze nie zrobiłeś to możesz skorzystać z mojej. Uważaj jednak bo jest kilka mostków, musisz spojrzeć na schemat.

  • #60 20 Sty 2015 09:22
    Wiking18
    Poziom 14  

    Bardzo dziękuję miałem zamiar właśnie Ciebie prosić o schemat bądź projekt PCB niestety brakuje mi czasu na zaprojektowanie swojej a chciałbym testować program na żywo zanim zbuduje finalna wersję.
    program zajmuje około 500 bajtów :) i tu przewaga asemblera wiem że dzisiaj nie ma to praktycznie znaczenia gdyż na procesorze co ja robię mam jej 128k wiec aż nadto ale zawsze to jest jakiś plus.

    Obecnie mam mało czasu na projekt i moje hobby o czym wspomniałem wyżej.

    Teraz próbuję rozwiązać jak wykryć procesorem który kanał DMA jest zajęty a który wolny.
    Efekt ma być taki abym korzystał z podwójnego buforowania DMA i dwóch tablic natomiast przeliczał tablicę inna niż jest aktualnie wysyłana tak aby nie zrobić kuku silnikowi i końcówce mocy.

    Normalnie bez DMA jest to banalnie proste jednak DMA działa nie zależnie od programu więc tak sobie myślę że jedyny sposób aby mógł wiedzieć którą tablicę mam przeliczać to powinienem wiedzieć który kanał DMA właśnie wysyła tylko nie wiem czy jest to możliwe.