Plynula regulacia vykonu boilera

jumajazu
Příspěvky: 8
Registrován: úte kvě 17, 2022 7:57 am

Re: Plynula regulacia vykonu boilera

Příspěvek od jumajazu »

Lubik píše: pon dub 17, 2023 7:19 pm

Prevodnik PWM to 0-10V:

Kód: Vybrat vše

https://www.laskakit.cz/prevodnik-pwm-na-napeti-0-10v/
Rád by som sa ešte opýtal na tento prevodník, tiež som ho použil na prevod PWM z ESP32 na 0-10 V na ovládanie SSR relé. Všetko funguje, zatiaľ s manuálnym nastavovaním výkonu 0-100% z Home Assistenta, ale s týmto prevodníkom mám dva problémy:

- vysoká teplota, podľa termokamery má pri prevádzke až okolo 50 stupňov, aj na dotyk sa veľmi hreje. Je to rovnaké aj u teba a máš na ňom prípadne nejaké chladenie?

- výstupné napätie na prevodníku, tu je problém, že aj pri nastavení 100% duty cycle na PWM vstupe neviem na výstupe dostať vyššie napätie ako 8,7 V. Kalibrácia potenciometrom nepomáha, dá sa ním nastaviť stredná hodnota 5V pri 50 % PWM, ale na hornú úroveň potenciometer nemá vplyv. Prevodník má pre vstup PWM písané napätie od 4,5 V, ESP32 dáva 3,3 V a funguje to, neviem, či by nižšie napätie na PWM vstupe mohlo mať vplyv na maximálnu hodnotu na výstupe 0-10 V, predpokladám, že nie. Ty to máš tiež zapojené priamo na výstup ESP32, vieš na výstupe prevodníka dosiahnuť 10 V?
Lubik
Příspěvky: 22
Registrován: pon lis 01, 2021 3:40 pm
Výkon panelů v FVE [Wp]: 5390
Kapacita baterie [kWh]: 0

Re: Plynula regulacia vykonu boilera

Příspěvek od Lubik »

S prevodnikom nemam ziaden problem.
Funguje bez problemov v celom rozsahu 0-10V (0-100% PWM).
Po tvojom prispevku som siel skontrolovat aj teplotu - vsetko je Ok, nic nehreje.
PWM vstup prevodnika je priamo zapojeny na pin (23) ESP32.
Tiez doplnim, ze napajacie napatie prevodnika mam 24V (pozor na jumper).
Ongrid FVE - okres Bardejov. 14x385Wp + 2x "modrasek 2000W"
Lubik
Příspěvky: 22
Registrován: pon lis 01, 2021 3:40 pm
Výkon panelů v FVE [Wp]: 5390
Kapacita baterie [kWh]: 0

Re: Plynula regulacia vykonu boilera

Příspěvek od Lubik »

Update:

Vo vytazovaci, ktory riadi vykon boilera podla aktualneho odberu zo siete som presiel z Micropythonu na ESPhome.
Vyhody:
- zakladne rutiny ako sprava pripojenia k wifi, posielanie na MQTT, posielanie na Thingspeak su tu prakticky hotove, netreba vymyslat teplu vodu
- priamociara komunikacia s HomeAssistant
- ladenie, upravy a update kodu je mozne bez nutnosti fyzickeho pristupu k ESP32 (cez zerotier a HA)
Nevyhody:
- ?? :-)
Ongrid FVE - okres Bardejov. 14x385Wp + 2x "modrasek 2000W"
JiTr
Příspěvky: 2
Registrován: sob pro 25, 2021 6:47 pm

Re: Plynula regulacia vykonu boilera

Příspěvek od JiTr »

To josse ... Jak dopadl pokus s VFD a odporovou zatezi?

Odesláno z mého SM-A346B pomocí Tapatalk

Mex
Příspěvky: 188
Registrován: pát zář 15, 2023 1:28 am

Re: Plynula regulacia vykonu boilera

Příspěvek od Mex »

