DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Diskuze na téma solárních, větrných a ostatních regulátorů, datové komunikace mezi regulátory a PC, instalace software, zapojení regulátorů, chování a zkušenosti s různými typy regulátorů.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

Teploty pri 2050 W vykonu na vystupe:

.
BOOST_2306_2050W.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
gupa
Příspěvky: 2192
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od gupa »

Co z toho je pasivní odvod tepla, co je aktivní a jaký.(otáčky, síla) Potom mi vrtá hlavou co chladit a co nechladit nebo chladit hlídanou regulací. Někde tu někdo zmínil na fóru že se kondy nechladí.(pochopil jsem neofukují) Proč ne?
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT
glottis
Příspěvky: 2069
Registrován: stř úno 02, 2022 10:30 am
Lokalita: okolí Mělníka
Systémové napětí: 48V
Výkon panelů [Wp]: 13000
Kapacita baterie [kWh]: 15

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od glottis »

gupa píše:Co z toho je pasivní odvod tepla, co je aktivní a jaký.(otáčky, síla) Potom mi vrtá hlavou co chladit a co nechladit nebo chladit hlídanou regulací. Někde tu někdo zmínil na fóru že se kondy nechladí.(pochopil jsem neofukují) Proč ne?
Cilene se to asi nedela ale layout desky a celkovy navrh se dela tak, aby pokud je tam aktivni nebo i pasivni chlazeni, vzduch prochazel vsim a kondy se nedavaj treba pod chladic kam nefouka, kde se zadne teplo jen akumuluje. Ono u spinanych zdroju vetsinou hreje hlavne indukcnost, spinaci a rekuperacni prvky. Pripadne snubber. Kondy se mi vetsinou nikde moc nehrali. Takze jde spis o to dostat obecne teplo pryc a neudelat z toho troubu.

Jak to ma kiwi takhle odklopene na stole al avrabci hnizdo tak se to asi i docela dobre chladi. Kdy zby to zavrel do nejake bedny, zacne to pak byt vetsi vyzva.
Uživatelský avatar
gupa
Příspěvky: 2192
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od gupa »

Fenomén teorie tepla mne fascinuje. Šum v rozmezí určitých hodnot, je předpokladem k životu.
(je nutné chápat v relativních hodnotách to co vlastně v lidkém jazyce znamená teplo, šum, život)
Jakýkoli prvek obvodu, který je nad absolutní nulou, bude produkovat tepelný šum, nazývaný také Johnsonův šum. To znamená, že jednoduchý rezistor může produkovat bílý šum v jakémkoli obvodu zesilovače. Jediný způsob, jak snížit tento hluk, je snížit teplotu obvodu nebo minimalizovat odpor. Tento šum je nezávislý na materiálovém složení rezistoru.

Tato kalkulačka vypočítává RMS napětí šumu pro prvek obvodu pro danou šířku pásma, odpor a teplotu.
https://www.daycounter.com/Calculators/ ... ator.phtml
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

Lepsie sa to chladi, ked to je uzavrete, takto cast vzduchu od fanov ide prec
a nerobi dostatocnu turbulenciu okolo suciastok, napr. ked to odkryjem
a meram teplotu termokamerou, tak stupne teplota aj o 7 - 9 *C.

Ked zvysim frekvenciu z 39 kHz na 76 kHz, tak sa prestanu hriat cievky
ale zacnu sa hriat snubbre aj FET-y. Treba testovanim a aspon 8-mimi Dallas
senzormi zistit optimalnu frekvenciu alebo optimalizovat suciastky,
napr. lepsie FET-y, hrubsie droty na 50 A ci lepsie merace prudu,
ktore maju odpor v radoch uA a nie mA ako ma ACS712.

Pri 27 A kazdou fazou sa len na zaklade RDson hreje FET na 27x27x0.023 ==> 17 W.

Ak by sa pouzil s nizkym Qg a Ciss a nizkym Rdson, napr. 27x27x0.005 ==> 3.6 W.

https://www.mouser.sk/datasheet/2/240/L ... 622606.pdf

https://www.mouser.sk/datasheet/2/240/L ... 302266.pdf

https://www.mouser.sk/datasheet/2/240/l ... 957750.pdf

https://www.mouser.sk/datasheet/2/240/i ... 272563.pdf

https://www.mouser.sk/ProductDetail/IXY ... F9RA%3D%3D

https://www.mouser.sk/datasheet/2/240/i ... 272991.pdf

Teploty pri 2260 W - pol hodinu na stabilizovanie
Uz sa mi hreje aj predlzovacka 3 x 2.5 mm2 Cu / 10 m, pri 15 A trvale.

.
BOOST_2406_2260W.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

Je tu niekto ochotny, kto ma ESP32 aj 4-kanalovy osciloskop, zmerat
fazovy posun medzi PWM na tych siestich pinoch ?

Kód: Vybrat vše

#include <Arduino.h>
#include <driver/ledc.h>
#include <driver/gpio.h>
#include <driver/mcpwm.h>
#include <esp_intr_alloc.h>
#include <soc/soc.h>
#include <soc/soc_caps.h>
#include <soc/mcpwm_reg.h>
#include <soc/mcpwm_struct.h>
#include <esp_err.h>
#include <hal/mcpwm_types.h>

#define PWM_1 1000
#define PWM_10 15000

#define PWM_2 2000
#define PWM_20 20000

#define PWM_3 2500
#define PWM_30 25000

#define PWM_4 2600
#define PWM_40 26000

#define GPIO_PWM0A_OUT 19
#define GPIO_PWM0B_OUT 23
#define GPIO_PWM1A_OUT 17
#define GPIO_PWM1B_OUT 18
#define GPIO_PWM2A_OUT 16
#define GPIO_PWM2B_OUT 5

int duty_modulo = 325;
int duty_index = 1;


