Stránka 2 z 2
Re: Plynula regulacia vykonu boilera
Napsal: pát kvě 26, 2023 8:17 am
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?
Re: Plynula regulacia vykonu boilera
Napsal: sob kvě 27, 2023 10:43 am
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).
Re: Plynula regulacia vykonu boilera
Napsal: sob čer 17, 2023 2:20 pm
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:
- ??
Re: Plynula regulacia vykonu boilera
Napsal: pon říj 23, 2023 3:03 pm
od JiTr
To josse ... Jak dopadl pokus s VFD a odporovou zatezi?
Odesláno z mého SM-A346B pomocí Tapatalk
Re: Plynula regulacia vykonu boilera
Napsal: pon říj 23, 2023 7:35 pm
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/...).
Re: Plynula regulacia vykonu boilera
Napsal: pon říj 23, 2023 8:04 pm
od mopadzi
zajímá mne ta regulace měničem. Jak je nakonfigurovaný
na regulaci amlitudy s malým delta f?
Re: Plynula regulacia vykonu boilera
Napsal: pon říj 23, 2023 8:16 pm
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.
Re: Plynula regulacia vykonu boilera
Napsal: pon říj 23, 2023 8:19 pm
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ý.
Re: Plynula regulacia vykonu boilera
Napsal: pon říj 23, 2023 11:05 pm
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í.
Re: Plynula regulacia vykonu boilera
Napsal: úte říj 24, 2023 6:05 am
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?
Re: Plynula regulacia vykonu boilera
Napsal: úte říj 24, 2023 7:08 am
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?
Re: Plynula regulacia vykonu boilera
Napsal: úte říj 24, 2023 12:59 pm
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ě.
Re: Plynula regulacia vykonu boilera
Napsal: stř led 24, 2024 6:54 am
od Lubik
Pridavam yaml skript, ktory to teraz riadi.
Je to v stadiu "neustaleho vylepsovania"
, 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);"