-
1. Data: 2022-12-29 14:32:18
Temat: Mały MCU z rozbudowanym PWM
Od: M M <m...@g...com>
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.
-
2. Data: 2022-12-29 15:36:12
Temat: Re: Mały MCU z rozbudowanym PWM
Od: Dawid Rutkowski <d...@w...pl>
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?
-
3. Data: 2022-12-29 15:50:29
Temat: Re: Mały MCU z rozbudowanym PWM
Od: Janusz <j...@o...pl>
W dniu 2022-12-29 o 14:32, M M pisze:
> 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.
Attiny861A
"Peripheral Features
- One 8/16-bit Timer/Counter with Prescaler
- One 8/10-bit High Speed Timer/Counter with Prescaler
o 3 High Frequency PWM Outputs with Separate Output Compare Registers
o Programmable Dead Time Generator
To ci wystarczy, sam na nim zrobiłem falownik 3F od 20 do 200Hz.
--
Janusz
-
4. Data: 2022-12-29 16:05:15
Temat: Re: Ma?y MCU z rozbudowanym PWM
Od: a...@m...uni.wroc.pl
M M <m...@g...com> wrote:
> 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
-
5. Data: 2022-12-29 17:17:57
Temat: Re: Mały MCU z rozbudowanym PWM
Od: M M <m...@g...com>
czwartek, 29 grudnia 2022 o 15:50:34 UTC+1 Janusz napisał(a):
> Attiny861A
> "Peripheral Features
> - One 8/16-bit Timer/Counter with Prescaler
> - One 8/10-bit High Speed Timer/Counter with Prescaler
> o 3 High Frequency PWM Outputs with Separate Output Compare Registers
> o Programmable Dead Time Generator
>
> To ci wystarczy, sam na nim zrobiłem falownik 3F od 20 do 200Hz.
Ale tu mam DC/DC - wszystkie 3 kanały mają generować to samo wypełnienie, ale nośna
~15 kHz (a nie sygnał modulujący) przesunięta w fazie co 120 stopni.
Podobnie jak robią np. step-down do zasilania CPU na płytach głównych, by podzielić
obciążenie na więcej mniejszych elementów mocy.
Chcąc to zrobić jednym timerem trzeba by mieć niezależnie programowane przy jakich
różnych stanach licznika wyjście zmienia stan na 1 i 0 - a tego tam nie widzę.
Chyba że przeładowywać "w locie" w przerwaniach w każdym cyklu - ale tego wolę
unikać, bo pewnie przy debugowaniu trochę kluczy zdążę spalić.
-
6. Data: 2022-12-29 17:51:16
Temat: Re: Mały MCU z rozbudowanym PWM
Od: Janusz <j...@o...pl>
W dniu 2022-12-29 o 17:17, M M pisze:
> czwartek, 29 grudnia 2022 o 15:50:34 UTC+1 Janusz napisał(a):
>> Attiny861A
>> "Peripheral Features
>> - One 8/16-bit Timer/Counter with Prescaler
>> - One 8/10-bit High Speed Timer/Counter with Prescaler
>> o 3 High Frequency PWM Outputs with Separate Output Compare Registers
>> o Programmable Dead Time Generator
>>
>> To ci wystarczy, sam na nim zrobiłem falownik 3F od 20 do 200Hz.
>
> Ale tu mam DC/DC - wszystkie 3 kanały mają generować to samo wypełnienie, ale nośna
~15 kHz (a nie sygnał modulujący) przesunięta w fazie co 120 stopni.
W czym widzisz problem? ustawiasz odpowiednio rejestry io masz bez
przesunięcia.
> Podobnie jak robią np. step-down do zasilania CPU na płytach głównych, by podzielić
obciążenie na więcej mniejszych elementów mocy.
> Chcąc to zrobić jednym timerem trzeba by mieć niezależnie programowane przy jakich
różnych stanach licznika wyjście zmienia stan na 1 i 0 - a tego tam nie widzę.
Cóż, ja ci podałem rozwiązanie a skoro sądzisz że toi zrobisz lepiej to rób.
> Chyba że przeładowywać "w locie" w przerwaniach w każdym cyklu - ale tego wolę
unikać, bo pewnie przy debugowaniu trochę kluczy zdążę spalić.
Opowiadasz głupoty. Klucze spalisz z zupełnie innego powodu.
--
Janusz
-
7. Data: 2022-12-29 18:07:09
Temat: Re: Mały MCU z rozbudowanym PWM
Od: M M <m...@g...com>
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.
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.
> 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.
> 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.
-
8. Data: 2022-12-29 22:33:34
Temat: Re: Mały MCU z rozbudowanym PWM
Od: Janusz <j...@o...pl>
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
-
9. Data: 2022-12-29 22:34:50
Temat: Re: Mały MCU z rozbudowanym PWM
Od: 2m <m...@g...com>
czwartek, 29 grudnia 2022 o 14:32:19 UTC+1 M M napisał(a):
> 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 j
.....
Z tego chyba da się sklecić EFM8BB31F16
o 4 Configurable Logic Units
o Timers/Counters and PWM:
o 6-channel programmable counter array (PCA) supporting
PWM, capture/compare, and frequency output modes
o 6 x 16-bit general-purpose timers
-
10. Data: 2022-12-31 17:51:08
Temat: Re: Mały MCU z rozbudowanym PWM
Od: M M <m...@g...com>
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.
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.
> 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 :)
> Marzyciel :)
A jednak... EVAL-M1-IM818-A :)
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ę.