float duty_0 [325] = { 11.0,11.2,11.4,11.6,11.8, 12.0,12.2,12.4,12.6,12.8, 13.0,13.2,13.4,13.6,13.8, 14.0,14.2,14.4,14.6,14.8, 
                       15.0,15.2,15.4,15.6,15.8, 16.0,16.2,16.4,16.6,16.8, 17.0,17.2,17.4,17.6,17.8, 18.0,18.2,18.4,18.6,18.8, 
                       19.0,19.2,19.4,19.6,19.8, 20.0,20.2,20.4,20.6,20.8,
                       21.0,21.2,21.4,21.6,21.8, 22.0,22.2,22.4,22.6,22.8, 23.0,23.2,23.4,23.6,23.8, 24.0,24.2,24.4,24.6,24.8, 
                       25.0,25.2,25.4,25.6,25.8, 26.0,26.2,26.4,26.6,26.8, 27.0,27.2,27.4,27.6,27.8, 28.0,28.2,28.4,28.6,28.8, 
                       29.0,29.2,29.4,29.6,29.8, 30.0,30.2,30.4,30.6,30.8,
                       31.0,31.2,31.4,31.6,31.8, 32.0,32.2,32.4,32.6,32.8, 33.0,33.2,33.4,33.6,33.8, 34.0,34.2,34.4,34.6,34.8, 
                       35.0,35.2,35.4,35.6,35.8, 36.0,36.2,36.4,36.6,36.8, 37.0,37.2,37.4,37.6,37.8, 38.0,38.2,38.4,38.6,38.8, 
                       39.0,39.2,39.4,39.6,39.8, 40.0,40.2,40.4,40.6,40.8, 41.0,41.2,41.4,41.6,41.8, 42.0,42.2,42.4,42.6,42.8,
                       43.0,43.2,43.4,43.6,43.8, 44.0,44.2,44.4,44.6,44.8, 45.0,45.2,45.4,45.6,45.8, 46.0,46.2,46.4,46.6,46.8,
                       47.0,47.2,47.4,47.6,47.8, 48.0,48.2,48.4,48.6,48.8, 49.0,49.2,49.4,49.6,49.8, 50.0,50.1,50.2,50.3,50.4,
                       50.5,50.6,50.7,50.8,50.9, 51.0,51.1,51.2,51.3,51.4, 51.5,51.6,51.7,51.8,51.9, 52.0,52.1,52.2,52.3,52.4,
                       52.5,52.6,52.7,52.8,52.9, 53.0,53.1,53.2,53.3,53.4, 53.5,53.6,53.7,53.8,53.9, 54.0,54.2,54.4,54.6,54.8,
                       55.0,55.2,55.4,55.6,55.8, 56.0,56.2,56.4,56.6,56.8, 57.0,57.2,57.4,57.6,57.8, 58.0,58.2,58.4,58.6,58.8,
                       59.0,59.2,59.4,59.6,59.8 ,60.0,60.2,60.4,60.6,60.8, 61.0,61.2,61.4,61.6,61.8 ,62.0,62.2,62.4,62.6,62.8,
                       63.0,63.2,63.4,63.6,63.8, 64.0,64.2,64.4,64.6,64.8, 65.0,65.2,65.4,65.6,65.8, 66.0,66.2,66.4,66.6,66.8,
                       67.0,67.2,67.4,67.6,67.8, 68.0,68.2,68.4,68.6,68.8, 69.0,69.2,69.4,69.6,69.8, 70.0,70.2,70.4,70.6,70.8,
                       71.0,71.2,71.4,71.6,71.8  };

 float duty_1 [325] = { 11.0,11.2,11.4,11.6,11.8, 12.0,12.2,12.4,12.6,12.8, 13.0,13.2,13.4,13.6,13.8, 14.0,14.2,14.4,14.6,14.8, 
                       15.0,15.2,15.4,15.6,15.8, 16.0,16.2,16.4,16.6,16.8, 17.0,17.2,17.4,17.6,17.8, 18.0,18.2,18.4,18.6,18.8, 
                       19.0,19.2,19.4,19.6,19.8, 20.0,20.2,20.4,20.6,20.8,
                       21.0,21.2,21.4,21.6,21.8, 22.0,22.2,22.4,22.6,22.8, 23.0,23.2,23.4,23.6,23.8, 24.0,24.2,24.4,24.6,24.8, 
                       25.0,25.2,25.4,25.6,25.8, 26.0,26.2,26.4,26.6,26.8, 27.0,27.2,27.4,27.6,27.8, 28.0,28.2,28.4,28.6,28.8, 
                       29.0,29.2,29.4,29.6,29.8, 30.0,30.2,30.4,30.6,30.8,
                       31.0,31.2,31.4,31.6,31.8, 32.0,32.2,32.4,32.6,32.8, 33.0,33.2,33.4,33.6,33.8, 34.0,34.2,34.4,34.6,34.8, 
                       35.0,35.2,35.4,35.6,35.8, 36.0,36.2,36.4,36.6,36.8, 37.0,37.2,37.4,37.6,37.8, 38.0,38.2,38.4,38.6,38.8, 
                       39.0,39.2,39.4,39.6,39.8, 40.0,40.2,40.4,40.6,40.8, 41.0,41.2,41.4,41.6,41.8, 42.0,42.2,42.4,42.6,42.8,
                       43.0,43.2,43.4,43.6,43.8, 44.0,44.2,44.4,44.6,44.8, 45.0,45.2,45.4,45.6,45.8, 46.0,46.2,46.4,46.6,46.8,
                       47.0,47.2,47.4,47.6,47.8, 48.0,48.2,48.4,48.6,48.8, 49.0,49.2,49.4,49.6,49.8, 50.0,50.1,50.2,50.3,50.4,
                       50.5,50.6,50.7,50.8,50.9, 51.0,51.1,51.2,51.3,51.4, 51.5,51.6,51.7,51.8,51.9, 52.0,52.1,52.2,52.3,52.4,
                       52.5,52.6,52.7,52.8,52.9, 53.0,53.1,53.2,53.3,53.4, 53.5,53.6,53.7,53.8,53.9, 54.0,54.2,54.4,54.6,54.8,
                       55.0,55.2,55.4,55.6,55.8, 56.0,56.2,56.4,56.6,56.8, 57.0,57.2,57.4,57.6,57.8, 58.0,58.2,58.4,58.6,58.8,
                       59.0,59.2,59.4,59.6,59.8 ,60.0,60.2,60.4,60.6,60.8, 61.0,61.2,61.4,61.6,61.8 ,62.0,62.2,62.4,62.6,62.8,
                       63.0,63.2,63.4,63.6,63.8, 64.0,64.2,64.4,64.6,64.8, 65.0,65.2,65.4,65.6,65.8, 66.0,66.2,66.4,66.6,66.8,
                       67.0,67.2,67.4,67.6,67.8, 68.0,68.2,68.4,68.6,68.8, 69.0,69.2,69.4,69.6,69.8, 70.0,70.2,70.4,70.6,70.8,
                       71.0,71.2,71.4,71.6,71.8  };

 float duty_2 [325] = { 11.0,11.2,11.4,11.6,11.8, 12.0,12.2,12.4,12.6,12.8, 13.0,13.2,13.4,13.6,13.8, 14.0,14.2,14.4,14.6,14.8, 
                       15.0,15.2,15.4,15.6,15.8, 16.0,16.2,16.4,16.6,16.8, 17.0,17.2,17.4,17.6,17.8, 18.0,18.2,18.4,18.6,18.8, 
                       19.0,19.2,19.4,19.6,19.8, 20.0,20.2,20.4,20.6,20.8,
                       21.0,21.2,21.4,21.6,21.8, 22.0,22.2,22.4,22.6,22.8, 23.0,23.2,23.4,23.6,23.8, 24.0,24.2,24.4,24.6,24.8, 
                       25.0,25.2,25.4,25.6,25.8, 26.0,26.2,26.4,26.6,26.8, 27.0,27.2,27.4,27.6,27.8, 28.0,28.2,28.4,28.6,28.8, 
                       29.0,29.2,29.4,29.6,29.8, 30.0,30.2,30.4,30.6,30.8,
                       31.0,31.2,31.4,31.6,31.8, 32.0,32.2,32.4,32.6,32.8, 33.0,33.2,33.4,33.6,33.8, 34.0,34.2,34.4,34.6,34.8, 
                       35.0,35.2,35.4,35.6,35.8, 36.0,36.2,36.4,36.6,36.8, 37.0,37.2,37.4,37.6,37.8, 38.0,38.2,38.4,38.6,38.8, 
                       39.0,39.2,39.4,39.6,39.8, 40.0,40.2,40.4,40.6,40.8, 41.0,41.2,41.4,41.6,41.8, 42.0,42.2,42.4,42.6,42.8,
                       43.0,43.2,43.4,43.6,43.8, 44.0,44.2,44.4,44.6,44.8, 45.0,45.2,45.4,45.6,45.8, 46.0,46.2,46.4,46.6,46.8,
                       47.0,47.2,47.4,47.6,47.8, 48.0,48.2,48.4,48.6,48.8, 49.0,49.2,49.4,49.6,49.8, 50.0,50.1,50.2,50.3,50.4,
                       50.5,50.6,50.7,50.8,50.9, 51.0,51.1,51.2,51.3,51.4, 51.5,51.6,51.7,51.8,51.9, 52.0,52.1,52.2,52.3,52.4,
                       52.5,52.6,52.7,52.8,52.9, 53.0,53.1,53.2,53.3,53.4, 53.5,53.6,53.7,53.8,53.9, 54.0,54.2,54.4,54.6,54.8,
                       55.0,55.2,55.4,55.6,55.8, 56.0,56.2,56.4,56.6,56.8, 57.0,57.2,57.4,57.6,57.8, 58.0,58.2,58.4,58.6,58.8,
                       59.0,59.2,59.4,59.6,59.8 ,60.0,60.2,60.4,60.6,60.8, 61.0,61.2,61.4,61.6,61.8 ,62.0,62.2,62.4,62.6,62.8,
                       63.0,63.2,63.4,63.6,63.8, 64.0,64.2,64.4,64.6,64.8, 65.0,65.2,65.4,65.6,65.8, 66.0,66.2,66.4,66.6,66.8,
                       67.0,67.2,67.4,67.6,67.8, 68.0,68.2,68.4,68.6,68.8, 69.0,69.2,69.4,69.6,69.8, 70.0,70.2,70.4,70.6,70.8,
                       71.0,71.2,71.4,71.6,71.8  };                                            

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  uint32_t PWM = PWM_1;
  uint32_t PWM_0 = PWM_10;
  
   mcpwm_config_t pwm_config_0;    mcpwm_config_t pwm_config_0_1;    mcpwm_config_t pwm_config_0_2;
    mcpwm_config_t pwm_config_1;    mcpwm_config_t pwm_config_1_1;    mcpwm_config_t pwm_config_1_2;
 
    mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM0A, GPIO_PWM0A_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM1A, GPIO_PWM1A_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM1B, GPIO_PWM1B_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM2A, GPIO_PWM2A_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM2B, GPIO_PWM2B_OUT);
  
   mcpwm_sync_config_t  sync_ttt_0 ;
  sync_ttt_0.sync_sig = MCPWM_SELECT_TIMER0_SYNC;
  sync_ttt_0.timer_val = 500;
  sync_ttt_0.count_direction   = MCPWM_TIMER_DIRECTION_UP;

   mcpwm_sync_config_t  sync_ttt_1 ;
  sync_ttt_1.sync_sig = MCPWM_SELECT_TIMER1_SYNC;
  sync_ttt_1.timer_val = 0;
  sync_ttt_1.count_direction   = MCPWM_TIMER_DIRECTION_UP;

    pwm_config_0.frequency = PWM_0;    //frequency
    pwm_config_0.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_0.cmpr_b = 50.0;       
    pwm_config_0.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_0.duty_mode = MCPWM_DUTY_MODE_0;
    
    pwm_config_0_1.frequency = PWM_0;    //frequency 
    pwm_config_0_1.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_0_1.cmpr_b = 50.0;       
    pwm_config_0_1.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_0_1.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_0_2.frequency = PWM_0;    //frequency 
    pwm_config_0_2.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_0_2.cmpr_b = 50.0;       
    pwm_config_0_2.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_0_2.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_1.frequency = PWM_0;    //frequency 
    pwm_config_1.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_1.cmpr_b = 50.0;       
    pwm_config_1.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_1.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_1_1.frequency = PWM_0;    //fr equency 
    pwm_config_1_1.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_1_1.cmpr_b = 50.0;       
    pwm_config_1_1.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_1_1.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_1_2.frequency = PWM_0;    //fr equency 
    pwm_config_1_2.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_1_2.cmpr_b = 50.0;       
    pwm_config_1_2.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_1_2.duty_mode = MCPWM_DUTY_MODE_0;

    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config_0);   //Configure PWM0A & PWM0B with above settings
    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_1, &pwm_config_0_1);   //Configure PWM1A & PWM1B with above settings
    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_2, &pwm_config_0_2);   //Configure PWM2A & PWM2B with above settings   

    mcpwm_init(MCPWM_UNIT_1, MCPWM_TIMER_0, &pwm_config_1);   //Configure PWM0A & PWM0B with above settings
    mcpwm_init(MCPWM_UNIT_1, MCPWM_TIMER_1, &pwm_config_1_1);   //Configure PWM1A & PWM1B with above settings
    mcpwm_init(MCPWM_UNIT_1, MCPWM_TIMER_2, &pwm_config_1_2);   //Configure PWM2A & PWM2B with above settings  
     
    mcpwm_group_set_resolution( MCPWM_UNIT_0, 80000000) ;
    mcpwm_timer_set_resolution( MCPWM_UNIT_0, MCPWM_TIMER_0, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_0, MCPWM_TIMER_1, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_0, MCPWM_TIMER_2, 8000000);
    mcpwm_group_set_resolution( MCPWM_UNIT_1, 80000000) ;
    mcpwm_timer_set_resolution( MCPWM_UNIT_1, MCPWM_TIMER_0, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_1, MCPWM_TIMER_1, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_1, MCPWM_TIMER_2, 8000000);

   mcpwm_sync_configure(MCPWM_UNIT_0, MCPWM_TIMER_1, &sync_ttt_0);
   mcpwm_sync_configure(MCPWM_UNIT_0, MCPWM_TIMER_2,  &sync_ttt_1);
   mcpwm_sync_configure(MCPWM_UNIT_1, MCPWM_TIMER_1, &sync_ttt_0);
   mcpwm_sync_configure(MCPWM_UNIT_1, MCPWM_TIMER_2,  &sync_ttt_1);

   duty_index = 20;
}

