У триггера уже появилась правильная цифра на экране, а подключённая плата всё равно уходила в перезапуск. Я слишком рано разрешал нагрузку: напряжение ещё переходило на выбранный профиль.

Поставил щуп прямо на входной конденсатор нагрузки. После запроса 9 В был короткий участок около 5 В, а затем подъём. Программа считала сам факт выбора профиля разрешением на включение. Разделил эти события: профиль выбран, напряжение измерено, выдержка завершена.
Что изменил
В этой версии требую пять последовательных измерений в пределах 8,7–9,3 В с шагом 20 мс, затем выдерживаю ещё 200 мс. Это настройка моего макета, не универсальная временная характеристика PD. При ошибке измерения ключ остаётся закрытым. Десять холодных включений подряд прошли спокойно.
Запись со стенда
// Фрагмент автомата; voltage_ok сбрасывается при каждой смене профиля.
if (profile_changed) { valid_samples = 0; load_enable(false); }
const int mv = read_bus_mv();
valid_samples = (mv >= 8700 && mv <= 9300) ? valid_samples + 1 : 0;
if (valid_samples == 5) stable_at = millis();
if (valid_samples >= 5 && millis() - stable_at >= 200) {
load_enable(true);
}
// Вызывать раз в 20 мс; ошибки INA226 оставляют ключ закрытым.
Продолжение и история ревизий: USB-PD: тестер и триггер.
Ещё из журнала
Реле щёлкнуло. ESP32 начал всё сначала
Пока реле лежало рядом с платой, сбой случался раз в день. Стоило убрать всё в корпус — каждые три-четыре переключения. Поначалу я зря смотрел в сторону обработчика кнопок.