U toho měniče snad není důvod, proč by to nemělo fungovat.
Nakonec se dá udělat jednoduchý pokus. Na výstup měniče připojit žárovku a sledovat, jak pěkně je možné regulovat jas.

Jsou tady tipy na převod PWM na analog 0-10V, a ten pak posílat do SSR, které z toho zase udělá PWM.
Proč neřídit rovnou výkonový spínací prvek nějakým ESP32 nebo třeba i nejhloupějším Arduinem?
To "analogové" SSR to zřejmě taky nedělá jinak.

Triak (s rozumně dimenzovaných chladičem), před něho optotriak, a ten se už dá honit přímo Arduinem/ESP32/RPi/co já vím čím vším.
Jen to chce ještě zpětnou vazbu přes další optron, aby spínající procesor věděl o průchodu nulou a mohl tak lineárně posouvat čas sepnutí triaku.
Jsou to součástky dohromady ani ne za stovku (bez toho Arduina/ESP32/...).
mopadzi
Příspěvky: 144
Registrován: čtv zář 02, 2021 9:23 am

Re: Plynula regulacia vykonu boilera

Příspěvek od mopadzi »

zajímá mne ta regulace měničem. Jak je nakonfigurovaný
na regulaci amlitudy s malým delta f?
kdo si hraje nezlobí

9xRenesola 240W+9x Benq 265, 10xAvancis 125W, 6x Leapton 450W, 2xStuder VT65 1xVT 80, 2x XTM4000-48, 40kW Lifepo4..vše ve výstavbě, hotovo 99%. BMW i3 BEV
https://www.lifepo4-shop.cz/
josse
Příspěvky: 870
Registrován: pon dub 19, 2021 10:37 am

Re: Plynula regulacia vykonu boilera

Příspěvek od josse »

JiTr píše:To josse ... Jak dopadl pokus s VFD a odporovou zatezi?

Odesláno z mého SM-A346B pomocí Tapatalk
Testy dobře, ale než jsem z nadety dostal správnou spirálu, v každé komunikaci jim píšu nebo do telefonu říkám, nechci 3x400, chci 3x230, jojo, všechno umíme, není problém, dvakrát poslali špatně, dvakrát jsem čekal 8 týdnů. Nakonec mi dali kontakt do firmy kde to vyráběli, po konzultaci jsem rozebrat a zapojil jak potřebuju... Naštěstí to šlo změnit z Y na D. Takže jsem test udělal krátký, někdy v září kdy už jsem moc přebytků neměl. Letovaný to je pájkou co teče propanem... Naštěstí. Konec odbočky.