void loop() {
  // put your main code here, to run repeatedly:
   mcpwm_set_duty(MCPWM_UNIT_1, MCPWM_TIMER_0, MCPWM_OPR_A, duty_0 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B,  duty_0 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_1, MCPWM_TIMER_1, MCPWM_OPR_A,  duty_1 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_1, MCPWM_OPR_B,  duty_1 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_1, MCPWM_TIMER_2, MCPWM_OPR_A,  duty_2 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_2, MCPWM_OPR_B,  duty_2 [ duty_index % duty_modulo] );
    duty_index ++;
   if ( duty_index >= 310 ) 
   {
      duty_index = 10;
   }
          Serial.print("PWM : ");
          Serial.println( duty_index);
       delay (99);
}
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

TEST:

OUT: 16.0 A / 168 V / 2690 W.

https://youtu.be/Db8B2sIAw6A

Hreje sa to takto:

.
BOOST_2406_2680_W.jpg
Teplota FET-u / T junction / v zavislosti na parametroch FET-u pri rovnakej
strate a rovnakej teplote chladica.

.
Rjc_Rcs_FETs.png
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
glottis
Příspěvky: 2069
Registrován: stř úno 02, 2022 10:30 am
Lokalita: okolí Mělníka
Systémové napětí: 48V
Výkon panelů [Wp]: 13000
Kapacita baterie [kWh]: 15

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od glottis »

