Pompa IBO AMG PWM

Co do wyłączenie PWM i 3 biegu to niestety ta pompa tak ma, też ubolewam nad tym że w jakiś magiczny sposób nie da się wybrać np. 1 bieg.

Tak w wielkim skrócie, da się bez problemu wyłączyć przez PWM, jak instrukcja głosi → 95<PWM<=100 Tryb czuwania: wyłączony.
Przykład:

switch:
# Test pompa PWM OFF
  - platform: template
    id: pompa1_pwm_50_off
    name: "Pompa 1 50%-OFF"
    icon: mdi:engine
    restore_mode: RESTORE_DEFAULT_ON
    turn_on_action:
      - switch.template.publish:
          id: pompa1_pwm_50_off
          state: ON
      - lambda: |-
          id(ledc_pump1).set_level(0.63);
    turn_off_action:
      - switch.template.publish:
          id: pompa1_pwm_50_off
          state: OFF
      - lambda: |-
          id(ledc_pump1).set_level(1);

ważne jest wypełnienie pwm w zakresie 0.96 - 1 (id(ledc_pump1).set_level(0.96) lub id(ledc_pump1).set_level(1))
W przykładzie gdy włączam pompę ustawiam na około 50%, oczywiście gdy off można sobie zachować poziom i przywrócić podczas włączenia.

gdzie ledc_pump1 to

output:
# Ppompa 1
  - platform: ledc
    pin: 26
    frequency: 1000Hz
    id: ledc_pump1
  - platform: template
    id: custom_fan_pump1
    type: float
    write_action:
      - lambda: |-
          if (id(on_boot_pump1)) {
            id(on_boot_pump1) = false;
            return;
          }
          float in_min = 0.01;
          float in_max = 1.0;
          float out_min = 0.84;
          float out_max = 0.42;
          id(fan_pump1_state) = state > 0;
          float value = state == 0 ? 0 : (state - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
          ESP_LOGD("debug", "pwm1_value=%f", value);
          id(ledc_pump1).set_level(value);

fan:
# Ppompa 1
  - platform: speed
    id: fan_pump1
    output: custom_fan_pump1
    name: "Pompa 1 PWM"

ja odczytuję jeszcze dane z pompy i dla poboru w tym przypadku pokazuje mi 96W (pewnie związek z wypełnieniem pwm) trzeba by jeszcze to uwzględnić żeby do HA wysyłało ładnie 0W ew po stronie HA

1 polubienie

Wczoraj już to przetestowałem robiąc podobnie switch, mi też pokazywało 96W więc poprawiłem

else if (id(pump1_power).state > 94 && id(pump1_power).state < 96) {
            id(pump1_status).publish_state("Tryb gotowości przez sygnał PWM (STOP)");
            id(pump1_power).publish_state(0);

Dodałem od razu przyciski do pozostałych trybów, natomiast muszę jeszcze doczytać co dokładniej robi tryb “obszar histerezy”.
Ustawiałem sygnał po środku przedziału czyli dla off 0.97.
Rozumiem że

float out_max = 0.10;

to wartość najmniejszych obrotów pompy, ale u mnie czy jest 0.10 czy 0.40, pompa pracuje podobnie. Jak więc najlepiej ustawić tą wartość?

1 polubienie

Obszar histerezy nie mam pojęcia. Co do out_max to już nie pamiętam, chyba eksperymentalnie.

Jak poprawić ten fragment, aby zwracany był tylko realny pobór prądu, czyli aby nie pokazywało wartości > 70. Obecnie jak pompkę przełączę w tryb gotowości to pokazuje mi pobór 96W.

Hello Artur,

thanks a lot for the helpful information. I got my IBO pump (same as yours) working with your configuration. However, there is one serious problem: the speed of the pump is not constant, it is always fluctuating and even stops for a few seconds frequently. I tried with 4,7kOhm resistor on the converter, with 10kOhm resistor and even without resistor, but I cannot get it working constantly. Has anybody experienced that as well? Any ideas what the problem could be?

Many thanks in advance!

Thomas

  - platform: duty_cycle
    pin:
      number: 23
      mode: INPUT_PULLUP
    id: pump2_power_internal
    name: Pompa obiegowa CO 2 pobór internal
    internal: true
    update_interval: 5s
    accuracy_decimals: 0
    device_class: "power"
    unit_of_measurement: 'W'       
    on_value:
      - lambda: |-
          ESP_LOGD("pompa_co2", "state=%f", id(pump2_power_internal).state);
          if (id(pump2_power_internal).state == 0 && id(pump2_stop_pwm) == 0) {
            id(pump2_status).publish_state("Wyłączona");
          }
          else if (id(pump2_power_internal).state > 74 && id(pump2_power_internal).state < 76) {
            id(pump2_status).publish_state("Ostrzeżenie");
          }
          else if (id(pump2_power_internal).state > 84 && id(pump2_power_internal).state < 86) {
            id(pump2_status).publish_state("Zatrzymanie alarmowe, awaria elektryczna");
          }
          else if (id(pump2_power_internal).state > 89 && id(pump2_power_internal).state < 91) {
            id(pump2_status).publish_state("Zatrzymanie alarmowe, blokada");
          }
          else if (id(pump2_power_internal).state >= 94 && id(pump2_power_internal).state < 96) {
            id(pump2_status).publish_state("Tryb gotowości przez sygnał PWM (STOP)");
            id(pump2_stop_pwm) = 1;
          }
          else if (id(pump2_power_internal).state >= 100) {
            id(pump2_status).publish_state("Wyłączona");
            id(pump2_stop_pwm) = 0;
          }
          else {
            if (id(fan_pump2_state)) { 
              id(pump2_status).publish_state("PWM"); 
              id(pump2_stop_pwm) = 0;
          }
            else if (id(pump2_stop_pwm) == 0)
            { id(pump2_status).publish_state("Ręczny"); }
          }


  - platform: copy
    id: pump2_power
    source_id: pump2_power_internal
    name: Pompa obiegowa CO 2 pobór
    accuracy_decimals: 0
    device_class: "power"
    unit_of_measurement: 'W'
    filters:
      - lambda: |-
          return x > 70.0 ? 0.0 : x;

Jak zrobisz filtrowanie w pierwotnym sensorze, to statusy po PWM nie będą aktualizowane. W tym wypadku należy wykorzystać sensor copy.

1 polubienie

Connect pwm signals to esp without level converter.

a powiedz z jakiego transoptora korzystałeś i czy na powrocie sygnału PWM też coś montowałeś czy bezpośrednio pod pin w esp podłączyłeś?. Możesz podesłać link???

bo z esp masz maksymalnie 3,3v (0-3,3v) a pwm pompy jest 0-5V

bo użyłeś pompy do CO a nie do solarów. one mają odwrotne charakterystyki