Měl jsem zkušenost se stejným typem VFD s motory, to se chová k elektrárně korektně, nevýhoda je dimenzování proudu na účiník 0.7 to znamená cca 1.5x vodiče a jističe (VFD nemají PFC). Měnil jsem frekvenci, podle toho se mění výkon/příkon. Vybral jsem si vfd 4kW, 230/230. S kolegou v práci budeme zkoušet tlumivky před usměrňovač. Nějakou jsme našli a udělal jsem zlepšení PF z 0.66 na 0.72, bez měřitelné změny činného příkonu (sice je to další úbytek navíc, ale vyrovná se to snížení úbytku v VFD díky nižšímu proudu. Měřeno elektroměrem s rozlišením na jednotky W.

Víc jsem se tomu nevěnoval, velkou nádrž ještě nemám. Léto i podzim stejně skončili. Rozdíl v ceně VFD vs. SSR určitě je, ale ty fázové SSR taky nejsou nejlevnější a tohle má v sobě už modbus, měří to napětí DC a výstupní napětí a výstupní proud. Takže pro mě možná i výhodnější než to skládat, tepelná ochrana, ventilátor. Nevýhodu vidím v životností elektrolytických kondenzátorů, SSR žádné nemá. Uvidíme. U čerpadla už to je roky, je trvale pod napětím a zatím ok. Měnič neumí autotune do odporů když se mu nic netočí, ale není potřeba, funguje i s factory defaults.
3,6kWp GWL Poly + 8,82kWp Canadian Mono, 3x PIP4048MS, 3x80P14S 18650 (~640Ah/34kWh)
Elektrárna: https://emoncms.trenet.org/dashboard/view?id=3
TČ: https://emoncms.trenet.org/dashboard/view?id=21
josse
Příspěvky: 870
Registrován: pon dub 19, 2021 10:37 am

Re: Plynula regulacia vykonu boilera

Příspěvek od josse »

Mex píše:U toho měniče snad není důvod, proč by to nemělo fungovat.
Nakonec se dá udělat jednoduchý pokus. Na výstup měniče připojit žárovku a sledovat, jak pěkně je možné regulovat jas.

Jsou tady tipy na převod PWM na analog 0-10V, a ten pak posílat do SSR, které z toho zase udělá PWM.
Proč neřídit rovnou výkonový spínací prvek nějakým ESP32 nebo třeba i nejhloupějším Arduinem?
To "analogové" SSR to zřejmě taky nedělá jinak.

Triak (s rozumně dimenzovaných chladičem), před něho optotriak, a ten se už dá honit přímo Arduinem/ESP32/RPi/co já vím čím vším.
Jen to chce ještě zpětnou vazbu přes další optron, aby spínající procesor věděl o průchodu nulou a mohl tak lineárně posouvat čas sepnutí triaku.
Jsou to součástky dohromady ani ne za stovku (bez toho Arduina/ESP32/...).
Pro mě je velká výhoda ten modbus, má ho to od přírody, soc beru z balanceru taky komunikací... K SSR bych musel něco bastlit a byl jsem líný.
3,6kWp GWL Poly + 8,82kWp Canadian Mono, 3x PIP4048MS, 3x80P14S 18650 (~640Ah/34kWh)
Elektrárna: https://emoncms.trenet.org/dashboard/view?id=3
TČ: https://emoncms.trenet.org/dashboard/view?id=21
Mex
Příspěvky: 188
Registrován: pát zář 15, 2023 1:28 am

Re: Plynula regulacia vykonu boilera

Příspěvek od Mex »

josse píše: pon říj 23, 2023 8:16 pm ...
Měnič neumí autotune do odporů když se mu nic netočí, ale není potřeba, funguje i s factory defaults.
Autotuning má smysl při provozu měniče ve vektorovém režimu.
Ale pokud to má fungovat do odporů, tak je nutné použít skalární režim.
A tam je autotuning o ničem, tam nemá co tunit.

Používat factory defaults není (podle mě) dobrý nápad.
Chtělo by to nastavit minimálně max. napětí a proud, a taky případně ohnutí křivky U/f kolem nuly.
I když to ohnutí možná pro odpory nebude nutné a bude možné to provozovat s lineární závislostí.
josse
Příspěvky: 870
Registrován: pon dub 19, 2021 10:37 am

Re: Plynula regulacia vykonu boilera

Příspěvek od josse »


Mex píše:
josse píše: pon říj 23, 2023 8:16 pm ...
Měnič neumí autotune do odporů když se mu nic netočí, ale není potřeba, funguje i s factory defaults.
Autotuning má smysl při provozu měniče ve vektorovém režimu.
Ale pokud to má fungovat do odporů, tak je nutné použít skalární režim.
A tam je autotuning o ničem, tam nemá co tunit.

Používat factory defaults není (podle mě) dobrý nápad.
Chtělo by to nastavit minimálně max. napětí a proud, a taky případně ohnutí křivky U/f kolem nuly.
I když to ohnutí možná pro odpory nebude nutné a bude možné to provozovat s lineární závislostí.
Hmm, když mám 4kW měnič a 4kW odpory, co bych jako měl měnit na napětí a proudu? A proč bych to ohýbal, když chci lineární závislost?
3,6kWp GWL Poly + 8,82kWp Canadian Mono, 3x PIP4048MS, 3x80P14S 18650 (~640Ah/34kWh)
Elektrárna: https://emoncms.trenet.org/dashboard/view?id=3
TČ: https://emoncms.trenet.org/dashboard/view?id=21
mopadzi
Příspěvky: 144
Registrován: čtv zář 02, 2021 9:23 am

Re: Plynula regulacia vykonu boilera

Příspěvek od mopadzi »

přiznám se do hloubky jsem o tom nepřemýšlel. Ale představoval jsem si že nastavím nějaký menší rozsah frekvence a k tomuto rozsahu lineáení růběh výstupního napětí min-max. takže teoreticky by to mělo generovat sinusovku s proměnlivou amlitudou dle frekvence. Mýlím se?
kdo si hraje nezlobí

9xRenesola 240W+9x Benq 265, 10xAvancis 125W, 6x Leapton 450W, 2xStuder VT65 1xVT 80, 2x XTM4000-48, 40kW Lifepo4..vše ve výstavbě, hotovo 99%. BMW i3 BEV
https://www.lifepo4-shop.cz/
josse
Příspěvky: 870
Registrován: pon dub 19, 2021 10:37 am

Re: Plynula regulacia vykonu boilera

Příspěvek od josse »

mopadzi píše:přiznám se do hloubky jsem o tom nepřemýšlel. Ale představoval jsem si že nastavím nějaký menší rozsah frekvence a k tomuto rozsahu lineáení růběh výstupního napětí min-max. takže teoreticky by to mělo generovat sinusovku s proměnlivou amlitudou dle frekvence. Mýlím se?
To sedí. V/F je výchozí.

U motorů slouží jako ochrana vinutí, nám to na odporu udělá lineární změnu příkonu. (Asi nemám pravdu, viz níže)

Výstupní napětí je maximální, u motoru nominální, u odporu taky nominální. Pak už jen měním frekvenci. Když 50Hz==230V, pak 25Hz==115V. Teď mě napadá, že napětí je lineární, ale příkon ne, ten je na druhou. O to se ale postará pomalý PID regulátor, tomu to bude jedno jestli to je v první nebo druhé mocnině.
3,6kWp GWL Poly + 8,82kWp Canadian Mono, 3x PIP4048MS, 3x80P14S 18650 (~640Ah/34kWh)
Elektrárna: https://emoncms.trenet.org/dashboard/view?id=3
TČ: https://emoncms.trenet.org/dashboard/view?id=21
Lubik
Příspěvky: 22
Registrován: pon lis 01, 2021 3:40 pm
Výkon panelů v FVE [Wp]: 5390
Kapacita baterie [kWh]: 0

Re: Plynula regulacia vykonu boilera

Příspěvek od Lubik »

Pridavam yaml skript, ktory to teraz riadi.
Je to v stadiu "neustaleho vylepsovania" :D , aj ked je pravda, ze som do toho uz dlhsie nesahal. V pripade nejasnosti funkcionality konkretnych casti kodu, pytajte sa sem, pokusim sa odpovedat.

PS: Pozor na odsadenie riadkov.

Kód: Vybrat vše

esphome:
  name: esphome-web-07b4a4
  friendly_name: Vytazovac_EH

#esp32_ble_tracker:

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "121SMK+ddD8QCEOrlmjI9I7nS+pMQc9bV91hf6pHRwQ="

ota:


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-07B4A4"
    password: "56U1EfwQElyE"

mqtt:
  broker: mqtt.flespi.io
  port: 1883
  username: !secret mqtt_user
  password: !secret mqtt_password
  topic_prefix: "vytazovac_esphome"

captive_portal:

dallas:
  - pin: GPIO5

sensor:
  - platform: dallas
    address: 0x0f3c2de381621b28
    #index: 0
    id: teplota_boilera
    name: "Teplota boiler"

  - platform: template
    device_class: "power"
    unit_of_measurement: "W"
    name: "Power_menic"
    id: power_menic
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
  - platform: template
    device_class: "power"
    unit_of_measurement: "W"
    name: "Power_boiler"
    id: power_boiler
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
  - platform: template
    device_class: "power"
    unit_of_measurement: "W"
    name: "Power_siet"
    id: power_siet
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
  - platform: template
    device_class: "power"
    unit_of_measurement: "W"
    name: "Power_bez_boilera"
    id: power_bez_boilera
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5

globals:
  - id: set_power_g
    type: int
    restore_value: yes
    #initial_value: '120'

  - id: temporary
    type: float
    restore_value: no
    initial_value: '0'

  - id: max_temp
  #teplota, pri ktorej sa znizi vykon zo siete na min.
    type: int
    restore_value: yes
    initial_value: '50'
    

output:
  - platform: ledc
    pin: GPIO23
    id: pwm_boiler
    frequency: "2000Hz"
    inverted: false
    min_power: 0
    max_power: 1

number:
  - platform: template
    id: number_nastav_vykon
    min_value: 100
    max_value: 2500
    #initial_value: 200
    restore_value: True
    step: 20
    name: Nastav vykon zo siete
    unit_of_measurement: "W"
    set_action:
      then:
      - lambda: |-
          id(set_power_g) = x;
          //id(set_power_g).publish_state(x);
          // pre rucne nastavenie vykonu priamo
          //float level = x / 2200;
          //id(pwm_boiler).turn_on();
          //id(pwm_boiler).set_level(level);


http_request:
  useragent: esphome/device
  id: http_request_data
  timeout: 1s

time:
  - platform: sntp
    on_time:
      # zverejnenie dat na MQTT
      - seconds: /3
        then:
          - mqtt.publish_json:
              topic: json_akt
              payload: |-
                root["teplota_boilera"] = id(teplota_boilera).state;
                root["power_menic"] = id(power_menic).state;
                root["power_boiler"] = id(power_boiler).state;
                root["power_siet"] = id(power_siet).state;
                root["power_bez_boilera"] = id(power_bez_boilera).state;
                root["set_power"] = id(set_power_g);
                root["set_boiler"] = id(temporary);
      
  - platform: sntp
    on_time:
      #nastav min vykon zo siete, ak je zapnuty dohrev zo siete vyssim vykonom a bola dosiahnuta max teplota (50~C)
      - seconds: 0
        minutes: /1
        then:
          - if:
              condition:
                and:
                  - lambda: return id(set_power_g) > 200;
                  - lambda: return id(teplota_boilera).state > 55;
              then:
                - lambda: id(set_power_g) = 100;

  - platform: sntp
    on_time:
      #dohrev plnym vykonom poobede o 15-tej
      - seconds: 0
        minutes: 0
        hours: 14
        then:
            - lambda: id(set_power_g) = 2500;


  - platform: sntp
    on_time:
      # nacitanie dat zo Shelly3em a riadenie vykonu boilera
      - seconds: /1
        #minutes: /5
        then:
          - http_request.get:
              url: http://192.168.88.10/status
              headers:
                Content-Type: application/json
              verify_ssl: false
              on_response:
                then:
                - if:
                    condition:
                      lambda: |-
                        return status_code == 200;
                    then:
                      lambda: |-
                        json::parse_json(id(http_request_data).get_string(), [](JsonObject root) {
                        float menic = root["emeters"][0]["power"];
                        float boiler = root["emeters"][1]["power"];
                        float siet = root["emeters"][2]["power"];
                        id(power_menic).publish_state(menic);
                        id(power_boiler).publish_state(boiler);
                        id(power_siet).publish_state(siet);
                        id(power_bez_boilera).publish_state(menic + siet - boiler);
                        float reg_odchylka = id(set_power_g) - siet;
                        float kp = 1.2;
                        float ki = 1;
                        float vykon_boilera = (kp * reg_odchylka) + (ki * id(temporary));
                        if (vykon_boilera > 2200) {
                          vykon_boilera = 2200;
                        }
                        if (vykon_boilera < 0) {
                          vykon_boilera = 0;
                        }
                        id(temporary) = vykon_boilera;
                        float pwm_level = vykon_boilera / 2200;
                        id(pwm_boiler).turn_on();
                        id(pwm_boiler).set_level(pwm_level);
                        });
                    #else:
                    #  - lambda: "id(emeters_json).publish_state(0);"
                
Ongrid FVE - okres Bardejov. 14x385Wp + 2x "modrasek 2000W"
Odpovědět

Zpět na „Automatizace, řízení“