Když bude čas zkusím to večer nebo zítra

rottenkiwi píše:Je tu niekto ochotny, kto ma ESP32 aj 4-kanalovy osciloskop, zmerat
fazovy posun medzi PWM na tych siestich pinoch ?

Kód: Vybrat vše

#include <Arduino.h>
#include <driver/ledc.h>
#include <driver/gpio.h>
#include <driver/mcpwm.h>
#include <esp_intr_alloc.h>
#include <soc/soc.h>
#include <soc/soc_caps.h>
#include <soc/mcpwm_reg.h>
#include <soc/mcpwm_struct.h>
#include <esp_err.h>
#include <hal/mcpwm_types.h>

#define PWM_1 1000
#define PWM_10 15000

#define PWM_2 2000
#define PWM_20 20000

#define PWM_3 2500
#define PWM_30 25000

#define PWM_4 2600
#define PWM_40 26000

#define GPIO_PWM0A_OUT 19
#define GPIO_PWM0B_OUT 23
#define GPIO_PWM1A_OUT 17
#define GPIO_PWM1B_OUT 18
#define GPIO_PWM2A_OUT 16
#define GPIO_PWM2B_OUT 5

int duty_modulo = 325;
int duty_index = 1;


float duty_0 [325] = { 11.0,11.2,11.4,11.6,11.8, 12.0,12.2,12.4,12.6,12.8, 13.0,13.2,13.4,13.6,13.8, 14.0,14.2,14.4,14.6,14.8, 
                       15.0,15.2,15.4,15.6,15.8, 16.0,16.2,16.4,16.6,16.8, 17.0,17.2,17.4,17.6,17.8, 18.0,18.2,18.4,18.6,18.8, 
                       19.0,19.2,19.4,19.6,19.8, 20.0,20.2,20.4,20.6,20.8,
                       21.0,21.2,21.4,21.6,21.8, 22.0,22.2,22.4,22.6,22.8, 23.0,23.2,23.4,23.6,23.8, 24.0,24.2,24.4,24.6,24.8, 
                       25.0,25.2,25.4,25.6,25.8, 26.0,26.2,26.4,26.6,26.8, 27.0,27.2,27.4,27.6,27.8, 28.0,28.2,28.4,28.6,28.8, 
                       29.0,29.2,29.4,29.6,29.8, 30.0,30.2,30.4,30.6,30.8,
                       31.0,31.2,31.4,31.6,31.8, 32.0,32.2,32.4,32.6,32.8, 33.0,33.2,33.4,33.6,33.8, 34.0,34.2,34.4,34.6,34.8, 
                       35.0,35.2,35.4,35.6,35.8, 36.0,36.2,36.4,36.6,36.8, 37.0,37.2,37.4,37.6,37.8, 38.0,38.2,38.4,38.6,38.8, 
                       39.0,39.2,39.4,39.6,39.8, 40.0,40.2,40.4,40.6,40.8, 41.0,41.2,41.4,41.6,41.8, 42.0,42.2,42.4,42.6,42.8,
                       43.0,43.2,43.4,43.6,43.8, 44.0,44.2,44.4,44.6,44.8, 45.0,45.2,45.4,45.6,45.8, 46.0,46.2,46.4,46.6,46.8,
                       47.0,47.2,47.4,47.6,47.8, 48.0,48.2,48.4,48.6,48.8, 49.0,49.2,49.4,49.6,49.8, 50.0,50.1,50.2,50.3,50.4,
                       50.5,50.6,50.7,50.8,50.9, 51.0,51.1,51.2,51.3,51.4, 51.5,51.6,51.7,51.8,51.9, 52.0,52.1,52.2,52.3,52.4,
                       52.5,52.6,52.7,52.8,52.9, 53.0,53.1,53.2,53.3,53.4, 53.5,53.6,53.7,53.8,53.9, 54.0,54.2,54.4,54.6,54.8,
                       55.0,55.2,55.4,55.6,55.8, 56.0,56.2,56.4,56.6,56.8, 57.0,57.2,57.4,57.6,57.8, 58.0,58.2,58.4,58.6,58.8,
                       59.0,59.2,59.4,59.6,59.8 ,60.0,60.2,60.4,60.6,60.8, 61.0,61.2,61.4,61.6,61.8 ,62.0,62.2,62.4,62.6,62.8,
                       63.0,63.2,63.4,63.6,63.8, 64.0,64.2,64.4,64.6,64.8, 65.0,65.2,65.4,65.6,65.8, 66.0,66.2,66.4,66.6,66.8,
                       67.0,67.2,67.4,67.6,67.8, 68.0,68.2,68.4,68.6,68.8, 69.0,69.2,69.4,69.6,69.8, 70.0,70.2,70.4,70.6,70.8,
                       71.0,71.2,71.4,71.6,71.8  };

 float duty_1 [325] = { 11.0,11.2,11.4,11.6,11.8, 12.0,12.2,12.4,12.6,12.8, 13.0,13.2,13.4,13.6,13.8, 14.0,14.2,14.4,14.6,14.8, 
                       15.0,15.2,15.4,15.6,15.8, 16.0,16.2,16.4,16.6,16.8, 17.0,17.2,17.4,17.6,17.8, 18.0,18.2,18.4,18.6,18.8, 
                       19.0,19.2,19.4,19.6,19.8, 20.0,20.2,20.4,20.6,20.8,
                       21.0,21.2,21.4,21.6,21.8, 22.0,22.2,22.4,22.6,22.8, 23.0,23.2,23.4,23.6,23.8, 24.0,24.2,24.4,24.6,24.8, 
                       25.0,25.2,25.4,25.6,25.8, 26.0,26.2,26.4,26.6,26.8, 27.0,27.2,27.4,27.6,27.8, 28.0,28.2,28.4,28.6,28.8, 
                       29.0,29.2,29.4,29.6,29.8, 30.0,30.2,30.4,30.6,30.8,
                       31.0,31.2,31.4,31.6,31.8, 32.0,32.2,32.4,32.6,32.8, 33.0,33.2,33.4,33.6,33.8, 34.0,34.2,34.4,34.6,34.8, 
                       35.0,35.2,35.4,35.6,35.8, 36.0,36.2,36.4,36.6,36.8, 37.0,37.2,37.4,37.6,37.8, 38.0,38.2,38.4,38.6,38.8, 
                       39.0,39.2,39.4,39.6,39.8, 40.0,40.2,40.4,40.6,40.8, 41.0,41.2,41.4,41.6,41.8, 42.0,42.2,42.4,42.6,42.8,
                       43.0,43.2,43.4,43.6,43.8, 44.0,44.2,44.4,44.6,44.8, 45.0,45.2,45.4,45.6,45.8, 46.0,46.2,46.4,46.6,46.8,
                       47.0,47.2,47.4,47.6,47.8, 48.0,48.2,48.4,48.6,48.8, 49.0,49.2,49.4,49.6,49.8, 50.0,50.1,50.2,50.3,50.4,
                       50.5,50.6,50.7,50.8,50.9, 51.0,51.1,51.2,51.3,51.4, 51.5,51.6,51.7,51.8,51.9, 52.0,52.1,52.2,52.3,52.4,
                       52.5,52.6,52.7,52.8,52.9, 53.0,53.1,53.2,53.3,53.4, 53.5,53.6,53.7,53.8,53.9, 54.0,54.2,54.4,54.6,54.8,
                       55.0,55.2,55.4,55.6,55.8, 56.0,56.2,56.4,56.6,56.8, 57.0,57.2,57.4,57.6,57.8, 58.0,58.2,58.4,58.6,58.8,
                       59.0,59.2,59.4,59.6,59.8 ,60.0,60.2,60.4,60.6,60.8, 61.0,61.2,61.4,61.6,61.8 ,62.0,62.2,62.4,62.6,62.8,
                       63.0,63.2,63.4,63.6,63.8, 64.0,64.2,64.4,64.6,64.8, 65.0,65.2,65.4,65.6,65.8, 66.0,66.2,66.4,66.6,66.8,
                       67.0,67.2,67.4,67.6,67.8, 68.0,68.2,68.4,68.6,68.8, 69.0,69.2,69.4,69.6,69.8, 70.0,70.2,70.4,70.6,70.8,
                       71.0,71.2,71.4,71.6,71.8  };

 float duty_2 [325] = { 11.0,11.2,11.4,11.6,11.8, 12.0,12.2,12.4,12.6,12.8, 13.0,13.2,13.4,13.6,13.8, 14.0,14.2,14.4,14.6,14.8, 
                       15.0,15.2,15.4,15.6,15.8, 16.0,16.2,16.4,16.6,16.8, 17.0,17.2,17.4,17.6,17.8, 18.0,18.2,18.4,18.6,18.8, 
                       19.0,19.2,19.4,19.6,19.8, 20.0,20.2,20.4,20.6,20.8,
                       21.0,21.2,21.4,21.6,21.8, 22.0,22.2,22.4,22.6,22.8, 23.0,23.2,23.4,23.6,23.8, 24.0,24.2,24.4,24.6,24.8, 
                       25.0,25.2,25.4,25.6,25.8, 26.0,26.2,26.4,26.6,26.8, 27.0,27.2,27.4,27.6,27.8, 28.0,28.2,28.4,28.6,28.8, 
                       29.0,29.2,29.4,29.6,29.8, 30.0,30.2,30.4,30.6,30.8,
                       31.0,31.2,31.4,31.6,31.8, 32.0,32.2,32.4,32.6,32.8, 33.0,33.2,33.4,33.6,33.8, 34.0,34.2,34.4,34.6,34.8, 
                       35.0,35.2,35.4,35.6,35.8, 36.0,36.2,36.4,36.6,36.8, 37.0,37.2,37.4,37.6,37.8, 38.0,38.2,38.4,38.6,38.8, 
                       39.0,39.2,39.4,39.6,39.8, 40.0,40.2,40.4,40.6,40.8, 41.0,41.2,41.4,41.6,41.8, 42.0,42.2,42.4,42.6,42.8,
                       43.0,43.2,43.4,43.6,43.8, 44.0,44.2,44.4,44.6,44.8, 45.0,45.2,45.4,45.6,45.8, 46.0,46.2,46.4,46.6,46.8,
                       47.0,47.2,47.4,47.6,47.8, 48.0,48.2,48.4,48.6,48.8, 49.0,49.2,49.4,49.6,49.8, 50.0,50.1,50.2,50.3,50.4,
                       50.5,50.6,50.7,50.8,50.9, 51.0,51.1,51.2,51.3,51.4, 51.5,51.6,51.7,51.8,51.9, 52.0,52.1,52.2,52.3,52.4,
                       52.5,52.6,52.7,52.8,52.9, 53.0,53.1,53.2,53.3,53.4, 53.5,53.6,53.7,53.8,53.9, 54.0,54.2,54.4,54.6,54.8,
                       55.0,55.2,55.4,55.6,55.8, 56.0,56.2,56.4,56.6,56.8, 57.0,57.2,57.4,57.6,57.8, 58.0,58.2,58.4,58.6,58.8,
                       59.0,59.2,59.4,59.6,59.8 ,60.0,60.2,60.4,60.6,60.8, 61.0,61.2,61.4,61.6,61.8 ,62.0,62.2,62.4,62.6,62.8,
                       63.0,63.2,63.4,63.6,63.8, 64.0,64.2,64.4,64.6,64.8, 65.0,65.2,65.4,65.6,65.8, 66.0,66.2,66.4,66.6,66.8,
                       67.0,67.2,67.4,67.6,67.8, 68.0,68.2,68.4,68.6,68.8, 69.0,69.2,69.4,69.6,69.8, 70.0,70.2,70.4,70.6,70.8,
                       71.0,71.2,71.4,71.6,71.8  };                                            

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  uint32_t PWM = PWM_1;
  uint32_t PWM_0 = PWM_10;
  
   mcpwm_config_t pwm_config_0;    mcpwm_config_t pwm_config_0_1;    mcpwm_config_t pwm_config_0_2;
    mcpwm_config_t pwm_config_1;    mcpwm_config_t pwm_config_1_1;    mcpwm_config_t pwm_config_1_2;
 
    mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM0A, GPIO_PWM0A_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM1A, GPIO_PWM1A_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM1B, GPIO_PWM1B_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM2A, GPIO_PWM2A_OUT);
    mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM2B, GPIO_PWM2B_OUT);
  
   mcpwm_sync_config_t  sync_ttt_0 ;
  sync_ttt_0.sync_sig = MCPWM_SELECT_TIMER0_SYNC;
  sync_ttt_0.timer_val = 500;
  sync_ttt_0.count_direction   = MCPWM_TIMER_DIRECTION_UP;

   mcpwm_sync_config_t  sync_ttt_1 ;
  sync_ttt_1.sync_sig = MCPWM_SELECT_TIMER1_SYNC;
  sync_ttt_1.timer_val = 0;
  sync_ttt_1.count_direction   = MCPWM_TIMER_DIRECTION_UP;

    pwm_config_0.frequency = PWM_0;    //frequency
    pwm_config_0.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_0.cmpr_b = 50.0;       
    pwm_config_0.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_0.duty_mode = MCPWM_DUTY_MODE_0;
    
    pwm_config_0_1.frequency = PWM_0;    //frequency 
    pwm_config_0_1.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_0_1.cmpr_b = 50.0;       
    pwm_config_0_1.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_0_1.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_0_2.frequency = PWM_0;    //frequency 
    pwm_config_0_2.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_0_2.cmpr_b = 50.0;       
    pwm_config_0_2.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_0_2.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_1.frequency = PWM_0;    //frequency 
    pwm_config_1.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_1.cmpr_b = 50.0;       
    pwm_config_1.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_1.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_1_1.frequency = PWM_0;    //fr equency 
    pwm_config_1_1.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_1_1.cmpr_b = 50.0;       
    pwm_config_1_1.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_1_1.duty_mode = MCPWM_DUTY_MODE_0;

    pwm_config_1_2.frequency = PWM_0;    //fr equency 
    pwm_config_1_2.cmpr_a = 50.0;       // Duty em porcentagem
    pwm_config_1_2.cmpr_b = 50.0;       
    pwm_config_1_2.counter_mode = MCPWM_UP_DOWN_COUNTER;
    pwm_config_1_2.duty_mode = MCPWM_DUTY_MODE_0;

    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config_0);   //Configure PWM0A & PWM0B with above settings
    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_1, &pwm_config_0_1);   //Configure PWM1A & PWM1B with above settings
    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_2, &pwm_config_0_2);   //Configure PWM2A & PWM2B with above settings   

    mcpwm_init(MCPWM_UNIT_1, MCPWM_TIMER_0, &pwm_config_1);   //Configure PWM0A & PWM0B with above settings
    mcpwm_init(MCPWM_UNIT_1, MCPWM_TIMER_1, &pwm_config_1_1);   //Configure PWM1A & PWM1B with above settings
    mcpwm_init(MCPWM_UNIT_1, MCPWM_TIMER_2, &pwm_config_1_2);   //Configure PWM2A & PWM2B with above settings  
     
    mcpwm_group_set_resolution( MCPWM_UNIT_0, 80000000) ;
    mcpwm_timer_set_resolution( MCPWM_UNIT_0, MCPWM_TIMER_0, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_0, MCPWM_TIMER_1, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_0, MCPWM_TIMER_2, 8000000);
    mcpwm_group_set_resolution( MCPWM_UNIT_1, 80000000) ;
    mcpwm_timer_set_resolution( MCPWM_UNIT_1, MCPWM_TIMER_0, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_1, MCPWM_TIMER_1, 8000000);
    mcpwm_timer_set_resolution( MCPWM_UNIT_1, MCPWM_TIMER_2, 8000000);

   mcpwm_sync_configure(MCPWM_UNIT_0, MCPWM_TIMER_1, &sync_ttt_0);
   mcpwm_sync_configure(MCPWM_UNIT_0, MCPWM_TIMER_2,  &sync_ttt_1);
   mcpwm_sync_configure(MCPWM_UNIT_1, MCPWM_TIMER_1, &sync_ttt_0);
   mcpwm_sync_configure(MCPWM_UNIT_1, MCPWM_TIMER_2,  &sync_ttt_1);

   duty_index = 20;
}

