RTV forum PL | NewsGroups PL

Mały MCU z rozbudowanym PWM

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Mały MCU z rozbudowanym PWM

Goto page 1, 2  Next

M M
Guest

Thu Dec 29, 2022 3:32 pm   



Znacie coś mniejszego niż ATmega2560 i w miarę dostępnego, co wygeneruje 6 sygnałów PWM dla modułu 3-fazowego mostka IGBT (wstępnie IM818SCC bo w TME mają) użytego jako 3 równolegle połączone step-down? Parami po 2 sygnały dla dolnego i górnego klucza z dead-time, 3 takie pary (ustawione to samo wypełnienie) przesunięte w fazie o 120 stopni względem siebie. ATmega2560 powinien dać radę za pomocą 3 timerów (3, 4, 5) ustawionych na różne wartości początkowe i uruchomionych w jednej chwili. Prototyp więc mile widziane coś łatwo montowanego w DIP. Dostępne mniejsze płytki Arduino z tego co widzę są robione na starszym ATmega328P a nie nowszym PB który ma więcej timerów.

Janusz
Guest

Thu Dec 29, 2022 3:50 pm   





Dawid Rutkowski
Guest

Thu Dec 29, 2022 4:36 pm   



A jaka częstotliwość tego PWM?
Bo ATmega324 ma 6 kanałów PWM, ale 2*2 są z timerów 8-bit, a tylko jedna para z 16-bit.
W TME ostatnio jeszcze sporo w DILu było (jako nieliczny wyjątek)..
Hmm, były też chyba ATmega88, ale SMD, one chyba też takie PWMy mają.
A może łatwiej poprzesuwać fazy?

Guest

Thu Dec 29, 2022 5:05 pm   



M M <marekm72_at_gmail.com> wrote:
Quote:
Znacie co? mniejszego ni? ATmega2560 i w miar? dost?pnego, co wygeneruje 6 sygna??w PWM dla modu?u 3-fazowego mostka IGBT (wst?pnie IM818SCC bo w TME maj?) u?ytego jako 3 r?wnolegle po??czone step-down? Parami po 2 sygna?y dla dolnego i g?rnego klucza z dead-time, 3 takie pary (ustawione to samo wype?nienie) przesuni?te w fazie o 120 stopni wzgl?dem siebie. ATmega2560 powinien da? rad? za pomoc? 3 timer?w (3, 4, 5) ustawionych na r??ne warto?ci pocz?tkowe i uruchomionych w jednej chwili. Prototyp wi?c mile widziane co? ?atwo montowanego w DIP. Dost?pne mniejsze p?ytki Arduino z tego co widz? s? robione na starszym ATmega328P a nie nowszym PB kt?ry ma wi?cej timer?w.

Jak szukasz plytki to pierwsze co przychodzi na mysl to "Blue Pill",
popularna plytka z STM32F103. Masz Timer 1 ktory na 3 kanaly z
wyjsciami komplementarnymi i "dead time". Do tego wejscie "break",
ktore blokuje prace timera (do tego wejscia wypadaloby podlaczyc
zewnetrzny komparator robiacy zabezpieczenie pradowe).

Plytka jest nieco wieksza niz Arduino Pro Mini czy Nano, tzn. Blue
Pill ma pady do 20 nozek z kazdej strony (+ zlacze SWD z jednego
krotkiego boku i USB z drugiego). Teraz jest sporo wariantow tych
plytek, najtansze na Aliexpress rzedu 1.4 dolara.

Jak szukasz chipow, to STM32F030K6 w LQFP32 powinien wystarczyc.
Sa podobne nowsze chipy, ktorys z nich powinien byc dostepny.

--
Waldek Hebisch

Janusz
Guest

Thu Dec 29, 2022 5:51 pm   





M M
Guest

Thu Dec 29, 2022 6:17 pm   





M M
Guest

Thu Dec 29, 2022 7:07 pm   



