ESP32 Grid Load - Nastavení Rychlosti PWM pro Topení | Dokumentace
Právě se nacházíte: Home / vyvoj /
Obsah dokumentace
- 1. Úvod a Problém
- 2. Rozdíly mezi verzemi
- 3. Implementované řešení
- 4. Webové rozhraní
- 5. Parametry a nastavení
- 6. Technická implementace
- 7. Použití a doporučení
- 8. Řešení problémů
1. Úvod a Problém
Identifikovaný problém
Ve verzi ESP32-Grid-Load-Vypocet61.ino docházelo k příliš rychlým a skokovým změnám PWM signálu pro ovládání topných těles. Tyto rychlé změny způsobovaly:
- Nestabilní provoz topení
- Nedostatečné využití solární energie
- Časté zapínání/vypínání SSR relé
- Nevhodné pro domácí topení
Proč jsou tyto změny nutné?
Topná tělesa potřebují čas na zahřátí a stabilizaci. Rychlé změny PWM způsobují:
- Teplotní šoky - rychlé změny teploty poškozují topná tělesa
- Nestabilní topení - místnost se neohřeje rovnoměrně
- Zbytečné opotřebení - časté zapínání/vypínání SSR relé
- Nedostatečné využití solární energie - systém reaguje příliš rychle na krátkodobé změny
2. Rozdíly mezi verzemi
| Aspekt | ESP32-Grid-Load-Vypocet32.ino | ESP32-Grid-Load-Vypocet61.ino |
|---|---|---|
| Rychlost reakcí | Pomalé (čítače kroků) | Rychlé (okamžité výpočty) |
| Mechanismus zpomalení | SolarKrokPlus/Minus čítače (3,5,8) | smoothPwmRegulation() funkce |
| Zpoždění mezi změnami | Automatické (čítače) | Žádné (původně) |
| Uživatelské nastavení | Žádné | Webové rozhraní |
| Vhodnost pro topení | ✅ Vhodné | ❌ Nevhodné (původně) |
Detailní analýza problémů
// PŮVODNÍ PROBLÉM v ESP32-Grid-Load-Vypocet61.ino:
void OvladaniPwmSSR(){
PWMNastav = VypocetSolarSpotrebaRefactored(); // Okamžitý výpočet
PWMvalue = (int)(PWMNastav * 2.55); // Okamžitá aplikace
analogWrite(PWMpin, PWMvalue); // Bez zpoždění!
}
Problém s rychlými změnami
Příklad problému: Pokud solární výroba klesne z 3000W na 2800W, systém okamžitě sníží PWM z 80% na 75%. Pro topení je to příliš rychlá změna!
3. Implementované řešení
Kompletní řešení implementováno
Vytvořeno webové rozhraní na stránce /solar s možností nastavení:
- Rychlosti změn PWM (%/sekundu)
- Faktoru vyhlazování (0.01-1.0)
- Zpoždění mezi změnami (ms)
- Pomalého režimu (zapnuto/vypnuto)
Klíčové funkce řešení
// NOVÁ IMPLEMENTACE:
void OvladaniPwmSSR(){
PWMNastav = VypocetSolarSpotrebaRefactored();
// Aplikace plynulé regulace pouze pokud je povolena
if (enableSlowPwmMode) {
PWMNastav = smoothPwmRegulation(PWMNastav); // Zpomalení!
}
PWMvalue = (int)(PWMNastav * 2.55);
analogWrite(PWMpin, PWMvalue);
}
4. Webové rozhraní
HTML formulář pro nastavení PWM
Nastavení rychlosti PWM pro topení |
||||||||||||
|
Vysvětlení nastavení:Doporučené konfigurace: Rychlé přednastavení hodnot pro různé typy topení. Výběr automaticky vyplní všechny parametry. Rychlost změn: Určuje, o kolik % se může PWM změnit za sekundu. Nižší hodnoty = pomalější, plynulejší změny. Faktor vyhlazování: Určuje plynulost přechodů. Nižší hodnoty = plynulejší, vyšší = rychlejší reakce. Zpoždění: Minimální čas mezi změnami PWM. Zabraňuje příliš častým změnám. Pomalý režim: Zapne/vypne všechny mechanismy zpomalení. Pro topení doporučeno zapnuto |
|||||||||||
Nastavení rychlosti PWM pro topení
| 🎯 Doporučené konfigurace: 🏠 Domácí topení (doporučeno) ⚡ Rychlé reakce (průmyslové) 💧 Teplá voda (bojler) 🔥 Teplovodní topení (podlahové) 🔥 Elektrické radiátory 🏭 Průmyslové sušení 🏊 Bazénové topení 🚗 Garážové topení 🏢 Kancelářské topení 🔧 Testovací režim Výběr automaticky přednastaví hodnoty, které můžete ručně upravit |
|
| Rychlost změn PWM (%/sekundu): Doporučeno: 1.0-3.0 pro pomalé topení, 5.0+ pro rychlé reakce |
Faktor vyhlazování (0.01-1.0): 0.1 = pomalé, 0.5 = střední, 0.9 = rychlé |
| Zpoždění mezi změnami (ms): 1000ms = 1 sekunda, doporučeno 1000-3000ms |
Pomalý režim PWM: Zapnuto (doporučeno pro topení)Vypnuto (rychlé reakce) |
5. Parametry a nastavení
| Parametr | Rozsah | Výchozí | Doporučení pro topení | Popis |
|---|---|---|---|---|
| Rychlost změn | 0.1 - 20.0 %/s | 2.0 %/s | 1.0 - 2.0 %/s | Maximální změna PWM za sekundu |
| Faktor vyhlazování | 0.01 - 1.0 | 0.2 | 0.1 - 0.2 | Plynulost přechodů (nižší = plynulejší) |
| Zpoždění | 100 - 10000 ms | 1000 ms | 2000 - 3000 ms | Minimální čas mezi změnami |
| Pomalý režim | Zapnuto/Vypnuto | Zapnuto | Zapnuto | Zapne/vypne všechny mechanismy zpomalení |
Doporučené konfigurace
| Typ použití | Rychlost | Vyhlazování | Zpoždění | Pomalý režim |
|---|---|---|---|---|
| Domácí topení (doporučeno) | 1.5 %/s | 0.15 | 2000 ms | Zapnuto |
| Rychlé reakce (průmyslové) | 5.0 %/s | 0.5 | 500 ms | Vypnuto |
| Teplá voda (bojler) | 1.0 %/s | 0.1 | 3000 ms | Zapnuto |
6. Technická implementace
Klíčové funkce
1. Nové proměnné
//---- Proměnné pro konfigurovatelnou rychlost PWM změn -------
float userMaxPwmChangePerSecond = 2.0; // Uživatelsky nastavitelná rychlost (výchozí 2%/s)
float userPwmSmoothingFactor = 0.2; // Uživatelsky nastavitelný faktor vyhlazování (výchozí 0.2)
bool enableSlowPwmMode = true; // Povolení pomalého režimu PWM
int pwmChangeDelayMs = 1000; // Zpoždění mezi změnami v ms (výchozí 1s)
2. Upravená funkce smoothPwmRegulation()
float smoothPwmRegulation(float targetPwm) {
unsigned long currentTime = millis();
float timeDelta = (currentTime - lastPwmUpdate) / 1000.0f;
if (timeDelta <= 0) timeDelta = 0.001f;
// Použití uživatelsky nastavených hodnot místo globálních
float maxChange = userMaxPwmChangePerSecond * timeDelta;
float pwmDifference = targetPwm - lastPwmValue;
// Kontrola zpoždění mezi změnami (pouze pokud je pomalý režim zapnut)
if (enableSlowPwmMode && (currentTime - lastPwmUpdate) < pwmChangeDelayMs) {
return lastPwmValue; // Vrátit předchozí hodnotu, pokud je příliš brzy
}
// Omezení rychlosti změn
if (abs(pwmDifference) > maxChange) {
if (pwmDifference > 0) {
targetPwm = lastPwmValue + maxChange;
} else {
targetPwm = lastPwmValue - maxChange;
}
}
// Vyhlazování s uživatelským faktorem
float smoothedPwm = lastPwmValue + (targetPwm - lastPwmValue) * userPwmSmoothingFactor;
// Ohraničení na 0-100%
smoothedPwm = max(0.0f, min(100.0f, smoothedPwm));
// Aktualizace globálních proměnných
lastPwmValue = smoothedPwm;
lastPwmUpdate = currentTime;
return smoothedPwm;
}
3. HTTP handler pro ukládání
server.on("/getpwmsettings", HTTP_GET, [] (AsyncWebServerRequest *request) {
String inputPwmSpeed, inputPwmSmoothing, inputPwmDelay, inputSlowMode;
if (request->hasParam("pwm_speed")) {
// Získání parametrů z formuláře
inputPwmSpeed = request->getParam("pwm_speed")->value();
inputPwmSmoothing = request->getParam("pwm_smoothing")->value();
inputPwmDelay = request->getParam("pwm_delay")->value();
inputSlowMode = request->getParam("slow_mode")->value();
// Validace a uložení do SPIFFS
float pwmSpeed = inputPwmSpeed.toFloat();
if (pwmSpeed >= 0.1 && pwmSpeed <= 20.0) {
write_file(SPIFFS, "/pwm_speed.ea", inputPwmSpeed.c_str());
}
// Aktualizace globálních proměnných
userMaxPwmChangePerSecond = pwmSpeed;
userPwmSmoothingFactor = inputPwmSmoothing.toFloat();
pwmChangeDelayMs = inputPwmDelay.toInt();
enableSlowPwmMode = (inputSlowMode == "1");
// Potvrzovací stránka
request->send(200, "text/html", confirmationHtml);
}
});
4. Načítání při startu
// Načtení PWM nastavení v setup() funkci
String pwmSpeedStr = read_file(SPIFFS, "/pwm_speed.ea");
if(pwmSpeedStr != "null" && pwmSpeedStr != ""){
userMaxPwmChangePerSecond = pwmSpeedStr.toFloat();
if (userMaxPwmChangePerSecond < 0.1 || userMaxPwmChangePerSecond > 20.0) {
userMaxPwmChangePerSecond = 2.0; // Výchozí hodnota
}
Serial.print(F("PWM Rychlost: "));Serial.print(userMaxPwmChangePerSecond);Serial.println(F("%/s"));
}
7. Použití a doporučení
Postup nastavení
- Připojte se k ESP32 přes WiFi
- Přejděte na stránku
http://[IP-ESP32]/solar - Scrollujte dolů k sekci "Nastavení rychlosti PWM pro topení"
- Vyberte doporučenou konfiguraci ze select dropdown (volitelné)
- Upravte parametry podle potřeby (můžete ručně upravit přednastavené hodnoty)
- Klikněte "Uložit nastavení PWM"
- Počkejte na potvrzení a automatické přesměrování
Scénáře použití
| Typ topení | Problém | Řešení |
|---|---|---|
| Domácí topení (podlahové, radiátory) | Rychlé změny způsobují teplotní šoky a nestabilní topení | Rychlost 1.5%/s, vyhlazování 0.15, zpoždění 2000ms |
| Průmyslové topení (rychlé reakce) | Potřeba rychlých reakcí na změny výroby | Rychlost 5.0%/s, vyhlazování 0.5, zpoždění 500ms |
| Teplá voda (bojler) | Potřeba plynulého ohřevu bez teplotních šoků | Rychlost 1.0%/s, vyhlazování 0.1, zpoždění 3000ms |
8. Řešení problémů
Časté problémy a řešení
| Problém | Příčina | Řešení |
|---|---|---|
| PWM se nemění vůbec | Pomalý režim je zapnutý s příliš velkým zpožděním | Snižte zpoždění na 500ms nebo vypněte pomalý režim |
| PWM se mění příliš rychle | Vysoká rychlost změn nebo vypnutý pomalý režim | Snižte rychlost na 1.0-2.0%/s a zapněte pomalý režim |
| Nastavení se neukládá | Problém s SPIFFS pamětí | Restartujte ESP32 a zkuste znovu |
Debug informace
// Pro debug nastavte WebSerialAno = 14 v kódu
// V Serial Monitoru uvidíte:
PWM Smoothing: Target=75.0%, Smoothed=72.3%, MaxChange/s=2.0%, SmoothingFactor=0.20, SlowMode=ON
Kontrola nastavení
// V Serial Monitoru při startu uvidíte:
PWM Rychlost: 2.0%/s
PWM Vyhlazování: 0.20
PWM Zpoždění: 1000ms
PWM Pomalý režim: Zapnuto
Závěr
Implementované řešení poskytuje kompletní kontrolu nad rychlostí reakcí PWM pro ESP32 Grid Load systém. Uživatel může nastavit parametry podle svých potřeb a dosáhnout tak stabilního a efektivního topení s maximálním využitím solární energie.
Dokumentace vytvořena pro ESP32 Grid Load System v1.61
Poslední aktualizace: 2025