void loop() {
  // put your main code here, to run repeatedly:
   mcpwm_set_duty(MCPWM_UNIT_1, MCPWM_TIMER_0, MCPWM_OPR_A, duty_0 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B,  duty_0 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_1, MCPWM_TIMER_1, MCPWM_OPR_A,  duty_1 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_1, MCPWM_OPR_B,  duty_1 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_1, MCPWM_TIMER_2, MCPWM_OPR_A,  duty_2 [ duty_index % duty_modulo] );
   mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_2, MCPWM_OPR_B,  duty_2 [ duty_index % duty_modulo] );
    duty_index ++;
   if ( duty_index >= 310 ) 
   {
      duty_index = 10;
   }
          Serial.print("PWM : ");
          Serial.println( duty_index);
       delay (99);
}
Uživatelský avatar
gupa
Příspěvky: 2192
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od gupa »

Co přesně máš napsáno na esp? Nejlépe foto. Co jsem našel, prý lze využít i RMT k ovládání motoru. Bylo to i na githubu, ale nějak to zmizlo. Není to ani v archive. Při použití paměti co RMT má, by to ale mohlo dávat několik sekvencí pulzů. A ty by měly jít přenastavovat za běhu.
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

TEST:

IN: 2 x 29 A / 53 V
OUT: 16.6 A / 173 V / 2890 W.

