EaSun Live
EaSun Systém
Efektivní využití solární energie

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í

🎯 Doporučené konfigurace:
-- Vyberte konfiguraci --🏠 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)
 

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í

  1. Připojte se k ESP32 přes WiFi
  2. Přejděte na stránku http://[IP-ESP32]/solar
  3. Scrollujte dolů k sekci "Nastavení rychlosti PWM pro topení"
  4. Vyberte doporučenou konfiguraci ze select dropdown (volitelné)
  5. Upravte parametry podle potřeby (můžete ručně upravit přednastavené hodnoty)
  6. Klikněte "Uložit nastavení PWM"
  7. 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