czwartek, 29 grudnia 2022 o 17:51:20 UTC+1 Janusz napisał(a):
Quote:
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.

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.

Quote:
Cóż, ja ci podałem rozwiązanie a skoro sądzisz że toi zrobisz lepiej to rób.

Ja tylko pytam jak na tym ATtiny861A zrobić przesunięcie *nośnej* na 3 kanałach PWM co 120 stopni, bo może faktycznie się da ale na szybko przeglądając nie widzę. Albo pozycja jednego zbocza jest stała (licznik zlicza do MAX i się zeruje) albo oba są przy tym samym stanie licznika (jedno gdy liczy w górę a drugie w dół). Na ATmega2560 mogę 3 timery ustawić tak samo poza różnymi wartościami początkowymi (0, 1/3 i 2/3 okresu w cyklach) i jednocześnie wszystkie wystartować, jak nic lepszego się nie uda wymyślić to tak trzeba będzie.

Quote:
Opowiadasz głupoty. Klucze spalisz z zupełnie innego powodu.

Chętnie się dowiem na co jeszcze uważać. 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.

Janusz
Guest

Thu Dec 29, 2022 10:33 pm   



W dniu 2022-12-29 o 18:07, M M pisze:
Quote:
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)

Quote:
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


Quote:

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

2m
Guest

Thu Dec 29, 2022 11:34 pm   





M M
Guest

Sat Dec 31, 2022 6:51 pm   



czwartek, 29 grudnia 2022 o 22:33:39 UTC+1 Janusz napisał(a):
Quote:
Strasznie mieszasz, PWM z 'natury' sieje, dlatego na wyjściu falownika
są filtry 'odsiewające' PWM-a.

Ale to ma być nie falownik tylko DC/DC "interleaved synchronous buck converter".
Czyli 3 mniejsze stopnie mocy połączone równolegle, sterowane tym samym wypełnieniem ale przesuniętym w fazie.
Dzięki temu częstotliwość tętnień rośnie x3 i łatwiej odfiltrować.
Z drugiej strony przy małym obciążeniu można by się pokusić o pracę tylko na jednym z 3 dla zmniejszenia strat przełączania.

Quote:
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

Na jednym timerze nadal nośna wszystkich 3 kanałów jest zgodna w fazie (zależnie od trybu albo jedno zbocze albo środek). W falowniku przesunięte są sygnały modulujące.
Można kombinować by timer sprzętowo zmieniał stan pinu i wywoływał przerwanie które ustawi kiedy ma być kolejna zmiana, ale czasu mało.
Na 3 timerach (albo hipotetycznym jednym jeszcze nie znalezionym który to umie) raz się ustawia i potem samo się generuje bez udziału CPU.
Chyba że w ogóle zrobić po staremu, zwykły licznik binarny + równoległy flash w podstawce :)

Quote:
Marzyciel Smile

A jednak... EVAL-M1-IM818-A Smile
Nie jest tanio, ale po drobnych przeróbkach (usunięcie prostownika wejściowego i dużych kondensatorów) powinno się nadać do testów.
Tylko dla bezpieczeństwa programatora i programisty przydałoby się wstawić optoizolację.

Jacek Radzikowski
Guest

Sun Jan 01, 2023 2:28 am   



On Thursday, December 29, 2022 at 8:32:19 AM UTC-5, M M wrote:
Quote:
Znacie coś mniejszego niż ATmega2560 i w miarę dostępnego, co wygeneruje 6 sygnałów PWM dla modułu 3-fazowego mostka IGBT (wstępnie IM818SCC bo w TME mają) użytego jako 3 równolegle połączone step-down? Parami po 2 sygnały dla dolnego i górnego klucza z dead-time, 3 takie pary (ustawione to samo wypełnienie) przesunięte w fazie o 120 stopni względem siebie. ATmega2560 powinien dać radę za pomocą 3 timerów (3, 4, 5) ustawionych na różne wartości początkowe i uruchomionych w jednej chwili. Prototyp więc mile widziane coś łatwo montowanego w DIP. Dostępne mniejsze płytki Arduino z tego co widzę są robione na starszym ATmega328P a nie nowszym PB który ma więcej timerów.