https://youtu.be/S0QWk4uKbt4

Tak a je tu problem, pri 174 V mi to prerazilo teplovodivu podlozku.
Na kolko voltov su tie podlozky dimenzovane ?

.
BOOST_MPPT_pads.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
glottis
Příspěvky: 2069
Registrován: stř úno 02, 2022 10:30 am
Lokalita: okolí Mělníka
Systémové napětí: 48V
Výkon panelů [Wp]: 13000
Kapacita baterie [kWh]: 15

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od glottis »

rottenkiwi píše:Je tu niekto ochotny, kto ma ESP32 aj 4-kanalovy osciloskop, zmerat
fazovy posun medzi PWM na tych siestich pinoch ?
vzal jsem 19ku jako referencni a k ostatnim pinoum dopsal zpozdeni. Staci tak? meril jsem teda jen zpozdeni a nic jineho.

Kód: Vybrat vše

#define GPIO_PWM0A_OUT 19
#define GPIO_PWM0B_OUT 23   # 3,2us
#define GPIO_PWM1A_OUT 17   # 1,8us
#define GPIO_PWM1B_OUT 18   # 5,6us
#define GPIO_PWM2A_OUT 16   # 3,6us
#define GPIO_PWM2B_OUT 5    # 7,9us
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

Vdaka. Tak som to prepocital a teraz tam potrebujem dostat 60 120 a 180 *.

