logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Budowa falownika jednofazowego do silnika 3-fazowego - pytania o PWM i sterowanie

kamil3211 06 Gru 2024 21:09 1173 40
Najlepsze odpowiedzi

Jak generować trójfazowe PWM do falownika jednofazowego napędzającego silnik indukcyjny 3‑fazowy i czy do prostego sterowania trzeba znać położenie wirnika?

Najprościej generujesz trójfazowe SPWM, a nie próbujesz dopasowywać „skutecznej” wartości PWM do punktu sinusoidy — przy modulacji interesuje Cię średnia wartość przebiegu PWM, a nie jego RMS, który ma sens dopiero po odfiltrowaniu nośnej. [#21336354][#21573329][#21574063] Do podstawowego sterowania skalarnego wystarczy utrzymywać U/f = const, więc nie potrzebujesz informacji o położeniu wirnika; to jest prostsze niż BLDC, ale ma gorszą charakterystykę momentu i sprawności. [#21336354][#21336867] Jeśli obciążenie jest trudne albo moment zmienia się szeroko, silnik może nie ruszyć lub wypaść z pracy po przekroczeniu breakdown torque. [#21336867] Lepsze sterowanie, jak FOC albo DTC, jest bardziej złożone i wykorzystuje pomiar prądów oraz estymację położenia wirnika. [#21336354][#21336867] W praktyce PWM-y muszą być zsynchronizowane, bo silnik „widzi” różnicę faz, a do MOSFETów warto użyć drivera z deadtime zamiast sterować tranzystory bezpośrednio z mikrokontrolera. [#21785900][#21782541][#21783976]
Wygenerowane przez model językowy.
  • #1 21336328
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Zastanawiam się nad budową falownika zasilanego jednofazowo do silnika indukcyjnego zasilanego 3 fazowo i mam parę pytań.
    1. Czy to napięcie na 3 fazach co będę generował to jego napięcie skuteczne wynikające z wypełnienia pwm i napięcia maksymalnego po wyprostowaniu wynoszącego 325 V ma wynosić tyle co dany punkt sinusoidy aby ją symulować?
    2. Sterowanie wydaje się nawet prostsze niż w silniku bldc bo nie trzeba żadnych back emf ani innego sposobu określania położenia wirnika?
    3. Czy coś przeoczyłem? Czy to na prawdę takie proste?
    tu jest fajna seria na ten temat tylko że już nie rozumiałem tych całek i różniczek
    https://www.youtube.com/watch?v=HGHpkghiIs8&t=668s&ab_channel=MatanPazi
  • #2 21336354
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    1. Czy to napięcie na 3 fazach co będę generował to jego napięcie skuteczne wynikające z wypełnienia pwm i napięcia maksymalnego po wyprostowaniu wynoszącego 325 V ma wynosić tyle co dany punkt sinusoidy aby ją symulować?
    Trudno zrozumieć o co pytasz.
    kamil3211 napisał:
    2. Sterowanie wydaje się nawet prostsze niż w silniku bldc bo nie trzeba żadnych back emf ani innego sposobu określania położenia wirnika?
    Proste falowniki generują napięcie sinusoidalne (SPWM) o amplitudzie proporcjonalnej do częstotliwosci , bardziej złożone wykorzystują sterowanie wektorowe (które też wylicza położenie i prąd wirnika) co jest bardziej skomplikowane niż BLDC. Jeśli u/f=const ci wystarczy (nie obchodzi cię charakterystyka momentu ani energooszczędność) to jest prościej niż BLDC.
  • #3 21336764
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Żeby zmniejszyć straty w w metodzie skalarnej trzeba utrzymywać jak najniższy u/f bo od napięcia maksymalnego zależy moment obrotowy, który może być za duży dla określonego zadania ale na tyle duży moment aby potrzymać żądaną częstotliwość? Jeśli obciążenie jest znane i wiemy jak się będzie zachowywać to teoretycznie dało by się tak ustawić sterowanie aby bez informacji z zewnątrz optymalnie ustawiać u/f i nie trzeba metody wektorowej ?
  • #4 21336867
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    Można to opisać inaczej, silnik indukcyjny ma swoją specyficzną charakterystykę momentu:
    Wykres charakterystyki momentu silnika indukcyjnego z zaznaczonymi punktami momentów obrotowych.
    W czasach kiedy nie było falowników wektorowych po prostu było wiadomo że do niektórych obciążeń taki silnik się nie nadaje, zwłaszcza tych które wymagają wysokiego momentu do rozruchu albo moment się zmienia w szerokim zakresie podczas pracy.

    Silnik zasilany ze falownika skalarnego ma te same wady co zasilany z sieci. (czasami dochodzą problemy z PWM).

    Cytat:
    od napięcia maksymalnego zależy moment obrotowy, który może być za duży dla określonego zadania ale na tyle duży moment aby potrzymać żądaną częstotliwość?
    Moment ustala obciążenie, jeśli będzie za duży (przekroczymy punkt breakdown torque) obroty i moment drastycznie spadną, może się okazać że silnik "nie będzie w stanie" się rozpędzić bez usunięcia obciążenia.

    Jest jeszcze metoda direct torque control, prostsza niż FOC
  • #5 21573264
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Kiedy zasilam silnik z zasilacza labolatoryjnego 30V rozdzielczość pwm to 90 a ilość tych kwantów określających poszczególne wartości sinusoidy też 90 dla 180 stopni i chce zrobić 3 stopniowy rozruch czyli najpierw niższa częstotliwość potem średnia i maksymalna to silnik nie chce się kręcić dla niskiej i średniej częstotliwości tylko jak jest maksymalnana czyli te dwie pierwsze tabele mają jakiś błąd jak na średnią częstotliwość wrzuciłem ten sam pwm to dla wysokiej to działało. Wzór Usk=(wypełnienie)^0.5*Napięcie zasilania. Przekształciłem aby znać wypełnienie czyli wypełnienie =(Usk^2)/(Uzasilania^2)
    Załączniki:
    • Skoroszyt1.xlsx (31.45 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #6 21573329
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    Wzór Usk=(wypełnienie)^0.5*Napięcie zasilania.
    Zły. Ciebie nie powinna intereswać wartość skuteczna PWM tylko średnia. Skuteczna to dopiero jest ważna dla przebiegu modulującego, czyli po odfiltrowaniu PWM.

    Nie wiadomo co zrobiłeś i w jaki sposób, więc zaglądanie do excela nie wystarczy żeby ocenić co jest źle.
  • #7 21573611
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    kolumny tabel 1 kolumna to kąt 2 to przeliczenie na radiany 3 to wartość napięcia w danym punkcie sinusoidy przemnożona jak widać przez różne wartości sin przyjmuje 1 w 90 stopniach czyli mnożnik to też wartość maksymalna 4 kolumna to (Z64^2)/(30*30) czyli wypełnienie w zakresie 0-1
    ostatnia kolumna w każdej tabeli czyli te 90 89 to oznacza wypełnienie łatwiej mi było zaimplementować program tak że 90 to 0% wypełnienia 80 to 90-80 czyli 10/90 wypełnienia 70 to 90-70 czyli 20/90 wypełnienia a napięcie zasilania to 30V
    zawsze jak generuje odpowiednik sinusoidy za pomocą pwm której wartość maksymalna to napięcie zasilania czyli teraz 30V to działa ale tylko dla niej

    a jeśli chodzi o ten przykład to tylko ta ostatnia tablica z wartościami pwm dobrze działa i steruje silnikiem
    Kod: Arduino
    Zaloguj się, aby zobaczyć kod
  • #8 21573677
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    mnożnik to też wartość maksymalna 4 kolumna to (Z64^2)/(30*30) czyli wypełnienie w zakresie 0-1
    Podnoszenie do kwadratu jest bez sensu.

    Poczytaj jak działa DDS można uzyskiwać szeroki zakres częstotliwości z jednej tablicy
  • #10 21574063
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    na dole jest wzór na napięcie skuteczne https://pl.wikipedia.org/wiki/Napi%C4%99cie_skuteczne
    Który nie powinien ciebie obchodzić.
    Silnik to nie grzałka w PWM ważna jest wartość średnia nie skuteczna. Przecież jak zniekształcisz w ten sposób napięcie to nie będzie sinusoidalne.
  • #11 21574080
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    czyli jak chce załóżmy 10V w danym punkcie sinusoidy a zasilanie to 30V to po prostu 1/3 wypełnienia ?
  • #12 21574095
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    czyli jak chce załóżmy 10V w danym punkcie sinusoidy a zasilanie to 30V to po prostu 1/3 wypełnienia ?
    Tak

    Ja do debugowania firmware swojego falownika używałem filtrów RC i czterokanałowego oscyloskopu


    Zrzut ekranu programu LTspice przedstawiający symulację filtra RC trzeciego rzędu oraz przebiegi napięć na poszczególnych węzłach.
    Taki filtr dobrze tłumi nośną bo to jest trzeciego rzędu, nie potrzeba skomplikowanych filtrów aktywnych. Filtr aktywny miał by lepsze nachylenie blisko częstotliwości granicznej ale nośna i tak jest daleko od częstotliwości modulującej.

    Obejrzenie sinusa na oscyloskopie to najlepszy dowód że twój program działa jak trzeba.

    Filtr i port z PWM , przydaje się też do wyświetlenia zmiennych z programu które się szybko zmieniają np wyjścia regulatora prędkości.
  • #13 21781792
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    porzuciłem temat nie robiąc tego na atmega328 ale po zakupie esp32 zrobiłem to ponownie (moge generować większą częstotliwość przełączania) wiem że to trochę za wiele mocy jak na falownik ale inaczej nie umiem a niechce mi się schodzić niskopoziomowo. drivery to mosfety górne P dolne N ale te typu p są sterowane przez inne N i steruje się nimi tak jak dolnymi n czyli wszystkie 6 miejsc odo przełączenia przełączają się po podaniu napięcia dodatniego względem masy ponad 1.5V około. Ale jest taki problem jak w sumie na początku w atmedze. Nie jestem w stanie generować sinusoidy pwm o niższym wypełnieniu np 50% to byłby max wogóle nie działa.

    ten kod to działający świetnie jakbym chciał teraz liczby w tej tabeli podzielić na 2 to nie zadziała. Wcześniej miała 127 a nie 256 i działało. Zrobiłem 256 bo pomyślałem że nie będzie tak dobrze odwzorowana. Robiłem na wartościach średnich a nie skutecznych. Silnik dla tego kodu kręcił się przy 10V na zasilaczu a po podzieleniu przez 2 liczb tablicy i zwiększeniu napięcia do 30 nic nie dało. Wogóle na oscyloskopie 0V międzyfazowo mierzone na oscyloskopie przez filtr rc na kondensatorze. To samo co na atmedze.

    /
    Spoiler:
    /4n 5p 12n 13p 14n 15p
    const byte piny[]={16,17,18,19,21,22};

    void setup() {
    for(byte i=0;i<6;i++)
    {
    ledcAttach(piny,15000, 8);
    }
    }
    const int rozmiartab=256;
    const byte tablica[rozmiartab] = {
    0,3,6,9,12,15,18,21,24,28,31,34,37,40,43,46,49,52,55,58,61,64,68,71,74,77,79,82,85,88,91,94,97,100,103,106,109,111,114,117,120,122,125,128,131,133,136,139,141,144,146,149,151,154,156,159,161,164,166,168,171,173,175,178,180,182,184,186,188,191,193,195,197,199,201,202,204,206,208,210,212,213,215,217,218,220,221,223,224,226,227,229,230,231,233,234,235,236,237,239,240,241,242,243,244,244,245,246,247,248,248,249,250,250,251,251,252,252,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,253,253,253,252,252,251,251,250,250,249,248,248,247,246,245,244,244,243,242,241,240,239,237,236,235,234,233,231,230,229,227,226,224,223,221,220,218,217,215,213,211,210,208,206,204,202,200,199,197,195,193,190,188,186,184,182,180,178,175,173,171,168,166,164,161,159,156,154,151,149,146,144,141,139,136,133,131,128,125,122,120,117,114,111,108,106,103,100,97,94,91,88,85,82,79,76,73,70,67,64,61,58,55,52,49,46,43,40,37,34,31,28,24,21,18,15,12,9,6,0 };
    unsigned int iterator=0;byte dzielnik=0;
    void loop()
    {const byte f2=rozmiartab*2/3,f3=rozmiartab/3;

    if(millis()>5000&&dzielnik==0)
    {for(int i=0;i<6;i++)
    {ledcWrite( piny[i],0);
    }
    delay(1);
    dzielnik=1;
    }
    ledcWrite( piny[ (( iterator &256)>>8)],tablica[(iterator) &255]);
    ledcWrite( piny[2+(((iterator+f2)&256)>>8)],tablica[(iterator+f2)&255]);
    ledcWrite( piny[5-(((iterator+f3)&256)>>8)],tablica[(iterator+f3)&255]);
    iterator++;
    iterator%=1024;
    delayMicroseconds(800>>dzielnik);
    }
    [/i]

    Dodano po 1 [godziny] 30 [minuty]:

    moja dyskusja z chatbotem Teraz bardzo prosto, krok po kroku
    1️⃣ Co naprawdę generujesz PWM-em

    PWM + filtr RC daje:

    napięcie FAZY względem masy


    A to napięcie:

    MUSI być dodatnie (0…Vcc)


    Nie da się:

    −V

    2️⃣ Gdzie jest „zero sinusoidy”

    Dla falownika:

    „zero sinusoidy” = brak napięcia międzyfazowego

    a nie 0 V względem GND

    Czyli:

    fazA = 128
    fazB = 128
    fazC = 128


    To jest zero dla silnika.

    3️⃣ Jak wygląda poprawna sinusoida fazowa

    Wyobraź sobie wykres:

    Vcc
    |
    | /‾‾‾\
    | / \
    |------•-------•------ ← 128 = środek
    | / \
    |____/ \____
    0


    zaczyna się w 128

    kończy się w 128

    NIE w 0

    I to jest poprawnie.

    4️⃣ Co widzi silnik

    Sil

    przecież wychodzi na to że kolejny tranzystor w push pull układzie załączy się kiedy drugi ma 64 wypełnieniea

    Świetnie – to pytanie trafia dokładnie w punkt, gdzie wszystko się miesza:
    PWM (czas) vs push-pull (stan). Rozbijmy to bardzo wolno i prosto.

    1️⃣ Najważniejsze zdanie (od razu)

    👉 Drugi tranzystor w push-pull NIE włącza się „przy 64%”.
    On włącza się w innym półokresie, a nie przy jakiejś wartości PWM.

    PWM nie przełącza kierunku, tylko reguluje czas przewodzenia.

    2️⃣ Co oznacza „64” w PWM

    Przy 8 bitach:

    0 → 0% (zawsze wyłączony)

    128 → 50%

    255 → 100%

    Czyli:

    64 = 25% czasu WŁĄCZONY


    To nie jest żaden próg ani „moment przełączenia”.

    3️⃣ Push-pull – kiedy zmienia się tranzystor

    W push-pull:

    jeden tranzystor pracuje w jednej połówce sinusoidy

    drugi w drugiej połówce

    Przełączenie NIE zależy od PWM, tylko od znaku sinusoidy.

    Czyli logicznie:

    if (sin >= 0)
    włącz górny
    else
    włącz dolny


    PWM tylko mówi:

    jak DŁUGO on jest włączony

    4️⃣ Co Ty robisz teraz (i gdzie jest nieporozumienie)

    Ty:

    NIE masz detekcji znaku sinusoidy

    masz tylko:

    PWM ∈ 0…255


    Więc:

    przy 64 → tranzystor włącza się na 25% czasu

    przy 128 → 50%

    przy 192 → 75%

    Ale:
    ❗ nigdy nie ma „zmiany strony”

    5️⃣ Dlaczego offset 128 nie oznacza „załączenia drugiego MOSFETa”

    To jest kluczowe:

    128 = połowa czasu

    NIE:

    zmiana tranzystora

    zmiana kierunku

    zmiana polaryzacji

    ESP32:

    nie wie nic o „push-pull”

    widzi tylko:

    0 lub 3.3 V na pinie

    6️⃣ Jak to się robi poprawnie (logicznie)

    Masz DWIE rzeczy:

    A) znak sinusoidy → wybór tranzystora
    B) wartość bezwzględna → PWM

    Przykład:

    int s = sin_tab - 128; // -127…+127

    if (s >= 0) {
    high_side_pwm = s;
    low_side_pwm = 0;
    } else {
    high_side_pwm = 0;
    low_side_pwm = -s;
    }


    To jest push-pull.

    7️⃣ Dlaczego Twoje obecne „128 ± 63” działa mimo wszystko

    Bo:

    nie robisz prawdziwego push-pull

    robisz „średnią napięcia”

    silnik reaguje na różnice faz

    nie na pojedynczy tranzystor

    8️⃣ Najważniejsze zdanie do zapamiętania

    PWM mówi „jak długo”, a push-pull mówi „który tranzystor”.
    To są DWIE RÓŻNE RZECZY.

    Jeśli chcesz, w kolejnym kroku mogę:

    rozpisać dokładnie jeden okres krok po kroku

    narysować tabelkę: sin → tranzystor → PWM

    albo dopasować to dokładnie do Twojego kodu LEDC

    Powiedz tylko 👍

    zmienia sie strona przecież

    Masz rację — u Ciebie „strona” się zmienia.
    I tu jest ważne: to NIE dzieje się przez wartość 64 / 128, tylko przez TEN SPRYTNY BIT, którego używasz. Wyjaśnijmy to bardzo jasno.

    1️⃣ Gdzie u Ciebie faktycznie zmienia się „strona”

    Popatrz na ten fragment:

    piny[ ((iterator & 256) >> 8) ]


    oraz:

    piny[2 + (((iterator + f2) & 256) >> 8)]
    piny[5 - (((iterator + f3) & 256) >> 8)]

    Co to robi

    iterator liczy 0…1023

    bit 256 (bit 8) zmienia się co 256 kroków

    (iterator & 256) >> 8 daje:

    0 przez pół okresu

    1 przez drugie pół

    👉 To jest dokładnie wybór tranzystora górny / dolny.

    Czyli:

    pierwsze 180° → jeden MOSFET

    drugie 180° → drugi MOSFET

    Masz rację 👍

    2️⃣ Gdzie jest PROBLEM (i dlaczego ½ amplitudy „nie działa”)

    Strona się zmienia poprawnie, ale:

    👉 wartość PWM, którą mu podajesz, jest źle przeskalowana

    Gdy robisz:

    tablica / 2


    to w każdej połówce:

    PWM ∈ 0…127

    średnia fazy ≈ Vcc/4

    dla obu stron taka sama

    Efekt:

    górny i dolny MOSFET robią to samo tylko w innych półokresach

    różnica faz nadal ≈ 0

    3️⃣ Co MUSI być spełnione, żeby amplituda się zmniejszyła

    Maszą być spełnione oba warunki naraz:

    1️⃣ Zmiana strony (masz ją – OK)
    2️⃣ Odchylenie od środka (TEGO BRAKUJE)

    Poprawny sygnał to:

    PWM = 128 ± A*sin


    A nie:

    PWM = A*sin

    4️⃣ Dlaczego „64” NIE jest progiem przełączenia

    „64” to tylko:

    25% czasu włączenia


    Przełączenie strony jest sterowane bitem iteratora, a nie wartością PWM.

    5️⃣ Jak to wygląda na jednym przykładzie (konkret)

    Załóżmy amplituda = 63.

    Dla jednego punktu sinusoidy:
    iterator strona PWM
    0° górna 128
    90° górna 191
    180° dolna 128
    270° dolna 65

    strona się zmienia ✔

    amplituda mniejsza ✔

    różnica faz ≠ 0 ✔

    6️⃣ Jedno zdanie końcowe

    Zmiana strony już u Ciebie działa.
    Nie działa tylko skalowanie amplitudy, bo ściskasz do zera zamiast wokół środka.

    Jeśli chcesz, mogę:

    przepisać dokładnie 3 linijki w Twoim loop()

    albo narysować Ci jedną fazę krok po kroku


    Dodano po 10 [minuty]:

    Działa okazało się że to jakoś jak ja zmniejszam pwm o 2 razy to jakoś 4 razy realnie sie zmniejsza tak mi czatbot napisał wiec zmniejszam o peirwiastek z 2 i działa mi teraz. mimo wszystko jak ktoś ma pomysły jak to ulepszyć to słucham
  • #14 21782541
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    Dziwi mnie to że górne i dolne tranzystory półmostka sterujesz oddzielnie, typowo steruje się je jednym sygnałem PWM (Do takiej metody pasuje opis od AI) z dodanym niewielkim czasem martwym, aby tranzystory nie przewodziły jednocześnie. Niestarannie zrobione sterowanie tranzystorów N z ESP i P z N przy 15kHz może zniekształcać wypełnienie. Potrzebne są drivery MOSFETów. ESP ma inne peryferium do sterowania silnikami.
  • #15 21782632
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    po to aby były czasy martwe po to te 0 na końcu i początku tablicy czyli wyłączony mosfet i nie rozumiem czemu mam załączać oba przy każdym cyklu pwm że np jak wynosi 60% to 40% załączy ten drugi skoro tylko jedna połówka jest przez jakiś czas że np jedna górna dodatnia połówka jest 20 ms to sobie myśle że trzeba sterować tak że albo zwieram do + kiedy mam dodatnią połówkę a potem rozłączam taki open drain raz do + raz do - kiedy ujemna połówka jak dziele tablice przez 1.5 to działa niby inaczej to się liczy że 2 razy jak podziele tablice pwm to aby takim samym napieciem zasilić silnik to musze 4 razy zwiększyć napiecie na zasilaczu
  • #16 21782751
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    skoro tylko jedna połówka jest przez jakiś czas że np jedna górna dodatnia połówka jest 20 ms to sobie myśle że trzeba sterować tak że albo zwieram do + kiedy mam dodatnią połówkę a potem rozłączam
    A czy przy dodatniej połówce prąd płynie tylko dodatni? Nie.

    kamil3211 napisał:
    Działa okazało się że to jakoś jak ja zmniejszam pwm o 2 razy to jakoś 4 razy realnie sie zmniejsza tak mi czatbot napisał wiec zmniejszam o peirwiastek z 2 i działa mi teraz. mimo wszystko jak ktoś ma pomysły jak to ulepszyć to słucham
    SVPWM pozwala optymalnie wykorzystać zasilanie. Zauważ ze silnik "widzi" różnicę przebiegów PWM, trzeba by przejrzeć dokumentację jak te przebiegi mają się do siebie fazowo. Przecież zmiana fazy zepsuje przebieg międzyfazowy nawet jeśli wypełnienie jest ok.

    kamil3211 napisał:
    jak dziele tablice przez 1.5 to działa niby inaczej to się liczy że 2 razy jak podziele tablice pwm to aby takim samym napieciem zasilić silnik to musze 4 razy zwiększyć napiecie na zasilaczu

    Jak ci się prosta arytmetyka nie zgadza to coś musi być spie... Ale na razie nie mam pomysłu co (poza fazą), ponadto w kodzie nie pokazałeś jak to dzielisz.

    Najlepszy debugger takich układów to oscyloskop, zarówno z filtrem do oglądania napięć fazowych i międzyfazowych (przez róznicę kanałów) jak i do PWMów. Od biedy możesz użyć ADC z ESP do rejestrowanie przebiegów, tylko dzielnik trzeba dodać.
  • #17 21783745
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    a polecasz jakiś driver? napięcie 330V DC sterowane przez tranzystory. Aby było mało roboty, może jakiś 3 fazowy. smd też może być jak istnieje jakaś przejściówka tylko wogóle mnie nie interesuje separacja itd co najwyżej spale esp za15 zł tylko nie wiem czy taki driver zasile z zasilacza labolatoryjnego max 30V bo tak bym sobie testował na nim na początku. Albo jakiś już abudowany układ z tranzystorami kluczującymi ja tylko podaje pwm 3 faz.

    Dodano po 21 [minuty]:

    może taki Układ scalony; IR2132; Driver; high-/low-side, sterownik bramek; -420÷200mA; 1,5W; 600V; IR2132PBF; DIP28; THT; RoHS

    Dodano po 11 [minuty]:

    https://allegro.pl/oferta/ir2132-ir2132pbf-driver-mosfet-dip28-14645394879

    Zasilać to będzie Silniczek 3f mały działający bez obciążenia 300W na wale .
    A mosfet taki.
    AOT12N40LALPHA & OMEGA SEMICONDUCTOR-Tranzystor N-MOSFET

    raczej samodzielna realizacja takiego drivera to troche roboty? trzeba kondensator diode żeby zrobić bootstrap a potem to załączać i z tym załączaniem kondensatora do mosfetów kluczujących falownik (high side ) to znów problem?

    do driverów trzeba diode i kondensator do tego boost i jak dobrze rozumiem to kondensator będzie miał napiecie maksymalne takie jakie jest zasilania układu a drivera a dioda musi wytrzymać napiecie wsteczne wartości napiecia zasilania drivera.
    Pewnie zawsze trzeba na chwile załączyć dolne mosfety kluczujące aby podładować ten okndensator i dopiero high side może ruszyć?
    Załączniki:
    • Budowa falownika jednofazowego do silnika 3-fazowego - pytania o PWM i sterowanie diodakondensator.png (63.83 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 21783976
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    Driver IR2132 może być, choć przyznam że wolałem trzy w SO-8 bo wygodniej na płytce rozmieścić. Zaleta IR2132 jest taka że można skorzystać z wbudowanego zabezpieczenia nadprądowego. IR2132 ma wbudowany deadtime jak wiele takich układów. Ten ma dwa wejścia na półmostek ale są układy takie jak IR2104 które mają jedno i same robią odwracanie i deadtime.
    Drivery mają oddzielne zasilanie logiki i półmostka, na zasilanie półmostka mozna podać nawet 1V bo to nie zasila drivera tylko MOSFETy.

    MOSFET AOT12N40LALPHA możę być. Do tego zasilanie drivera 12V. (kondensator bootstrap ładuje się do tego napięcia) dioda do bootstrapu szybka wysokonapięciowa na małe prądy.

    kamil3211 napisał:
    raczej samodzielna realizacja takiego drivera to troche roboty? trzeba kondensator diode żeby zrobić bootstrap a potem to załączać i z tym załączaniem kondensatora do mosfetów kluczujących falownik (high side ) to znów problem?
    Da się, potrzebny wtórnik komplementarny i stopień WE, na każde wyjście, czyli 18 tranzystorów, do high side jakiś mały wysokonapięciowy tranzystor. Nie chciało by mi się.

    ESP ma blok MCPWM do generowania "silnikowych" PWM z deadtimem, choć jak zrobi to driver to obojętne.
  • #19 21784653
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    właściwie sens tych driverów to widze dla górnych mosfetów wzbogacanych typu n a dla dolnych nie ? mogę po prostu bezpośrednio do tych dolnych mosfetów się podpiąć po co właściwie chcą wpuszczać sygnał do ukłądu chodzi o czasy martwe ? Dobrze że pokazałeś ten na który podaje się tylko jeden sygnał. Będzie mniej podłączania. Jego kupie. Chyba że masz jeszcze jakiś pomysł jak to zrobić prościej(nie licząc kupna gotowego falownika).
  • #20 21784738
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    mogę po prostu bezpośrednio do tych dolnych mosfetów się podpiąć po co właściwie chcą wpuszczać sygnał do ukłądu chodzi o czasy martwe
    Driver da większe napięcie (12V) i większą wydajność prądową niż port uC
  • #21 21785900
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    PWMy powinny być zsynchronizowane bo silnik zasilany jest różnicą faz.
  • #22 21793780
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Chatgpt wygenerował mi svpwm ale nie wiem czy dobrze. Ale wszystko działa spoko. Co prawda tego nie rozumiem. Ale wiem jak zmienić czestotliwość i amplitude tego kodu i to mi wystarczy

    Kod: Arduino
    Zaloguj się, aby zobaczyć kod
    Załączniki:
    • Budowa falownika jednofazowego do silnika 3-fazowego - pytania o PWM i sterowanie 20251230_150125.jpg (5.9 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #23 21798514
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    A mógłbym używać go bez low side ? Musiałbym w czymś mierzyć napięcie względem masy mikrokontrolerem.
    Załączniki:
    • Budowa falownika jednofazowego do silnika 3-fazowego - pytania o PWM i sterowanie mosfety.png (27.22 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #24 21798613
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    A mógłbym używać go bez low side
    Pod warunkiem że coś np obciążenie okresowo będzie ściągać wyjście do 0V.

    A co do SVPWM to trzeba oglądać przebiegi. Sam robiłem SVPWM dawno temu więc musiał bym sobie przypomnieć i moje sprawdzanie kodu na oko nie będzie pewne.
  • #25 21799894
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Ok i tak ci dziękuję. Dużo mi pomogłeś.
  • #26 21801082
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    A w prostowniku dwupołówkowym z kondensatorem filtrującym wystarczy jak diody wytrzymają 325V+ zapas czy tak jak w jednopołówkowym kiedy sinusoida jest ujemna a napiecie na kondensatorze dodatnie i sie nałożą i będzie napiecie sinusoidy+kondensatora+zapas . Robiłem symulacje w circuits falstad ale tam najwyższe to właśnie napiecie wyprostowane. Ale diody nie są idealne. Co prawda pogorszyłem parametry dając jakieś rezystory równolegle o dużej rezystancji ale wciąć poprawnie pracuje. Sam kondensator aby nie naładować go zbyt gwałtownie to najlepiej będzie stopniowo powoli tranzystorem mosfet N ale nie podepnę cewki szeregowo z kondensatorem tak jak sie robi w przetwornicach(że się daje cewke) bo potem to była by tylko problemem i trzeba było by kolejny mosfet aby obejść tą cewke(albo przekaźnik bo tu już nie trzeba szybkości przełączania). Dam dużą częstotliwość pwm 20 khz aby naładować ten kondensator przewody też mają jakąś indukcyjność to coś pomogą. Jest jeszcze opcja z rezystorem że on cały czas ładuje kondensator jest on na stałe a potem załącza się równolegle do niego podpięty mosfet ale to kolejny element.
  • #27 21801524
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    Sam kondensator aby nie naładować go zbyt gwałtownie to najlepiej będzie stopniowo powoli tranzystorem mosfet N ale nie podepnę cewki szeregowo z kondensatorem tak jak sie robi w przetwornicach(że się daje cewke) bo potem to była by tylko problemem i trzeba było by kolejny mosfet aby obejść tą cewke(albo przekaźnik bo tu już nie trzeba szybkości przełączania). Dam dużą częstotliwość pwm 20 khz aby naładować ten kondensator przewody też mają jakąś indukcyjność to coś pomogą. Jest jeszcze opcja z rezystorem że on cały czas ładuje kondensator jest on na stałe a potem załącza się równolegle do niego podpięty mosfet ale to kolejny element.

    Zawile kombinujesz. Ograniczenie prądu ładowania kondensatora robi się rezystorem lub termistorem NTC, po naładowaniu zwiera się go przekaźnikiem. Powolne załączanie MOSFETa to słaby pomysł bo MOSFET nie ma w czym pochłonąć takiej energii.

    Nie da się zrobić pół-przetwornicy buck opierając się na indukcyjności przewodów. To zawsze będzie przetwornica tylko albo zrobisz ją tak że będzię działać dobrze albo będzie źle. Cewka policzona na 20kHz dla 100Hz jest zwarciem więc walczysz z papierowym tygrysem.
  • #28 21801755
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Tylko że to dodatkowy element ten rezystor. Ja chce na ten tranzystor podawać pwm 20 khz albo więcej i jeszcze małe wypełnienie. Jeszcze mam taki pomysł ale napewno go nie będę realizował że załączałbym tranzystor w momęcie kiedy sinusoida ma 0V i nie będzie aż tak gwałtownie ładowany.
    Załączniki:
    • Budowa falownika jednofazowego do silnika 3-fazowego - pytania o PWM i sterowanie Zrzut ekranu 2026-01-07 140244.png (16.7 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #29 21801792
    jarek_lnx
    Poziom 43  
    Posty: 22537
    Pomógł: 4165
    Ocena: 6025
    kamil3211 napisał:
    Tylko że to dodatkowy element ten rezystor.
    Czy jesteś księgowym? Jak jest potrzebny element to się go stosuje. Nawet w fabrycznych falownikach taki rezystor spotkasz mimo że księgowi pilnują żeby ograniczać ilość elementów jak się tylko da.
    Rezystor albo NTC dużo lepiej znosi przeciążenia niż MOSFET, bo ma dużą masę materiału pochłaniającego tą energię (szczególnie NTC)

    kamil3211 napisał:
    Ja chce na ten tranzystor podawać pwm 20 khz albo więcej i jeszcze małe wypełnienie.
    A gdzie ma się podziać energia z przepięć z indukcyjności sieci? Pójdzie w przebicie tranzystora. Inne urządzenia w tej samej sieci też mogą tego nie lubić.

    MOSFET użyty jako klucz, prądu nie ogranicza, więc będą duże amplitudy prądu i napięcia. MOSFET załaczany powoli może nie wytrzymać energii jaka się wydzieli (równej temu co zgromadzi kondensator)

    Załączanie w zerze to jedyne co w twojej opowieści ma sens uzyskasz ograniczenie 10A na każde 100uF, jaką pojemność planujesz?
  • #30 21801884
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    To zrobie to z tym rezystorem, ewentualnie zacznę ładować w zerze bez rezystora, ale rozważę coś jeszcze.
    Może jakiś ceramiczny kondensator o małej pojemności wpięty do mostka od strony wyprostowanej najpierw niech chwile się naładuje potem tamten układ z kondensatorem i tranzystorem i energia pójdzie na ten kondensator odsprzegajacy. Ale tu i tu kondensator to popłyną duże prądy. Czyli trzeba by cewke dać. Zdjęcie załączyłem.

    ale jak widziałem chociażby schemat przetwornic step down( na załączonym zdjęciu coś podobnego zrealizowałem) to tam też nie ma zabezpieczenia przed przepięciami przez przewody zasilające oni tam dają diody ale aby cewki ograniczające prąd w przetwornicy po zamknięciu tranzystora zamykały się przez diode i kondensator. Albo jak sie steruje silnikiem DC tylko w jednym kierunku to widze w schematach tylko zabezpieczenie w postaci diody na silniku dołączone antyrównolegle do niego.

    jeszcze Inaczej.
    Może diode zenera na 350V. podłączoną do dolnego tranzystora bo widze że w strukturze tranzystora jest zwykła dioda a nie zenera.

    Jeszcze jedno pytanie. Przy jak małych kondensatorach elektrolitycznych nie trzeba się takimi rzeczami przejmować tylko wpinać kondensator na stałe do obwodu?
    Mam mały silniczek 120 W. Wału nie obciążam. 50 uF.
    Załączniki:
    • Budowa falownika jednofazowego do silnika 3-fazowego - pytania o PWM i sterowanie Zrzut ekranu 2026-01-07 162842.png (16.43 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ Dyskusja dotyczy budowy falownika jednofazowego do zasilania silnika indukcyjnego trójfazowego, ze szczególnym uwzględnieniem sterowania PWM i metod generacji napięcia sinusoidalnego. Poruszono kwestie wartości napięcia skutecznego i średniego w modulacji PWM, podkreślając, że dla silnika indukcyjnego ważna jest wartość średnia napięcia po filtracji, a nie wartość skuteczna samego sygnału PWM. Omówiono metody sterowania silnikiem indukcyjnym, w tym sterowanie skalarne (u/f=const), które jest prostsze niż sterowanie wektorowe (FOC) wymagające pomiaru położenia wirnika, oraz alternatywę w postaci direct torque control. Wskazano na charakterystykę momentu silnika indukcyjnego i ograniczenia momentu rozruchowego przy sterowaniu skalarnym.

Autor opisał problemy z implementacją PWM na mikrokontrolerach Atmega328 i ESP32, zwracając uwagę na konieczność stosowania filtrów RC do wygładzania sygnału oraz synchronizacji PWM dla trzech faz. Dyskutowano o sterowaniu tranzystorami MOSFET w półmostkach, podkreślając potrzebę stosowania driverów bramek z funkcją deadtime, aby uniknąć zwarć, oraz o różnicach w sterowaniu tranzystorów górnych typu N wzbogacanych i dolnych typu N. Zaproponowano użycie driverów IR2132 i IR2104, które oferują zabezpieczenia i deadtime, a także omówiono kwestie zasilania driverów i konieczność stosowania diod bootstrap.

Poruszono także temat zabezpieczeń i ograniczania prądu ładowania kondensatora filtrującego w prostowniku dwupołówkowym, wskazując na konieczność stosowania rezystorów lub termistorów NTC zamiast wolno załączanych tranzystorów MOSFET, ze względu na bezpieczeństwo i trwałość elementów. Wspomniano o problemach z przepięciami i konieczności stosowania odpowiednich zabezpieczeń w układzie zasilania.

Na koniec autor podzielił się przykładowym kodem SVPWM generowanym na ESP32, który działa poprawnie, choć nie jest w pełni rozumiany, oraz rozważał możliwość pracy bez dolnej strony mostka (low side) pod warunkiem odpowiedniego obciążenia. Dyskusja zawierała również odniesienia do materiałów edukacyjnych i przykładów implementacji PWM w falownikach VFD.
Wygenerowane przez model językowy.
REKLAMA