Jeśli nie straszna Ci przesiadka na nowy procesor, zerknij na serię C2000 od TI. To są procesory zaprojektowane do takich zastosowań i nawet najtańszy powinien mieć więcej kanałów PWM niz potrzeba do sterowania jednym silnikiem. Jeśli nie potrzebujesz tysięcy sztuk, to są dostępne w Mouserze, i są tańsze niż 2560.
To nie jest zbytnio popularna rodzina w aplikacjach hobbystycznych, ale dość miło się w nich rzeźbi.

Jacek.

Janusz
Guest

Sun Jan 01, 2023 11:17 am   



W dniu 2022-12-31 o 17:51, M M pisze:
Quote:
czwartek, 29 grudnia 2022 o 22:33:39 UTC+1 Janusz napisał(a):
Strasznie mieszasz, PWM z 'natury' sieje, dlatego na wyjściu falownika
są filtry 'odsiewające' PWM-a.

Ale to ma być nie falownik tylko DC/DC "interleaved synchronous buck converter".
Czyli 3 mniejsze stopnie mocy połączone równolegle, sterowane tym samym wypełnieniem ale przesuniętym w fazie.
No to ci tu nie pomogę.


Quote:
Marzyciel :)

A jednak... EVAL-M1-IM818-A Smile
Przecież na tej płytce małej masz zwykły falownik 3F na który wyżej

kręciłeś nosem + IGBT na dużej.

--
Janusz

Piotr Wyderski
Guest

Sun Jan 01, 2023 6:34 pm   



M M wrote:

Quote:
Znacie coś mniejszego niż ATmega2560 i w miarę dostępnego, co wygeneruje 6 sygnałów PWM dla modułu 3-fazowego mostka IGBT (wstępnie IM818SCC bo w TME mają) użytego jako 3 równolegle połączone step-down?

Ale mniejszego fizycznie, czy prostszego? Boja się ostatnio zachwycam
RP2040. Kosztuje dolara, jest silnym ARMem i NIE MA flash, a więc i
problemów flash. Mogę program trzymać w MRAM.

Pozdrawiam, Piotr

Piotr Wyderski
Guest

Sun Jan 01, 2023 6:37 pm   



Jacek Radzikowski wrote:

Quote:
Jeśli nie straszna Ci przesiadka na nowy procesor, zerknij na serię C2000 od TI.

Albo dorzeźbić peryferia w FPGA typu MachXO2 albo iCE40. Choć raczej nie
w przypadku trzech kanałów PWM.

Pozdrawiam, Piotr

m
Guest

Sun Jan 01, 2023 6:44 pm   



W dniu 01.01.2023 o 18:14, M M pisze:
Quote:
niedziela, 1 stycznia 2023 o 11:17:37 UTC+1 Janusz napisał(a):
A jednak... EVAL-M1-IM818-A Smile
Przecież na tej płytce małej masz zwykły falownik 3F na który wyżej
kręciłeś nosem + IGBT na dużej.
Chodzi właśnie o tę dużą - małą dorobić własną. Najlepiej na AVR bo w tym sporo rzeźbiłem (choć w starszych - w nowszych widzę peryferia się mocno pozmieniały, no i trzeba nowy inny programator z UPDI).
Wszystkie 3 wyjścia falownika przez 3 dławiki i drugie końce dławików połączone razem to wyjście.

https://www.microchip.com/en-us/product/dsPIC33EP16GS202
Ale wymaga trochę nauki jeżeli nie widziałeś nigdy z bliska
M.

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Mały MCU z rozbudowanym PWM

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map