.
phases_ESP32.png
Bez oscisloskopu to nema zmysel, nemozem pomerat prechodove javy
a na fetoch ani stabilitu faz pri v 40 - 100 kHz.

4 channel / 200 MHz / 4 Mpts / 5 Gsamples osc. 7235 - 13645
tak ked usporim na jedle 15 €, tak to mam za 909 mesiacov. :)
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
glottis
Příspěvky: 2069
Registrován: stř úno 02, 2022 10:30 am
Lokalita: okolí Mělníka
Systémové napětí: 48V
Výkon panelů [Wp]: 13000
Kapacita baterie [kWh]: 15

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od glottis »

ja mam "jen" rigol ds1054z. 4 kanal, 1gsa/s a band 50Mhz a da se kodem odemknout na 100Mhz. Na spoustu veci to staci bohate.
Uživatelský avatar
gupa
Příspěvky: 2192
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od gupa »

Proč nepoužít jen jeden časovač pro 6 vývodů? Budeš obracet tranzistorům sled fází aby jely vpřed a vzad?
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od kodl69 »

fázovej posun je kvůli lepšímu průběhu proudu, prostě se skládá z více fází jako pro 3f motor. V PC svýho času byly taky 6f a více napájecí zdroje procesoru. To je ten lesík kondenzátorů, cívek a mosfetů kolem patice procesoru. Jinak by na ty proudy vycházely nesmyslný kapacity kondenzátorů...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Uživatelský avatar
gupa
Příspěvky: 2192
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od gupa »

