@startuml
start

:Считать DATA_FROM_PCON;
:Обновить фильтры DINPUT (DFILTER_COUNTER, DINP_FILTER*);
:Обработать CALC_SM_STATE (0..6)\nADC -> физ. величины;

:Обновить VIN/VOUT/CURRENT фильтры;
:Рассчитать защиты\n(OVERCURRENT, OVERVOLTAGE, OVERTEMP);
:Обновить BRAKE_ENERGY_*;

if (CHOPPER_ENABLE && !GlobalError) then (yes)
  :PI-регулятор\n(REG_INPUT, REG_OUTPUT, REG_CURRENT_LIMIT);
else (no)
  :Сброс регулятора\n(REG_INTEGRATOR и др.);
endif

:Расчёт CHOPPER_PWM_WIDTH_LIMIT;
:Генерация ШИМ для CHOPP_BOT_IGBT;

if (GlobalError || !BRAKE_ENABLE || BRAKE_ERROR) then (off)
  :BRAKE_TOP_IGBT = 0;
else (on)
  :Генерация ШИМ для BRAKE_TOP_IGBT;
endif

:Логика вентилятора (DIGITAL_OUTPUT[2]);
:Формирование DATA_TO_PCON\nи разбор DATA_FROM_PCON;

stop
@enduml