No u motorů je to zajímavější, v nejnovějsím idf api se celá věc okolo mcpwm pomalu rozrůstá a přibývají různé věci jako modulace nosné frekvence pro stávající pwm, tři způsoby odkud brát zpětnou vazbu, definice skupin a známky hardvérového omezení při definici mrtvého času, brzný režim. Pomalu mi to připomíná moje první seznámení před asi více než dvaceti lety s controltechnic měničem když jsem ho chtěl pro můj první stroj. Ale oto by při buzení přes budiče a zpětnou vazbu mělo jít. Jeden časovač je určen jen pro zpětnou vazbu a jeden pro pár výstupů. Vidím, že interpretační jazyky přes které se píšou kódy, jsou tak dobré jak dobře jsou propojeny a vytvořeny se základními instrukcemi které nakonec nastaví překladač.
https://github.com/espressif/esp-idf/bl ... .rst#id573


hotový řešení, fázový zvyšovač napětí je do 100V a 20A je docela levný, okolo 150Kč, z TI. LM5121 a LM5122. Zajímavá součástka, která může do doplnění dokola fungovat i bez ESP a budiči. Teoreticky to chápu "mezi řádky" z datasheetu, že s vnějším řízením i s více fázemi než 4 a vyšším napětí než je 100 za použití řízení zvenku.
https://cz.mouser.com/ProductDetail/Tex ... 52BQ%3D%3D
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

KOmplementarna SPWM, nosna 20 kHz, modulacna 50 Hz. Pre menic na vystupe MPPT,
potencialne sfazovany s inym 50 Hz vstupom. Dead time 200 ns.


.
complementary_SPWM.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od rottenkiwi »

Teraz sa snazim aby MPPT komunikovalo s BMS a BMS sa znazi odhadnut,
kolko amperov max. potrebuje od MPPT a snazi sa o toto:

1, balancovat co najkratsi cas pasivne
2, balancovat aktivne, ak pasivne nestaci
3, ak sa balancuje aj aktivne, prelievat co najmenej naboja
4, snazit sa, aby boli clanky nad 3.5 V co najkratsi cas.

Su tieto priority a vysledok vo videu prijatelne, alebo to treba naprogramovat inak ?

Nalepsi je ten clanok vlavo a bolo nutne z tych troch vpravo preliat co najviac energie
do toho jedneho, ktory ma minimalny odpor ale najvacsiu kapacitu zo vsetkych.

1. riadok zaciatok bal., 2. r. koniec balancovania, 3. r. ustalenie bateriek bez odberu,
len BMS a odosielanie dat raz za 10 sec.

https://youtu.be/iSzO2t6TKu4

.
balancing_27_06_23.png
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
glottis
Příspěvky: 2069
Registrován: stř úno 02, 2022 10:30 am
Lokalita: okolí Mělníka
Systémové napětí: 48V
Výkon panelů [Wp]: 13000
Kapacita baterie [kWh]: 15

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od glottis »

nevim co te vede k tomu tam mit pasivni i aktivni balancing. Nestaci kvalitni aktivni? Teoreticky bys to mohl mit i obracene a pasivni udelat ze sepne az jako pojistka a spali to v nejakych vetsich odporech. Ale nezname myslenku tak tezko to rozporovat
Uživatelský avatar
gupa
Příspěvky: 2192
Registrován: sob pro 29, 2012 10:22 pm
Lokalita: pod Brnem
Systémové napětí: 24V

Re: DIY 3kW Arduino MPPT Solar Charge Controller ESP32

Příspěvek od gupa »

Pokud by to mělo mít něco jako ovládací a nastavovací menu, tz. že za běhu změnit výkon, nějaké charakteristiky spínání, volby typu programovacího relé, volby napětí, volby proudů, podmínky pro bms, atd. a před spuštěním konstanty typu napětí, frekvence, střídy, dead time, volby koloraturního typu vyhledávání MPPT, atp. byl by to začátek docela zajímavého projektu. Řekl bych že velmi dobré jako vzor jsou menu frekvenčních měničů, plno dat pro read only, a plno dat pro write offline nebo write online type. A samozřejmě propojení se síťovými periferiemi přes nějaký běžný protokol.
3x2000VA-VMP-par, NiCd 24V, 22x210-320Wp, 2x85A-VMPPT

  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek